diff options
author | David Majnemer <david.majnemer@gmail.com> | 2015-01-12 03:14:18 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2015-01-12 03:14:18 +0000 |
commit | a3aef35d54318ba6d13fa1336bd8d0e97c5bc6a3 (patch) | |
tree | 1c8faa6d46fde81bd8f679056b661a7973f61bd4 | |
parent | 3661a82ef683aeda82f441627fed2895804bcc0c (diff) | |
download | bcm5719-llvm-a3aef35d54318ba6d13fa1336bd8d0e97c5bc6a3.tar.gz bcm5719-llvm-a3aef35d54318ba6d13fa1336bd8d0e97c5bc6a3.zip |
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
-rw-r--r-- | clang/lib/Parse/Parser.cpp | 2 | ||||
-rw-r--r-- | clang/test/Parser/cxx0x-lambda-expressions.cpp | 5 |
2 files changed, 6 insertions, 1 deletions
diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp index 7ccd2092a2d..c9243d64880 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 e1be75686ad..6f69d8096e2 100644 --- a/clang/test/Parser/cxx0x-lambda-expressions.cpp +++ b/clang/test/Parser/cxx0x-lambda-expressions.cpp @@ -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; |