[llvm-branch-commits] [NFC][TSan] Remove nullptr location placeholders in ScopedReport (PR #228825)

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Sat Oct 3 22:22:31 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-compiler-rt-sanitizer

Author: Vitaly Buka (vitalybuka)

<details>
<summary>Changes</summary>

Replace AddedLocationAddr and nullptr placeholders in ReportDesc::locs
with Vector<uptr> loc_addrs, and append symbolized data locations in
ScopedReport::SymbolizeStackElems() without needing a compaction pass.

Assisted-by: Gemini


---
Full diff: https://github.com/llvm/llvm-project/pull/228825.diff


2 Files Affected:

- (modified) compiler-rt/lib/tsan/rtl/tsan_report.h (+1-6) 
- (modified) compiler-rt/lib/tsan/rtl/tsan_rtl_report.cpp (+6-21) 


``````````diff
diff --git a/compiler-rt/lib/tsan/rtl/tsan_report.h b/compiler-rt/lib/tsan/rtl/tsan_report.h
index 13171aa270684..6c881fe82ed00 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_report.h
+++ b/compiler-rt/lib/tsan/rtl/tsan_report.h
@@ -106,11 +106,6 @@ struct ReportMutex {
   ReportStack* stack = nullptr;
 };
 
-struct AddedLocationAddr {
-  uptr addr = 0;
-  usize locs_idx = 0;
-};
-
 struct AddedStack {
   StackTrace stack_trace;
   bool suppressable = false;
@@ -124,7 +119,7 @@ class ReportDesc {
   Vector<AddedStack> added_stacks;
   Vector<ReportMop*> mops;
   Vector<ReportLocation*> locs;
-  Vector<AddedLocationAddr> added_location_addrs;
+  Vector<uptr> loc_addrs;
   Vector<ReportMutex*> mutexes;
   Vector<ReportThread*> threads;
   Vector<Tid> unique_tids;
diff --git a/compiler-rt/lib/tsan/rtl/tsan_rtl_report.cpp b/compiler-rt/lib/tsan/rtl/tsan_rtl_report.cpp
index ebdc7695c43da..b6390bfd1f564 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_rtl_report.cpp
+++ b/compiler-rt/lib/tsan/rtl/tsan_rtl_report.cpp
@@ -215,30 +215,16 @@ void ScopedReport::SymbolizeStackElems() {
   }
 
   // symbolize locations
-  for (usize i = 0, size = rep_->locs.Size(); i < size; i++) {
-    // added locations have a NULL placeholder - don't dereference them
-    if (ReportLocation *loc = rep_->locs[i])
-      loc->stack = SymbolizeStackId(loc->stack_id);
-  }
+  for (usize i = 0, size = rep_->locs.Size(); i < size; i++)
+    rep_->locs[i]->stack = SymbolizeStackId(rep_->locs[i]->stack_id);
 
   // symbolize any added locations
-  for (usize i = 0, size = rep_->added_location_addrs.Size(); i < size; i++) {
-    AddedLocationAddr *added_loc = &rep_->added_location_addrs[i];
-    if (ReportLocation *loc = SymbolizeData(added_loc->addr)) {
+  for (usize i = 0, size = rep_->loc_addrs.Size(); i < size; i++) {
+    if (ReportLocation* loc = SymbolizeData(rep_->loc_addrs[i])) {
       loc->suppressable = true;
-      rep_->locs[added_loc->locs_idx] = loc;
-    }
-  }
-
-  // Filter out any added location placeholders that could not be symbolized
-  usize j = 0;
-  for (usize i = 0, size = rep_->locs.Size(); i < size; i++) {
-    if (rep_->locs[i] != nullptr) {
-      rep_->locs[j] = rep_->locs[i];
-      j++;
+      rep_->locs.PushBack(loc);
     }
   }
-  rep_->locs.Resize(j);
 
   // symbolize threads
   for (usize i = 0, size = rep_->threads.Size(); i < size; i++) {
@@ -386,8 +372,7 @@ void ScopedReport::AddLocation(uptr addr, uptr size) {
     }
   }
 #endif
-  rep_->added_location_addrs.PushBack({addr, rep_->locs.Size()});
-  rep_->locs.PushBack(nullptr);
+  rep_->loc_addrs.PushBack(addr);
 }
 
 #if !SANITIZER_GO

``````````

</details>


https://github.com/llvm/llvm-project/pull/228825


More information about the llvm-branch-commits mailing list