@@ -7516,9 +7516,9 @@ Not all targets support this attribute.
@item unused
@cindex @code{unused} variable attribute
-This attribute, attached to a variable, means that the variable is meant
-to be possibly unused. GCC does not produce a warning for this
-variable.
+This attribute, attached to a variable or structure field, means that
+the variable or field is meant to be possibly unused. GCC does not
+produce a warning for this variable or field.
@item used
@cindex @code{used} variable attribute
@@ -1568,6 +1568,7 @@ handle_unused_attribute (tree *node, tree name, tree ARG_UNUSED (args),
|| VAR_OR_FUNCTION_DECL_P (decl)
|| TREE_CODE (decl) == LABEL_DECL
|| TREE_CODE (decl) == CONST_DECL
+ || TREE_CODE (decl) == FIELD_DECL
|| TREE_CODE (decl) == TYPE_DECL)
{
TREE_USED (decl) = 1;
new file mode 100644
@@ -0,0 +1,17 @@
+/* [dcl.attr.unused] The attribute may be applied to the declaration of a
+ class, a typedef-name, a variable (including a structured binding
+ declaration), a non-static data member, a function, an enumeration, or an
+ enumerator. */
+// { dg-do compile { target c++11 } }
+// { dg-additional-options "-Wunused -Wextra" }
+
+class [[maybe_unused]] Test {
+ [[maybe_unused]] int a_;
+ void b() {};
+};
+
+[[maybe_unused]] typedef Test Test2;
+
+[[maybe_unused]] int i;
+[[maybe_unused]] void f();
+enum [[maybe_unused]] E { e [[maybe_unused]] = 42 };
@@ -3,5 +3,5 @@
template<typename T> struct A
{
- T a, __attribute((unused)) b; // { dg-warning "attribute ignored" }
+ T a, __attribute((unused)) b;
};