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

Reply via email to