Bug report, egcs-2.91.66
Fedor G. Pikus
fedorp@wv.mentorg.com
Mon Jul 5 17:17:00 GMT 1999
Problem: the following C++ code compiles and links without optimization, does not link
when compiled with optimization.
System: Linux Redhat 6.0, kernel 2.2.5.
EGCS version: 1.1.2, egcs --version reports egcs-2.91.66
Source:
----------------------------- begin source ---------------------------------
class b
{
public:
virtual void *f(void *c) = 0;
// virtual void *f(void *c) {} // This works exactly like the line above.
};
int main()
{
// Defining this class outside fixes the problem, but in the real code it's NOT POSSIBLE.
class d : public b {
public:
// virtual // "virtual" here makes no difference
void *f(void *c) { }
};
// This is the important line: remove it and the unresolved symbol goes away!
d D;
// new d; // has the same effect as the line above.
}
----------------------------- end source ---------------------------------
EGCS command:
c++ -O0 ~/nolink.C <- works fine
c++ -O1 ~/nolink.C <- does not link:
/tmp/ccPZtRSO.o(.gnu.linkonce.d.__vt_Q26main.0_1d+0x8): undefined reference to `f__Q26main.0_1dPv.24'
collect2: ld returned 1 exit status
EGCS with -v
c++ -v -O1 ~/nolink.C
----------------------------- begin output -----------------------------
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/specs
gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)
/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/cpp -lang-c++ -v -undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -D__GNUC_MINOR__=91 -D__ELF__ -Dunix -Di386 -D__i386__ -Dlinux -D__ELF__ -D__unix__ -D__i386__ -D__i386__ -D__linux__ -D__unix -D__i386 -D__linux -Asystem(posix) -D__EXCEPTIONS -D__OPTIMIZE__ -Asystem(unix) -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ /user/fedorp/nolink.C nolink.ii
GNU CPP version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release) (i386 Linux/ELF)
#include "..." search starts here:
#include <...> search starts here:
/usr/include/g++-2
/usr/i386-redhat-linux/include
/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include
/usr/include
End of search list.
/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/cc1plus nolink.ii -quiet -dumpbase nolink.cc -O1 -version -o nolink.s
GNU C++ version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release) (i386-redhat-linux) compiled by GNU C version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).
as -V -Qy -o nolink.o nolink.s
GNU assembler version 2.9.1 (i386-redhat-linux), using BFD version 2.9.1.0.23
/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/collect2 -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/crtbegin.o -L/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66 -L/usr/i386-redhat-linux/lib nolink.o -lstdc++ -lm -lgcc -lc -lgcc /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/crtend.o /usr/lib/crtn.o
nolink.o(.gnu.linkonce.d.__vt_Q26main.0_1d+0x8): undefined reference to `f__Q26main.0_1dPv.2'
collect2: ld returned 1 exit status
----------------------------- end output -----------------------------
Thank you in advance.
--
Fedor G. Pikus
WWW: http://www.coho.net/~pikus/
Mentor Graphics Corporation | 8625 SW Sorrento Rd
8405 SW Boeckman Road | Beaverton, Oregon 97008
Wilsonville, Oregon 97070 |
Phone: (503) 685-4857 | Phone: (503) 641 0306
FAX: (503) 685-1302 | FAX: (503)
More information about the Gcc-bugs
mailing list