From a3aef35d54318ba6d13fa1336bd8d0e97c5bc6a3 Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Mon, 12 Jan 2015 03:14:18 +0000 Subject: [PATCH] Parse: Don't let BalancedDelimiterTracker consume cxx_defaultarg_end 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. llvm-svn: 225615 --- clang/lib/Parse/Parser.cpp | 2 +- clang/test/Parser/cxx0x-lambda-expressions.cpp | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp index 7ccd2092a2d7..c9243d64880c 100644 --- a/clang/lib/Parse/Parser.cpp +++ b/clang/lib/Parse/Parser.cpp @@ -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(); diff --git a/clang/test/Parser/cxx0x-lambda-expressions.cpp b/clang/test/Parser/cxx0x-lambda-expressions.cpp index e1be75686ad0..6f69d8096e22 100644 --- a/clang/test/Parser/cxx0x-lambda-expressions.cpp +++ b/clang/test/Parser/cxx0x-lambda-expressions.cpp @@ -103,3 +103,8 @@ struct S { template void m (T x =[0); // expected-error{{expected variable name or 'this' in lambda capture list}} } s; + +struct U { + template + void m_fn1(T x = 0[0); // expected-error{{expected ']'}} expected-note{{to match this '['}} +} *U;