]> granicus.if.org Git - clang/commitdiff
Parse: Don't let BalancedDelimiterTracker consume cxx_defaultarg_end
authorDavid Majnemer <david.majnemer@gmail.com>
Mon, 12 Jan 2015 03:14:18 +0000 (03:14 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Mon, 12 Jan 2015 03:14:18 +0000 (03:14 +0000)
It is not correct to let it consume the cxx_defaultarg_end token.  I'm
starting to wonder if it makes more sense to stop SkipUntil from
consuming such tokens.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@225615 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Parse/Parser.cpp
test/Parser/cxx0x-lambda-expressions.cpp

index 7ccd2092a2d764faf71c3c18979d60b271b03187..c9243d64880c239543ee68b0cae07a4ae13d6252 100644 (file)
@@ -1948,7 +1948,7 @@ bool BalancedDelimiterTracker::diagnoseMissingClose() {
   // token.
   if (P.Tok.isNot(tok::r_paren) && P.Tok.isNot(tok::r_brace) &&
       P.Tok.isNot(tok::r_square) &&
-      P.SkipUntil(Close, FinalToken,
+      P.SkipUntil(Close, FinalToken, tok::cxx_defaultarg_end,
                   Parser::StopAtSemi | Parser::StopBeforeMatch) &&
       P.Tok.is(Close))
     LClose = P.ConsumeAnyToken();
index e1be75686ad0bf2eb19127861f471ad801fe138c..6f69d8096e225ea20db54d3b59a37f107aa16081 100644 (file)
@@ -103,3 +103,8 @@ struct S {
   template <typename T>
   void m (T x =[0); // expected-error{{expected variable name or 'this' in lambda capture list}}
 } s;
+
+struct U {
+  template <typename T>
+  void m_fn1(T x = 0[0); // expected-error{{expected ']'}} expected-note{{to match this '['}}
+} *U;