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

            Bug ID: 63418
           Summary: false positive with -Wmaybe-uninitialized
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: kcc at gcc dot gnu.org

I know there are some known false positives with -Wmaybe-uninitialized, so this
might be a dup. I'd like to document this one just in case this is another
corner case. 
The test comes from a slightly modified glibc sources.
Tested with the fresh gcc trunk r215730.

% gcc w1.c -std=gnu99 -c -Wmaybe-uninitialized -O2

w1.c: In function ‘parse_expression.constprop’:
w1.c:13311:28: warning: ‘extra’ may be used uninitialized in this function
[-Wmaybe-uninitialized]
       if (name_len == extra[idx]
                            ^
w1.c:13500:24: note: ‘extra’ was declared here
   const unsigned char *extra;


Looking at the code:

"extra" is defined w/o initializer:
13500   const unsigned char *extra;

Then, it is initialized under if (nrules):
13522   if (nrules) {
...
13533     extra =

nrules never changes again. 

The warning complains about "extra" being used in seek_collating_symbol_entry
w/o being initialied. 
There are two calls to seek_collating_symbol_entry, they look like this: 

13337     if (nrules != 0) {
13338       int32_t elem, idx;
13339       elem = seek_collating_symbol_entry(br_elem->opr.name, sym_name_len,


13456   if (nrules != 0) {
13457     elem = seek_collating_symbol_entry(name, name_len, symb_table,
table_size,


So, in both cases seek_collating_symbol_entry is called if nrules != 0, i.e.
'extra' is initialized. 


If this is something new and unexpected I can prepare a better minimized
example, but I don't want to waste time if this is known. 
I wasn't able to reproduce this on a tiny example.

Reply via email to