diff options
author | Vitaly Buka <vitalybuka@google.com> | 2024-01-18 12:25:32 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-18 12:25:32 -0800 |
commit | ecd47811b755d13357085bcd7519a66d6c4d8e5c (patch) | |
tree | 67457ab309811eac45f68248c9d7aed34bddedb5 /compiler-rt | |
parent | c82b7fddfcbd6adfae4faf324a453fb8652efa91 (diff) | |
download | llvm-ecd47811b755d13357085bcd7519a66d6c4d8e5c.zip llvm-ecd47811b755d13357085bcd7519a66d6c4d8e5c.tar.gz llvm-ecd47811b755d13357085bcd7519a66d6c4d8e5c.tar.bz2 |
[sanitizer] Skip /include/c++/ from summary (#78534)
std:: usually is not a cause of the bug.
We now display
```
SUMMARY: AddressSanitizer: allocation-size-too-big path/to/allocator_returns_null.cpp:92:7 in main
```
instead of
```
SUMMARY: AddressSanitizer: allocation-size-too-big /usr/lib/../include/c++/13/bits/new_allocator.h:147:27 in std::__new_allocator<char>::allocate(unsigned long, void const*)
```
`/include/c++/` matches both libc++ and libstdc++ include paths.
Diffstat (limited to 'compiler-rt')
-rw-r--r-- | compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_report.cpp | 3 | ||||
-rw-r--r-- | compiler-rt/test/sanitizer_common/TestCases/allocator_returns_null.cpp | 19 |
2 files changed, 19 insertions, 3 deletions
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_report.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_report.cpp index 253dc10..8438e01 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_report.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_report.cpp @@ -34,7 +34,8 @@ static bool FrameIsInternal(const SymbolizedStack *frame) { return true; const char *file = frame->info.file; const char *module = frame->info.module; - if (file && (internal_strstr(file, "/compiler-rt/lib/"))) + if (file && (internal_strstr(file, "/compiler-rt/lib/") || + internal_strstr(file, "/include/c++/"))) return true; if (module && (internal_strstr(module, "libclang_rt."))) return true; diff --git a/compiler-rt/test/sanitizer_common/TestCases/allocator_returns_null.cpp b/compiler-rt/test/sanitizer_common/TestCases/allocator_returns_null.cpp index ca6f637..1e4b0ed 100644 --- a/compiler-rt/test/sanitizer_common/TestCases/allocator_returns_null.cpp +++ b/compiler-rt/test/sanitizer_common/TestCases/allocator_returns_null.cpp @@ -34,17 +34,20 @@ // RUN: | FileCheck %s --check-prefix=CHECK-nnCRASH // RUN: %env_tool_opts=allocator_may_return_null=1 %run %t new-nothrow 2>&1 \ // RUN: | FileCheck %s --check-prefix=CHECK-NULL +// RUN: %env_tool_opts=allocator_may_return_null=0 not %run %t vector 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-vCRASH // TODO(alekseyshl): win32 is disabled due to failing errno tests, fix it there. // UNSUPPORTED: ubsan, target={{.*windows-msvc.*}} #include <assert.h> #include <errno.h> +#include <limits> +#include <new> #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <limits> -#include <new> +#include <vector> int main(int argc, char **argv) { assert(argc == 2); @@ -60,6 +63,8 @@ int main(int argc, char **argv) { (3UL << 30) + 1; #endif + std::vector<char> v; + void *x = nullptr; if (!strcmp(action, "malloc")) { x = malloc(kMaxAllowedMallocSizePlusOne); @@ -82,6 +87,14 @@ int main(int argc, char **argv) { x = operator new(kMaxAllowedMallocSizePlusOne); } else if (!strcmp(action, "new-nothrow")) { x = operator new(kMaxAllowedMallocSizePlusOne, std::nothrow); + } else if (!strcmp(action, "vector")) { +#if __LP64__ || defined(_WIN64) + v.resize(kMaxAllowedMallocSizePlusOne); + x = v.data(); +#else + // Fake it: 32bit fails early in std. + x = malloc(kMaxAllowedMallocSizePlusOne); +#endif } else { assert(0); } @@ -117,6 +130,8 @@ int main(int argc, char **argv) { // CHECK-nnCRASH: new-nothrow: // CHECK-nnCRASH: #{{[0-9]+.*}}allocator_returns_null.cpp // CHECK-nnCRASH: {{SUMMARY: .*Sanitizer: allocation-size-too-big.*allocator_returns_null.cpp.*}} in main +// CHECK-vCRASH: #{{[0-9]+.*}}allocator_returns_null.cpp +// CHECK-vCRASH: {{SUMMARY: .*Sanitizer: allocation-size-too-big.*allocator_returns_null.cpp.*}} in main // CHECK-NULL: {{malloc|calloc|calloc-overflow|realloc|realloc-after-malloc|new-nothrow}} // CHECK-NULL: errno: 12, x: 0 |