PR c++/79176 - lambda ICE with -flto -Os

* decl2.c (vague_linkage_p): Handle decloned 'tors.
	* tree.c (decl_linkage): Likewise.

From-SVN: r244935
This commit is contained in:
Jason Merrill 2017-01-26 10:30:43 -05:00 committed by Jason Merrill
parent e39dd8029d
commit effdaefed3
4 changed files with 38 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2017-01-26 Jason Merrill <jason@redhat.com>
PR c++/79176 - lambda ICE with -flto -Os
* decl2.c (vague_linkage_p): Handle decloned 'tors.
* tree.c (decl_linkage): Likewise.
2017-01-25 Martin Sebor <msebor@redhat.com>
* decl.c (grokdeclarator): Fix a typo in a comment.

View File

@ -1816,6 +1816,14 @@ vague_linkage_p (tree decl)
{
if (!TREE_PUBLIC (decl))
{
/* maybe_thunk_body clears TREE_PUBLIC on the maybe-in-charge 'tor
variants, check one of the "clones" for the real linkage. */
if ((DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl)
|| DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl))
&& DECL_CHAIN (decl)
&& DECL_CLONED_FUNCTION (DECL_CHAIN (decl)))
return vague_linkage_p (DECL_CHAIN (decl));
gcc_checking_assert (!DECL_COMDAT (decl));
return false;
}

View File

@ -4418,6 +4418,14 @@ decl_linkage (tree decl)
if (TREE_PUBLIC (decl))
return lk_external;
/* maybe_thunk_body clears TREE_PUBLIC on the maybe-in-charge 'tor variants,
check one of the "clones" for the real linkage. */
if ((DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl)
|| DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl))
&& DECL_CHAIN (decl)
&& DECL_CLONED_FUNCTION (DECL_CHAIN (decl)))
return decl_linkage (DECL_CHAIN (decl));
if (TREE_CODE (decl) == NAMESPACE_DECL)
return lk_external;

View File

@ -0,0 +1,16 @@
// PR c++/79176
// { dg-do compile { target c++11 } }
// { dg-options "-flto -Os" }
struct A {};
struct Object {
virtual bool m_fn1();
virtual ~Object();
};
struct Item : Object, virtual A {
~Item() {
[] {};
}
bool m_fn1();
};
bool Item::m_fn1() {}