[compiler-rt] r192698 - tsan: refactor overly-complex logical condition

Dmitry Vyukov dvyukov at google.com
Tue Oct 15 06:04:42 PDT 2013


Author: dvyukov
Date: Tue Oct 15 08:04:42 2013
New Revision: 192698

URL: http://llvm.org/viewvc/llvm-project?rev=192698&view=rev
Log:
tsan: refactor overly-complex logical condition


Modified:
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_libignore.cc

Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_libignore.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_libignore.cc?rev=192698&r1=192697&r2=192698&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_libignore.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_libignore.cc Tue Oct 15 08:04:42 2013
@@ -46,39 +46,45 @@ void LibIgnore::OnLibraryLoaded(const ch
 
   BlockingMutexLock lock(&mutex_);
   MemoryMappingLayout proc_maps(/*cache_enabled*/false);
-  InternalScopedBuffer<char> fn(4096);
+  InternalScopedBuffer<char> module(4096);
   for (uptr i = 0; i < count_; i++) {
     Lib *lib = &libs_[i];
     bool loaded = false;
     proc_maps.Reset();
     uptr b, e, off, prot;
-    while (proc_maps.Next(&b, &e, &off, fn.data(), fn.size(), &prot)) {
+    while (proc_maps.Next(&b, &e, &off, module.data(), module.size(), &prot)) {
+      if ((prot & MemoryMappingLayout::kProtectionExecute) == 0)
+        continue;
+      bool matched = false;
       bool symlink = false;
-      if (((prot & MemoryMappingLayout::kProtectionExecute) != 0) &&
-          (TemplateMatch(lib->templ, fn.data()) ||
-          // Resolve symlinks.
-          (real_name != 0 && real_name[0] != 0 &&
+      if (TemplateMatch(lib->templ, module.data()))
+        matched = true;
+      // Resolve symlinks.
+      if (real_name != 0 && real_name[0] != 0 &&
           TemplateMatch(lib->templ, name) &&
-          internal_strcmp(real_name, fn.data()) == 0 &&
-          (symlink = true)))) {
-        if (loaded) {
-          Report("%s: called_from_lib suppression '%s' is matched against"
-                 " 2 libraries: '%s' and '%s'\n",
-                 SanitizerToolName, lib->templ, lib->name, fn.data());
-          Die();
-        }
-        loaded = true;
-        if (!lib->loaded) {
-          lib->loaded = true;
-          lib->name = internal_strdup(fn.data());
-          if (symlink)
-            lib->real_name = internal_strdup(real_name);
-          const uptr idx = atomic_load(&loaded_count_, memory_order_relaxed);
-          code_ranges_[idx].begin = b;
-          code_ranges_[idx].end = e;
-          atomic_store(&loaded_count_, idx + 1, memory_order_release);
-        }
+          internal_strcmp(real_name, module.data()) == 0) {
+        matched = true;
+        symlink = true;
       }
+      if (!matched)
+        continue;
+      if (loaded) {
+        Report("%s: called_from_lib suppression '%s' is matched against"
+               " 2 libraries: '%s' and '%s'\n",
+               SanitizerToolName, lib->templ, lib->name, module.data());
+        Die();
+      }
+      loaded = true;
+      if (lib->loaded)
+        continue;
+      lib->loaded = true;
+      lib->name = internal_strdup(module.data());
+      if (symlink)
+        lib->real_name = internal_strdup(real_name);
+      const uptr idx = atomic_load(&loaded_count_, memory_order_relaxed);
+      code_ranges_[idx].begin = b;
+      code_ranges_[idx].end = e;
+      atomic_store(&loaded_count_, idx + 1, memory_order_release);
     }
     if (lib->loaded && !loaded) {
       Report("%s: library '%s' that was matched against called_from_lib"





More information about the llvm-commits mailing list