Skip to content

Commit ffc1732

Browse files
committed
SIL: bridge Function.isDeinitBarrier back from Swift to C++ SIL
This API already existed in Swift, but not in the C++ SIL.
1 parent 7dcb530 commit ffc1732

File tree

4 files changed

+20
-2
lines changed

4 files changed

+20
-2
lines changed

SwiftCompilerSources/Sources/SIL/Function.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,10 @@ extension Function {
576576
atIndex: calleeArgIdx,
577577
withConvention: convention)
578578
return effects.memory.read
579+
},
580+
// isDeinitBarrier
581+
{ (f: BridgedFunction) -> Bool in
582+
return f.function.getSideEffects().isDeinitBarrier
579583
}
580584
)
581585
}

include/swift/SIL/SILBridging.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -549,14 +549,16 @@ struct BridgedFunction {
549549
typedef EffectInfo (* _Nonnull GetEffectInfoFn)(BridgedFunction, SwiftInt);
550550
typedef BridgedMemoryBehavior (* _Nonnull GetMemBehaviorFn)(BridgedFunction, bool);
551551
typedef bool (* _Nonnull ArgumentMayReadFn)(BridgedFunction, BridgedOperand, BridgedValue);
552+
typedef bool (* _Nonnull IsDeinitBarrierFn)(BridgedFunction);
552553

553554
static void registerBridging(SwiftMetatype metatype,
554555
RegisterFn initFn, RegisterFn destroyFn,
555556
WriteFn writeFn, ParseFn parseFn,
556557
CopyEffectsFn copyEffectsFn,
557558
GetEffectInfoFn effectInfoFn,
558559
GetMemBehaviorFn memBehaviorFn,
559-
ArgumentMayReadFn argumentMayReadFn);
560+
ArgumentMayReadFn argumentMayReadFn,
561+
IsDeinitBarrierFn isDeinitBarrierFn);
560562
};
561563

562564
struct OptionalBridgedFunction {

include/swift/SIL/SILFunction.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1218,6 +1218,8 @@ class SILFunction
12181218
// Used by the MemoryLifetimeVerifier
12191219
bool argumentMayRead(Operand *argOp, SILValue addr);
12201220

1221+
bool isDeinitBarrier();
1222+
12211223
Purpose getSpecialPurpose() const { return specialPurpose; }
12221224

12231225
/// Get this function's global_init attribute.

lib/SIL/IR/SILFunction.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ static BridgedFunction::CopyEffectsFn copyEffectsFunction = nullptr;
214214
static BridgedFunction::GetEffectInfoFn getEffectInfoFunction = nullptr;
215215
static BridgedFunction::GetMemBehaviorFn getMemBehvaiorFunction = nullptr;
216216
static BridgedFunction::ArgumentMayReadFn argumentMayReadFunction = nullptr;
217+
static BridgedFunction::IsDeinitBarrierFn isDeinitBarrierFunction = nullptr;
217218

218219
SILFunction::SILFunction(
219220
SILModule &Module, SILLinkage Linkage, StringRef Name,
@@ -1175,7 +1176,8 @@ void BridgedFunction::registerBridging(SwiftMetatype metatype,
11751176
CopyEffectsFn copyEffectsFn,
11761177
GetEffectInfoFn effectInfoFn,
11771178
GetMemBehaviorFn memBehaviorFn,
1178-
ArgumentMayReadFn argumentMayReadFn) {
1179+
ArgumentMayReadFn argumentMayReadFn,
1180+
IsDeinitBarrierFn isDeinitBarrierFn) {
11791181
functionMetatype = metatype;
11801182
initFunction = initFn;
11811183
destroyFunction = destroyFn;
@@ -1185,6 +1187,7 @@ void BridgedFunction::registerBridging(SwiftMetatype metatype,
11851187
getEffectInfoFunction = effectInfoFn;
11861188
getMemBehvaiorFunction = memBehaviorFn;
11871189
argumentMayReadFunction = argumentMayReadFn;
1190+
isDeinitBarrierFunction = isDeinitBarrierFn;
11881191
}
11891192

11901193
std::pair<const char *, int> SILFunction::
@@ -1286,6 +1289,13 @@ bool SILFunction::argumentMayRead(Operand *argOp, SILValue addr) {
12861289
return argumentMayReadFunction({this}, {argOp}, {addr});
12871290
}
12881291

1292+
bool SILFunction::isDeinitBarrier() {
1293+
if (!isDeinitBarrierFunction)
1294+
return true;
1295+
1296+
return isDeinitBarrierFunction({this});
1297+
}
1298+
12891299
SourceFile *SILFunction::getSourceFile() const {
12901300
auto declRef = getDeclRef();
12911301
if (!declRef)

0 commit comments

Comments
 (0)