aboutsummaryrefslogtreecommitdiff
path: root/lib/tsan
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-06-16 21:03:53 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-06-16 21:03:53 +0000
commit4658ff5fee0369e08fe69bce90019fad154d9330 (patch)
tree5ac9da286baff9e296c083f060fc58b2e53b63bf /lib/tsan
parent7edd24de96f22ad70fd3ca16a3c51723383cd58b (diff)
downloadsrc-4658ff5fee0369e08fe69bce90019fad154d9330.tar.gz
src-4658ff5fee0369e08fe69bce90019fad154d9330.zip
Vendor import of compiler-rt trunk r305575:vendor/compiler-rt/compiler-rt-trunk-r305575
Notes
Notes: svn path=/vendor/compiler-rt/dist/; revision=320017 svn path=/vendor/compiler-rt/compiler-rt-trunk-r305575/; revision=320018; tag=vendor/compiler-rt/compiler-rt-trunk-r305575
Diffstat (limited to 'lib/tsan')
-rw-r--r--lib/tsan/rtl/tsan_report.cc8
-rw-r--r--lib/tsan/rtl/tsan_sync.h2
2 files changed, 6 insertions, 4 deletions
diff --git a/lib/tsan/rtl/tsan_report.cc b/lib/tsan/rtl/tsan_report.cc
index 2de7ffc746fd..32cc3325fe40 100644
--- a/lib/tsan/rtl/tsan_report.cc
+++ b/lib/tsan/rtl/tsan_report.cc
@@ -92,7 +92,8 @@ static const char *ReportTypeString(ReportType typ, uptr tag) {
if (typ == ReportTypeVptrUseAfterFree)
return "heap-use-after-free (virtual call vs free)";
if (typ == ReportTypeExternalRace) {
- return GetReportHeaderFromTag(tag) ?: "race on external object";
+ const char *str = GetReportHeaderFromTag(tag);
+ return str ? str : "race on external object";
}
if (typ == ReportTypeThreadLeak)
return "thread leak";
@@ -170,8 +171,9 @@ static void PrintMop(const ReportMop *mop, bool first) {
MopDesc(first, mop->write, mop->atomic), mop->size,
(void *)mop->addr, thread_name(thrbuf, mop->tid));
} else {
- const char *object_type =
- GetObjectTypeFromTag(mop->external_tag) ?: "external object";
+ const char *object_type = GetObjectTypeFromTag(mop->external_tag);
+ if (object_type == nullptr)
+ object_type = "external object";
Printf(" %s access of %s at %p by %s",
ExternalMopDesc(first, mop->write), object_type,
(void *)mop->addr, thread_name(thrbuf, mop->tid));
diff --git a/lib/tsan/rtl/tsan_sync.h b/lib/tsan/rtl/tsan_sync.h
index d24d69762171..b83c09ff784e 100644
--- a/lib/tsan/rtl/tsan_sync.h
+++ b/lib/tsan/rtl/tsan_sync.h
@@ -83,7 +83,7 @@ struct SyncVar {
}
bool IsFlagSet(u32 f) const {
- return atomic_load_relaxed(&flags);
+ return atomic_load_relaxed(&flags) & f;
}
void SetFlags(u32 f) {