[Bug c++/30387] New: Broken code generation on if/else statement
matt dot hoosier at gmail dot com
gcc-bugzilla@gcc.gnu.org
Fri Jan 5 21:34:00 GMT 2007
When compiling the following conditional:
if (gerror)
{
printf ("%s%d: Error %s\n", __FILE__, __LINE__, gerror->message);
std::auto_ptr<Glib::Error> e (Glib::Error::throw_exception (gerror));
printf ("If reached, code generation worked.\n");
}
else
{
printf ("%s:%d: No error\n", __FILE__, __LINE__);
}
the assembly code which would implement the second line of the "then" branch is
absent, and there is no branch instruction which would cause control to jump
past the "else" branch once the "then" branch finishes.
The assembly code, starting shortly before the call to throw_exception(),
emitted is:
.LEHB4:
call printf
.loc 2 18 0
movl -24(%ebp), %eax
leal -12(%ebp), %edx
movl %eax, 4(%esp)
movl %edx, (%esp)
call _ZN4Glib5Error15throw_exceptionEP7_GError
//
// Code is missing here; .L18 below is the beginning of the
// else branch
//
.L18:
.LBE4:
.loc 2 23 0
movl $23, 8(%esp)
movl $.LC1, 4(%esp)
movl $.LC3, (%esp) // .LC3 is the "%s:%d: No error\n" string literal
call printf
--
Summary: Broken code generation on if/else statement
Product: gcc
Version: 4.1.2
Status: UNCONFIRMED
Severity: major
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: matt dot hoosier at gmail dot com
GCC build triplet: i486-linux-gnu
GCC host triplet: i486-linux-gnu
GCC target triplet: i486-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30387
More information about the Gcc-bugs
mailing list