[compiler-rt] [compiler-rt][asan][tests] Reland: Stabilize wchar tests on Darwin/Android (test-only) (PR #162002)

Yixuan Cao via llvm-commits llvm-commits at lists.llvm.org
Sun Oct 5 02:50:02 PDT 2025


https://github.com/Cao-Wuhui created https://github.com/llvm/llvm-project/pull/162002

Reland of #161624, depends on revert [#162001](https://github.com/llvm/llvm-project/pull/162001). NFC: test-only.

- Android: keep `%env_asan_opts=log_to_stderr=1` to route the ASan header to stderr.
- Darwin: use a DAG group for the two potentially reordered lines:
  - `// CHECK-DAG: Good so far.`
  - `// CHECK-DAG: ERROR: AddressSanitizer: stack-buffer-overflow on address [[ADDR:...]] at pc {{...}} bp {{...}} sp {{...}}`
- Then enforce strict order:
  - `// CHECK: WRITE of size {{[0-9]+}} at [[ADDR]] thread T0`
  - `// CHECK: #0 {{0x[0-9a-f]+}} in <func>`

>From 9a7f6740cdd7340889fbf437a3eef153a935c2a7 Mon Sep 17 00:00:00 2001
From: Yixuan Cao <caoyixuan2019 at email.szu.edu.cn>
Date: Sun, 5 Oct 2025 17:21:28 +0800
Subject: [PATCH] [compiler-rt][asan][tests] Reland: Stabilize wchar tests on
 Darwin/Android (test-only)

Reland of #161624; depends on revert #162001.

- Android: keep %env_asan_opts=log_to_stderr=1.
- Darwin: use CHECK-DAG for the pre-crash marker and header; frame line matches function only.
- Common: reuse [[ADDR]].

NFC: test-only.

Signed-off-by: Yixuan Cao <caoyixuan2019 at email.szu.edu.cn>
---
 compiler-rt/test/asan/TestCases/wcscat.cpp  | 4 ++--
 compiler-rt/test/asan/TestCases/wcscpy.cpp  | 4 ++--
 compiler-rt/test/asan/TestCases/wcsncat.cpp | 4 ++--
 compiler-rt/test/asan/TestCases/wcsncpy.cpp | 4 ++--
 4 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/compiler-rt/test/asan/TestCases/wcscat.cpp b/compiler-rt/test/asan/TestCases/wcscat.cpp
index f0a8ec12580b3..1dde1262cd0f3 100644
--- a/compiler-rt/test/asan/TestCases/wcscat.cpp
+++ b/compiler-rt/test/asan/TestCases/wcscat.cpp
@@ -16,10 +16,10 @@ int main() {
   wchar_t badDst[9];
   wcscpy(badDst, start);
   fprintf(stderr, "Good so far.\n");
-  // CHECK: Good so far.
+  // CHECK-DAG: Good so far.
   fflush(stderr);
   wcscat(badDst, append); // Boom!
-  // CHECK: ERROR: AddressSanitizer: stack-buffer-overflow on address [[ADDR:0x[0-9a-f]+]] at pc {{0x[0-9a-f]+}} bp {{0x[0-9a-f]+}} sp {{0x[0-9a-f]+}}
+  // CHECK-DAG: ERROR: AddressSanitizer: stack-buffer-overflow on address [[ADDR:0x[0-9a-f]+]] at pc {{0x[0-9a-f]+}} bp {{0x[0-9a-f]+}} sp {{0x[0-9a-f]+}}
   // CHECK: WRITE of size {{[0-9]+}} at [[ADDR]] thread T0
   // CHECK: #0 {{0x[0-9a-f]+}} in wcscat
   printf("Should have failed with ASAN error.\n");
diff --git a/compiler-rt/test/asan/TestCases/wcscpy.cpp b/compiler-rt/test/asan/TestCases/wcscpy.cpp
index a280d29289e37..2553e428e5464 100644
--- a/compiler-rt/test/asan/TestCases/wcscpy.cpp
+++ b/compiler-rt/test/asan/TestCases/wcscpy.cpp
@@ -13,10 +13,10 @@ int main() {
 
   wchar_t badDst[7];
   fprintf(stderr, "Good so far.\n");
-  // CHECK: Good so far.
+  // CHECK-DAG: Good so far.
   fflush(stderr);
   wcscpy(badDst, src); // Boom!
-  // CHECK: ERROR: AddressSanitizer: stack-buffer-overflow on address [[ADDR:0x[0-9a-f]+]] at pc {{0x[0-9a-f]+}} bp {{0x[0-9a-f]+}} sp {{0x[0-9a-f]+}}
+  // CHECK-DAG: ERROR: AddressSanitizer: stack-buffer-overflow on address [[ADDR:0x[0-9a-f]+]] at pc {{0x[0-9a-f]+}} bp {{0x[0-9a-f]+}} sp {{0x[0-9a-f]+}}
   // CHECK: WRITE of size {{[0-9]+}} at [[ADDR]] thread T0
   // CHECK: #0 {{0x[0-9a-f]+}} in wcscpy
   printf("Should have failed with ASAN error.\n");
diff --git a/compiler-rt/test/asan/TestCases/wcsncat.cpp b/compiler-rt/test/asan/TestCases/wcsncat.cpp
index eb7d095e45c7a..fdf4247532e45 100644
--- a/compiler-rt/test/asan/TestCases/wcsncat.cpp
+++ b/compiler-rt/test/asan/TestCases/wcsncat.cpp
@@ -17,10 +17,10 @@ int main() {
   wcscpy(badDst, start);
   wcsncat(badDst, append, 1);
   fprintf(stderr, "Good so far.\n");
-  // CHECK: Good so far.
+  // CHECK-DAG: Good so far.
   fflush(stderr);
   wcsncat(badDst, append, 3); // Boom!
-  // CHECK: ERROR: AddressSanitizer: stack-buffer-overflow on address [[ADDR:0x[0-9a-f]+]] at pc {{0x[0-9a-f]+}} bp {{0x[0-9a-f]+}} sp {{0x[0-9a-f]+}}
+  // CHECK-DAG: ERROR: AddressSanitizer: stack-buffer-overflow on address [[ADDR:0x[0-9a-f]+]] at pc {{0x[0-9a-f]+}} bp {{0x[0-9a-f]+}} sp {{0x[0-9a-f]+}}
   // CHECK: WRITE of size {{[0-9]+}} at [[ADDR]] thread T0
   // CHECK: #0 {{0x[0-9a-f]+}} in wcsncat
   printf("Should have failed with ASAN error.\n");
diff --git a/compiler-rt/test/asan/TestCases/wcsncpy.cpp b/compiler-rt/test/asan/TestCases/wcsncpy.cpp
index 1106bf5d264e5..70824e0d06c5a 100644
--- a/compiler-rt/test/asan/TestCases/wcsncpy.cpp
+++ b/compiler-rt/test/asan/TestCases/wcsncpy.cpp
@@ -14,11 +14,11 @@ int main() {
   wchar_t badDst[7];
   wcsncpy(badDst, src, 7); // This should still work.
   fprintf(stderr, "Good so far.\n");
-  // CHECK: Good so far.
+  // CHECK-DAG: Good so far.
   fflush(stderr);
 
   wcsncpy(badDst, src, 15); // Boom!
-  // CHECK: ERROR: AddressSanitizer: stack-buffer-overflow on address [[ADDR:0x[0-9a-f]+]] at pc {{0x[0-9a-f]+}} bp {{0x[0-9a-f]+}} sp {{0x[0-9a-f]+}}
+  // CHECK-DAG: ERROR: AddressSanitizer: stack-buffer-overflow on address [[ADDR:0x[0-9a-f]+]] at pc {{0x[0-9a-f]+}} bp {{0x[0-9a-f]+}} sp {{0x[0-9a-f]+}}
   // CHECK: WRITE of size {{[0-9]+}} at [[ADDR]] thread T0
   // CHECK: #0 {{0x[0-9a-f]+}} in wcsncpy
   printf("Should have failed with ASAN error.\n");



More information about the llvm-commits mailing list