Skip to content

Commit 1b32a8f

Browse files
committed
[sil-verifier] Split SILVerifier verificationFailure into separate functions for Instructions, Arguments, and add a variant for Values.
This also required me to change how we handled which instruction/argument we emit an error about in the verifier. Previously we were using two global variables that we made nullptr to control which thing we emitted an error about. This was unnecessary. Instead I added a little helper struct that internally controls what we will emit an error about and an external "guard" RAII struct that makes sure we push/pop the instruction/argument we are erroring upon correctly.
1 parent 8fa3738 commit 1b32a8f

File tree

8 files changed

+328
-60
lines changed

8 files changed

+328
-60
lines changed

SwiftCompilerSources/Sources/SIL/Utilities/Verifier.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ private func require(_ condition: Bool, _ message: @autoclosure () -> String, at
2222
if !condition {
2323
let msg = message()
2424
msg._withBridgedStringRef { stringRef in
25-
BridgedVerifier.verifierError(stringRef, atInstruction.bridged, Optional<Argument>.none.bridged)
25+
BridgedVerifier.verifierError(stringRef, atInstruction.bridged)
2626
}
2727
}
2828
}

include/swift/SIL/SILBridging.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1607,8 +1607,12 @@ struct BridgedVerifier {
16071607
static void runSwiftFunctionVerification(swift::SILFunction * _Nonnull f, swift::SILContext * _Nonnull context);
16081608

16091609
static void registerVerifier(VerifyFunctionFn verifyFunctionFn);
1610-
static void verifierError(BridgedStringRef message, OptionalBridgedInstruction atInstruction,
1610+
static void verifierError(BridgedStringRef message,
1611+
OptionalBridgedInstruction atInstruction);
1612+
static void verifierError(BridgedStringRef message,
16111613
OptionalBridgedArgument atArgument);
1614+
static void verifierError(BridgedStringRef message,
1615+
OptionalBridgedValue atValue);
16121616
};
16131617

16141618
struct BridgedUtilities {

include/swift/SIL/SILModule.h

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1161,10 +1161,18 @@ inline llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const SILModule &M){
11611161
return OS;
11621162
}
11631163

1164-
void verificationFailure(const Twine &complaint,
1165-
const SILInstruction *atInstruction,
1166-
const SILArgument *atArgument,
1167-
llvm::function_ref<void(SILPrintContext &ctx)> extraContext);
1164+
void verificationFailure(
1165+
const Twine &complaint, const SILFunction *fn,
1166+
llvm::function_ref<void(SILPrintContext &ctx)> extraContext);
1167+
void verificationFailure(
1168+
const Twine &complaint, const SILInstruction *atInstruction,
1169+
llvm::function_ref<void(SILPrintContext &ctx)> extraContext);
1170+
void verificationFailure(
1171+
const Twine &complaint, const SILArgument *atArgument,
1172+
llvm::function_ref<void(SILPrintContext &ctx)> extraContext);
1173+
void verificationFailure(
1174+
const Twine &complaint, SILValue atValue,
1175+
llvm::function_ref<void(SILPrintContext &ctx)> extraContext);
11681176

11691177
inline bool SILOptions::supportsLexicalLifetimes(const SILModule &mod) const {
11701178
switch (mod.getStage()) {

lib/SIL/Utils/SILBridging.cpp

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -918,8 +918,19 @@ void BridgedVerifier::runSwiftFunctionVerification(SILFunction * _Nonnull f, SIL
918918
}
919919

920920
void BridgedVerifier::verifierError(BridgedStringRef message,
921-
OptionalBridgedInstruction atInstruction,
921+
OptionalBridgedInstruction atInstruction) {
922+
verificationFailure(message.unbridged(), atInstruction.unbridged(),
923+
/*extraContext=*/nullptr);
924+
}
925+
926+
void BridgedVerifier::verifierError(BridgedStringRef message,
922927
OptionalBridgedArgument atArgument) {
923-
Twine msg(message.unbridged());
924-
verificationFailure(msg, atInstruction.unbridged(), atArgument.unbridged(), /*extraContext=*/nullptr);
928+
verificationFailure(message.unbridged(), atArgument.unbridged(),
929+
/*extraContext=*/nullptr);
930+
}
931+
932+
void BridgedVerifier::verifierError(BridgedStringRef message,
933+
OptionalBridgedValue atValue) {
934+
verificationFailure(message.unbridged(), SILValue(atValue.getSILValue()),
935+
/*extraContext=*/nullptr);
925936
}

0 commit comments

Comments
 (0)