This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
c++/494: gcc 2.96 snapshot 20000821 miscompiles simple program
- To: gcc-gnats at gcc dot gnu dot org
- Subject: c++/494: gcc 2.96 snapshot 20000821 miscompiles simple program
- From: markus_schoder at yahoo dot de
- Date: 29 Aug 2000 21:23:42 -0000
- Reply-To: markus_schoder at yahoo dot de
- Resent-Cc: gcc-prs at gcc dot gnu dot org, gcc-bugs at gcc dot gnu dot org, jason at gcc dot gnu dot org
- Resent-Reply-To: gcc-gnats@gcc.gnu.org, markus_schoder@yahoo.de
>Number: 494
>Category: c++
>Synopsis: gcc 2.96 snapshot 20000821 miscompiles simple program
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: unassigned
>State: open
>Class: wrong-code
>Submitter-Id: net
>Arrival-Date: Tue Aug 29 14:26:00 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator: Markus Schoder
>Release: gcc version 2.96 20000821 (experimental)
>Organization:
>Environment:
Linux i386
>Description:
The main function of the program returns 1 when it
clearly should return 0.
gcc when given the options `-fPIC -fomit-frame-pointer -O2'
generates the following assembly code which ignores
the return value of the function g:
call g__FRC1A@PLT
xorb $1, 19(%esp)
addl $16, %esp
movl 4(%esp), %eax
>How-To-Repeat:
simple.ii:
# 1 "simple.cpp"
struct A
{
char *p;
A() : p(0) {}
~A() { delete[] p; }
};
bool
g(const A &)
{
return true;
}
int
main()
{
if(!g(A()))
return 1;
return 0;
}
Output from gcc -v --save-temps:
Reading specs from /usr/lib/gcc-lib/i686-pc-linux/2.96/specs
gcc version 2.96 20000821 (experimental)
/usr/lib/gcc-lib/i686-pc-linux/2.96/cpp0 -lang-c++ -D__GNUG__=2 -v -D__GNUC__=2 -D__GNUC_MINOR__=96 -D__GNUC_PATCHLEVEL__=0 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem(posix) -D__OPTIMIZE__ -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -D__tune_pentiumpro__ -D__PIC__ -D__pic__ simple.cpp simple.ii
GNU CPP version 2.96 20000821 (experimental) (cpplib)
(i386 Linux/ELF)
ignoring duplicate directory "/usr/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/qt/include
/usr/include/g++-v3
/usr/include
/usr/lib/gcc-lib/i686-pc-linux/2.96/include
/usr/i686-pc-linux/include
End of search list.
/usr/lib/gcc-lib/i686-pc-linux/2.96/cc1plus simple.ii -quiet -dumpbase simple.cpp -O2 -version -fPIC -fomit-frame-pointer -o simple.s
GNU C++ version 2.96 20000821 (experimental) (i686-pc-linux) compiled by GNU C version 2.96 20000821 (experimental).
as -V -Qy -o simple.o simple.s
GNU assembler version 2.10 (i686-pc-linux-gnu) using BFD version 2.10
/usr/lib/gcc-lib/i686-pc-linux/2.96/collect2 -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/gcc-lib/i686-pc-linux/2.96/../../../crt1.o /usr/lib/gcc-lib/i686-pc-linux/2.96/../../../crti.o /usr/lib/gcc-lib/i686-pc-linux/2.96/crtbegin.o -L/usr/X11R6/lib -L/usr/lib/gcc-lib/i686-pc-linux/2.96 -L/usr/lib/gcc-lib/i686-pc-linux/2.96/../../.. simple.o -lstdc++ -lm -lgcc -lc -lgcc /usr/lib/gcc-lib/i686-pc-linux/2.96/crtend.o /usr/lib/gcc-lib/i686-pc-linux/2.96/../../../crtn.o
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted: