[Bug 305460]
Redi
305460 at bugs.launchpad.net
Mon Mar 14 17:22:33 UTC 2022
(In reply to Eyal Rozenberg from comment #16)
> The compiler could store information in the compiled object listing the
> virtual members for which no implementation was found, due to which reason
> the vtable was not defined already. In this specific example, storing the
> name of "A::B()" somewhere.
In every file that includes the header defining A?
Consider the case where you include the header in ten files, and define
the virtual functions in one of them. Nine out of ten files do not
contain a definitions of the virtual functions, so they would each
contain the same info naming every virtual function in the class. Then
do that for every polymorphic class in every object file. This is a lot
more info being written out, and most of it will never be used.
You have nine files saying "this function is missing" and one not saying
it. What exactly does the linker do with that information? Why would
that be better than comment 7 here?
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to gcc-defaults in Ubuntu.
https://bugs.launchpad.net/bugs/305460
Title:
[PR42540] c++ error message [vtable undefined] is unhelpful
Status in gcc:
In Progress
Status in gcc-defaults package in Ubuntu:
Confirmed
Bug description:
I've had response to g++ crash reports, so maybe you'd also like to
know about this confusing error message I found.
Thanks!
Alan
This is on an up-to-date install of "Ubuntu 8.04.1".
apt-cache policy gcc
gcc:
Installed: 4:4.2.3-1ubuntu6
Candidate: 4:4.2.3-1ubuntu6
Version table:
*** 4:4.2.3-1ubuntu6 0
500 http://gb.archive.ubuntu.com hardy-updates/main Packages
100 /var/lib/dpkg/status
4:4.2.3-1ubuntu3 0
500 http://gb.archive.ubuntu.com hardy/main Packages
Minimal test program:
class A {
A();
virtual void B();
};
A::A() {}
/* Whoops, I forgot to define A::B() */
Actual error message:
/usr/lib/gcc/x86_64-linux-gnu/4.2.4/../../../../lib/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
/tmp/cc8P2uDq.o: In function `A::A()':
test.cpp:(.text+0x9): undefined reference to `vtable for A'
/tmp/cc8P2uDq.o: In function `A::A()':
test.cpp:(.text+0x1f): undefined reference to `vtable for A'
collect2: ld returned 1 exit status
Expected error message:
Something more like "undefined reference to A::B()"
To manage notifications about this bug go to:
https://bugs.launchpad.net/gcc/+bug/305460/+subscriptions
More information about the foundations-bugs
mailing list