@@ -240,6 +240,7 @@ int Wtransparent_union = 0;
int Wtypesign = 0;
int Wundef = 0;
int Wuninitialized = 1;
+int Wunknown_attribute = 1;
int Wvla = 1;
int dbg_entry = 0;
@@ -463,6 +464,7 @@ static const struct warning {
{ "typesign", &Wtypesign },
{ "undef", &Wundef },
{ "uninitialized", &Wuninitialized },
+ { "unknown-attribute", &Wunknown_attribute },
{ "vla", &Wvla },
};
@@ -126,6 +126,7 @@ extern int Wtransparent_union;
extern int Wtypesign;
extern int Wundef;
extern int Wuninitialized;
+extern int Wunknown_attribute;
extern int Wvla;
extern int dbg_entry;
@@ -1230,7 +1230,8 @@ static struct token *recover_unknown_attribute(struct token *token)
{
struct expression *expr = NULL;
- warning(token->pos, "attribute '%s': unknown attribute", show_ident(token->ident));
+ if (Wunknown_attribute)
+ warning(token->pos, "attribute '%s': unknown attribute", show_ident(token->ident));
token = token->next;
if (match_op(token, '('))
token = parens_expression(token, &expr, "in attribute");
new file mode 100644
@@ -0,0 +1,9 @@
+static int foo(void) __attribute__((unknown_attribute));
+
+/*
+ * check-name: warn-unknown-attribute
+ *
+ * check-error-start
+Wunknown-attribute-def.c:1:37: warning: attribute 'unknown_attribute': unknown attribute
+ * check-error-end
+ */
new file mode 100644
@@ -0,0 +1,9 @@
+static int foo(void) __attribute__((unknown_attribute));
+
+/*
+ * check-name: warn-unknown-attribute-no
+ * check-command: sparse -Wno-unknown-attribute $file
+ *
+ * check-error-start
+ * check-error-end
+ */
new file mode 100644
@@ -0,0 +1,10 @@
+static int foo(void) __attribute__((unknown_attribute));
+
+/*
+ * check-name: warn-unknown-attribute-yes
+ * check-command: sparse -Wunknown-attribute $file
+ *
+ * check-error-start
+Wunknown-attribute-yes.c:1:37: warning: attribute 'unknown_attribute': unknown attribute
+ * check-error-end
+ */
So, we can choose if we're interested by those warnings or not. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com> --- lib.c | 2 ++ lib.h | 1 + parse.c | 3 ++- validation/Wunknown-attribute-def.c | 9 +++++++++ validation/Wunknown-attribute-no.c | 9 +++++++++ validation/Wunknown-attribute-yes.c | 10 ++++++++++ 6 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 validation/Wunknown-attribute-def.c create mode 100644 validation/Wunknown-attribute-no.c create mode 100644 validation/Wunknown-attribute-yes.c