The patch for PR92372 made us start warning about a flatten attribute on an alias. But in the case of C++ 'tor base/complete variants, the user didn't create the alias, so we shouldn't warn.
I could also remove the attribute in maybe_clone_body, but here seems a bit better. Tested x86_64-pc-linux-gnu. OK for trunk? gcc/ChangeLog: PR c++/96078 * cgraph.c (cgraph_node::create_same_body_alias): Remove flatten attribute from alias. gcc/testsuite/ChangeLog: PR c++/96078 * g++.dg/ext/attr-flatten1.C: New test. --- gcc/cgraph.c | 3 +++ gcc/testsuite/g++.dg/ext/attr-flatten1.C | 9 +++++++++ 2 files changed, 12 insertions(+) create mode 100644 gcc/testsuite/g++.dg/ext/attr-flatten1.C diff --git a/gcc/cgraph.c b/gcc/cgraph.c index db038306e19..ab0fc592b46 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -603,6 +603,9 @@ cgraph_node::create_same_body_alias (tree alias, tree decl) n->cpp_implicit_alias = true; if (symtab->cpp_implicit_aliases_done) n->resolve_alias (cgraph_node::get (decl)); + /* Avoid warning in process_function_and_variable_attributes. */ + DECL_ATTRIBUTES (alias) + = remove_attribute ("flatten", DECL_ATTRIBUTES (alias)); return n; } diff --git a/gcc/testsuite/g++.dg/ext/attr-flatten1.C b/gcc/testsuite/g++.dg/ext/attr-flatten1.C new file mode 100644 index 00000000000..5bcbfb6f4aa --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/attr-flatten1.C @@ -0,0 +1,9 @@ +// PR c++/96078 +// { dg-do compile { target c++11 } } + +struct A { + [[gnu::flatten]] A() {} + [[gnu::flatten]] ~A() {} +}; + +A a; base-commit: ac001ddd0cb635dec0145bf577ac796894bda398 -- 2.27.0