Skip to content

Conversation

Cao-Wuhui
Copy link
Contributor

Summary

Stabilize ASan wchar tests across Darwin and Android. NFC: test-only. Follow-up to PR #160493 (adds wchar interceptors/tests).

Motivation

  • Darwin: The top frame often resolves to libclang_rt.asan_* rather than a source file, so strict checks that include file/line can fail. See Chromium issue 448631142.
  • Android: The “ERROR:” header can go to logcat instead of stderr, so FileCheck may not see it; stdout/stderr reordering also makes pre-crash markers racy. See Android Buildbot 186/12821.

Changes

  • Android:
    • Force reports to stderr via %env_asan_opts=log_to_stderr=1, avoiding the “ERROR:” header going to logcat.
    • Print the pre-crash “Good so far.” to stderr and fflush(stderr) to avoid stdout/stderr reordering.
  • Darwin:
    • Relax the stack-frame check to only require the function name (wcscpy/wcsncpy/wcscat/wcsncat) to tolerate libclang_rt.asan_* frames.
  • Common:
    • Reuse FileCheck var [[ADDR]] instead of redefining.
    • Make wide string literals const wchar_t* to silence -Wwritable-strings.

Risk

  • NFC: test-only; no change to runtime behavior.

References

Android: Force ASan reports to stderr via %env_asan_opts=log_to_stderr=1 to avoid the ERROR header going to logcat. Keep pre-crash marker on stderr and flush to prevent stdout/stderr reordering. Refs: Android buildbot llvm#186/12821: https://lab.llvm.org/buildbot/#/builders/186/builds/12821

Darwin: Relax stack-frame check to only require the function name (wcscpy/wcsncpy/wcscat/wcsncat). Refs: chromium issue 448631142: https://g-issues.chromium.org/issues/448631142

Common: Print "Good so far." to stderr and fflush(stderr); reuse FileCheck var [[ADDR]]; use const wchar_t* to silence -Wwritable-strings.

NFC: test-only.
Signed-off-by: Yixuan Cao <caoyixuan2019@email.szu.edu.cn>
@llvmbot
Copy link
Member

llvmbot commented Oct 2, 2025

@llvm/pr-subscribers-compiler-rt-sanitizer

Author: Yixuan Cao (Cao-Wuhui)

Changes

Summary

Stabilize ASan wchar tests across Darwin and Android. NFC: test-only. Follow-up to PR #160493 (adds wchar interceptors/tests).

Motivation

  • Darwin: The top frame often resolves to libclang_rt.asan_* rather than a source file, so strict checks that include file/line can fail. See Chromium issue 448631142.
  • Android: The “ERROR:” header can go to logcat instead of stderr, so FileCheck may not see it; stdout/stderr reordering also makes pre-crash markers racy. See Android Buildbot 186/12821.

Changes

  • Android:
    • Force reports to stderr via %env_asan_opts=log_to_stderr=1, avoiding the “ERROR:” header going to logcat.
    • Print the pre-crash “Good so far.” to stderr and fflush(stderr) to avoid stdout/stderr reordering.
  • Darwin:
    • Relax the stack-frame check to only require the function name (wcscpy/wcsncpy/wcscat/wcsncat) to tolerate libclang_rt.asan_* frames.
  • Common:
    • Reuse FileCheck var [[ADDR]] instead of redefining.
    • Make wide string literals const wchar_t* to silence -Wwritable-strings.

Risk

  • NFC: test-only; no change to runtime behavior.

References

  • Follow-up to PR #160493.
  • Chromium: 448631142 (Darwin failures).
  • Android Buildbot: 186/12821.

Full diff: https://github.com/llvm/llvm-project/pull/161624.diff

4 Files Affected:

  • (modified) compiler-rt/test/asan/TestCases/wcscat.cpp (+10-10)
  • (modified) compiler-rt/test/asan/TestCases/wcscpy.cpp (+10-10)
  • (modified) compiler-rt/test/asan/TestCases/wcsncat.cpp (+10-10)
  • (modified) compiler-rt/test/asan/TestCases/wcsncpy.cpp (+10-10)
diff --git a/compiler-rt/test/asan/TestCases/wcscat.cpp b/compiler-rt/test/asan/TestCases/wcscat.cpp
index dcdff88c18ef1..f0a8ec12580b3 100644
--- a/compiler-rt/test/asan/TestCases/wcscat.cpp
+++ b/compiler-rt/test/asan/TestCases/wcscat.cpp
@@ -1,26 +1,26 @@
-// RUN: %clangxx_asan -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
-// RUN: %clangxx_asan -O1 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
-// RUN: %clangxx_asan -O2 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
-// RUN: %clangxx_asan -O3 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
+// RUN: %clangxx_asan -O0 %s -o %t && not %env_asan_opts=log_to_stderr=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
+// RUN: %clangxx_asan -O1 %s -o %t && not %env_asan_opts=log_to_stderr=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
+// RUN: %clangxx_asan -O2 %s -o %t && not %env_asan_opts=log_to_stderr=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
+// RUN: %clangxx_asan -O3 %s -o %t && not %env_asan_opts=log_to_stderr=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
 
 #include <stdio.h>
 #include <wchar.h>
 
 int main() {
-  wchar_t *start = L"X means ";
-  wchar_t *append = L"dog";
+  const wchar_t *start = L"X means ";
+  const wchar_t *append = L"dog";
   wchar_t goodDst[12];
   wcscpy(goodDst, start);
   wcscat(goodDst, append);
 
   wchar_t badDst[9];
   wcscpy(badDst, start);
-  printf("Good so far.\n");
+  fprintf(stderr, "Good so far.\n");
   // CHECK: Good so far.
-  fflush(stdout);
+  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: WRITE of size {{[0-9]+}} at [[ADDR:0x[0-9a-f]+]] thread T0
-  // CHECK: #0 [[ADDR:0x[0-9a-f]+]] in wcscat{{.*}}sanitizer_common_interceptors.inc:{{[0-9]+}}
+  // 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");
 }
\ No newline at end of file
diff --git a/compiler-rt/test/asan/TestCases/wcscpy.cpp b/compiler-rt/test/asan/TestCases/wcscpy.cpp
index 414d83303a960..a280d29289e37 100644
--- a/compiler-rt/test/asan/TestCases/wcscpy.cpp
+++ b/compiler-rt/test/asan/TestCases/wcscpy.cpp
@@ -1,23 +1,23 @@
-// RUN: %clangxx_asan -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
-// RUN: %clangxx_asan -O1 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
-// RUN: %clangxx_asan -O2 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
-// RUN: %clangxx_asan -O3 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
+// RUN: %clangxx_asan -O0 %s -o %t && not %env_asan_opts=log_to_stderr=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
+// RUN: %clangxx_asan -O1 %s -o %t && not %env_asan_opts=log_to_stderr=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
+// RUN: %clangxx_asan -O2 %s -o %t && not %env_asan_opts=log_to_stderr=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
+// RUN: %clangxx_asan -O3 %s -o %t && not %env_asan_opts=log_to_stderr=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
 
 #include <stdio.h>
 #include <wchar.h>
 
 int main() {
-  wchar_t *src = L"X means dog";
+  const wchar_t *src = L"X means dog";
   wchar_t goodDst[12];
   wcscpy(goodDst, src);
 
   wchar_t badDst[7];
-  printf("Good so far.\n");
+  fprintf(stderr, "Good so far.\n");
   // CHECK: Good so far.
-  fflush(stdout);
+  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: WRITE of size {{[0-9]+}} at [[ADDR:0x[0-9a-f]+]] thread T0
-  // CHECK: #0 [[ADDR:0x[0-9a-f]+]] in wcscpy{{.*}}asan_interceptors.cpp:{{[0-9]+}}
+  // 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: 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");
 }
\ No newline at end of file
diff --git a/compiler-rt/test/asan/TestCases/wcsncat.cpp b/compiler-rt/test/asan/TestCases/wcsncat.cpp
index 3ab7fc8f55d63..eb7d095e45c7a 100644
--- a/compiler-rt/test/asan/TestCases/wcsncat.cpp
+++ b/compiler-rt/test/asan/TestCases/wcsncat.cpp
@@ -1,14 +1,14 @@
-// RUN: %clangxx_asan -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
-// RUN: %clangxx_asan -O1 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
-// RUN: %clangxx_asan -O2 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
-// RUN: %clangxx_asan -O3 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
+// RUN: %clangxx_asan -O0 %s -o %t && not %env_asan_opts=log_to_stderr=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
+// RUN: %clangxx_asan -O1 %s -o %t && not %env_asan_opts=log_to_stderr=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
+// RUN: %clangxx_asan -O2 %s -o %t && not %env_asan_opts=log_to_stderr=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
+// RUN: %clangxx_asan -O3 %s -o %t && not %env_asan_opts=log_to_stderr=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
 
 #include <stdio.h>
 #include <wchar.h>
 
 int main() {
-  wchar_t *start = L"X means ";
-  wchar_t *append = L"dog";
+  const wchar_t *start = L"X means ";
+  const wchar_t *append = L"dog";
   wchar_t goodDst[15];
   wcscpy(goodDst, start);
   wcsncat(goodDst, append, 5);
@@ -16,12 +16,12 @@ int main() {
   wchar_t badDst[11];
   wcscpy(badDst, start);
   wcsncat(badDst, append, 1);
-  printf("Good so far.\n");
+  fprintf(stderr, "Good so far.\n");
   // CHECK: Good so far.
-  fflush(stdout);
+  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: WRITE of size {{[0-9]+}} at [[ADDR:0x[0-9a-f]+]] thread T0
-  // CHECK: #0 [[ADDR:0x[0-9a-f]+]] in wcsncat{{.*}}sanitizer_common_interceptors.inc:{{[0-9]+}}
+  // 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");
 }
\ No newline at end of file
diff --git a/compiler-rt/test/asan/TestCases/wcsncpy.cpp b/compiler-rt/test/asan/TestCases/wcsncpy.cpp
index 6177b72990a0a..1106bf5d264e5 100644
--- a/compiler-rt/test/asan/TestCases/wcsncpy.cpp
+++ b/compiler-rt/test/asan/TestCases/wcsncpy.cpp
@@ -1,25 +1,25 @@
-// RUN: %clangxx_asan -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
-// RUN: %clangxx_asan -O1 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
-// RUN: %clangxx_asan -O2 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
-// RUN: %clangxx_asan -O3 %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
+// RUN: %clangxx_asan -O0 %s -o %t && not %env_asan_opts=log_to_stderr=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
+// RUN: %clangxx_asan -O1 %s -o %t && not %env_asan_opts=log_to_stderr=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
+// RUN: %clangxx_asan -O2 %s -o %t && not %env_asan_opts=log_to_stderr=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
+// RUN: %clangxx_asan -O3 %s -o %t && not %env_asan_opts=log_to_stderr=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
 
 #include <stdio.h>
 #include <wchar.h>
 
 int main() {
-  wchar_t *src = L"X means dog";
+  const wchar_t *src = L"X means dog";
   wchar_t goodDst[12];
   wcsncpy(goodDst, src, 12);
 
   wchar_t badDst[7];
   wcsncpy(badDst, src, 7); // This should still work.
-  printf("Good so far.\n");
+  fprintf(stderr, "Good so far.\n");
   // CHECK: Good so far.
-  fflush(stdout);
+  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: WRITE of size {{[0-9]+}} at [[ADDR:0x[0-9a-f]+]] thread T0
-  // CHECK: #0 [[ADDR:0x[0-9a-f]+]] in wcsncpy{{.*}}asan_interceptors.cpp:{{[0-9]+}}
+  // 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: 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");
 }
\ No newline at end of file

Copy link
Contributor

@thurstond thurstond left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the fix!

For future reference, please note that LLVM encourages reverting first (https://llvm.org/docs/DeveloperPolicy.html#patch-reversion-policy):

'Any time you learn of a serious problem with a change, you should revert it. We strongly encourage “revert to green” as opposed to “fixing forward”. We encourage reverting first, investigating offline, and then reapplying the fixed patch - possibly after another round of review if warranted.'

@thurstond thurstond merged commit bcc85f7 into llvm:main Oct 2, 2025
13 checks passed
mahesh-attarde pushed a commit to mahesh-attarde/llvm-project that referenced this pull request Oct 3, 2025
…lvm#161624)

### Summary
Stabilize ASan wchar tests across Darwin and Android. NFC: test-only.
Follow-up to PR llvm#160493 (adds wchar interceptors/tests).

### Motivation
- Darwin: The top frame often resolves to `libclang_rt.asan_*` rather
than a source file, so strict checks that include file/line can fail.
See Chromium issue
[448631142](https://g-issues.chromium.org/issues/448631142).
- Android: The “ERROR:” header can go to logcat instead of stderr, so
FileCheck may not see it; stdout/stderr reordering also makes pre-crash
markers racy. See Android Buildbot
[186/12821](https://lab.llvm.org/buildbot/#/builders/186/builds/12821).

### Changes
- Android:
- Force reports to stderr via `%env_asan_opts=log_to_stderr=1`, avoiding
the “ERROR:” header going to logcat.
- Print the pre-crash “Good so far.” to stderr and `fflush(stderr)` to
avoid stdout/stderr reordering.
- Darwin:
- Relax the stack-frame check to only require the function name
(`wcscpy/wcsncpy/wcscat/wcsncat`) to tolerate `libclang_rt.asan_*`
frames.
- Common:
  - Reuse FileCheck var `[[ADDR]]` instead of redefining.
- Make wide string literals `const wchar_t*` to silence
`-Wwritable-strings`.

### Risk
- NFC: test-only; no change to runtime behavior.

### References
- Follow-up to PR llvm#160493.
- Chromium: [448631142](https://g-issues.chromium.org/issues/448631142)
(Darwin failures).
- Android Buildbot:
[186/12821](https://lab.llvm.org/buildbot/#/builders/186/builds/12821).

Signed-off-by: Yixuan Cao <caoyixuan2019@email.szu.edu.cn>
@wrotki
Copy link
Contributor

wrotki commented Oct 4, 2025

I can still see the failure on Darwin with this:

`llvm-project/compiler-rt/test/asan/TestCases/wcscat.cpp:22:12: error: CHECK: expected string not found in input
// 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]+}}
^
:49:13: note: scanning from here
Good so far.
^

Input file:
Check file: .../llvm-project/compiler-rt/test/asan/TestCases/wcscat.cpp

-dump-input=help explains the following input dump.

Input was:
<<<<<<
1: =================================================================
2: ==8229==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x00016d45b2b4 at pc 0x000102ee97b4 bp 0x00016d45b210 sp 0x00016d45a9b0
3: WRITE of size 16 at 0x00016d45b2b4 thread T0
4: #0 0x000102ee97b0 in wcscat+0x5b0 (libclang_rt.asan_ios_dynamic.dylib:arm64e+0x317b0)
5: #1 0x0001029a81f8 in main wcscat.cpp:21
6: #2 0x000196b7ed6c ()
7:
8: Address 0x00016d45b2b4 is located in stack of thread T0 at offset 148 in frame
9: #0 0x0001029a800c in main wcscat.cpp:9
10:
11: This frame has 2 object(s):
12: [32, 80) 'goodDst' (line 12)
13: [112, 148) 'badDst' (line 16) <== Memory access at offset 148 overflows this variable
14: HINT: this may be a false positive if your program uses some custom stack unwind mechanism, swapcontext or vfork
15: (longjmp and C++ exceptions are supported)
16: SUMMARY: AddressSanitizer: stack-buffer-overflow wcscat.cpp:21 in main
17: Shadow bytes around the buggy address:
18: 0x00016d45b000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
19: 0x00016d45b080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 0x00016d45b100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
21: 0x00016d45b180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
22: 0x00016d45b200: 00 00 00 00 f1 f1 f1 f1 00 00 00 00 00 00 f2 f2
23: =>0x00016d45b280: f2 f2 00 00 00 00[04]f3 f3 f3 f3 f3 00 00 00 00
24: 0x00016d45b300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
25: 0x00016d45b380: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
26: 0x00016d45b400: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
27: 0x00016d45b480: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
28: 0x00016d45b500: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
29: Shadow byte legend (one shadow byte represents 8 application bytes):
30: Addressable: 00
31: Partially addressable: 01 02 03 04 05 06 07
32: Heap left redzone: fa
33: Freed heap region: fd
34: Stack left redzone: f1
35: Stack mid redzone: f2
36: Stack right redzone: f3
37: Stack after return: f5
38: Stack use after scope: f8
39: Global redzone: f9
40: Global init order: f6
41: Poisoned by user: f7
42: Container overflow: fc
43: Array cookie: ac
44: Intra object redzone: bb
45: ASan internal: fe
46: Left alloca redzone: ca
47: Right alloca redzone: cb
48: ==8229==ABORTING
49: Good so far.
check:22 X error: no match found

`

It looks like 'Good so far.' shows up after the ASAN report, while the CHECK expects it before. Maybe 2>&1 merging streams for FileCheck works differently on Darwin compared to other systems?

Could you consider 'reverting to green' this and previous PR, as suggested by @thurstond?

Cao-Wuhui added a commit to Cao-Wuhui/llvm-project that referenced this pull request Oct 5, 2025
…droid (test-only)

Reland of llvm#161624; depends on revert llvm#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@email.szu.edu.cn>
@Cao-Wuhui
Copy link
Contributor Author

Cao-Wuhui commented Oct 5, 2025

I can still see the failure on Darwin with this:
It looks like 'Good so far.' shows up after the ASAN report, while the CHECK expects it before. Maybe 2>&1 merging streams for FileCheck works differently on Darwin compared to other systems?
Could you consider 'reverting to green' this and previous PR, as suggested by @thurstond?

@wrotki Thanks for the detailed report and for pointing out the ordering issue on Darwin. I’ve opened a revert: Revert PR #162001 (for the follow-up #161624) is open. As a follow-up, I’ve prepared a test-only reland as a Draft here: #162002.

Root cause on Darwin: the sanitizer report and the pre-crash marker can race even on stderr, so “Good so far.” may appear after the ASan header. The reland makes the two potentially reordered lines a DAG group:

  • // CHECK-DAG: Good so far.
  • // CHECK-DAG: ERROR: AddressSanitizer: stack-buffer-overflow on address [[ADDR:...]] at pc {{...}} bp {{...}} sp {{...}}

and then keeps strict order for the subsequent lines:

  • // CHECK: WRITE of size {{[0-9]+}} at [[ADDR]] thread T0
  • // CHECK: #0 {{0x[0-9a-f]+}} in wcscat

Android tests keep %env_asan_opts=log_to_stderr=1 to ensure the header is on stderr. If you prefer strict “revert to green” for both PRs first, I’m happy to also prepare a manual revert of the original PR #160493 despite conflicts.

Happy to iterate—thanks again for the quick feedback.

@thurstond
Copy link
Contributor

Android tests keep %env_asan_opts=log_to_stderr=1 to ensure the header is on stderr. If you prefer strict “revert to green” for both PRs first, I’m happy to also prepare a manual revert of the original PR #160493 despite conflicts.

With the revert of this fix-forward landed, the issues on the original patch (Android, Chromium etc.) are going to break those bots again. Moreover, at this point, the Darwin bots would been broken for 5+ days.

#162021 will revert the base patch.

llvm-sync bot pushed a commit to arm/arm-toolchain that referenced this pull request Oct 5, 2025
thurstond added a commit that referenced this pull request Oct 5, 2025
… on Windows" (#162021)

Reverts #160493 due to buildbot failures e.g.,
#160493 (comment)

The fix-forward (#161624) still
had failures on Darwin, and was reverted in
#162001 i.e., this pull request
completes the revert to green for this patch stack.
@Cao-Wuhui
Copy link
Contributor Author

With the revert of this fix-forward landed, the issues on the original patch (Android, Chromium etc.) are going to break those bots again. Moreover, at this point, the Darwin bots would been broken for 5+ days.

#162021 will revert the base patch.

Thanks, understood. I’ll prepare a single reland that brings back the wcscpy/wcsncpy interceptors (from #160493) together with the stabilized tests (from #161624). The reland will keep Android’s %env_asan_opts=log_to_stderr=1, use a DAG group for Good so far. and the ASan header, and keep strict order for the subsequent lines, per the revert→reland policy.

llvm-sync bot pushed a commit to arm/arm-toolchain that referenced this pull request Oct 5, 2025
…cat/wcsncat on Windows" (#162021)

Reverts llvm/llvm-project#160493 due to buildbot failures e.g.,
llvm/llvm-project#160493 (comment)

The fix-forward (llvm/llvm-project#161624) still
had failures on Darwin, and was reverted in
llvm/llvm-project#162001 i.e., this pull request
completes the revert to green for this patch stack.
Cao-Wuhui added a commit to Cao-Wuhui/llvm-project that referenced this pull request Oct 5, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants