Skip to content

Commit 87cf549

Browse files
authored
Merge pull request #23363 from akyrtzi/fix-parser-infinite-loop
[parser] Fix infinite loop with erroneously placed attribute at statement level
2 parents f90b782 + adfd09d commit 87cf549

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

lib/Parse/ParseStmt.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -601,6 +601,11 @@ ParserResult<Stmt> Parser::parseStmt() {
601601
LLVM_FALLTHROUGH;
602602
default:
603603
diagnose(Tok, tryLoc.isValid() ? diag::expected_expr : diag::expected_stmt);
604+
if (Tok.is(tok::at_sign)) {
605+
// Recover from erroneously placed attribute.
606+
consumeToken(tok::at_sign);
607+
consumeIf(tok::identifier);
608+
}
604609
return nullptr;
605610
case tok::kw_return:
606611
if (LabelInfo) diagnose(LabelInfo.Loc, diag::invalid_label_on_stmt);

test/Parse/fixed_infinite_loops.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// RUN: %target-swift-frontend -parse -verify %s
2+
3+
func test1() {
4+
@s // expected-error {{expected statement}}
5+
return
6+
}
7+
func test2() {
8+
@unknown // expected-error {{expected statement}}
9+
return
10+
}

0 commit comments

Comments
 (0)