Skip to content

Commit 39951b0

Browse files
authored
Merge pull request #74062 from drexin/wip-127535274-6.0
[6.0][IRGen] Assign layout strings for static layout generic types in meta…
2 parents f8fed23 + 484388e commit 39951b0

File tree

2 files changed

+46
-19
lines changed

2 files changed

+46
-19
lines changed

lib/IRGen/GenMeta.cpp

Lines changed: 35 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3519,16 +3519,6 @@ namespace {
35193519

35203520
if (HasDependentMetadata)
35213521
asImpl().emitInitializeMetadata(IGF, metadata, false, collector);
3522-
3523-
if (layoutStringsEnabled(IGM)) {
3524-
if (auto *layoutString = getLayoutString()) {
3525-
auto layoutStringCast = IGF.Builder.CreateBitCast(layoutString,
3526-
IGM.Int8PtrTy);
3527-
IGF.Builder.CreateCall(
3528-
IGM.getGenericInstantiateLayoutStringFunctionPointer(),
3529-
{layoutStringCast, metadata});
3530-
}
3531-
}
35323522
});
35333523
}
35343524

@@ -5641,11 +5631,24 @@ namespace {
56415631
descriptor = emitPointerAuthSign(IGF, descriptor, authInfo);
56425632
}
56435633

5644-
return IGF.Builder.CreateCall(
5645-
getLayoutString() ?
5646-
IGM.getAllocateGenericValueMetadataWithLayoutStringFunctionPointer() :
5647-
IGM.getAllocateGenericValueMetadataFunctionPointer(),
5648-
{descriptor, arguments, templatePointer, extraSizeV});
5634+
if (layoutStringsEnabled(IGM)) {
5635+
auto *call = IGF.Builder.CreateCall(
5636+
IGM.getAllocateGenericValueMetadataWithLayoutStringFunctionPointer(),
5637+
{descriptor, arguments, templatePointer, extraSizeV});
5638+
5639+
if (auto *layoutString = getLayoutString()) {
5640+
auto layoutStringCast =
5641+
IGF.Builder.CreateBitCast(layoutString, IGM.Int8PtrTy);
5642+
IGF.Builder.CreateCall(
5643+
IGM.getGenericInstantiateLayoutStringFunctionPointer(),
5644+
{layoutStringCast, call});
5645+
}
5646+
return call;
5647+
} else {
5648+
return IGF.Builder.CreateCall(
5649+
IGM.getAllocateGenericValueMetadataFunctionPointer(),
5650+
{descriptor, arguments, templatePointer, extraSizeV});
5651+
}
56495652
}
56505653

56515654
void flagUnfilledFieldOffset() {
@@ -6113,11 +6116,24 @@ namespace {
61136116
descriptor = emitPointerAuthSign(IGF, descriptor, authInfo);
61146117
}
61156118

6116-
return IGF.Builder.CreateCall(
6117-
getLayoutString() ?
6118-
IGM.getAllocateGenericValueMetadataWithLayoutStringFunctionPointer() :
6119+
if (layoutStringsEnabled(IGM)) {
6120+
auto *call = IGF.Builder.CreateCall(
6121+
IGM.getAllocateGenericValueMetadataWithLayoutStringFunctionPointer(),
6122+
{descriptor, arguments, templatePointer, extraSizeV});
6123+
6124+
if (auto *layoutString = getLayoutString()) {
6125+
auto layoutStringCast =
6126+
IGF.Builder.CreateBitCast(layoutString, IGM.Int8PtrTy);
6127+
IGF.Builder.CreateCall(
6128+
IGM.getGenericInstantiateLayoutStringFunctionPointer(),
6129+
{layoutStringCast, call});
6130+
}
6131+
return call;
6132+
} else {
6133+
return IGF.Builder.CreateCall(
61196134
IGM.getAllocateGenericValueMetadataFunctionPointer(),
6120-
{descriptor, arguments, templatePointer, extraSizeV});
6135+
{descriptor, arguments, templatePointer, extraSizeV});
6136+
}
61216137
}
61226138

61236139
bool hasTrailingFlags() {
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// RUN: %target-build-swift -g -Xfrontend -enable-experimental-feature -Xfrontend LayoutStringValueWitnesses -Xfrontend -enable-experimental-feature -Xfrontend LayoutStringValueWitnessesInstantiation -Xfrontend -enable-layout-string-value-witnesses -Xfrontend -enable-layout-string-value-witnesses-instantiation -Xfrontend -enable-library-evolution -c -parse-as-library -emit-ir %s | %FileCheck %s
2+
3+
// CHECK: define internal ptr @"$s13rdar1275352744TestVMi"
4+
// CHECK: [[METADATA:%.*]] = call ptr @swift_allocateGenericValueMetadataWithLayoutString
5+
// CHECK: call void @swift_generic_instantiateLayoutString(ptr @"type_layout_string l13rdar1275352744TestVyxG", ptr [[METADATA]])
6+
// CHECK: ret ptr [[METADATA]]
7+
// CHECK: }
8+
public struct Test<T> {
9+
let x: [T]
10+
let y: [T]
11+
}

0 commit comments

Comments
 (0)