mirror of git://gcc.gnu.org/git/gcc.git
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:
parent
e39dd8029d
commit
effdaefed3
|
|
@ -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>
|
2017-01-25 Martin Sebor <msebor@redhat.com>
|
||||||
|
|
||||||
* decl.c (grokdeclarator): Fix a typo in a comment.
|
* decl.c (grokdeclarator): Fix a typo in a comment.
|
||||||
|
|
|
||||||
|
|
@ -1816,6 +1816,14 @@ vague_linkage_p (tree decl)
|
||||||
{
|
{
|
||||||
if (!TREE_PUBLIC (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));
|
gcc_checking_assert (!DECL_COMDAT (decl));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4418,6 +4418,14 @@ decl_linkage (tree decl)
|
||||||
if (TREE_PUBLIC (decl))
|
if (TREE_PUBLIC (decl))
|
||||||
return lk_external;
|
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)
|
if (TREE_CODE (decl) == NAMESPACE_DECL)
|
||||||
return lk_external;
|
return lk_external;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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() {}
|
||||||
Loading…
Reference in New Issue