[llvm] [lsan][llvm-profdata] Suppress leak check on abnormal exit (PR #219088)

Vitaly Buka via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 26 19:00:00 PDT 2026


https://github.com/vitalybuka updated https://github.com/llvm/llvm-project/pull/219088

>From cb98ceb5251bf9c1bdf21d57697065142ce536f0 Mon Sep 17 00:00:00 2001
From: Vitaly Buka <vitalybuka at google.com>
Date: Wed, 26 Aug 2026 18:55:03 -0700
Subject: [PATCH 1/2] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20in?=
 =?UTF-8?q?itial=20version?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Created using spr 1.3.7
---
 llvm/tools/llvm-profdata/llvm-profdata.cpp | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/llvm/tools/llvm-profdata/llvm-profdata.cpp b/llvm/tools/llvm-profdata/llvm-profdata.cpp
index 49c645598f475..216d881f00720 100644
--- a/llvm/tools/llvm-profdata/llvm-profdata.cpp
+++ b/llvm/tools/llvm-profdata/llvm-profdata.cpp
@@ -50,6 +50,17 @@
 #include <cmath>
 #include <optional>
 
+#if LLVM_ADDRESS_SANITIZER_BUILD || LLVM_HWADDRESS_SANITIZER_BUILD
+#include <sanitizer/lsan_interface.h>
+static int SkipLeakCheck;
+LLVM_ATTRIBUTE_USED int __lsan_is_turned_off() { return SkipLeakCheck; }
+static void skipLeakCheck() {
+  SkipLeakCheck = 1;
+}
+#else
+static void skipLeakCheck() {}
+#endif
+
 using namespace llvm;
 using ProfCorrelatorKind = InstrProfCorrelator::ProfCorrelatorKind;
 
@@ -533,6 +544,10 @@ static void exitWithError(Twine Message, StringRef Whence = "",
   errs() << Message << "\n";
   if (!Hint.empty())
     WithColor::note() << Hint << "\n";
+  // exit() terminates without unwinding the stack or running destructors, and
+  // there is no guaranty that pointers to allocations will be preserved, so
+  // LSan reports in-flight heap allocations as leaks at atexit.
+  skipLeakCheck();
   ::exit(1);
 }
 

>From 96f1eac4e5cc49f678f071a0adb343e8e88637c3 Mon Sep 17 00:00:00 2001
From: Vitaly Buka <vitalybuka at google.com>
Date: Wed, 26 Aug 2026 18:59:49 -0700
Subject: [PATCH 2/2] format

Created using spr 1.3.7
---
 llvm/tools/llvm-profdata/llvm-profdata.cpp | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/llvm/tools/llvm-profdata/llvm-profdata.cpp b/llvm/tools/llvm-profdata/llvm-profdata.cpp
index 216d881f00720..862970a63680f 100644
--- a/llvm/tools/llvm-profdata/llvm-profdata.cpp
+++ b/llvm/tools/llvm-profdata/llvm-profdata.cpp
@@ -54,9 +54,7 @@
 #include <sanitizer/lsan_interface.h>
 static int SkipLeakCheck;
 LLVM_ATTRIBUTE_USED int __lsan_is_turned_off() { return SkipLeakCheck; }
-static void skipLeakCheck() {
-  SkipLeakCheck = 1;
-}
+static void skipLeakCheck() { SkipLeakCheck = 1; }
 #else
 static void skipLeakCheck() {}
 #endif



More information about the llvm-commits mailing list