The following testcase fails to link on targets that have
TARGET_USE_LOCAL_THUNK_ALIAS_P(DECL) nonzero.
// { dg-do run }
// { dg-options "-O0" }
void
bar (int x)
{
asm ("" : : "g" (x));
}
struct S { S () {}; virtual ~S () {}; };
struct T { virtual void foo (int) = 0; };
struct U : public S, public T
{
bool a;
U () {}
virtual ~U () {}
virtual void foo (int x)
{
switch (x)
{
case 12:
break;
case 9:
bar (7);
break;
case 10:
bar (12);
break;
case 4:
bar (18);
break;
case 2:
bar (26);
break;
}
}
};
U u;
int
main ()
{
}
g++4 -o thunk2{,.C}
/tmp/ccWXeK5j.s: Assembler messages:
/tmp/ccWXeK5j.s:647: Error: can't resolve `.gnu.linkonce.t._ZN1U3fooEi'
{.gnu.linkonce.t._ZN1U3fooEi section} - `.LFB20' {.gnu.linkonce.t._ZN1U3fooEi
section}
--
Summary: COMDAT broken for C++ thunks
Product: gcc
Version: 4.0.0
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: jakub at gcc dot gnu dot org
CC: gcc-bugs at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20206