This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

c++/494: gcc 2.96 snapshot 20000821 miscompiles simple program



>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:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]