[Bug c/71924] New: missing -Wreturn-local-addr returning alloca result

msebor at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Jul 19 00:37:00 GMT 2016


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71924

            Bug ID: 71924
           Summary: missing -Wreturn-local-addr returning alloca result
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: msebor at gcc dot gnu.org
  Target Milestone: ---

All three functions defined in the following example return an address of a
stack object, but GCC only issues a -Wreturn-local-addr warning for two of them
and not for the one where alloca was used to allocated the stack object.  The
warning should be issued for all three functions.

Note that the warning comes and goes with the value of the size argument, and
is not issued when the argument is not constant (the warning is, however,
issued for VLAs).

Also, the note printed following the second warning is wrong (the object isn't
declared) and points to the wrong location (to be useful, it should point to
the line containing either the declaration of the local object or the
invocation of the alloca function).

$ cat walloca.c && /build/gcc-walloca/gcc/xgcc -B /build/gcc-walloca/gcc -S
-Wall -Wextra -Wpedantic walloca.c
void* foo (void)
{
  char a [4];
  return a;
}

void* bar (void)
{
  void *a = __builtin_alloca (4);
  return a;
}

void* baz (void)
{
  void *a = __builtin_alloca_with_align (4, 8);
  return a;
}

walloca.c: In function ‘foo’:
walloca.c:4:10: warning: function returns address of local variable
[-Wreturn-local-addr]
   return a;
          ^
walloca.c: In function ‘baz’:
walloca.c:16:10: warning: function returns address of local variable
[-Wreturn-local-addr]
   return a;
          ^
walloca.c:17:1: note: declared here
 }
 ^


More information about the Gcc-bugs mailing list