Skip to content

Commit 37ceeb3

Browse files
committed
IRGen: Cast fixed-size metadata and witness table packs to the correct pointer type
1 parent 8c984ee commit 37ceeb3

File tree

2 files changed

+5
-1
lines changed

2 files changed

+5
-1
lines changed

lib/IRGen/GenPack.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,8 @@ irgen::emitTypeMetadataPackRef(IRGenFunction &IGF, CanPackType packType,
458458

459459
auto pack = emitTypeMetadataPack(IGF, packType, request);
460460
auto *metadata = pack.getAddress().getAddress();
461+
metadata = IGF.Builder.CreatePointerCast(
462+
metadata, IGF.IGM.TypeMetadataPtrTy->getPointerTo());
461463

462464
auto response = MetadataResponse::forComplete(metadata);
463465
IGF.setScopedLocalTypeMetadata(packType, response);
@@ -612,6 +614,8 @@ llvm::Value *irgen::emitWitnessTablePackRef(IRGenFunction &IGF,
612614
auto pack = emitWitnessTablePack(IGF, packType, conformance);
613615

614616
auto *result = pack.getAddress().getAddress();
617+
result = IGF.Builder.CreatePointerCast(
618+
result, IGF.IGM.WitnessTablePtrTy->getPointerTo());
615619

616620
IGF.setScopedLocalTypeData(packType, localDataKind, result);
617621

test/IRGen/variadic_generic_functions.sil

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ struct Gen2<Fwd : Q> : Q {}
3434
// CHECK: [[WTABLE_PACK:%[^,]+]] = alloca [1 x i8**]
3535
// CHECK: [[METADATA_ELEMENT_0:%[^,]+]] = getelementptr inbounds [1 x %swift.type*], [1 x %swift.type*]* [[METADATA_PACK]]
3636
// CHECK: store %swift.type* bitcast {{.*}}$s26variadic_generic_functions3S_2VMf{{.*}}, %swift.type** [[METADATA_ELEMENT_0]]
37+
// CHECK: [[METADATA_PACK_PTR:%[^,]+]] = bitcast [1 x %swift.type*]* [[METADATA_PACK]] to %swift.type**
3738
// CHECK: [[WTABLE_ELEMENT_0:%[^,]+]] = getelementptr inbounds [1 x i8**], [1 x i8**]* [[WTABLE_PACK]]
3839
// CHECK: store i8** getelementptr inbounds {{.*}}$s26variadic_generic_functions3S_2VAA1PAAWP{{.*}}, i8*** [[WTABLE_ELEMENT_0]]
39-
// CHECK: [[METADATA_PACK_PTR:%[^,]+]] = bitcast [1 x %swift.type*]* [[METADATA_PACK]] to %swift.type**
4040
// CHECK: [[WTABLE_PACK_ADDR:%[^,]+]] = bitcast [1 x i8**]* [[WTABLE_PACK]] to i8***
4141
// CHECK: call swiftcc void @g([[INT]] 1, %swift.type** [[METADATA_PACK_PTR]], i8*** [[WTABLE_PACK_ADDR]])
4242
sil @c : $() -> () {

0 commit comments

Comments
 (0)