summaryrefslogtreecommitdiffstats
path: root/clang/lib/Parse/Parser.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2013-10-15 01:34:54 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2013-10-15 01:34:54 +0000
commitc2c8bb82096bc938d776557c037cb874de695f80 (patch)
tree8a958628fb0c1a83e8718f411898b66649f52bc0 /clang/lib/Parse/Parser.cpp
parentec67c90216220daa8e99de11dd4437e8a954d153 (diff)
downloadbcm5719-llvm-c2c8bb82096bc938d776557c037cb874de695f80.tar.gz
bcm5719-llvm-c2c8bb82096bc938d776557c037cb874de695f80.zip
Tidy up and improve error recovery for C++11 attributes in bad places. Based on
a patch by Michael Han. llvm-svn: 192666
Diffstat (limited to 'clang/lib/Parse/Parser.cpp')
-rw-r--r--clang/lib/Parse/Parser.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp
index 378a239744f..f0a3d9190c3 100644
--- a/clang/lib/Parse/Parser.cpp
+++ b/clang/lib/Parse/Parser.cpp
@@ -1958,12 +1958,18 @@ bool BalancedDelimiterTracker::diagnoseMissingClose() {
}
P.Diag(P.Tok, DID);
P.Diag(LOpen, diag::note_matching) << LHSName;
- if (P.SkipUntil(Close, FinalToken, /*StopAtSemi*/ true, /*DontConsume*/ true)
- && P.Tok.is(Close))
+
+ // If we're not already at some kind of closing bracket, skip to our closing
+ // token.
+ if (P.Tok.isNot(tok::r_paren) && P.Tok.isNot(tok::r_brace) &&
+ P.Tok.isNot(tok::r_square) &&
+ P.SkipUntil(Close, FinalToken, /*StopAtSemi*/true, /*DontConsume*/true) &&
+ P.Tok.is(Close))
LClose = P.ConsumeAnyToken();
return true;
}
void BalancedDelimiterTracker::skipToEnd() {
- P.SkipUntil(Close, false);
+ P.SkipUntil(Close, false, true);
+ consumeClose();
}
OpenPOWER on IntegriCloud