diff options
| -rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_suppressions.cc | 16 | ||||
| -rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_suppressions.h | 2 | ||||
| -rw-r--r-- | compiler-rt/lib/tsan/unit_tests/tsan_suppressions_test.cc | 24 |
3 files changed, 22 insertions, 20 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_suppressions.cc b/compiler-rt/lib/tsan/rtl/tsan_suppressions.cc index a27a4bf9017..2c7c318a13c 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_suppressions.cc +++ b/compiler-rt/lib/tsan/rtl/tsan_suppressions.cc @@ -53,6 +53,8 @@ static char *ReadFile(const char *filename) { } bool SuppressionMatch(char *templ, const char *str) { + if (str == 0 || str[0] == 0) + return false; char *tpos; const char *spos; while (templ && templ[0]) { @@ -114,9 +116,9 @@ Suppression *SuppressionParse(const char* supp) { s->next = head; head = s; s->type = stype; - s->func = (char*)internal_alloc(MBlockSuppression, end2 - line + 1); - internal_memcpy(s->func, line, end2 - line); - s->func[end2 - line] = 0; + s->templ = (char*)internal_alloc(MBlockSuppression, end2 - line + 1); + internal_memcpy(s->templ, line, end2 - line); + s->templ[end2 - line] = 0; } if (end[0] == 0) break; @@ -145,11 +147,11 @@ bool IsSuppressed(ReportType typ, const ReportStack *stack) { else return false; for (const ReportStack *frame = stack; frame; frame = frame->next) { - if (frame->func == 0) - continue; for (Suppression *supp = g_suppressions; supp; supp = supp->next) { - if (stype == supp->type && SuppressionMatch(supp->func, frame->func)) { - DPrintf("ThreadSanitizer: matched suppression '%s'\n", supp->func); + if (stype == supp->type || + SuppressionMatch(supp->templ, frame->func) || + SuppressionMatch(supp->templ, frame->file)) { + DPrintf("ThreadSanitizer: matched suppression '%s'\n", supp->templ); return true; } } diff --git a/compiler-rt/lib/tsan/rtl/tsan_suppressions.h b/compiler-rt/lib/tsan/rtl/tsan_suppressions.h index 606ca6fd49f..29311c123d6 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_suppressions.h +++ b/compiler-rt/lib/tsan/rtl/tsan_suppressions.h @@ -32,7 +32,7 @@ enum SuppressionType { struct Suppression { Suppression *next; SuppressionType type; - char *func; + char *templ; }; Suppression *SuppressionParse(const char* supp); diff --git a/compiler-rt/lib/tsan/unit_tests/tsan_suppressions_test.cc b/compiler-rt/lib/tsan/unit_tests/tsan_suppressions_test.cc index 1c0ff1bdee0..f94e529bcd2 100644 --- a/compiler-rt/lib/tsan/unit_tests/tsan_suppressions_test.cc +++ b/compiler-rt/lib/tsan/unit_tests/tsan_suppressions_test.cc @@ -29,16 +29,16 @@ TEST(Suppressions, Parse) { ); // NOLINT Suppression *supp = supp0; EXPECT_EQ(supp->type, SuppressionRace); - EXPECT_EQ(0, strcmp(supp->func, "quz")); + EXPECT_EQ(0, strcmp(supp->templ, "quz")); supp = supp->next; EXPECT_EQ(supp->type, SuppressionRace); - EXPECT_EQ(0, strcmp(supp->func, "baz")); + EXPECT_EQ(0, strcmp(supp->templ, "baz")); supp = supp->next; EXPECT_EQ(supp->type, SuppressionRace); - EXPECT_EQ(0, strcmp(supp->func, "bar")); + EXPECT_EQ(0, strcmp(supp->templ, "bar")); supp = supp->next; EXPECT_EQ(supp->type, SuppressionRace); - EXPECT_EQ(0, strcmp(supp->func, "foo")); + EXPECT_EQ(0, strcmp(supp->templ, "foo")); supp = supp->next; EXPECT_EQ((Suppression*)0, supp); } @@ -54,10 +54,10 @@ TEST(Suppressions, Parse2) { ); // NOLINT Suppression *supp = supp0; EXPECT_EQ(supp->type, SuppressionRace); - EXPECT_EQ(0, strcmp(supp->func, "baz* *baz")); + EXPECT_EQ(0, strcmp(supp->templ, "baz* *baz")); supp = supp->next; EXPECT_EQ(supp->type, SuppressionRace); - EXPECT_EQ(0, strcmp(supp->func, "bar")); + EXPECT_EQ(0, strcmp(supp->templ, "bar")); supp = supp->next; EXPECT_EQ((Suppression*)0, supp); } @@ -71,10 +71,10 @@ TEST(Suppressions, Parse3) { ); // NOLINT Suppression *supp = supp0; EXPECT_EQ(supp->type, SuppressionRace); - EXPECT_EQ(0, strcmp(supp->func, "bar")); + EXPECT_EQ(0, strcmp(supp->templ, "bar")); supp = supp->next; EXPECT_EQ(supp->type, SuppressionRace); - EXPECT_EQ(0, strcmp(supp->func, "foo")); + EXPECT_EQ(0, strcmp(supp->templ, "foo")); supp = supp->next; EXPECT_EQ((Suppression*)0, supp); } @@ -89,16 +89,16 @@ TEST(Suppressions, ParseType) { ); // NOLINT Suppression *supp = supp0; EXPECT_EQ(supp->type, SuppressionSignal); - EXPECT_EQ(0, strcmp(supp->func, "quz")); + EXPECT_EQ(0, strcmp(supp->templ, "quz")); supp = supp->next; EXPECT_EQ(supp->type, SuppressionMutex); - EXPECT_EQ(0, strcmp(supp->func, "baz")); + EXPECT_EQ(0, strcmp(supp->templ, "baz")); supp = supp->next; EXPECT_EQ(supp->type, SuppressionThread); - EXPECT_EQ(0, strcmp(supp->func, "bar")); + EXPECT_EQ(0, strcmp(supp->templ, "bar")); supp = supp->next; EXPECT_EQ(supp->type, SuppressionRace); - EXPECT_EQ(0, strcmp(supp->func, "foo")); + EXPECT_EQ(0, strcmp(supp->templ, "foo")); supp = supp->next; EXPECT_EQ((Suppression*)0, supp); } |

