[compiler-rt] r282157 - tsan: fix bug introduced in 282152

Dmitry Vyukov via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 22 07:33:44 PDT 2016


Author: dvyukov
Date: Thu Sep 22 09:33:43 2016
New Revision: 282157

URL: http://llvm.org/viewvc/llvm-project?rev=282157&view=rev
Log:
tsan: fix bug introduced in 282152

In ShadowToMem we call MemToShadow potentially for incorrect addresses.
So DCHECK(IsAppMem(p)) can fire in debug mode.
Fix this by swapping range and MemToShadow checks.


Modified:
    compiler-rt/trunk/lib/tsan/rtl/tsan_platform.h

Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_platform.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_platform.h?rev=282157&r1=282156&r2=282157&view=diff
==============================================================================
--- compiler-rt/trunk/lib/tsan/rtl/tsan_platform.h (original)
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_platform.h Thu Sep 22 09:33:43 2016
@@ -703,13 +703,13 @@ uptr ShadowToMemImpl(uptr s) {
   // range consecutively and see if shadow->app->shadow mapping gives us the
   // same address.
   uptr p = (s / kShadowCnt) ^ Mapping::kAppMemXor;
-  if (MemToShadow(p) == s &&
-      p >= Mapping::kLoAppMemBeg && p < Mapping::kLoAppMemEnd)
+  if (p >= Mapping::kLoAppMemBeg && p < Mapping::kLoAppMemEnd &&
+      MemToShadow(p) == s)
     return p;
 # ifdef TSAN_MID_APP_RANGE
   p = ((s / kShadowCnt) ^ Mapping::kAppMemXor) + Mapping::kMidShadowOff;
-  if (MemToShadow(p) == s &&
-      p >= Mapping::kMidAppMemBeg && p < Mapping::kMidAppMemEnd)
+  if (p >= Mapping::kMidAppMemBeg && p < Mapping::kMidAppMemEnd &&
+      MemToShadow(p) == s)
     return p;
 # endif
   return ((s / kShadowCnt) ^ Mapping::kAppMemXor) | Mapping::kAppMemMsk;




More information about the llvm-commits mailing list