diff options
Diffstat (limited to 'lib/asan/output_tests/large_func_test.cc')
-rw-r--r-- | lib/asan/output_tests/large_func_test.cc | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/lib/asan/output_tests/large_func_test.cc b/lib/asan/output_tests/large_func_test.cc new file mode 100644 index 0000000..49751b3 --- /dev/null +++ b/lib/asan/output_tests/large_func_test.cc @@ -0,0 +1,48 @@ +#include <stdlib.h> +__attribute__((noinline)) +static void LargeFunction(int *x, int zero) { + x[0]++; + x[1]++; + x[2]++; + x[3]++; + x[4]++; + x[5]++; + x[6]++; + x[7]++; + x[8]++; + x[9]++; + + x[zero + 111]++; // we should report this exact line + + x[10]++; + x[11]++; + x[12]++; + x[13]++; + x[14]++; + x[15]++; + x[16]++; + x[17]++; + x[18]++; + x[19]++; +} + +int main(int argc, char **argv) { + int *x = new int[100]; + LargeFunction(x, argc - 1); + delete x; +} + +// Check-Common: {{.*ERROR: AddressSanitizer heap-buffer-overflow on address}} +// Check-Common: {{0x.* at pc 0x.* bp 0x.* sp 0x.*}} +// Check-Common: {{READ of size 4 at 0x.* thread T0}} + +// atos incorrectly extracts the symbol name for the static functions on +// Darwin. +// Check-Linux: {{ #0 0x.* in LargeFunction.*large_func_test.cc:15}} +// Check-Darwin: {{ #0 0x.* in .*LargeFunction.*large_func_test.cc:15}} + +// Check-Common: {{ #1 0x.* in main .*large_func_test.cc:31}} +// Check-Common: {{0x.* is located 44 bytes to the right of 400-byte region}} +// Check-Common: {{allocated by thread T0 here:}} +// Check-Common: {{ #0 0x.* in operator new.*}} +// Check-Common: {{ #1 0x.* in main .*large_func_test.cc:30}} |