ipa: target clone and mangling alias [PR114992]
Since the mangling of the second lambda changed (previously we counted all lambdas, now we only count lambdas with the same signature), we generate_mangling_alias for handler<lambda2> for backward compatibility. Since handler is COMDAT, resolve_alias puts the alias in the same comdat group as handler itself. Then create_dispatcher_calls tries to add the alias to the same comdat group as the dispatcher, but it's already in a same_comdat_group, so we ICE. It seems like we're just missing a remove_from_same_comdat_group before add_to_same_comdat_group. PR c++/114992 gcc/ChangeLog: * multiple_target.cc (create_dispatcher_calls): remove_from_same_comdat_group before add_to_same_comdat_group. gcc/testsuite/ChangeLog: * g++.target/i386/mangling-alias1.C: New test.
This commit is contained in:
parent
94fa9f4d27
commit
ab716829da
2 changed files with 21 additions and 1 deletions
|
@ -155,7 +155,11 @@ create_dispatcher_calls (struct cgraph_node *node)
|
|||
symtab_node *source = ref->referring;
|
||||
source->create_reference (inode, IPA_REF_ALIAS);
|
||||
if (inode->get_comdat_group ())
|
||||
source->add_to_same_comdat_group (inode);
|
||||
{
|
||||
if (source->same_comdat_group)
|
||||
source->remove_from_same_comdat_group ();
|
||||
source->add_to_same_comdat_group (inode);
|
||||
}
|
||||
}
|
||||
else
|
||||
gcc_unreachable ();
|
||||
|
|
16
gcc/testsuite/g++.target/i386/mangling-alias1.C
Normal file
16
gcc/testsuite/g++.target/i386/mangling-alias1.C
Normal file
|
@ -0,0 +1,16 @@
|
|||
// PR c++/114992
|
||||
// { dg-do compile { target { c++11 && x86_64-*-* } } }
|
||||
// { dg-require-ifunc }
|
||||
|
||||
template <typename Callable>
|
||||
__attribute__((target_clones("avx2", "default")))
|
||||
void handler(Callable) {}
|
||||
|
||||
inline int func()
|
||||
{
|
||||
auto l1 = [](int) {}; // different lambda signature
|
||||
handler([]() {}); // so this one needs a mangling alias
|
||||
return 42;
|
||||
}
|
||||
|
||||
int g = func();
|
Loading…
Add table
Reference in a new issue