Hi,

This patch fixes an ICE in uda_attribute_p when looking up an unknown
attribute.  The target attribute table is not guaranteed to be set by
all backends.

Bootstrapped and regression tested on x86_64-linux-gnu, and committed to
mainline.

Regards
Iain.

---
gcc/d/ChangeLog:

        PR d/95173
        * d-attribs.cc (uda_attribute_p): Don't search target attribute table
        if NULL.

gcc/testsuite/ChangeLog:

        PR d/95173
        * gdc.dg/pr95173.d: New test.
---
 gcc/d/d-attribs.cc             |  9 ++++++---
 gcc/testsuite/gdc.dg/pr95173.d | 10 ++++++++++
 2 files changed, 16 insertions(+), 3 deletions(-)
 create mode 100644 gcc/testsuite/gdc.dg/pr95173.d

diff --git a/gcc/d/d-attribs.cc b/gcc/d/d-attribs.cc
index 964f59f96f4..f4086c0f0ee 100644
--- a/gcc/d/d-attribs.cc
+++ b/gcc/d/d-attribs.cc
@@ -216,10 +216,13 @@ uda_attribute_p (const char *name)
        return true;
     }
 
-  for (const attribute_spec *p = targetm.attribute_table; p->name; p++)
+  if (targetm.attribute_table)
     {
-      if (get_identifier (p->name) == ident)
-       return true;
+      for (const attribute_spec *p = targetm.attribute_table; p->name; p++)
+       {
+         if (get_identifier (p->name) == ident)
+           return true;
+       }
     }
 
   return false;
diff --git a/gcc/testsuite/gdc.dg/pr95173.d b/gcc/testsuite/gdc.dg/pr95173.d
new file mode 100644
index 00000000000..2a4b2ed8232
--- /dev/null
+++ b/gcc/testsuite/gdc.dg/pr95173.d
@@ -0,0 +1,10 @@
+// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95173
+// { dg-do compile }
+// { dg-options "-Wattributes" }
+
+import gcc.attribute;
+
+@attribute("foo") // { dg-warning "unknown attribute .foo." }
+void f95173() 
+{
+}
-- 
2.25.1

Reply via email to