When processing a template, the enumerators we build don't have a type
yet. But is_late_template_attribute is not prepared to see a _DECL
without a type, so we crash on
enum tree_code code = TREE_CODE (type);
(I found that we don't give the "is deprecated" warning for the enumerator
'f' in the test. Reported as PR104682.)
PR c++/104667
gcc/cp/ChangeLog:
* decl2.cc (is_late_template_attribute): Cope with a decl without
a type.
gcc/testsuite/ChangeLog:
* g++.dg/ext/attrib64.C: New test.
{
tree type = TYPE_P (decl) ? decl : TREE_TYPE (decl);
+ if (!type)
+ return true;
+
/* We can't apply any attributes to a completely unknown type until
instantiation time. */
enum tree_code code = TREE_CODE (type);
--- /dev/null
+// PR c++/104667
+// { dg-do compile }
+
+template<typename> struct A {
+ enum E { // { dg-warning "only applies to function types" }
+ e __attribute__ ((access(read_only))),
+ f __attribute__ ((deprecated))
+ };
+};
+
+A<int> a;