Skip to content

Commit c8dd6a9

Browse files
committed
Parser: avoid skipping inactive code if we are building syntax trees.
If syntax trees are requested, we shouldn't skip inactive code. Notice the inactive code won't be skipped in SwiftSyntax because we always set PerformConditionEvaluation false for the in-process parser. This is mostly needed for testing purposes where we add -verify-syntax-tree to regular compiler invocations. rdar://50837165
1 parent a579af3 commit c8dd6a9

File tree

2 files changed

+9
-0
lines changed

2 files changed

+9
-0
lines changed

lib/Parse/ParseIfConfig.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,11 @@ ParserResult<IfConfigDecl> Parser::parseIfConfig(
638638
SmallVector<ASTNode, 16> Elements;
639639
if (isActive || !isVersionCondition) {
640640
parseElements(Elements, isActive);
641+
} else if (SyntaxContext->isEnabled()) {
642+
// We shouldn't skip code if we are building syntax tree.
643+
// The parser will keep running and we just discard the AST part.
644+
SmallVector<ASTNode, 16> dropedElements;
645+
parseElements(dropedElements, false);
641646
} else {
642647
DiagnosticTransaction DT(Diags);
643648
skipUntilConditionalBlockClose();

test/Syntax/diagnostics_verify.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,7 @@ 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+
#endif

0 commit comments

Comments
 (0)