From 249ccaff220334750acbaf9351dd06b0fdcbde06 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 3 Dec 2009 09:03:36 +0100 Subject: re PR c++/42256 (483.xalancbmk fails to link) PR c++/42256 * optimize.c (maybe_clone_body): Call emit_associated_thunks after expand_or_defer_fn_1. * g++.dg/inherit/thunk11.C: New test. * g++.dg/inherit/thunk11.h: New file. * g++.dg/inherit/thunk11-aux.cc: New file. From-SVN: r154937 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/optimize.c | 6 ++++-- gcc/testsuite/ChangeLog | 7 +++++++ gcc/testsuite/g++.dg/inherit/thunk11-aux.cc | 4 ++++ gcc/testsuite/g++.dg/inherit/thunk11.C | 11 +++++++++++ gcc/testsuite/g++.dg/inherit/thunk11.h | 16 ++++++++++++++++ 6 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/inherit/thunk11-aux.cc create mode 100644 gcc/testsuite/g++.dg/inherit/thunk11.C create mode 100644 gcc/testsuite/g++.dg/inherit/thunk11.h (limited to 'gcc') diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 84ce5a5..6753829 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2009-12-03 Jakub Jelinek + + PR c++/42256 + * optimize.c (maybe_clone_body): Call emit_associated_thunks + after expand_or_defer_fn_1. + 2009-12-02 Taras Glek * parser.c (cp_parser_class_specifier): Back out my previous change. diff --git a/gcc/cp/optimize.c b/gcc/cp/optimize.c index 5a67431..9210a80 100644 --- a/gcc/cp/optimize.c +++ b/gcc/cp/optimize.c @@ -309,7 +309,6 @@ maybe_clone_body (tree fn) comdat_group = cdtor_comdat_group (fns[1], fns[0]); DECL_COMDAT_GROUP (fns[0]) = comdat_group; } - emit_associated_thunks (clone); } /* Build the delete destructor by calling complete destructor @@ -383,7 +382,10 @@ maybe_clone_body (tree fn) finish_function (0); BLOCK_ABSTRACT_ORIGIN (DECL_INITIAL (clone)) = DECL_INITIAL (fn); if (alias) - expand_or_defer_fn_1 (clone); + { + if (expand_or_defer_fn_1 (clone)) + emit_associated_thunks (clone); + } else expand_or_defer_fn (clone); first = false; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dab89fa..aeb92ac 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2009-12-03 Jakub Jelinek + + PR c++/42256 + * g++.dg/inherit/thunk11.C: New test. + * g++.dg/inherit/thunk11.h: New file. + * g++.dg/inherit/thunk11-aux.cc: New file. + 2009-12-02 Richard Guenther * g++.dg/ipa/iinline-1.C: Adjust. diff --git a/gcc/testsuite/g++.dg/inherit/thunk11-aux.cc b/gcc/testsuite/g++.dg/inherit/thunk11-aux.cc new file mode 100644 index 0000000..7009d6c --- /dev/null +++ b/gcc/testsuite/g++.dg/inherit/thunk11-aux.cc @@ -0,0 +1,4 @@ +// { dg-do compile } +// { dg-options "-O2" } + +#include "thunk11.h" diff --git a/gcc/testsuite/g++.dg/inherit/thunk11.C b/gcc/testsuite/g++.dg/inherit/thunk11.C new file mode 100644 index 0000000..6e3bc32 --- /dev/null +++ b/gcc/testsuite/g++.dg/inherit/thunk11.C @@ -0,0 +1,11 @@ +// PR c++/42256 +// { dg-do link } +// { dg-additional-sources "thunk11-aux.cc" } +// { dg-options "-O2" } + +#include "thunk11.h" + +int +main () +{ +} diff --git a/gcc/testsuite/g++.dg/inherit/thunk11.h b/gcc/testsuite/g++.dg/inherit/thunk11.h new file mode 100644 index 0000000..641f40e --- /dev/null +++ b/gcc/testsuite/g++.dg/inherit/thunk11.h @@ -0,0 +1,16 @@ +struct A +{ + A () {} + virtual ~A () {} +}; +struct B +{ + B () {} + virtual ~B () {} +}; +struct C : public A, public B +{ + virtual void foo (); + virtual ~C () {}; +}; +inline void C::foo () {} -- cgit v1.1