piece of code inside contained in class methode (starting line 263): --- char *buf; if (!strncmp(in->loc.path,"/translators/",strlen("/translators/"))) { translator_c *xl = translator_from_path(in->loc.path); if (xl) { char *loc = in->loc.path+strlen("/translators/")+strlen(xl->name); LOG_DEBUG(log, "control_get_data, xl '%s', loc '%s'", xl->name, loc); buf = xl->control_get_data(loc); } } else { char *loc = in->loc.path; LOG_DEBUG(log, "control_get_data, internal, loc '%s'", loc); buf = control_get_data(loc); }
if (buf) { MEM_NEW(persistent, persistent_c()); persistent->read_mode = true; persistent->data = buf; persistent->data_len = strlen(persistent->data); out->ref = (xl_ref_t) persistent; out->op_errno = 0; } else { out->op_errno = ENOENT; } --- compiling with the following options works fine (no warnings, no errors): --- CFLAGS=-Wall -Werror -fPIC -pthread -I../common -I../../common -I../../../common -I../shared -I../../shared -I../../../shared -O0 -g --- compiling with the following options produces a warning (=error); --- CFLAGS=-Wall -Werror -fPIC -pthread -I../common -I../../common -I../../../common -I../shared -I../../shared -I../../../shared -O3 -ffast-math --- cc1plus: warnings being treated as errors main.cpp: In member function »virtual void main_c::fop_open(stack_frame_t*)«: main.cpp:263: Warnung: »buf« könnte in dieser Funktion uninitialisiert verwendet werden make: *** [main.o] Fehler 1 --- Fehler = Error »buf« könnte in dieser Funktion uninitialisiert verwendet werden = "buf could be used uninitialized in this function" --- as you can clearly see, buf could never be used uninitialized so this must be a compiler/optimizer bug. -- Summary: wrong optimization produces output of false warning Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: corinl at gmx dot de GCC build triplet: 4.2.3-2ubuntu7 GCC host triplet: x86_64 GCC target triplet: x86_64 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39133