diff --git a/src/kernel_internals/parsing/cparser.mly b/src/kernel_internals/parsing/cparser.mly index 7da75c2c4a11cc2ee4e1c1d97e3be8f2341c9254..29da754e5d2dcedfd17436d73e428c2f74a49467 100644 --- a/src/kernel_internals/parsing/cparser.mly +++ b/src/kernel_internals/parsing/cparser.mly @@ -1035,9 +1035,22 @@ declaration: /* ISO 6.7.*/ init_declarator_list: /* ISO 6.7 */ init_declarator { [$1] } -| init_declarator COMMA init_declarator_list { $1 :: $3 } +| init_declarator COMMA init_declarator_attr_list { $1 :: $3 } ; + +init_declarator_attr_list: + init_declarator_attr { [ $1 ] } +| init_declarator_attr COMMA init_declarator_attr_list { $1 :: $3 } +; + +init_declarator_attr: + attribute_nocv_list init_declarator { + let ((name, decl, attrs, loc), init) = $2 in + ((name, PARENTYPE ($1,decl,[]), attrs, loc), init) + } +; + init_declarator: /* ISO 6.7 */ declarator { ($1, NO_INIT) } | declarator EQ init_expression diff --git a/tests/syntax/attributes-declarations-definitions.c b/tests/syntax/attributes-declarations-definitions.c index f090ff912c4773b6d1d3d96dba6be6f682f2c7fd..82a097052500564c5c727a77eca45e7fba8e9a4d 100644 --- a/tests/syntax/attributes-declarations-definitions.c +++ b/tests/syntax/attributes-declarations-definitions.c @@ -41,3 +41,7 @@ iptr h(volatile iptr ip2) { } iptr volatile h(const iptr ip3); + +void test(void) { + int a, __attribute__((unused)) b; +} diff --git a/tests/syntax/oracle/attributes-declarations-definitions.res.oracle b/tests/syntax/oracle/attributes-declarations-definitions.res.oracle index 89fcae3ec667358c1ce4539fc167e80b92007777..57fdf7c199509f4598052b6bda6914f92e5934f4 100644 --- a/tests/syntax/oracle/attributes-declarations-definitions.res.oracle +++ b/tests/syntax/oracle/attributes-declarations-definitions.res.oracle @@ -42,4 +42,11 @@ iptr h(iptr volatile ip3) return __retres; } +void test(void) +{ + int a; + int b __attribute__((__unused__)); + return; +} +