-
Notifications
You must be signed in to change notification settings - Fork 15.2k
Revert "[compiler-rt][asan][tests] Stabilize wchar tests on Darwin/Android" #162001
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Revert "[compiler-rt][asan][tests] Stabilize wchar tests on Darwin/Android" #162001
Conversation
…droid (#…" This reverts commit bcc85f7.
@llvm/pr-subscribers-compiler-rt-sanitizer Author: Yixuan Cao (Cao-Wuhui) ChangesReverts llvm/llvm-project#161624 Full diff: https://github.com/llvm/llvm-project/pull/162001.diff 4 Files Affected:
diff --git a/compiler-rt/test/asan/TestCases/wcscat.cpp b/compiler-rt/test/asan/TestCases/wcscat.cpp
index f0a8ec12580b3..dcdff88c18ef1 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 %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
+// 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
#include <stdio.h>
#include <wchar.h>
int main() {
- const wchar_t *start = L"X means ";
- const wchar_t *append = L"dog";
+ wchar_t *start = L"X means ";
+ wchar_t *append = L"dog";
wchar_t goodDst[12];
wcscpy(goodDst, start);
wcscat(goodDst, append);
wchar_t badDst[9];
wcscpy(badDst, start);
- fprintf(stderr, "Good so far.\n");
+ printf("Good so far.\n");
// CHECK: Good so far.
- fflush(stderr);
+ fflush(stdout);
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]] thread T0
- // CHECK: #0 {{0x[0-9a-f]+}} in wcscat
+ // 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]+}}
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 a280d29289e37..414d83303a960 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 %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
+// 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
#include <stdio.h>
#include <wchar.h>
int main() {
- const wchar_t *src = L"X means dog";
+ wchar_t *src = L"X means dog";
wchar_t goodDst[12];
wcscpy(goodDst, src);
wchar_t badDst[7];
- fprintf(stderr, "Good so far.\n");
+ printf("Good so far.\n");
// CHECK: Good so far.
- fflush(stderr);
+ fflush(stdout);
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]] thread T0
- // CHECK: #0 {{0x[0-9a-f]+}} in wcscpy
+ // 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]+}}
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 eb7d095e45c7a..3ab7fc8f55d63 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 %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
+// 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
#include <stdio.h>
#include <wchar.h>
int main() {
- const wchar_t *start = L"X means ";
- const wchar_t *append = L"dog";
+ wchar_t *start = L"X means ";
+ 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);
- fprintf(stderr, "Good so far.\n");
+ printf("Good so far.\n");
// CHECK: Good so far.
- fflush(stderr);
+ fflush(stdout);
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]] thread T0
- // CHECK: #0 {{0x[0-9a-f]+}} in wcsncat
+ // 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]+}}
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 1106bf5d264e5..6177b72990a0a 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 %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
+// 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
#include <stdio.h>
#include <wchar.h>
int main() {
- const wchar_t *src = L"X means dog";
+ 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.
- fprintf(stderr, "Good so far.\n");
+ printf("Good so far.\n");
// CHECK: Good so far.
- fflush(stderr);
+ fflush(stdout);
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]] thread T0
- // CHECK: #0 {{0x[0-9a-f]+}} in wcsncpy
+ // 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]+}}
printf("Should have failed with ASAN error.\n");
}
\ No newline at end of file
|
…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>
… 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.
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/186/builds/12947 Here is the relevant piece of the build log for the reference
|
…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.
… wchar tests on Darwin/Android (#162028) ### Summary Reland: wcscpy/wcsncpy interceptors and stabilize wchar tests on Darwin/Android. Functional reland (runtime + tests). ### Context Reland of #160493 and #161624; previously reverted by #162021 and #162001 to restore green. ### Motivation - Restore wchar interceptors (wcscpy/wcsncpy), broaden ASan coverage, and improve Windows parity with narrow-string checks. - Make tests robust across Darwin/Android to keep bots green. ### Runtime (wcscpy/wcsncpy) - Add overlap checks; mark read/write ranges in bytes. - Use MaybeRealWcsnlen when available to bound reads. - Register Windows static runtime thunk where applicable. ### Tests (wcscpy/wcsncpy/wcscat/wcsncat) - Android: keep `%env_asan_opts=log_to_stderr=1` so the ASan header is on stderr. - Darwin: tolerate reordering by putting all four key lines in one DAG group: ```cpp // CHECK-DAG: Good so far. // CHECK-DAG: ERROR: AddressSanitizer: stack-buffer-overflow on address [[ADDR:...]] at pc {{...}} bp {{...}} sp {{...}} // CHECK-DAG: WRITE of size {{[0-9]+}} at [[ADDR]] thread T0 // CHECK-DAG: #0 {{0x[0-9a-f]+}} in <func> ``` ### Risk - Functional reland (runtime + tests), intended to restore functionality and maintain stability across platforms. --------- Signed-off-by: Yixuan Cao <caoyixuan2019@email.szu.edu.cn>
Reverts #161624