return 0;
}
-static ReportStack *SkipTsanInternalFrame(ReportStack *ent) {
- if (FrameIsInternal(ent) && ent->next)
- return ent->next;
+ReportStack *SkipTsanInternalFrames(ReportStack *ent) {
+ while (FrameIsInternal(ent) && ent->next)
+ ent = ent->next;
return ent;
}
for (uptr i = 0; i < rep->threads.Size(); i++)
PrintThread(rep->threads[i]);
- if (ReportStack *ent = SkipTsanInternalFrame(ChooseSummaryStack(rep)))
+ if (ReportStack *ent = SkipTsanInternalFrames(ChooseSummaryStack(rep)))
ReportErrorSummary(rep_typ_str, ent->file, ent->line, ent->func);
Printf("==================\n");
const StackTrace &trace);
bool IsExpectedReport(uptr addr, uptr size);
bool FrameIsInternal(const ReportStack *frame);
+ReportStack *SkipTsanInternalFrames(ReportStack *ent);
#if defined(TSAN_DEBUG_OUTPUT) && TSAN_DEBUG_OUTPUT >= 1
# define DPrintf Printf
&& frame->module == 0)) {
return true;
}
- if (FrameIsInternal(frame)) {
- frame = frame->next;
- if (frame == 0
- || (frame->func == 0 && frame->file == 0 && frame->line == 0
- && frame->module == 0)) {
- if (frame) {
- FiredSuppression supp = {rep->typ, frame->pc};
- CTX()->fired_suppressions.PushBack(supp);
- }
- return true;
- }
+ frame = SkipTsanInternalFrames(frame);
+ if (frame->next == 0
+ || (frame->func == 0 && frame->file == 0 && frame->line == 0
+ && frame->module == 0)) {
+ CHECK(frame);
+ FiredSuppression supp = {rep->typ, frame->pc};
+ CTX()->fired_suppressions.PushBack(supp);
+ return true;
}
}
return false;