find_tm_attribute was using TREE_PURPOSE to get the attribute name,
which is breaking now that we preserve the C++11-style attribute
format past decl_attributes.  So use get_attribute_name which can
handle both formats of attributes.

Tested x86_64-pc-linux-gnu, applying to trunk.

        PR c++/94733
        * c-attribs.c (find_tm_attribute): Use get_attribute_name instead of
        TREE_PURPOSE.

        * g++.dg/tm/attrib-5.C: New test.
---
 gcc/c-family/c-attribs.c           | 2 +-
 gcc/testsuite/g++.dg/tm/attrib-5.C | 5 +++++
 2 files changed, 6 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/g++.dg/tm/attrib-5.C

diff --git a/gcc/c-family/c-attribs.c b/gcc/c-family/c-attribs.c
index 1483b3540dc..ac936d5bbbb 100644
--- a/gcc/c-family/c-attribs.c
+++ b/gcc/c-family/c-attribs.c
@@ -3314,7 +3314,7 @@ find_tm_attribute (tree list)
 {
   for (; list ; list = TREE_CHAIN (list))
     {
-      tree name = TREE_PURPOSE (list);
+      tree name = get_attribute_name (list);
       if (tm_attr_to_mask (name) != 0)
        return name;
     }
diff --git a/gcc/testsuite/g++.dg/tm/attrib-5.C 
b/gcc/testsuite/g++.dg/tm/attrib-5.C
new file mode 100644
index 00000000000..0b7bc728f06
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tm/attrib-5.C
@@ -0,0 +1,5 @@
+// PR c++/94733
+// { dg-do compile { target c++11 } }
+// { dg-options "-fgnu-tm" }
+
+struct [[gnu::may_alias]] pe { };

base-commit: dcf69ac5448fd6a16137cfe9fe6deadd0ec0243d
-- 
Marek Polacek • Red Hat, Inc. • 300 A St, Boston, MA

Reply via email to