Skip to content

Commit 2d0b194

Browse files
authored
Merge pull request #74058 from drexin/wip-127535274
[IRGen] Assign layout strings for static layout generic types in meta…
2 parents 3b4a3a5 + 8e2b0ec commit 2d0b194

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
@@ -3534,16 +3534,6 @@ namespace {
35343534

35353535
if (HasDependentMetadata)
35363536
asImpl().emitInitializeMetadata(IGF, metadata, false, collector);
3537-
3538-
if (layoutStringsEnabled(IGM)) {
3539-
if (auto *layoutString = getLayoutString()) {
3540-
auto layoutStringCast = IGF.Builder.CreateBitCast(layoutString,
3541-
IGM.Int8PtrTy);
3542-
IGF.Builder.CreateCall(
3543-
IGM.getGenericInstantiateLayoutStringFunctionPointer(),
3544-
{layoutStringCast, metadata});
3545-
}
3546-
}
35473537
});
35483538
}
35493539

@@ -5719,11 +5709,24 @@ namespace {
57195709
descriptor = emitPointerAuthSign(IGF, descriptor, authInfo);
57205710
}
57215711

5722-
return IGF.Builder.CreateCall(
5723-
getLayoutString() ?
5724-
IGM.getAllocateGenericValueMetadataWithLayoutStringFunctionPointer() :
5725-
IGM.getAllocateGenericValueMetadataFunctionPointer(),
5726-
{descriptor, arguments, templatePointer, extraSizeV});
5712+
if (layoutStringsEnabled(IGM)) {
5713+
auto *call = IGF.Builder.CreateCall(
5714+
IGM.getAllocateGenericValueMetadataWithLayoutStringFunctionPointer(),
5715+
{descriptor, arguments, templatePointer, extraSizeV});
5716+
5717+
if (auto *layoutString = getLayoutString()) {
5718+
auto layoutStringCast =
5719+
IGF.Builder.CreateBitCast(layoutString, IGM.Int8PtrTy);
5720+
IGF.Builder.CreateCall(
5721+
IGM.getGenericInstantiateLayoutStringFunctionPointer(),
5722+
{layoutStringCast, call});
5723+
}
5724+
return call;
5725+
} else {
5726+
return IGF.Builder.CreateCall(
5727+
IGM.getAllocateGenericValueMetadataFunctionPointer(),
5728+
{descriptor, arguments, templatePointer, extraSizeV});
5729+
}
57275730
}
57285731

57295732
void flagUnfilledFieldOffset() {
@@ -6191,11 +6194,24 @@ namespace {
61916194
descriptor = emitPointerAuthSign(IGF, descriptor, authInfo);
61926195
}
61936196

6194-
return IGF.Builder.CreateCall(
6195-
getLayoutString() ?
6196-
IGM.getAllocateGenericValueMetadataWithLayoutStringFunctionPointer() :
6197+
if (layoutStringsEnabled(IGM)) {
6198+
auto *call = IGF.Builder.CreateCall(
6199+
IGM.getAllocateGenericValueMetadataWithLayoutStringFunctionPointer(),
6200+
{descriptor, arguments, templatePointer, extraSizeV});
6201+
6202+
if (auto *layoutString = getLayoutString()) {
6203+
auto layoutStringCast =
6204+
IGF.Builder.CreateBitCast(layoutString, IGM.Int8PtrTy);
6205+
IGF.Builder.CreateCall(
6206+
IGM.getGenericInstantiateLayoutStringFunctionPointer(),
6207+
{layoutStringCast, call});
6208+
}
6209+
return call;
6210+
} else {
6211+
return IGF.Builder.CreateCall(
61976212
IGM.getAllocateGenericValueMetadataFunctionPointer(),
6198-
{descriptor, arguments, templatePointer, extraSizeV});
6213+
{descriptor, arguments, templatePointer, extraSizeV});
6214+
}
61996215
}
62006216

62016217
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)