[compiler-rt] 9c98a98 - [NFC][Asan] CRLF to LF in a test

Vitaly Buka via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 16 15:19:12 PDT 2025


Author: Vitaly Buka
Date: 2025-04-16T15:18:46-07:00
New Revision: 9c98a9801dff79ea7e440f2a45f669be2cdc965b

URL: https://github.com/llvm/llvm-project/commit/9c98a9801dff79ea7e440f2a45f669be2cdc965b
DIFF: https://github.com/llvm/llvm-project/commit/9c98a9801dff79ea7e440f2a45f669be2cdc965b.diff

LOG: [NFC][Asan] CRLF to LF in a test

Added: 
    

Modified: 
    compiler-rt/test/asan/TestCases/asan_lsan_deadlock.cpp

Removed: 
    


################################################################################
diff  --git a/compiler-rt/test/asan/TestCases/asan_lsan_deadlock.cpp b/compiler-rt/test/asan/TestCases/asan_lsan_deadlock.cpp
index 4e1a2415ad013..28ce4e3e81b23 100644
--- a/compiler-rt/test/asan/TestCases/asan_lsan_deadlock.cpp
+++ b/compiler-rt/test/asan/TestCases/asan_lsan_deadlock.cpp
@@ -1,72 +1,72 @@
-// Test for potential deadlock in LeakSanitizer+AddressSanitizer.
-// REQUIRES: leak-detection
-//
-// RUN: %clangxx_asan -O0 %s -o %t
-// RUN: %env_asan_opts=detect_leaks=1 not %run %t 2>&1 | FileCheck %s
-
-/*
- * Purpose: Verify deadlock prevention between ASan error reporting and LSan leak checking.
- * 
- * Test Design:
- * 1. Creates contention scenario between:
- *    - ASan's error reporting (requires lock B -> lock A ordering)
- *    - LSan's leak check (requires lock A -> lock B ordering)
- * 2. Thread timing:
- *    - Main thread: Holds 'in' mutex -> Triggers LSan check (lock A then B) 
- *    - Worker thread: Triggers ASan OOB error (lock B then A via symbolization)
- * 
- * Deadlock Condition (if unfixed):
- * Circular lock dependency forms when:
- * [Main Thread] LSan: lock A -> requests lock B
- * [Worker Thread] ASan: lock B -> requests lock A
- * 
- * Success Criteria: 
- * With proper lock ordering enforcement, watchdog should NOT trigger - test exits normally.
- * If deadlock occurs, watchdog terminates via _exit(1) after 10s timeout.
- */
-
-#include <mutex>
-#include <sanitizer/lsan_interface.h>
-#include <stdio.h>
-#include <thread>
-#include <unistd.h>
-
-void Watchdog() {
-  // Safety mechanism: Turn infinite deadlock into finite test failure
-  usleep(10000000);
-  // CHECK-NOT: Timeout! Deadlock detected.
-  puts("Timeout! Deadlock detected.");
-  fflush(stdout);
-  _exit(1);
-}
-
-int main(int argc, char **argv) {
-  int arr[1] = {0};
-  std::mutex in;
-  in.lock();
-
-  std::thread w(Watchdog);
-  w.detach();
-
-  std::thread t([&]() {
-    in.unlock();
-    /* 
-     * Provoke ASan error: ASan's error reporting acquires: 
-     * 1. ASan's thread registry lock (B) during the reporting 
-     * 2. dl_iterate_phdr lock (A) during symbolization
-     */
-    // CHECK: SUMMARY: AddressSanitizer: stack-buffer-overflow
-    arr[argc] = 1; // Deliberate OOB access
-  });
-
-  in.lock();
-  /* 
-   * Critical section: LSan's check acquires: 
-   * 1. dl_iterate_phdr lock (A)
-   * 2. ASan's thread registry lock (B)
-   * before Stop The World.
-   */
-  __lsan_do_leak_check();
-  t.join();
-  return 0;
-}
+// Test for potential deadlock in LeakSanitizer+AddressSanitizer.
+// REQUIRES: leak-detection
+//
+// RUN: %clangxx_asan -O0 %s -o %t
+// RUN: %env_asan_opts=detect_leaks=1 not %run %t 2>&1 | FileCheck %s
+
+/*
+ * Purpose: Verify deadlock prevention between ASan error reporting and LSan leak checking.
+ * 
+ * Test Design:
+ * 1. Creates contention scenario between:
+ *    - ASan's error reporting (requires lock B -> lock A ordering)
+ *    - LSan's leak check (requires lock A -> lock B ordering)
+ * 2. Thread timing:
+ *    - Main thread: Holds 'in' mutex -> Triggers LSan check (lock A then B) 
+ *    - Worker thread: Triggers ASan OOB error (lock B then A via symbolization)
+ * 
+ * Deadlock Condition (if unfixed):
+ * Circular lock dependency forms when:
+ * [Main Thread] LSan: lock A -> requests lock B
+ * [Worker Thread] ASan: lock B -> requests lock A
+ * 
+ * Success Criteria: 
+ * With proper lock ordering enforcement, watchdog should NOT trigger - test exits normally.
+ * If deadlock occurs, watchdog terminates via _exit(1) after 10s timeout.
+ */
+
+#include <mutex>
+#include <sanitizer/lsan_interface.h>
+#include <stdio.h>
+#include <thread>
+#include <unistd.h>
+
+void Watchdog() {
+  // Safety mechanism: Turn infinite deadlock into finite test failure
+  usleep(10000000);
+  // CHECK-NOT: Timeout! Deadlock detected.
+  puts("Timeout! Deadlock detected.");
+  fflush(stdout);
+  _exit(1);
+}
+
+int main(int argc, char **argv) {
+  int arr[1] = {0};
+  std::mutex in;
+  in.lock();
+
+  std::thread w(Watchdog);
+  w.detach();
+
+  std::thread t([&]() {
+    in.unlock();
+    /* 
+     * Provoke ASan error: ASan's error reporting acquires: 
+     * 1. ASan's thread registry lock (B) during the reporting 
+     * 2. dl_iterate_phdr lock (A) during symbolization
+     */
+    // CHECK: SUMMARY: AddressSanitizer: stack-buffer-overflow
+    arr[argc] = 1; // Deliberate OOB access
+  });
+
+  in.lock();
+  /* 
+   * Critical section: LSan's check acquires: 
+   * 1. dl_iterate_phdr lock (A)
+   * 2. ASan's thread registry lock (B)
+   * before Stop The World.
+   */
+  __lsan_do_leak_check();
+  t.join();
+  return 0;
+}


        


More information about the llvm-commits mailing list