Skip to content

Commit 87081c0

Browse files
authored
Merge pull request #79187 from amritpan/int-static
[SILGen] Fix substitutions and descriptors for static keypaths with base types that conform to protocols.
2 parents dce3462 + 1c025f5 commit 87081c0

File tree

11 files changed

+77
-7
lines changed

11 files changed

+77
-7
lines changed

lib/SIL/IR/SIL.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -371,9 +371,9 @@ bool AbstractStorageDecl::exportsPropertyDescriptor() const {
371371
if (isa<ProtocolDecl>(getDeclContext()))
372372
return false;
373373

374-
// Static properties in protocol extensions do not need
374+
// Static properties declared directly in protocol do not need
375375
// descriptors as existential Any.Type will not resolve to a value.
376-
if (isStatic() && getDeclContext()->getSelfProtocolDecl())
376+
if (isStatic() && isa<ProtocolDecl>(getDeclContext()))
377377
return false;
378378

379379
// FIXME: We should support properties and subscripts with '_read' accessors;

lib/SILGen/SILGenExpr.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4286,11 +4286,13 @@ SILGenModule::emitKeyPathComponentForDecl(SILLocation loc,
42864286
// The mapTypeIntoContext() / mapTypeOutOfContext() dance is there
42874287
// to handle the case where baseTy being a type parameter subject
42884288
// to a superclass requirement.
4289-
componentTy = var->getValueInterfaceType().subst(
4290-
GenericEnvironment::mapTypeIntoContext(genericEnv, baseTy)
4291-
->getContextSubstitutionMap(var->getDeclContext()))
4292-
->mapTypeOutOfContext()
4293-
->getCanonicalType();
4289+
componentTy =
4290+
var->getValueInterfaceType()
4291+
.subst(GenericEnvironment::mapTypeIntoContext(
4292+
genericEnv, baseTy->getMetatypeInstanceType())
4293+
->getContextSubstitutionMap(var->getDeclContext()))
4294+
->mapTypeOutOfContext()
4295+
->getCanonicalType();
42944296
}
42954297

42964298
// The component type for an @objc optional requirement needs to be

test/Interpreter/keypath.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,8 @@ print(\Controller.fourthLabel!.isVisible)
150150
print(\S.Type.b)
151151
// CHECK: {{\\Controller\.(fifthLabel|<computed .* \(Optional<MyLabel\.Type>\)>)\?\.<computed .* \(Bool\)>?}}
152152
print(\Controller.fifthLabel?.isVisible)
153+
// CHECK: \Int.Type.<computed {{.*}} (Int)>
154+
print(\Int.Type.zero)
153155

154156

155157
do {

test/Interpreter/static_keypaths.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public let keyPath2FromLibB = \AStruct.Type.property2
4040
public let keyPath3FromLibB = \AStruct.Type.property3
4141
public let keyPath4FromLibB = \AStruct.Type.property4
4242
public var keyPath5FromLibB = \AStruct.Type.property1 // WritableKeyPath with public setter
43+
public var keyPath6FromLibB = \Int.Type.zero
4344

4445
//--- LibC.swift
4546
import LibA
@@ -48,6 +49,8 @@ public let keyPath1FromLibC = \AStruct.Type.property1
4849
public let keyPath2FromLibC = \AStruct.Type.property2
4950
public let keyPath3FromLibC = \AStruct.Type.property3 // Read-only with private setter
5051
public let keyPath4FromLibC = \AStruct.Type.property4
52+
public var keyPath5FromLibC = \Int.Type.zero
53+
public var keyPath6FromLibC = \Int.Type.max
5154

5255
//--- main.swift
5356
import LibB
@@ -65,3 +68,8 @@ print(keyPath3FromLibB != keyPath4FromLibC)
6568

6669
// CHECK: false
6770
print(keyPath5FromLibB == keyPath3FromLibC)
71+
72+
// Check: true
73+
print(keyPath6FromLibB == keyPath5FromLibC)
74+
// Check: false
75+
print(keyPath6FromLibB == keyPath6FromLibC)

test/SILGen/keypaths.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -670,6 +670,8 @@ func test_metatype_keypaths() {
670670
let _: KeyPath<M.Type, N.Type> = \M.Type.[76]
671671
// CHECK: keypath $KeyPath<M, Optional<Int>>, (root $M; gettable_property $Optional<N.Type>, id #M.degrees!getter : (M) -> () -> N.Type?, getter @$s8keypaths1MC7degreesAA1NVmSgvpACTK : $@convention(keypath_accessor_getter) (@in_guaranteed M) -> @out Optional<@thick N.Type>; optional_chain : $N.Type; gettable_property $Int, id @$s8keypaths1NV6kelvinSivgZ : $@convention(method) (@thin N.Type) -> Int, getter @$s8keypaths1NV6kelvinSivpZACmTK : $@convention(keypath_accessor_getter) (@in_guaranteed @thick N.Type) -> @out Int; optional_wrap : $Optional<Int>)
672672
let _: KeyPath<M, Int?> = \.degrees?.kelvin
673+
// CHECK: keypath $KeyPath<Int.Type, Int>, (root $Int.Type; gettable_property $Int, id @$ss18AdditiveArithmeticPss27ExpressibleByIntegerLiteralRzrlE4zeroxvgZ : $@convention(method) <τ_0_0 where τ_0_0 : AdditiveArithmetic, τ_0_0 : ExpressibleByIntegerLiteral> (@thick τ_0_0.Type) -> @out τ_0_0, getter @$ss18AdditiveArithmeticPss27ExpressibleByIntegerLiteralRzrlE4zeroxvpZSimTK : $@convention(keypath_accessor_getter) (@in_guaranteed @thick Int.Type) -> @out Int, external #AdditiveArithmetic.zero<Int>)
674+
let _: KeyPath<Int.Type, Int> = \Int.Type.zero
673675
}
674676

675677

test/abi/macOS/arm64/concurrency.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,9 @@ Added: _$ss15ContinuousClockV7InstantV3nowADvpZMV
369369
Added: _$ss15SuspendingClockV3nowAB7InstantVvpZMV
370370
Added: _$ss15SuspendingClockV7InstantV3nowADvpZMV
371371
Added: _$ss9TaskLocalC18_enclosingInstance7wrapped7storagexs5NeverO_s24ReferenceWritableKeyPathCyAGxGAIyAgByxGGtcipZMV
372+
Added: _$ss11GlobalActorPsE21sharedUnownedExecutorScevpZMV
373+
Added: _$ss5ClockPss010ContinuousA0VRszrlE10continuousADvpZMV
374+
Added: _$ss5ClockPss010SuspendingA0VRszrlE10suspendingADvpZMV
372375

373376
Added: _swift_taskGroup_initializeWithOptions
374377
Added: _swift_task_isCurrentExecutorWithFlags

test/abi/macOS/arm64/regex-builder.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,13 @@ Added: _$s12RegexBuilder6AnchorV19textSegmentBoundaryACvpZMV
4545
Added: _$s12RegexBuilder6AnchorV25endOfSubjectBeforeNewlineACvpZMV
4646
Added: _$s12RegexBuilder6AnchorV30firstMatchingPositionInSubjectACvpZMV
4747
Added: _$s12RegexBuilder6AnchorV9endOfLineACvpZMV
48+
Added: _$s17_StringProcessing14RegexComponentP0C7BuilderAD14CharacterClassVRszrlE10whitespaceAFvpZMV
49+
Added: _$s17_StringProcessing14RegexComponentP0C7BuilderAD14CharacterClassVRszrlE13anyNonNewlineAFvpZMV
50+
Added: _$s17_StringProcessing14RegexComponentP0C7BuilderAD14CharacterClassVRszrlE15newlineSequenceAFvpZMV
51+
Added: _$s17_StringProcessing14RegexComponentP0C7BuilderAD14CharacterClassVRszrlE18anyGraphemeClusterAFvpZMV
52+
Added: _$s17_StringProcessing14RegexComponentP0C7BuilderAD14CharacterClassVRszrlE18verticalWhitespaceAFvpZMV
53+
Added: _$s17_StringProcessing14RegexComponentP0C7BuilderAD14CharacterClassVRszrlE20horizontalWhitespaceAFvpZMV
54+
Added: _$s17_StringProcessing14RegexComponentP0C7BuilderAD14CharacterClassVRszrlE3anyAFvpZMV
55+
Added: _$s17_StringProcessing14RegexComponentP0C7BuilderAD14CharacterClassVRszrlE4wordAFvpZMV
56+
Added: _$s17_StringProcessing14RegexComponentP0C7BuilderAD14CharacterClassVRszrlE5digitAFvpZMV
57+
Added: _$s17_StringProcessing14RegexComponentP0C7BuilderAD14CharacterClassVRszrlE8hexDigitAFvpZMV

test/abi/macOS/arm64/stdlib.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -770,6 +770,21 @@ Added: _$ss7UnicodeO5UTF16O27encodedReplacementCharacters11_UIntBufferVys6UInt16
770770
Added: _$ss7UnicodeO5UTF32O27encodedReplacementCharacters15CollectionOfOneVys6UInt32VGvpZMV
771771
Added: _$sSo19_SwiftStdlibVersionasE6v6_1_0ABvpZMV
772772
Added: _$sSo19_SwiftStdlibVersionasE6v6_2_0ABvpZMV
773+
Added: _$sSBsE5radixSivpZMV
774+
Added: _$sSFsE8ulpOfOnexvpZMV
775+
Added: _$sSUsE8isSignedSbvpZMV
776+
Added: _$sSUss17FixedWidthIntegerRzrlE3maxxvpZMV
777+
Added: _$sSUss17FixedWidthIntegerRzrlE3minxvpZMV
778+
Added: _$sSZsE8isSignedSbvpZMV
779+
Added: _$sSZss17FixedWidthIntegerRzrlE3maxxvpZMV
780+
Added: _$sSZss17FixedWidthIntegerRzrlE3minxvpZMV
781+
Added: _$ss11SIMDStoragePsE11scalarCountSivpZMV
782+
Added: _$ss17FixedWidthIntegerPsE13_highBitIndexxvpZMV
783+
Added: _$ss18AdditiveArithmeticPss27ExpressibleByIntegerLiteralRzrlE4zeroxvpZMV
784+
Added: _$ss4SIMDPsSF6ScalarRpzrlE3onexvpZMV
785+
Added: _$ss4SIMDPsSF6ScalarRpzrlE4zeroxvpZMV
786+
Added: _$ss4SIMDPss17FixedWidthInteger6ScalarRpzrlE3onexvpZMV
787+
Added: _$ss4SIMDPss17FixedWidthInteger6ScalarRpzrlE4zeroxvpZMV
773788

774789
// SE-0445 Improving printed descriptions of String.Index
775790
Added: _$sSS5IndexV16debugDescriptionSSvpMV

test/abi/macOS/x86_64/concurrency.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,9 @@ Added: _$ss15ContinuousClockV7InstantV3nowADvpZMV
369369
Added: _$ss15SuspendingClockV3nowAB7InstantVvpZMV
370370
Added: _$ss15SuspendingClockV7InstantV3nowADvpZMV
371371
Added: _$ss9TaskLocalC18_enclosingInstance7wrapped7storagexs5NeverO_s24ReferenceWritableKeyPathCyAGxGAIyAgByxGGtcipZMV
372+
Added: _$ss11GlobalActorPsE21sharedUnownedExecutorScevpZMV
373+
Added: _$ss5ClockPss010ContinuousA0VRszrlE10continuousADvpZMV
374+
Added: _$ss5ClockPss010SuspendingA0VRszrlE10suspendingADvpZMV
372375

373376
Added: _swift_taskGroup_initializeWithOptions
374377
Added: _swift_task_isCurrentExecutorWithFlags

test/abi/macOS/x86_64/regex-builder.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,13 @@ Added: _$s12RegexBuilder6AnchorV19textSegmentBoundaryACvpZMV
4545
Added: _$s12RegexBuilder6AnchorV25endOfSubjectBeforeNewlineACvpZMV
4646
Added: _$s12RegexBuilder6AnchorV30firstMatchingPositionInSubjectACvpZMV
4747
Added: _$s12RegexBuilder6AnchorV9endOfLineACvpZMV
48+
Added: _$s17_StringProcessing14RegexComponentP0C7BuilderAD14CharacterClassVRszrlE10whitespaceAFvpZMV
49+
Added: _$s17_StringProcessing14RegexComponentP0C7BuilderAD14CharacterClassVRszrlE13anyNonNewlineAFvpZMV
50+
Added: _$s17_StringProcessing14RegexComponentP0C7BuilderAD14CharacterClassVRszrlE15newlineSequenceAFvpZMV
51+
Added: _$s17_StringProcessing14RegexComponentP0C7BuilderAD14CharacterClassVRszrlE18anyGraphemeClusterAFvpZMV
52+
Added: _$s17_StringProcessing14RegexComponentP0C7BuilderAD14CharacterClassVRszrlE18verticalWhitespaceAFvpZMV
53+
Added: _$s17_StringProcessing14RegexComponentP0C7BuilderAD14CharacterClassVRszrlE20horizontalWhitespaceAFvpZMV
54+
Added: _$s17_StringProcessing14RegexComponentP0C7BuilderAD14CharacterClassVRszrlE3anyAFvpZMV
55+
Added: _$s17_StringProcessing14RegexComponentP0C7BuilderAD14CharacterClassVRszrlE4wordAFvpZMV
56+
Added: _$s17_StringProcessing14RegexComponentP0C7BuilderAD14CharacterClassVRszrlE5digitAFvpZMV
57+
Added: _$s17_StringProcessing14RegexComponentP0C7BuilderAD14CharacterClassVRszrlE8hexDigitAFvpZMV

test/abi/macOS/x86_64/stdlib.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -771,6 +771,21 @@ Added: _$ss7UnicodeO5ASCIIO27encodedReplacementCharacters15CollectionOfOneVys5UI
771771
Added: _$ss7UnicodeO5UTF16O20_replacementCodeUnits6UInt16VvpZMV
772772
Added: _$ss7UnicodeO5UTF16O27encodedReplacementCharacters11_UIntBufferVys6UInt16VGvpZMV
773773
Added: _$ss7UnicodeO5UTF32O27encodedReplacementCharacters15CollectionOfOneVys6UInt32VGvpZMV
774+
Added: _$sSBsE5radixSivpZMV
775+
Added: _$sSFsE8ulpOfOnexvpZMV
776+
Added: _$sSUsE8isSignedSbvpZMV
777+
Added: _$sSUss17FixedWidthIntegerRzrlE3maxxvpZMV
778+
Added: _$sSUss17FixedWidthIntegerRzrlE3minxvpZMV
779+
Added: _$sSZsE8isSignedSbvpZMV
780+
Added: _$sSZss17FixedWidthIntegerRzrlE3maxxvpZMV
781+
Added: _$sSZss17FixedWidthIntegerRzrlE3minxvpZMV
782+
Added: _$ss11SIMDStoragePsE11scalarCountSivpZMV
783+
Added: _$ss17FixedWidthIntegerPsE13_highBitIndexxvpZMV
784+
Added: _$ss18AdditiveArithmeticPss27ExpressibleByIntegerLiteralRzrlE4zeroxvpZMV
785+
Added: _$ss4SIMDPsSF6ScalarRpzrlE3onexvpZMV
786+
Added: _$ss4SIMDPsSF6ScalarRpzrlE4zeroxvpZMV
787+
Added: _$ss4SIMDPss17FixedWidthInteger6ScalarRpzrlE3onexvpZMV
788+
Added: _$ss4SIMDPss17FixedWidthInteger6ScalarRpzrlE4zeroxvpZMV
774789

775790
// SE-0445 Improving printed descriptions of String.Index
776791
Added: _$sSS5IndexV16debugDescriptionSSvpMV

0 commit comments

Comments
 (0)