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