[compiler-rt] [TSan][compiler-rt] Defer symbolization of Reports to as late as possible (PR #151120)

Dan Blackwell via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 30 06:32:30 PDT 2025


================
@@ -199,6 +198,55 @@ void ScopedReportBase::AddMemoryAccess(uptr addr, uptr external_tag, Shadow s,
   }
 }
 
+void ScopedReportBase::SymbolizeStackElems() {
+  // symbolize memory ops
+  for (usize i = 0; i < rep_->mops.Size(); i++) {
+    ReportMop *mop = rep_->mops[i];
+    mop->stack = SymbolizeStack(mop->stack_trace);
+    if (mop->stack)
+      mop->stack->suppressable = true;
+  }
+
+  // symbolize locations
+  for (usize i = 0; i < rep_->locs.Size(); i++) {
+    // added locations have a NULL placeholder - don't dereference them
+    if (ReportLocation *loc = rep_->locs[i])
+      loc->stack = SymbolizeStackId(loc->stack_id);
+  }
+
+  // symbolize any added locations
+  for (usize i = 0; i < rep_->added_location_addrs.Size(); i++) {
+    AddedLocationAddr *added_loc = &rep_->added_location_addrs[i];
+    if (ReportLocation *loc = SymbolizeData(added_loc->addr)) {
+      loc->suppressable = true;
+      rep_->locs[added_loc->locs_idx] = loc;
+    }
+  }
+
+  // Filter out any added location placeholders that could not be symbolized
+  Vector<ReportLocation *> filtered_locs;
+  for (usize i = 0; i < rep_->locs.Size(); i++)
+    if (rep_->locs[i] != nullptr)
+      filtered_locs.PushBack(rep_->locs[i]);
+  rep_->locs.Resize(filtered_locs.Size());
+  for (usize i = 0; i < filtered_locs.Size(); i++)
+    rep_->locs[i] = (filtered_locs[i]);
----------------
DanBlackwell wrote:

I have swapped this in-place in now

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


More information about the llvm-commits mailing list