diff --git a/lib/Sema/CSOptimizer.cpp b/lib/Sema/CSOptimizer.cpp index ddf2c81cb8348..f40c481f831a7 100644 --- a/lib/Sema/CSOptimizer.cpp +++ b/lib/Sema/CSOptimizer.cpp @@ -1316,27 +1316,20 @@ static void determineBestChoicesInContext( return 0.3; } - auto &ctx = cs.getASTContext(); - // Check if the other side conforms to `ExpressibleByArrayLiteral` // protocol (in some way). We want an overly optimistic result // here to avoid under-favoring. if (candidateType->isArray() && - checkConformanceWithoutContext( - paramType, - ctx.getProtocol(KnownProtocolKind::ExpressibleByArrayLiteral), - /*allowMissing=*/true)) + TypeChecker::conformsToKnownProtocol( + paramType, KnownProtocolKind::ExpressibleByArrayLiteral)) return 0.3; // Check if the other side conforms to // `ExpressibleByDictionaryLiteral` protocol (in some way). // We want an overly optimistic result here to avoid under-favoring. if (candidateType->isDictionary() && - checkConformanceWithoutContext( - paramType, - ctx.getProtocol( - KnownProtocolKind::ExpressibleByDictionaryLiteral), - /*allowMissing=*/true)) + TypeChecker::conformsToKnownProtocol( + paramType, KnownProtocolKind::ExpressibleByDictionaryLiteral)) return 0.3; } diff --git a/validation-test/Sema/type_checker_perf/fast/array_literals_with_custom_types.swift.gyb b/validation-test/Sema/type_checker_perf/fast/array_literals_with_custom_types.swift.gyb new file mode 100644 index 0000000000000..5f64d9441ca86 --- /dev/null +++ b/validation-test/Sema/type_checker_perf/fast/array_literals_with_custom_types.swift.gyb @@ -0,0 +1,16 @@ +// RUN: %scale-test --begin 1 --end 15 --step 1 --select NumLeafScopes %s +// REQUIRES: asserts,no_asan + +struct MyIntValue: ExpressibleByArrayLiteral { + init(arrayLiteral: Int...) {} +} + +func +(x: MyIntValue, y: MyIntValue) -> MyIntValue { [] } +func +(x: MyIntValue, y: Int) -> MyIntValue { [] } + +func test(y: Int) { +%for i in range(0, N): + [1] + y + +%end + [1] + y +}