Skip to content

Commit 79073ed

Browse files
committed
[Compile Time Constant Extraction] Extract the instance type for type values - not the metatype
The intended design is to extract actual types of type values appearing in conformance properties, whereas the original extraction code-path queried and recorded the type values' types - their metatypes. Resolves rdar://108609420
1 parent 067e4ec commit 79073ed

File tree

3 files changed

+17
-13
lines changed

3 files changed

+17
-13
lines changed

lib/ConstExtract/ConstExtract.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,11 @@ static std::shared_ptr<CompileTimeValue> extractCompileTimeValue(Expr *expr) {
312312

313313
case ExprKind::DotSelf: {
314314
auto dotSelfExpr = cast<DotSelfExpr>(expr);
315-
return std::make_shared<TypeValue>(dotSelfExpr->getType());
315+
auto dotSelfMetaType = dotSelfExpr->getType()->getAs<AnyMetatypeType>();
316+
if (dotSelfMetaType)
317+
return std::make_shared<TypeValue>(dotSelfMetaType->getInstanceType());
318+
else
319+
break;
316320
}
317321

318322
case ExprKind::UnderlyingToOpaque: {

test/ConstExtraction/ExtractTypeValue.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,22 @@ struct TypeValuePropertyStruct : MyProto {
2626
// CHECK-NEXT: {
2727
// CHECK-NEXT: "valueKind": "Type",
2828
// CHECK-NEXT: "value": {
29-
// CHECK-NEXT: "type": "ExtractTypeValue.Warbler<Swift.String>.Type",
30-
// CHECK-NEXT: "mangledName": "16ExtractTypeValue7WarblerVySSGm"
29+
// CHECK-NEXT: "type": "ExtractTypeValue.Warbler<Swift.String>",
30+
// CHECK-NEXT: "mangledName": "16ExtractTypeValue7WarblerVySSG"
3131
// CHECK-NEXT: }
3232
// CHECK-NEXT: },
3333
// CHECK-NEXT: {
3434
// CHECK-NEXT: "valueKind": "Type",
3535
// CHECK-NEXT: "value": {
36-
// CHECK-NEXT: "type": "ExtractTypeValue.Avocet.Type",
37-
// CHECK-NEXT: "mangledName": "16ExtractTypeValue6AvocetVm"
36+
// CHECK-NEXT: "type": "ExtractTypeValue.Avocet",
37+
// CHECK-NEXT: "mangledName": "16ExtractTypeValue6AvocetV"
3838
// CHECK-NEXT: }
3939
// CHECK-NEXT: },
4040
// CHECK-NEXT: {
4141
// CHECK-NEXT: "valueKind": "Type",
4242
// CHECK-NEXT: "value": {
43-
// CHECK-NEXT: "type": "ExtractTypeValue.RainbowLorikeet.Type",
44-
// CHECK-NEXT: "mangledName": "16ExtractTypeValue15RainbowLorikeetVm"
43+
// CHECK-NEXT: "type": "ExtractTypeValue.RainbowLorikeet",
44+
// CHECK-NEXT: "mangledName": "16ExtractTypeValue15RainbowLorikeetV"
4545
// CHECK-NEXT: }
4646
// CHECK-NEXT: }
4747
// CHECK-NEXT: ]

test/ConstExtraction/ExtractTypes.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,22 @@ public struct Types : MyProto {
2626
// CHECK-NEXT: {
2727
// CHECK-NEXT: "valueKind": "Type",
2828
// CHECK-NEXT: "value": {
29-
// CHECK-NEXT: "type": "ExtractTypes.TypeA.Type"
30-
// CHECK-NEXT: "mangledName": "12ExtractTypes5TypeAVm"
29+
// CHECK-NEXT: "type": "ExtractTypes.TypeA"
30+
// CHECK-NEXT: "mangledName": "12ExtractTypes5TypeAV"
3131
// CHECK-NEXT: }
3232
// CHECK-NEXT: },
3333
// CHECK-NEXT: {
3434
// CHECK-NEXT: "valueKind": "Type",
3535
// CHECK-NEXT: "value": {
36-
// CHECK-NEXT: "type": "ExtractTypes.TypeB.Type"
37-
// CHECK-NEXT: "mangledName": "12ExtractTypes5TypeBOm"
36+
// CHECK-NEXT: "type": "ExtractTypes.TypeB"
37+
// CHECK-NEXT: "mangledName": "12ExtractTypes5TypeBO"
3838
// CHECK-NEXT: }
3939
// CHECK-NEXT: },
4040
// CHECK-NEXT: {
4141
// CHECK-NEXT: "valueKind": "Type",
4242
// CHECK-NEXT: "value": {
43-
// CHECK-NEXT: "type": "ExtractTypes.TypeC.Type"
44-
// CHECK-NEXT: "mangledName": "12ExtractTypes5TypeCCm"
43+
// CHECK-NEXT: "type": "ExtractTypes.TypeC"
44+
// CHECK-NEXT: "mangledName": "12ExtractTypes5TypeCC"
4545
// CHECK-NEXT: }
4646
// CHECK-NEXT: }
4747
// CHECK-NEXT: ]

0 commit comments

Comments
 (0)