decl2.c (is_late_template_attribute): Don't crash on unknown attribute.
authorJason Merrill <jason@redhat.com>
Thu, 27 Sep 2007 18:54:06 +0000 (14:54 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 27 Sep 2007 18:54:06 +0000 (14:54 -0400)
        * decl2.c (is_late_template_attribute): Don't crash on unknown
        attribute.

From-SVN: r128844

gcc/cp/ChangeLog
gcc/cp/decl2.c
gcc/testsuite/g++.dg/ext/tmplattr6.C [new file with mode: 0644]

index f459c54..a0e259c 100644 (file)
@@ -1,3 +1,8 @@
+2007-09-27  Jason Merrill  <jason@redhat.com>
+
+       * decl2.c (is_late_template_attribute): Don't crash on unknown
+       attribute.
+
 2007-09-27  Paolo Carlini  <pcarlini@suse.de>
 
        PR c++/33493
index d581942..c00c979 100644 (file)
@@ -986,6 +986,10 @@ is_late_template_attribute (tree attr, tree decl)
   tree args = TREE_VALUE (attr);
   const struct attribute_spec *spec = lookup_attribute_spec (name);
 
+  if (!spec)
+    /* Unknown attribute.  */
+    return false;
+
   if (is_attribute_p ("aligned", name)
       && args
       && value_dependent_expression_p (TREE_VALUE (args)))
diff --git a/gcc/testsuite/g++.dg/ext/tmplattr6.C b/gcc/testsuite/g++.dg/ext/tmplattr6.C
new file mode 100644 (file)
index 0000000..17f23fe
--- /dev/null
@@ -0,0 +1,12 @@
+// Don't crash on an unknown attribute.
+
+struct foo {
+  template <class T>
+  void __attribute__((leafify)) bar() {} // { dg-warning "ignored" }
+};
+
+void bar(void)
+{
+  foo f;
+  f.bar<int>();
+}