[C++ Patch] PR 51908

Jason Merrill jason@redhat.com
Wed Jun 5 13:20:00 GMT 2013


On 06/05/2013 09:07 AM, Paolo Carlini wrote:
> Hi,
>
> On 06/05/2013 02:53 PM, Jason Merrill wrote:
>> On 06/04/2013 08:34 PM, Paolo Carlini wrote:
>>>         /* After seeing a decl-specifier-seq, if the next token is not a
>>> -     "(", there is no possibility that the code is a valid
>>> +     "(" nor '...', there is no possibility that the code is a valid
>>>        expression.  Therefore, if parsing tentatively, we commit at
>>>        this point.  */
>>>
>>> clearly in the case at issue of decl-specifier-seq followed by ellipsis
>>> we may be parsing a perfectly valid declaration.
>>
>> Yes, but not an expression, which is why we are committing there: we
>> know it *has* to be a declaration.
> I see, I didn't notice the reference to *expressions* in the comment.
>>   The non-variadic case should hit that commit, so your change doesn't
>> seem to make the variadic case more consistent.
> But the non-variadic case does *not* hit the commit, because is handled
> above:
>
>    /* If the next token is a `)', `,', `=', `>', or `...', then there
>       is no declarator. However, when variadic templates are enabled,
>       there may be a declarator following `...'.  */
>    if (token->type == CPP_CLOSE_PAREN
>        || token->type == CPP_COMMA
>        || token->type == CPP_EQ
>        || token->type == CPP_GREATER)
>      {
>        declarator = NULL;
>        if (parenthesized_p)
>      *parenthesized_p = false;
>      }
>
> Thus it seems to me that the variadic case should also somehow not-hit
> the commit, do you agree?

Well, the comment here is correct: (Args... args) would also be 
well-formed.  But in the testcase there isn't a declarator, so the 
comment following the above, "Otherwise, there should be a declarator", 
is wrong.  I guess the above should also check for ... followed by one 
of those tokens.

In any case, the commit doesn't seem like the problem.  I'm not sure why 
it's in the else block rather than before the if.

Jason



More information about the Gcc-patches mailing list