[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