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

            Bug ID: 106092
           Summary: Bogus -Wfree-nonheap-object
           Product: gcc
           Version: 11.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: lavr at ncbi dot nlm.nih.gov
  Target Milestone: ---

I got the following report from the compilation:

In file included from /home/ANTON/cxx/src/util/qparse/parser.cpp:352:
query_parser_bison.tab.c: In function ‘int ncbi_q_parse(void*)’:
query_parser_bison.tab.c:2354:18: warning: ‘void free(void*)’ called on
unallocated object ‘yyssa’ [-Wfree-nonheap-object]
In file included from /home/ANTON/cxx/src/util/qparse/parser.cpp:352:
query_parser_bison.tab.c:1351:18: note: declared here

The thing is, the code which is "blamed", looks like this (line numbers on):

   2353   if (yyss != yyssa)
   2354     YYSTACK_FREE (yyss);

which obviously tells NOT to free if the "yyss" is the same as "yyssa"...
So it's unclear from which context GCC "figured" that yyssa is going to be
freed.

The declarations look like this:

   1350     /* The state stack.  */
   1351     yytype_int16 yyssa[YYINITDEPTH];
   1352     yytype_int16 *yyss;
   1353     yytype_int16 *yyssp;

   1384   yyss = yyssa;

so at some point, yyss gets assigned with yyssa.  But then again, the code
instructs exactly NOT to free, in this case.  There's nothing to warn about.

Reply via email to