Skip to content

Commit 68ec09b

Browse files
committed
[Parser] Check for postfix operator in import paths
Add diagnostic and remove operator from path Fixes rdar://87159294
1 parent 2b5857b commit 68ec09b

File tree

4 files changed

+9
-0
lines changed

4 files changed

+9
-0
lines changed

include/swift/AST/DiagnosticsParse.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1616,6 +1616,8 @@ ERROR(attr_private_import_expected_sourcefile_name,none,
16161616
"expected a source file name in @_private(sourceFile:)", ())
16171617
ERROR(attr_private_import_expected_colon,none,
16181618
"expected ':' after @_private(sourceFile", ())
1619+
ERROR(operator_in_import_path,none,
1620+
"Cannot include postfix operator in import declaration.",())
16191621

16201622
// opened
16211623
ERROR(opened_attribute_expected_lparen,none,

lib/Parse/ParseDecl.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4873,6 +4873,11 @@ ParserResult<ImportDecl> Parser::parseDeclImport(ParseDeclOptions Flags,
48734873
/*diagnoseDollarPrefix=*/false,
48744874
diag::expected_identifier_in_decl, "import"))
48754875
return nullptr;
4876+
if (Tok.is(tok::oper_postfix)) {
4877+
diagnose(Tok, diag::operator_in_import_path)
4878+
.fixItRemove(Tok.getLoc());
4879+
return nullptr;
4880+
}
48764881
HasNext = consumeIf(tok::period);
48774882
} while (HasNext);
48784883

lib/Parse/Parser.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -951,6 +951,7 @@ bool Parser::parseAnyIdentifier(Identifier &Result, SourceLoc &Loc,
951951
return false;
952952
}
953953

954+
954955
// When we know we're supposed to get an identifier or operator, map the
955956
// postfix '!' to an operator name.
956957
if (Tok.is(tok::exclaim_postfix)) {

test/decl/import/import.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ import func Swift.min
4949

5050
import var x // expected-error {{expected module name}}
5151
import struct Swift.nonexistent // expected-error {{struct 'nonexistent' does not exist in module 'Swift'}}
52+
import func SwiftUI.Text.++ // expected-error{{Cannot include postfix operator in import declaration.}}{{25-28=}}
5253

5354
import Swift.import.abc // expected-error {{expected identifier in import declaration}}
5455
// expected-error @-1 {{keyword 'import' cannot be used as an identifier here}}

0 commit comments

Comments
 (0)