File tree Expand file tree Collapse file tree 2 files changed +18
-1
lines changed Expand file tree Collapse file tree 2 files changed +18
-1
lines changed Original file line number Diff line number Diff line change @@ -230,7 +230,22 @@ class Parser {
230
230
// Cut off parsing by acting as if we reached the end-of-file.
231
231
Tok.setKind (tok::eof);
232
232
}
233
-
233
+
234
+ // / Use this to assert that the parser has advanced the lexing location, e.g.
235
+ // / before a specific parser function has returned.
236
+ class AssertParserMadeProgressBeforeLeavingScopeRAII {
237
+ Parser &P;
238
+ SourceLoc InitialLoc;
239
+ public:
240
+ AssertParserMadeProgressBeforeLeavingScopeRAII (Parser &parser) : P(parser) {
241
+ InitialLoc = P.Tok .getLoc ();
242
+ }
243
+ ~AssertParserMadeProgressBeforeLeavingScopeRAII () {
244
+ assert (InitialLoc != P.Tok .getLoc () &&
245
+ " parser did not make progress, this can result in infinite loop" );
246
+ }
247
+ };
248
+
234
249
// / A RAII object for temporarily changing CurDeclContext.
235
250
class ContextChange {
236
251
protected:
Original file line number Diff line number Diff line change @@ -568,6 +568,8 @@ static ParserResult<Stmt> recoverFromInvalidCase(Parser &P) {
568
568
}
569
569
570
570
ParserResult<Stmt> Parser::parseStmt () {
571
+ AssertParserMadeProgressBeforeLeavingScopeRAII apmp (*this );
572
+
571
573
SyntaxParsingContext LocalContext (SyntaxContext, SyntaxContextKind::Stmt);
572
574
573
575
// Note that we're parsing a statement.
You can’t perform that action at this time.
0 commit comments