* in-charge constructors and destructors of abstract classes
@ 2008-03-05 13:40 Roman Zybin
0 siblings, 0 replies; only message in thread
From: Roman Zybin @ 2008-03-05 13:40 UTC (permalink / raw)
To: gcc-help
The main idea was to prove that there shouldn't be dependency on
in-charge constructors and destructors of an abstract classes (since
there is no need for their invokations during inheritance), but there
is such dependency for QGList class from qt3. The example below only
represents QGList structure.
Consider the following example:
gcc (GCC) 3.4.6 20060404 (Red Hat 3.4.6-3)
myclass.h:
#ifndef MYCLASS_H
#define MYCLASS_H
class Myclass
{
public:
virtual int a();
virtual int b();
};
inline int Myclass::a()
{
return 1;
}
#endif
myclass.cpp:
#include "myclass.h"
int Myclass::b()
{
return 2;
}
test.cpp:
#include "myclass.h"
int main()
{
return 0;
}
Makefile:
gcc -fPIC -c myclass.cpp
gcc -shared -o libmyclass.so myclass.o
gcc -c test.cpp
gcc test.o -L. -lmyclass -o test
There is the dependency on Myclass::b() method whereas it isn't
needed at all. And on binary level we see just reference but no another
usage.
Relocation section '.rela.plt' at offset 0x658 contains 3 entries:
Offset Info Type Sym. Value Sym. Name + Addend
000000500c30 000100000007 R_X86_64_JUMP_SLO 0000000000000000 __libc_start_main + 0
000000500c38 000300000007 R_X86_64_JUMP_SLO 00000000004006d8 _ZN7Myclass1bEv + 0
000000500c40 001000000007 R_X86_64_JUMP_SLO 00000000004006e8 __gxx_personality_v0 + 0
test.asm:
00000000004006d8 <_ZN7Myclass1bEv@plt>:
4006d8: ff 25 5a 05 10 00 jmpq *1049946(%rip) # 500c38 <_GLOBAL_OFFSET_TABLE_+0x20>
4006de: 68 01 00 00 00 pushq $0x1
4006e3: e9 d0 ff ff ff jmpq 4006b8 <_init+0x18>
The example has also been tested on gcc (GCC) 4.2.3 (Debian 4.2.3-1) with similar
output.
So, questions:
1. Is the situation described above regarded as normal or it is just a bug?
2. Are in-charge constructors and destructors of abstract classes really not needed anywhere?
3. If so, should compiler not include them into its output?
Regards,
Roman
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2008-03-05 13:40 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-03-05 13:40 in-charge constructors and destructors of abstract classes Roman Zybin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).