diff --git a/lib/Sema/PreCheckTarget.cpp b/lib/Sema/PreCheckTarget.cpp index f3cbbb2445a..e565ec8e797 100644 --- a/lib/Sema/PreCheckTarget.cpp +++ b/lib/Sema/PreCheckTarget.cpp @@ -2531,11 +2531,11 @@ void PreCheckTarget::resolveKeyPathExpr(KeyPathExpr *KPE) { (void)outermostExpr; assert(OEE == outermostExpr); expr = OEE->getSubExpr(); - } else if (auto AE = dyn_cast(expr)) { + } else if (auto CE = dyn_cast(expr)) { // foo(), foo(val value: Int) or unapplied foo components.push_back(KeyPathExpr::Component::forUnresolvedApply( - getASTContext(), AE->getArgs())); - expr = AE->getFn(); + getASTContext(), CE->getArgs())); + expr = CE->getFn(); } else { if (emitErrors) { // \() may be an attempt to write a string interpolation outside diff --git a/test/StringProcessing/Parse/forward-slash-regex.swift b/test/StringProcessing/Parse/forward-slash-regex.swift index ede49b43b17..76d72ad181a 100644 --- a/test/StringProcessing/Parse/forward-slash-regex.swift +++ b/test/StringProcessing/Parse/forward-slash-regex.swift @@ -407,7 +407,6 @@ _ = /\()/ // expected-error@-1 {{'/' is not a prefix unary operator}} // expected-error@-2 {{'/' is not a postfix unary operator}} // expected-error@-3 {{invalid component of Swift key path}} -// expected-error@-4 {{type of expression is ambiguous without a type annotation}} do { let _: Regex = (/whatever\)/ diff --git a/test/expr/unary/keypath/keypath-unsupported-methods.swift b/test/expr/unary/keypath/keypath-unsupported-methods.swift index 07d6b9aa4ff..788e612acef 100644 --- a/test/expr/unary/keypath/keypath-unsupported-methods.swift +++ b/test/expr/unary/keypath/keypath-unsupported-methods.swift @@ -46,3 +46,16 @@ func f_56996() { _ = \Int.byteSwapped.signum() // expected-error {{key path cannot refer to instance method 'signum()'}} _ = \Int.byteSwapped.init() // expected-error {{key path cannot refer to initializer 'init()'}} } + +postfix operator ^ +postfix func ^ (_ x: T) -> T { x } + +func unsupportedOperator() { + struct S { + var x: Int + } + _ = \.^ // expected-error {{invalid component of Swift key path}} + _ = \S^ // expected-error {{invalid component of Swift key path}} + _ = \S.x^ // expected-error {{invalid component of Swift key path}} + _ = \.x^ // expected-error {{invalid component of Swift key path}} +} diff --git a/validation-test/compiler_crashers_2_fixed/4c7611b7d95a1fb.swift b/validation-test/compiler_crashers_2_fixed/4c7611b7d95a1fb.swift new file mode 100644 index 00000000000..cd3beac6665 --- /dev/null +++ b/validation-test/compiler_crashers_2_fixed/4c7611b7d95a1fb.swift @@ -0,0 +1,3 @@ +// {"signature":"(anonymous namespace)::ConstraintWalker::walkToExprPost(swift::Expr*)"} +// RUN: not %target-swift-frontend -typecheck %s +\.+=