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

Reply via email to