On Wed, 16 Oct 2013, Marek Polacek wrote:

> @@ -2946,7 +2957,8 @@ c_parser_declarator (c_parser *parser, b
>        struct c_declspecs *quals_attrs = build_null_declspecs ();
>        struct c_declarator *inner;
>        c_parser_consume_token (parser);
> -      c_parser_declspecs (parser, quals_attrs, false, false, true, 
> cla_prefer_id);
> +      c_parser_declspecs (parser, quals_attrs, false, false, true,
> +                       true, cla_prefer_id);
>        inner = c_parser_declarator (parser, type_seen_p, kind, seen_id);
>        if (inner == NULL)
>       return NULL;

Looking at this again, shouldn't the new argument be "false" (with 
associated testcase)?  This is parsing pointer declarators, and _Alignas 
isn't allowed there any more than it is in array declarators....

> @@ -3715,7 +3730,8 @@ c_parser_type_name (c_parser *parser)
>    struct c_declarator *declarator;
>    struct c_type_name *ret;
>    bool dummy = false;
> -  c_parser_declspecs (parser, specs, false, true, true, cla_prefer_type);
> +  c_parser_declspecs (parser, specs, false, true, true, false,
> +                   cla_prefer_type);
>    if (!specs->declspecs_seen_p)
>      {
>        c_parser_error (parser, "expected specifier-qualifier-list");

And this should get a testcase added, that _Alignas is correctly rejected 
in type names where previously it would have been wrongly accepted.

(Strictly by the standard it should be "false" in 
c_parser_struct_declaration as well - the syntax there doesn't allow 
_Alignas - but it appears to have been intended to allow it there, so 
probably best not to change anything there until WG14 reaches a conclusion 
on the issues I raised in N1731.)

-- 
Joseph S. Myers
jos...@codesourcery.com

Reply via email to