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