[Bug c++/59500] New: Bogus maybe-unintialized warning due to optimizations
luto at mit dot edu
gcc-bugzilla@gcc.gnu.org
Fri Dec 13 21:08:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59500
Bug ID: 59500
Summary: Bogus maybe-unintialized warning due to optimizations
Product: gcc
Version: 4.9.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: luto at mit dot edu
I would have sworn that there was a bug open about this, but I can't find it,
and this bug has been annoying me for years.
Compiling this code with g++ -O2 -Wall:
#ifndef __cplusplus
#include <stdbool.h>
#endif
extern int intval();
extern bool cond();
int main()
{
bool valid = false;
int value;
if (cond()) {
valid = true;
value = intval();
}
while (!valid || intval() < value)
;
return 0;
}
says:
trivial_uninit_warning.cc: In function ‘int main()’:
trivial_uninit_warning.cc:18:17: warning: ‘value’ may be used uninitialized in
this function [-Wmaybe-uninitialized]
while (!valid || intval() < value)
Oddly, compiling exactly the same code in C (instead of C++) does not warn.
This seems quite sensitive to exactly what the code is doing. IIRC the issue
is that the "load" of value is moved ahead of the check of valid by the
optimizer (which is entirely valid), but then that load appears to access an
uninitialized value and warns.
More information about the Gcc-bugs
mailing list