[clang] [llvm] [Sanitizer] Make sanitizer passes idempotent (PR #99439)
via llvm-commits
llvm-commits at lists.llvm.org
Sat Aug 10 02:25:46 PDT 2024
================
@@ -12,12 +12,47 @@
//===----------------------------------------------------------------------===//
#include "llvm/Transforms/Instrumentation.h"
+#include "llvm/IR/DiagnosticInfo.h"
+#include "llvm/IR/DiagnosticPrinter.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Module.h"
#include "llvm/TargetParser/Triple.h"
using namespace llvm;
+static cl::opt<bool> ClIgnoreRedundantInstrumentation(
+ "ignore-redundant-instrumentation",
+ cl::desc("Ignore redundant instrumentation"), cl::Hidden, cl::init(false));
+
+namespace {
+/// Diagnostic information for IR instrumentation reporting.
+class DiagnosticInfoInstrumentation : public DiagnosticInfo {
+ const Twine &Msg;
+
+public:
+ DiagnosticInfoInstrumentation(const Twine &DiagMsg,
+ DiagnosticSeverity Severity = DS_Warning)
+ : DiagnosticInfo(DK_Linker, Severity), Msg(DiagMsg) {}
+ void print(DiagnosticPrinter &DP) const override { DP << Msg; }
+};
+} // namespace
+
+/// Check if module has flag attached, if not add the flag.
+bool llvm::checkIfAlreadyInstrumented(Module &M, StringRef Flag) {
----------------
skc7 wrote:
Thanks for the suggestion. Have updated the patch in the latest commit.
Using DS_Error, causes second run of the pass to abort with error. So retained DS_Warning, so this returns true without abort and sanitizer passes return without doing second instrumentation.
https://github.com/llvm/llvm-project/pull/99439
More information about the llvm-commits
mailing list