On 11/20/16 00:43, Martin Sebor wrote:
> As best I can tell the result isn't actually used (the code that
> uses the result gets branched over).  GCC just doesn't see it.
> I verified this by changing the XALLOCAVEC macro to
>
>   #define XALLOCAVEC(T, N)  (N ? alloca (sizeof (T) * N) : 0)
>
> and bootstrapping and running the regression test suite with
> no apparent regressions.
>

I would like this solution with braces around N better than
allocating one element when actually zero were requested.

The disadvantage of N+1 or N+!N is that it will hide true
programming errors from the sanitizer.

>> you should also include glibc and busybox, to be sure.
>
> Thanks for the suggestion.  I've done that and found no instances
> of any of these warnings in either Busybox 1.25.1 or Glibc trunk.
>

Good.  I see many alloca calls all over, but mostly in the runtime
libraries, that don't use -Werror.
Have you done a bootstrap with all languages?
Were there warnings in the target libraries (note they don't use
-Werror, so you have to grep)?


I am a bit worried about that suggestion in libiberty/alloca.c:
"It is a good idea to use alloca(0) in
  your main control loop, etc. to force garbage collection."

Because:

#include <stdio.h>
#include <alloca.h>
int main()
{
   void* p;
   int i;
   for (i=0 ; i<100 ; i++)
   {
     p = alloca(0);
     printf("%p\n", p);
   }
}

... is fine, and allocates no memory.
But if I change that to alloca(1) the stack will blow up.

Maybe it would be better to have a different warning option
for malloc/realloc with zero and for alloca with zero?


Bernd.

Reply via email to