Commit d06865bf by Dave Korn Committed by Dave Korn

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
parent 637ebedd
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
......
/* 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))
......
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
......
#include "pr47218.h"
Foo2::~Foo2 ()
{
((FooBaseBase1*)this)->Bar();
}
void Foo2::Bar()
{
}
/* { 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;
}
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();
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment