SIL: bridge Function.isDeinitBarrier back from Swift to C++ SIL

This API already existed in Swift, but not in the C++ SIL.
This commit is contained in:
Erik Eckstein
2025-04-28 18:26:38 +02:00
parent 7dcb53005f
commit ffc17322f9
4 changed files with 20 additions and 2 deletions

View File

@@ -214,6 +214,7 @@ static BridgedFunction::CopyEffectsFn copyEffectsFunction = nullptr;
static BridgedFunction::GetEffectInfoFn getEffectInfoFunction = nullptr;
static BridgedFunction::GetMemBehaviorFn getMemBehvaiorFunction = nullptr;
static BridgedFunction::ArgumentMayReadFn argumentMayReadFunction = nullptr;
static BridgedFunction::IsDeinitBarrierFn isDeinitBarrierFunction = nullptr;
SILFunction::SILFunction(
SILModule &Module, SILLinkage Linkage, StringRef Name,
@@ -1175,7 +1176,8 @@ void BridgedFunction::registerBridging(SwiftMetatype metatype,
CopyEffectsFn copyEffectsFn,
GetEffectInfoFn effectInfoFn,
GetMemBehaviorFn memBehaviorFn,
ArgumentMayReadFn argumentMayReadFn) {
ArgumentMayReadFn argumentMayReadFn,
IsDeinitBarrierFn isDeinitBarrierFn) {
functionMetatype = metatype;
initFunction = initFn;
destroyFunction = destroyFn;
@@ -1185,6 +1187,7 @@ void BridgedFunction::registerBridging(SwiftMetatype metatype,
getEffectInfoFunction = effectInfoFn;
getMemBehvaiorFunction = memBehaviorFn;
argumentMayReadFunction = argumentMayReadFn;
isDeinitBarrierFunction = isDeinitBarrierFn;
}
std::pair<const char *, int> SILFunction::
@@ -1286,6 +1289,13 @@ bool SILFunction::argumentMayRead(Operand *argOp, SILValue addr) {
return argumentMayReadFunction({this}, {argOp}, {addr});
}
bool SILFunction::isDeinitBarrier() {
if (!isDeinitBarrierFunction)
return true;
return isDeinitBarrierFunction({this});
}
SourceFile *SILFunction::getSourceFile() const {
auto declRef = getDeclRef();
if (!declRef)