Skip to content

Commit 0fa1590

Browse files
committed
[IRGen] Fix associated type resilience for 32-bit platforms.
1 parent fcc3ffe commit 0fa1590

File tree

3 files changed

+5
-4
lines changed

3 files changed

+5
-4
lines changed

lib/IRGen/GenProto.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3426,7 +3426,8 @@ static llvm::Value *computeResilientWitnessTableIndex(
34263426
auto ptrSize = dataLayout.getTypeAllocSizeInBits(IGF.IGM.Int8PtrTy);
34273427
assert(protoReqSize >= ptrSize && "> 64-bit pointers?");
34283428
assert((protoReqSize % ptrSize == 0) && "Must be evenly divisible");
3429-
unsigned factor = (protoReqSize / ptrSize) * 8;
3429+
(void)ptrSize;
3430+
unsigned factor = protoReqSize / 8;
34303431
auto factorConstant = llvm::ConstantInt::get(IGF.IGM.IntPtrTy, factor);
34313432
return IGF.Builder.CreateUDiv(offset, factorConstant);
34323433
}

test/IRGen/protocol_resilience_descriptors.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ where Element: ProtocolWithRequirements, Element.T == Y {
5858

5959
// CHECK-USAGE: define{{( dllexport)?}}{{( protected)?}} swiftcc %swift.type* @"$S31protocol_resilience_descriptors17assocTypeMetadatay1TQzmxm010resilient_A024ProtocolWithRequirementsRzlF"(%swift.type*, %swift.type* [[PWD:%.*]], i8** [[WTABLE:%.*]])
6060
public func assocTypeMetadata<PWR: ProtocolWithRequirements>(_: PWR.Type) -> PWR.T.Type {
61-
// CHECK-USAGE: [[WITNESS_ADDR:%.*]] = getelementptr inbounds i8*, i8** %PWR.ProtocolWithRequirements, [[INT]] udiv ([[INT]] sub ([[INT]] ptrtoint (%swift.protocol_requirement* @"$S1T18resilient_protocol24ProtocolWithRequirementsPTl" to [[INT]]), [[INT]] ptrtoint (%swift.protocol_requirement* @"$S18resilient_protocol24ProtocolWithRequirementsTL" to [[INT]])), [[INT]] {{(8|16)}})
62-
// CHECK-USAGE: load i8*, i8** [[WITNESS_ADDR]], align 8
61+
// CHECK-USAGE: [[WITNESS_ADDR:%.*]] = getelementptr inbounds i8*, i8** %PWR.ProtocolWithRequirements, [[INT]] udiv ([[INT]] sub ([[INT]] ptrtoint (%swift.protocol_requirement* @"$S1T18resilient_protocol24ProtocolWithRequirementsPTl" to [[INT]]), [[INT]] ptrtoint (%swift.protocol_requirement* @"$S18resilient_protocol24ProtocolWithRequirementsTL" to [[INT]])), [[INT]] 8
62+
// CHECK-USAGE: load i8*, i8** [[WITNESS_ADDR]], align {{(4|8)}}
6363
return PWR.T.self
6464
}

test/IRGen/witness_table_indirect_conformances.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ struct Z: P2 {
3333
// CHECK: @"$S35witness_table_indirect_conformances1WVAA2P3AAWP" = hidden constant [5 x i8*] [
3434
// CHECK-SAME: @"$S35witness_table_indirect_conformances1WVAA2P3AAMc"
3535
// CHECK-SAME: i8* bitcast (i8** ()* @"$S35witness_table_indirect_conformances1YVAA1QAAWa" to i8*),
36-
// CHECK-SAME: i8* bitcast (%swift.metadata_response (i64)* @"$S35witness_table_indirect_conformances1ZVMa" to i8*),
36+
// CHECK-SAME: i8* bitcast (%swift.metadata_response ([[INT]])* @"$S35witness_table_indirect_conformances1ZVMa" to i8*),
3737
// CHECK-SAME: i8* bitcast (void (%T35witness_table_indirect_conformances1ZV*, %T35witness_table_indirect_conformances1WV*, %swift.type*, i8**)* @"$S35witness_table_indirect_conformances1WVAA2P3A2aDP08getAssocE00gE0QzyFTW" to i8*)]
3838
struct W: P3 {
3939
typealias AssocP3 = Z

0 commit comments

Comments
 (0)