cgraph: Don't verify semantic_interposition flag for aliases [PR105399]
The following testcase ICEs, because the ctors during cc1plus all have !opt_for_fn (decl, flag_semantic_interposition) - they have NULL DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl) and optimization_default_node is for -Ofast and so has flag_semantic_interposition cleared. During free lang data, we set DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl) for the ctor which has body (or for thunks), but don't touch it for aliases. During lto1 optimization_default_node reflects the lto1 flags which are -O2 rather than -Ofast and so has flag_semantic_interposition set, for the ctor which has body that makes no difference, but as the alias doesn't still have DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl) set, we now trigger this verification check. The following patch just doesn't verify it for aliases during lto1. Another possibility would be to set DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl) during free lang data even for aliases. 2022-04-28 Jakub Jelinek <jakub@redhat.com> PR lto/105399 * cgraph.cc (cgraph_node::verify_node): Don't verify semantic_interposition flag against opt_for_fn (decl, flag_semantic_interposition) for aliases in lto1. * g++.dg/lto/pr105399_0.C: New test.
This commit is contained in:
parent
2a570f11a2
commit
b85e79dce1
2 changed files with 14 additions and 1 deletions
|
@ -3488,7 +3488,11 @@ cgraph_node::verify_node (void)
|
|||
"returns a pointer");
|
||||
error_found = true;
|
||||
}
|
||||
if (definition && externally_visible
|
||||
if (definition
|
||||
&& externally_visible
|
||||
/* For aliases in lto1 free_lang_data doesn't guarantee preservation
|
||||
of opt_for_fn (decl, flag_semantic_interposition). See PR105399. */
|
||||
&& (!alias || !in_lto_p)
|
||||
&& semantic_interposition
|
||||
!= opt_for_fn (decl, flag_semantic_interposition))
|
||||
{
|
||||
|
|
9
gcc/testsuite/g++.dg/lto/pr105399_0.C
Normal file
9
gcc/testsuite/g++.dg/lto/pr105399_0.C
Normal file
|
@ -0,0 +1,9 @@
|
|||
// PR lto/105399
|
||||
// { dg-lto-do link }
|
||||
// { dg-lto-options { { -fPIC -flto -Ofast } } }
|
||||
// { dg-require-effective-target shared }
|
||||
// { dg-require-effective-target fpic }
|
||||
// { dg-extra-ld-options "-shared -O2" }
|
||||
|
||||
struct S { S (); };
|
||||
S::S () {}
|
Loading…
Add table
Reference in a new issue