diff --git a/lib/Sema/CSSimplify.cpp b/lib/Sema/CSSimplify.cpp index b22bee0497543..6d3fca2da493a 100644 --- a/lib/Sema/CSSimplify.cpp +++ b/lib/Sema/CSSimplify.cpp @@ -1505,19 +1505,17 @@ ConstraintSystem::TypeMatchResult constraints::matchCallArguments( } } if (!argument.isCompileTimeConst() && param.isCompileTimeConst()) { - if (cs.shouldAttemptFixes()) { - auto *locator = cs.getConstraintLocator(loc); - SourceRange range; - // simplify locator so the anchor is the exact argument. - locator = simplifyLocator(cs, locator, range); - if (locator->getPath().empty() && - locator->getAnchor().isExpr(ExprKind::UnresolvedMemberChainResult)) { - locator = - cs.getConstraintLocator(cast( - locator->getAnchor().get())->getChainBase()); - } - cs.recordFix(NotCompileTimeConst::create(cs, paramTy, locator)); + auto *locator = cs.getConstraintLocator(loc); + SourceRange range; + // simplify locator so the anchor is the exact argument. + locator = simplifyLocator(cs, locator, range); + if (locator->getPath().empty() && + locator->getAnchor().isExpr(ExprKind::UnresolvedMemberChainResult)) { + locator = + cs.getConstraintLocator(cast( + locator->getAnchor().get())->getChainBase()); } + cs.recordFix(NotCompileTimeConst::create(cs, paramTy, locator)); } cs.addConstraint( diff --git a/test/Sema/const_in_property_wrapper.swift b/test/Sema/const_in_property_wrapper.swift new file mode 100644 index 0000000000000..a7889c3fe2790 --- /dev/null +++ b/test/Sema/const_in_property_wrapper.swift @@ -0,0 +1,50 @@ +// RUN: %target-typecheck-verify-swift + +enum Colors { + case blue + case red +} + +let globalString = "" +let globalInt = 2 +let globalColor = Colors.blue + +func giveMeBlue() -> Colors { + return .blue +} + +@propertyWrapper struct Wrapper { + let key: String + var wrappedValue: Value? { get { return nil } set { } } + init(_ key: _const String) {self.key = key } + init(_ key: _const Int) {self.key = "" } + init(_ key: _const Colors) { self.key = ""} +} + +struct WrapperAdopters { + @Wrapper(3) + var wrappedVar_correct_1 + + @Wrapper("") + var wrappedVar_correct_2 + + @Wrapper(.blue) + var wrappedVar_correct_3 + + @Wrapper(Colors.blue) + var wrappedVar_correct_4 +} + +struct WrapperAdopters_incorrect { + @Wrapper(globalInt) // expected-error{{expect a compile-time constant literal}} + var wrappedVar_incorrect_1 + + @Wrapper(globalString) // expected-error{{expect a compile-time constant literal}} + var wrappedVar_incorrect_2 + + @Wrapper(globalColor) // expected-error{{expect a compile-time constant literal}} + var wrappedVar_incorrect_3 + + @Wrapper(giveMeBlue()) // expected-error{{expect a compile-time constant literal}} + var wrappedVar_incorrect_4 +}