re PR c++/47218 (C++ multiple definitions of non-virtual thunk problem)
gcc/ChangeLog: PR c++/47218 * cgraphunit.c (assemble_thunk): Call resolve_unique_section. gcc/testsuite/ChangeLog: PR c++/47218 * g++.dg/other/pr47218-1.C: New test file. * g++.dg/other/pr47218.C: Likewise. * g++.dg/other/pr47218.h: New supporting header. From-SVN: r168624
This commit is contained in:
parent
637ebedd38
commit
d06865bf07
|
@ -1,3 +1,8 @@
|
|||
2011-01-10 Dave Korn <dave.korn.cygwin@gmail.com>
|
||||
|
||||
PR c++/47218
|
||||
* cgraphunit.c (assemble_thunk): Call resolve_unique_section.
|
||||
|
||||
2011-01-09 Nicola Pero <nicola.pero@meta-innovation.com>
|
||||
|
||||
PR objc/47232
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Callgraph based interprocedural optimizations.
|
||||
Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
||||
Free Software Foundation, Inc.
|
||||
Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
|
||||
2011 Free Software Foundation, Inc.
|
||||
Contributed by Jan Hubicka
|
||||
|
||||
This file is part of GCC.
|
||||
|
@ -1317,6 +1317,9 @@ assemble_thunk (struct cgraph_node *node)
|
|||
|
||||
current_function_decl = thunk_fndecl;
|
||||
|
||||
/* Ensure thunks are emitted in their correct sections. */
|
||||
resolve_unique_section (thunk_fndecl, 0, flag_function_sections);
|
||||
|
||||
if (this_adjusting
|
||||
&& targetm.asm_out.can_output_mi_thunk (thunk_fndecl, fixed_offset,
|
||||
virtual_value, alias))
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2011-01-10 Dave Korn <dave.korn.cygwin@gmail.com>
|
||||
|
||||
PR c++/47218
|
||||
* g++.dg/other/pr47218-1.C: New test file.
|
||||
* g++.dg/other/pr47218.C: Likewise.
|
||||
* g++.dg/other/pr47218.h: New supporting header.
|
||||
|
||||
2011-01-09 Nicola Pero <nicola.pero@meta-innovation.com>
|
||||
|
||||
PR objc/47232
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
#include "pr47218.h"
|
||||
|
||||
Foo2::~Foo2 ()
|
||||
{
|
||||
((FooBaseBase1*)this)->Bar();
|
||||
}
|
||||
|
||||
void Foo2::Bar()
|
||||
{
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
/* { dg-do link } */
|
||||
/* { dg-options "--save-temps" } */
|
||||
/* { dg-additional-sources "pr47218-1.C" } */
|
||||
|
||||
#include "pr47218.h"
|
||||
|
||||
Foo3::~Foo3 ()
|
||||
{
|
||||
((FooBaseBase1*)this)->Bar();
|
||||
}
|
||||
|
||||
void Foo3::Bar()
|
||||
{
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
|
||||
class FooBaseBase0
|
||||
{
|
||||
public:
|
||||
virtual ~FooBaseBase0 () {}
|
||||
};
|
||||
|
||||
class FooBaseBase1
|
||||
{
|
||||
public:
|
||||
virtual void Bar() {}
|
||||
};
|
||||
|
||||
|
||||
class FooBase: public FooBaseBase0, public FooBaseBase1
|
||||
{
|
||||
public:
|
||||
virtual void Bar() {}
|
||||
};
|
||||
|
||||
class Foo2: public FooBase
|
||||
{
|
||||
public:
|
||||
~Foo2 ();
|
||||
virtual void Bar();
|
||||
};
|
||||
|
||||
class Foo3: public FooBase
|
||||
{
|
||||
public:
|
||||
~Foo3 ();
|
||||
virtual void Bar();
|
||||
};
|
Loading…
Reference in New Issue