Skip to content

Commit d7cb86d

Browse files
committed
Fixup - simplify the location symbolizing logic
1 parent 4a6ba6a commit d7cb86d

File tree

1 file changed

+13
-37
lines changed

1 file changed

+13
-37
lines changed

compiler-rt/lib/tsan/rtl/tsan_rtl_report.cpp

Lines changed: 13 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -207,55 +207,30 @@ void ScopedReportBase::SymbolizeStackElems() {
207207
mop->stack->suppressable = true;
208208
}
209209

210-
Vector<ReportLocation *> locs_tmp;
211-
212-
// Repopulate the locations in the order they were added - take care with
213-
// the added locations
214-
usize locs_idx = 0;
215-
for (usize i = 0; i < rep_->added_location_addrs.Size(); i++) {
216-
AddedLocationAddr *added_loc_addr = &rep_->added_location_addrs[i];
217-
218-
for (; locs_idx < added_loc_addr->locs_idx; locs_idx++) {
219-
ReportLocation *loc = rep_->locs[locs_idx];
220-
loc->stack = SymbolizeStackId(loc->stack_id);
221-
locs_tmp.PushBack(loc);
222-
}
223-
224-
if (ReportLocation *added_loc = SymbolizeData(added_loc_addr->addr)) {
225-
added_loc->suppressable = true;
226-
locs_tmp.PushBack(added_loc);
227-
}
228-
}
229-
230-
// Append any remaining locations
231-
for (; locs_idx < rep_->locs.Size(); locs_idx++) {
232-
ReportLocation *loc = rep_->locs[locs_idx];
233-
loc->stack = SymbolizeStackId(loc->stack_id);
234-
locs_tmp.PushBack(loc);
235-
}
236-
237-
rep_->locs.Reset();
238-
for (usize i = 0; i < locs_tmp.Size(); i++) rep_->locs.PushBack(locs_tmp[i]);
239-
240210
// symbolize locations
241211
for (usize i = 0; i < rep_->locs.Size(); i++) {
242-
ReportLocation *loc = rep_->locs[i];
243-
loc->stack = SymbolizeStackId(loc->stack_id);
212+
// added locations have a NULL placeholder - don't dereference them
213+
if (ReportLocation *loc = rep_->locs[i])
214+
loc->stack = SymbolizeStackId(loc->stack_id);
244215
}
245216

246-
usize offset = 0;
217+
// symbolize any added locations
247218
for (usize i = 0; i < rep_->added_location_addrs.Size(); i++) {
248-
struct AddedLocationAddr *added_loc = &rep_->added_location_addrs[i];
219+
AddedLocationAddr *added_loc = &rep_->added_location_addrs[i];
249220
if (ReportLocation *loc = SymbolizeData(added_loc->addr)) {
250-
offset++;
251221
loc->suppressable = true;
252222
rep_->locs[added_loc->locs_idx] = loc;
253223
}
254224
}
255225

256-
// Check that all locs are populated (no-op in release)
226+
// Filter out any added location placeholders that could not be symbolized
227+
Vector<ReportLocation *> filtered_locs;
257228
for (usize i = 0; i < rep_->locs.Size(); i++)
258-
CHECK_NE(rep_->locs[i], nullptr);
229+
if (rep_->locs[i] != nullptr)
230+
filtered_locs.PushBack(rep_->locs[i]);
231+
rep_->locs.Resize(filtered_locs.Size());
232+
for (usize i = 0; i < filtered_locs.Size(); i++)
233+
rep_->locs[i] = (filtered_locs[i]);
259234

260235
// symbolize threads
261236
for (usize i = 0; i < rep_->threads.Size(); i++) {
@@ -396,6 +371,7 @@ void ScopedReportBase::AddLocation(uptr addr, uptr size) {
396371
}
397372
#endif
398373
rep_->added_location_addrs.PushBack({addr, rep_->locs.Size()});
374+
rep_->locs.PushBack(nullptr);
399375
}
400376

401377
#if !SANITIZER_GO

0 commit comments

Comments
 (0)