I get a spurious warning on code that can't possibly have an uninitialized reference; gcc should be able to figure it out just by propagating constants. The example is cut down from a larger program and is still a bit long, but is quite brittle: every substantive irrelevant change I make to the test case below eliminates the warning (such as removing the nitems field and testing against items instead, or removing the call to cons, or replacing freelist_alloc by malloc). In the output, everything got inlined, but it's a mess of spaghetti jumps that I can't decipher.
This bug happens identically in both gcc-4.2.1 and gcc-4.3.1. http://idefix.uchicago.edu/~bhudson/stuff/gcc-4-spurious-warning.c gcc gcc-4-spurious-warning.c -W -Wall -O2 -S spurious-warning.c: In function 'cause_warning': spurious-warning.c:74: warning: 'h.min_item' may be used uninitialized in this function -- Summary: spurious 'uninitialized' warning Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: benoit dot hudson at gmail dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37361