mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-25 05:30:25 +08:00
re PR lto/53808 (Undefined symbol when building a library with lto)
PR lto/53808 * class.c (clone_function_decl): Call note_vague_linkage_fn for defaulted virtual dtor. From-SVN: r208153
This commit is contained in:
parent
d808e92ea9
commit
6e6eaecc6a
@ -1,5 +1,9 @@
|
||||
2014-02-25 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR lto/53808
|
||||
* class.c (clone_function_decl): Call note_vague_linkage_fn for
|
||||
defaulted virtual dtor.
|
||||
|
||||
DR 1286
|
||||
PR c++/60328
|
||||
* pt.c (get_underlying_template): Fix equivalence calculation.
|
||||
|
@ -4582,6 +4582,10 @@ clone_function_decl (tree fn, int update_method_vec_p)
|
||||
destructor. */
|
||||
if (DECL_VIRTUAL_P (fn))
|
||||
{
|
||||
if (DECL_DEFAULTED_FN (fn) && flag_devirtualize)
|
||||
/* Make sure the destructor gets synthesized so that it can be
|
||||
inlined after devirtualization. */
|
||||
note_vague_linkage_fn (fn);
|
||||
clone = build_clone (fn, deleting_dtor_identifier);
|
||||
if (update_method_vec_p)
|
||||
add_method (DECL_CONTEXT (clone), clone, NULL_TREE);
|
||||
|
16
gcc/testsuite/g++.dg/opt/devirt4.C
Normal file
16
gcc/testsuite/g++.dg/opt/devirt4.C
Normal file
@ -0,0 +1,16 @@
|
||||
// PR lto/53808
|
||||
// Devirtualization + inlining should produce a non-virtual
|
||||
// call to ~foo.
|
||||
// { dg-options "-O -fdevirtualize" }
|
||||
// { dg-final { scan-assembler "_ZN3fooD2Ev" } }
|
||||
|
||||
struct foo {
|
||||
virtual ~foo();
|
||||
};
|
||||
struct bar : public foo {
|
||||
virtual void zed();
|
||||
};
|
||||
void f() {
|
||||
foo *x(new bar);
|
||||
delete x;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user