Skip to content

Commit 815372e

Browse files
committed
More places we expect the signature to be used
1 parent ab435a7 commit 815372e

File tree

3 files changed

+16
-10
lines changed

3 files changed

+16
-10
lines changed

lib/IRGen/Callee.h

+10-4
Original file line numberDiff line numberDiff line change
@@ -366,8 +366,11 @@ namespace irgen {
366366

367367
static FunctionPointer createSigned(Kind kind, llvm::Value *value,
368368
PointerAuthInfo authInfo,
369-
const Signature &signature) {
370-
return FunctionPointer(kind, value, authInfo, signature);
369+
const Signature &signature,
370+
bool useSignature = false) {
371+
auto res = FunctionPointer(kind, value, authInfo, signature);
372+
res.useSignature = useSignature;
373+
return res;
371374
}
372375
static FunctionPointer createSignedClosure(Kind kind, llvm::Value *value,
373376
PointerAuthInfo authInfo,
@@ -379,8 +382,11 @@ namespace irgen {
379382

380383

381384
static FunctionPointer createUnsigned(Kind kind, llvm::Value *value,
382-
const Signature &signature) {
383-
return FunctionPointer(kind, value, signature);
385+
const Signature &signature,
386+
bool useSignature = false) {
387+
auto res = FunctionPointer(kind, value, signature);
388+
res.useSignature = useSignature;
389+
return res;
384390
}
385391

386392
static FunctionPointer forDirect(IRGenModule &IGM, llvm::Constant *value,

lib/IRGen/GenClass.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -2798,7 +2798,7 @@ FunctionPointer irgen::emitVirtualMethodValue(IRGenFunction &IGF,
27982798
auto authInfo =
27992799
PointerAuthInfo::emit(IGF, schema, slot.getAddress(), method);
28002800
return FunctionPointer::createSigned(methodType, fnPtr, authInfo,
2801-
signature);
2801+
signature, true);
28022802
}
28032803
case ClassMetadataLayout::MethodInfo::Kind::DirectImpl: {
28042804
auto fnPtr = llvm::ConstantExpr::getBitCast(methodInfo.getDirectImpl(),
@@ -2811,7 +2811,7 @@ FunctionPointer irgen::emitVirtualMethodValue(IRGenFunction &IGF,
28112811
IGF.IGM.getAddrOfSILFunction(silFn, NotForDefinition));
28122812
}
28132813
return FunctionPointer::forDirect(methodType, fnPtr, secondaryValue,
2814-
signature);
2814+
signature, true);
28152815
}
28162816
}
28172817
llvm_unreachable("covered switch");

lib/IRGen/IRGenSIL.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -2605,7 +2605,7 @@ void IRGenSILFunction::visitDifferentiabilityWitnessFunctionInst(
26052605
Builder.CreateBitCast(diffWitness, signature.getType()->getPointerTo());
26062606

26072607
setLoweredFunctionPointer(
2608-
i, FunctionPointer::createUnsigned(fnType, diffWitness, signature));
2608+
i, FunctionPointer::createUnsigned(fnType, diffWitness, signature, true));
26092609
}
26102610

26112611
FunctionPointer::Kind irgen::classifyFunctionPointerKind(SILFunction *fn) {
@@ -6860,7 +6860,7 @@ void IRGenSILFunction::visitWitnessMethodInst(swift::WitnessMethodInst *i) {
68606860
}
68616861

68626862
auto sig = IGM.getSignature(fnType);
6863-
auto fn = FunctionPointer::forDirect(fnType, fnPtr, secondaryValue, sig);
6863+
auto fn = FunctionPointer::forDirect(fnType, fnPtr, secondaryValue, sig, true);
68646864

68656865
setLoweredFunctionPointer(i, fn);
68666866
return;
@@ -7093,7 +7093,7 @@ void IRGenSILFunction::visitSuperMethodInst(swift::SuperMethodInst *i) {
70937093
auto authInfo =
70947094
PointerAuthInfo::emit(*this, schema, /*storageAddress=*/nullptr, method);
70957095

7096-
auto fn = FunctionPointer::createSigned(methodType, fnPtr, authInfo, sig);
7096+
auto fn = FunctionPointer::createSigned(methodType, fnPtr, authInfo, sig, true);
70977097

70987098
setLoweredFunctionPointer(i, fn);
70997099
return;
@@ -7156,7 +7156,7 @@ void IRGenSILFunction::visitClassMethodInst(swift::ClassMethodInst *i) {
71567156
}
71577157

71587158
auto sig = IGM.getSignature(methodType);
7159-
auto fn = FunctionPointer::createUnsigned(methodType, fnPtr, sig);
7159+
auto fn = FunctionPointer::createUnsigned(methodType, fnPtr, sig, true);
71607160

71617161
setLoweredFunctionPointer(i, fn);
71627162
return;

0 commit comments

Comments
 (0)