[cfe-commits] r110436 - in /cfe/trunk: include/clang/Basic/TokenKinds.def lib/Parse/ParseCXXInlineMethods.cpp lib/Parse/ParseDecl.cpp test/Parser/cxx-default-args.cpp
kyrtzidis at apple.com
Fri Aug 6 13:22:29 PDT 2010
On Aug 6, 2010, at 8:58 PM, Douglas Gregor wrote:
> On Aug 6, 2010, at 9:02 PM, Argyrios Kyrtzidis wrote:
>> On Aug 6, 2010, at 4:41 PM, Ted Kremenek wrote:
>>> On Aug 6, 2010, at 3:13 AM, Douglas Gregor <dgregor at apple.com> wrote:
>>>>> + assert(Tok.is(tok::cxx_defaultarg_end) &&
>>>>> + "We didn't parse the whole default arg!");
>>>>> + ConsumeToken(); // Consume tok::cxx_defaultarg_end.
>>>> How about we SkipUntil the tok::cxx_defaultarg_end, and give an error if it's not the next token? That way, if expression parsing doesn't use up all of the tokens, we'll give a reasonable diagnostic rather than asserting.
>>> +1. Assertions for cases that might trigger on invalid code are highly undesirable. I'm not certain if that is the case here, but it looks like it to me.
>> It won't be triggered on invalid code, it's supposed to be triggered when clang left tokens while no errors occured.
> I don't agree. The parsing code before this calls ParseAssignmentExpression(). It's entirely possible that something could go wrong in parsing such an expression that causes extra tokens to be left in the token stream.
Yes, and the assertion would catch that something instead of ignoring it :-)
Anyway, point taken, I'll remove the assertion.
> We should consume all of the tokens up to and including the tok::cxx_defaultarg_end so that we know that the parser is in a perfect state once we've finished parsing the default argument.
> - Doug
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the cfe-commits