Skip to content

Commit d05a748

Browse files
authored
Merge pull request swiftlang#24850 from nkcsgexi/syntax-tree-with-condition
Parser: avoid skipping inactive code if we are building syntax trees.
2 parents 7963529 + f25925f commit d05a748

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

lib/Parse/ParseIfConfig.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "swift/Parse/Parser.h"
1818

1919
#include "swift/AST/ASTVisitor.h"
20+
#include "swift/AST/DiagnosticSuppression.h"
2021
#include "swift/Basic/Defer.h"
2122
#include "swift/Basic/LangOptions.h"
2223
#include "swift/Basic/Version.h"
@@ -638,6 +639,12 @@ ParserResult<IfConfigDecl> Parser::parseIfConfig(
638639
SmallVector<ASTNode, 16> Elements;
639640
if (isActive || !isVersionCondition) {
640641
parseElements(Elements, isActive);
642+
} else if (SyntaxContext->isEnabled()) {
643+
// We shouldn't skip code if we are building syntax tree.
644+
// The parser will keep running and we just discard the AST part.
645+
DiagnosticSuppression suppression(Context.Diags);
646+
SmallVector<ASTNode, 16> dropedElements;
647+
parseElements(dropedElements, false);
641648
} else {
642649
DiagnosticTransaction DT(Diags);
643650
skipUntilConditionalBlockClose();

test/Syntax/diagnostics_verify.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,10 @@ class { // expected-error {{unknown declaration syntax exists in the source}}
1919
// expected-error@-4 {{top-level statement cannot begin with a closure expression}}
2020

2121
}
22+
23+
#if swift(<1)
24+
print("Wat")
25+
class { // expected-error {{unknown declaration syntax exists in the source}}
26+
27+
}
28+
#endif

0 commit comments

Comments
 (0)