Index: compiler-rt/trunk/lib/asan/asan_descriptions.cc =================================================================== --- compiler-rt/trunk/lib/asan/asan_descriptions.cc +++ compiler-rt/trunk/lib/asan/asan_descriptions.cc @@ -252,6 +252,9 @@ str.append("%c", var.name_pos[i]); } str.append("'"); + if (var.line > 0) { + str.append(" (line %d)", var.line); + } if (pos_descr) { Decorator d; // FIXME: we may want to also print the size of the access here, Index: compiler-rt/trunk/lib/asan/asan_report.h =================================================================== --- compiler-rt/trunk/lib/asan/asan_report.h +++ compiler-rt/trunk/lib/asan/asan_report.h @@ -23,6 +23,7 @@ uptr size; const char *name_pos; uptr name_len; + uptr line; }; // Returns the number of globals close to the provided address and copies Index: compiler-rt/trunk/lib/asan/asan_report.cc =================================================================== --- compiler-rt/trunk/lib/asan/asan_report.cc +++ compiler-rt/trunk/lib/asan/asan_report.cc @@ -88,7 +88,8 @@ char *p; // This string is created by the compiler and has the following form: // "n alloc_1 alloc_2 ... alloc_n" - // where alloc_i looks like "offset size len ObjectName". + // where alloc_i looks like "offset size len ObjectName" + // or "offset size len ObjectName:line". uptr n_objects = (uptr)internal_simple_strtoll(frame_descr, &p, 10); if (n_objects == 0) return false; @@ -101,7 +102,14 @@ return false; } p++; - StackVarDescr var = {beg, size, p, len}; + char *colon_pos = internal_strchr(p, ':'); + uptr line = 0; + uptr name_len = len; + if (colon_pos != nullptr && colon_pos < p + len) { + name_len = colon_pos - p; + line = (uptr)internal_simple_strtoll(colon_pos + 1, nullptr, 10); + } + StackVarDescr var = {beg, size, p, name_len, line}; vars->push_back(var); p += len; } Index: compiler-rt/trunk/test/asan/TestCases/Linux/memmem_test.cc =================================================================== --- compiler-rt/trunk/test/asan/TestCases/Linux/memmem_test.cc +++ compiler-rt/trunk/test/asan/TestCases/Linux/memmem_test.cc @@ -15,10 +15,10 @@ // A1: AddressSanitizer: stack-buffer-overflow // A1: {{#0.*memmem}} // A1-NEXT: {{#1.*main}} - // A1: 'a1' <== Memory access at offset + // A1: 'a1'{{.*}} <== Memory access at offset // // A2: AddressSanitizer: stack-buffer-overflow // A2: {{#0.*memmem}} - // A2: 'a2' <== Memory access at offset + // A2: 'a2'{{.*}} <== Memory access at offset return res == NULL; } Index: compiler-rt/trunk/test/asan/TestCases/Posix/stack-use-after-return.cc =================================================================== --- compiler-rt/trunk/test/asan/TestCases/Posix/stack-use-after-return.cc +++ compiler-rt/trunk/test/asan/TestCases/Posix/stack-use-after-return.cc @@ -53,11 +53,11 @@ // CHECK: WRITE of size 1 {{.*}} thread T0 // CHECK: #0{{.*}}Func2{{.*}}stack-use-after-return.cc:[[@LINE-2]] // CHECK: is located in stack of thread T0 at offset - // CHECK: 'local' <== Memory access at offset {{16|32}} is inside this variable + // CHECK: 'local'{{.*}} <== Memory access at offset {{16|32}} is inside this variable // THREAD: WRITE of size 1 {{.*}} thread T{{[1-9]}} // THREAD: #0{{.*}}Func2{{.*}}stack-use-after-return.cc:[[@LINE-6]] // THREAD: is located in stack of thread T{{[1-9]}} at offset - // THREAD: 'local' <== Memory access at offset {{16|32}} is inside this variable + // THREAD: 'local'{{.*}} <== Memory access at offset {{16|32}} is inside this variable // CHECK-20: T0: FakeStack created:{{.*}} stack_size_log: 20 // CHECK-24: T0: FakeStack created:{{.*}} stack_size_log: 24 } Index: compiler-rt/trunk/test/asan/TestCases/Windows/dll_intercept_memchr.cc =================================================================== --- compiler-rt/trunk/test/asan/TestCases/Windows/dll_intercept_memchr.cc +++ compiler-rt/trunk/test/asan/TestCases/Windows/dll_intercept_memchr.cc @@ -22,6 +22,6 @@ // CHECK-NEXT: test_function {{.*}}dll_intercept_memchr.cc:[[@LINE-5]] // CHECK: Address [[ADDR]] is located in stack of thread T0 at offset {{.*}} in frame // CHECK-NEXT: test_function {{.*}}dll_intercept_memchr.cc -// CHECK: 'buff' <== Memory access at offset {{.*}} overflows this variable +// CHECK: 'buff'{{.*}} <== Memory access at offset {{.*}} overflows this variable return 0; } Index: compiler-rt/trunk/test/asan/TestCases/Windows/dll_intercept_memcpy.cc =================================================================== --- compiler-rt/trunk/test/asan/TestCases/Windows/dll_intercept_memcpy.cc +++ compiler-rt/trunk/test/asan/TestCases/Windows/dll_intercept_memcpy.cc @@ -27,6 +27,6 @@ // CHECK-NEXT: test_function {{.*}}dll_intercept_memcpy.cc:[[@LINE-4]] // CHECK: Address [[ADDR]] is located in stack of thread T0 at offset {{.*}} in frame // CHECK-NEXT: test_function {{.*}}dll_intercept_memcpy.cc -// CHECK: 'buff2' <== Memory access at offset {{.*}} overflows this variable +// CHECK: 'buff2'{{.*}} <== Memory access at offset {{.*}} overflows this variable return 0; } Index: compiler-rt/trunk/test/asan/TestCases/Windows/dll_intercept_memcpy_indirect.cc =================================================================== --- compiler-rt/trunk/test/asan/TestCases/Windows/dll_intercept_memcpy_indirect.cc +++ compiler-rt/trunk/test/asan/TestCases/Windows/dll_intercept_memcpy_indirect.cc @@ -29,6 +29,6 @@ // CHECK-NEXT: test_function {{.*}}dll_intercept_memcpy_indirect.cc:[[@LINE-5]] // CHECK: Address [[ADDR]] is located in stack of thread T0 at offset {{.*}} in frame // CHECK-NEXT: test_function {{.*}}dll_intercept_memcpy_indirect.cc -// CHECK: 'buff2' <== Memory access at offset {{.*}} overflows this variable +// CHECK: 'buff2'{{.*}} <== Memory access at offset {{.*}} overflows this variable return 0; } Index: compiler-rt/trunk/test/asan/TestCases/Windows/dll_intercept_memset.cc =================================================================== --- compiler-rt/trunk/test/asan/TestCases/Windows/dll_intercept_memset.cc +++ compiler-rt/trunk/test/asan/TestCases/Windows/dll_intercept_memset.cc @@ -27,6 +27,6 @@ // CHECK-NEXT: test_function {{.*}}dll_intercept_memset.cc:[[@LINE-4]] // CHECK: Address [[ADDR]] is located in stack of thread T0 at offset {{.*}} in frame // CHECK-NEXT: test_function {{.*}}dll_intercept_memset.cc -// CHECK: 'buff' <== Memory access at offset {{.*}} overflows this variable +// CHECK: 'buff'{{.*}} <== Memory access at offset {{.*}} overflows this variable return 0; } Index: compiler-rt/trunk/test/asan/TestCases/Windows/dll_noreturn.cc =================================================================== --- compiler-rt/trunk/test/asan/TestCases/Windows/dll_noreturn.cc +++ compiler-rt/trunk/test/asan/TestCases/Windows/dll_noreturn.cc @@ -17,7 +17,7 @@ // // CHECK: Address [[ADDR]] is located in stack of thread T0 at offset [[OFFSET:.*]] in frame // CHECK-NEXT: noreturn_f{{.*}}dll_noreturn.cc -// CHECK: 'buffer' <== Memory access at offset [[OFFSET]] underflows this variable +// CHECK: 'buffer'{{.*}} <== Memory access at offset [[OFFSET]] underflows this variable // CHECK-LABEL: SUMMARY } Index: compiler-rt/trunk/test/asan/TestCases/Windows/dll_poison_unpoison.cc =================================================================== --- compiler-rt/trunk/test/asan/TestCases/Windows/dll_poison_unpoison.cc +++ compiler-rt/trunk/test/asan/TestCases/Windows/dll_poison_unpoison.cc @@ -30,6 +30,6 @@ // // CHECK: [[ADDR]] is located in stack of thread T0 at offset [[OFFSET:.*]] in frame // CHECK-NEXT: test_function{{.*}}\dll_poison_unpoison.cc -// CHECK: 'buffer' <== Memory access at offset [[OFFSET]] is inside this variable +// CHECK: 'buffer'{{.*}} <== Memory access at offset [[OFFSET]] is inside this variable return 0; } Index: compiler-rt/trunk/test/asan/TestCases/Windows/dll_stack_use_after_return.cc =================================================================== --- compiler-rt/trunk/test/asan/TestCases/Windows/dll_stack_use_after_return.cc +++ compiler-rt/trunk/test/asan/TestCases/Windows/dll_stack_use_after_return.cc @@ -22,7 +22,7 @@ // // CHECK: Address [[ADDR]] is located in stack of thread T0 at offset [[OFFSET:.*]] in frame // CHECK-NEXT: #0 {{.*}} foo{{.*}}dll_stack_use_after_return.cc -// CHECK: 'stack_buffer' <== Memory access at offset [[OFFSET]] is inside this variable +// CHECK: 'stack_buffer'{{.*}} <== Memory access at offset [[OFFSET]] is inside this variable return 0; } Index: compiler-rt/trunk/test/asan/TestCases/Windows/dll_thread_stack_array_left_oob.cc =================================================================== --- compiler-rt/trunk/test/asan/TestCases/Windows/dll_thread_stack_array_left_oob.cc +++ compiler-rt/trunk/test/asan/TestCases/Windows/dll_thread_stack_array_left_oob.cc @@ -16,7 +16,7 @@ // CHECK: Address [[ADDR]] is located in stack of thread T1 at offset [[OFFSET:.*]] in frame // CHECK-NEXT: thread_proc{{.*}}dll_thread_stack_array_left_oob.cc // -// CHECK: 'stack_buffer' <== Memory access at offset [[OFFSET]] underflows this variable +// CHECK: 'stack_buffer'{{.*}} <== Memory access at offset [[OFFSET]] underflows this variable return 0; } Index: compiler-rt/trunk/test/asan/TestCases/Windows/intercept_memcpy.cc =================================================================== --- compiler-rt/trunk/test/asan/TestCases/Windows/intercept_memcpy.cc +++ compiler-rt/trunk/test/asan/TestCases/Windows/intercept_memcpy.cc @@ -27,5 +27,5 @@ // CHECK-NEXT: main {{.*}}intercept_memcpy.cc:[[@LINE-5]] // CHECK: Address [[ADDR]] is located in stack of thread T0 at offset {{.*}} in frame // CHECK-NEXT: #0 {{.*}} main -// CHECK: 'buff2' <== Memory access at offset {{.*}} overflows this variable +// CHECK: 'buff2'{{.*}} <== Memory access at offset {{.*}} overflows this variable } Index: compiler-rt/trunk/test/asan/TestCases/Windows/intercept_strlen.cc =================================================================== --- compiler-rt/trunk/test/asan/TestCases/Windows/intercept_strlen.cc +++ compiler-rt/trunk/test/asan/TestCases/Windows/intercept_strlen.cc @@ -22,6 +22,6 @@ // CHECK-NEXT: main {{.*}}intercept_strlen.cc:[[@LINE-5]] // CHECK: Address [[ADDR]] is located in stack of thread T0 at offset {{.*}} in frame // CHECK-NEXT: main {{.*}}intercept_strlen.cc -// CHECK: 'str' <== Memory access at offset {{.*}} overflows this variable +// CHECK: 'str'{{.*}} <== Memory access at offset {{.*}} overflows this variable return len < 6; } Index: compiler-rt/trunk/test/asan/TestCases/Windows/stack_array_left_oob.cc =================================================================== --- compiler-rt/trunk/test/asan/TestCases/Windows/stack_array_left_oob.cc +++ compiler-rt/trunk/test/asan/TestCases/Windows/stack_array_left_oob.cc @@ -12,5 +12,5 @@ // CHECK-NEXT: {{#0 .* main .*stack_array_left_oob.cc}}:[[@LINE-3]] // CHECK: Address [[ADDR]] is located in stack of thread T0 at offset [[OFFSET:.*]] in frame // CHECK-NEXT: {{#0 .* main .*stack_array_left_oob.cc}} -// CHECK: 'buffer' <== Memory access at offset [[OFFSET]] underflows this variable +// CHECK: 'buffer'{{.*}} <== Memory access at offset [[OFFSET]] underflows this variable } Index: compiler-rt/trunk/test/asan/TestCases/Windows/stack_array_right_oob.cc =================================================================== --- compiler-rt/trunk/test/asan/TestCases/Windows/stack_array_right_oob.cc +++ compiler-rt/trunk/test/asan/TestCases/Windows/stack_array_right_oob.cc @@ -12,5 +12,5 @@ // CHECK-NEXT: {{#0 .* main .*stack_array_right_oob.cc}}:[[@LINE-3]] // CHECK: Address [[ADDR]] is located in stack of thread T0 at offset [[OFFSET:.*]] in frame // CHECK-NEXT: {{#0 .* main .*stack_array_right_oob.cc}} -// CHECK: 'buffer' <== Memory access at offset [[OFFSET]] overflows this variable +// CHECK: 'buffer'{{.*}} <== Memory access at offset [[OFFSET]] overflows this variable } Index: compiler-rt/trunk/test/asan/TestCases/Windows/stack_use_after_return.cc =================================================================== --- compiler-rt/trunk/test/asan/TestCases/Windows/stack_use_after_return.cc +++ compiler-rt/trunk/test/asan/TestCases/Windows/stack_use_after_return.cc @@ -18,5 +18,5 @@ // CHECK: is located in stack of thread T0 at offset [[OFFSET:.*]] in frame // CHECK-NEXT: {{#0 0x.* in foo.*stack_use_after_return.cc}} // -// CHECK: 'stack_buffer' <== Memory access at offset [[OFFSET]] is inside this variable +// CHECK: 'stack_buffer'{{.*}} <== Memory access at offset [[OFFSET]] is inside this variable } Index: compiler-rt/trunk/test/asan/TestCases/Windows/wrong_downcast_on_stack.cc =================================================================== --- compiler-rt/trunk/test/asan/TestCases/Windows/wrong_downcast_on_stack.cc +++ compiler-rt/trunk/test/asan/TestCases/Windows/wrong_downcast_on_stack.cc @@ -20,7 +20,7 @@ // CHECK-NEXT: {{#0 0x[0-9a-f]* in main .*wrong_downcast_on_stack.cc}}:[[@LINE-3]] // CHECK: [[ADDR]] is located in stack of thread T0 at offset [[OFFSET:[0-9]+]] in frame // CHECK-NEXT: {{#0 0x[0-9a-f]* in main }} -// CHECK: 'p' <== Memory access at offset [[OFFSET]] overflows this variable +// CHECK: 'p'{{.*}} <== Memory access at offset [[OFFSET]] overflows this variable return 0; } Index: compiler-rt/trunk/test/asan/TestCases/stack-buffer-overflow-with-position.cc =================================================================== --- compiler-rt/trunk/test/asan/TestCases/stack-buffer-overflow-with-position.cc +++ compiler-rt/trunk/test/asan/TestCases/stack-buffer-overflow-with-position.cc @@ -30,15 +30,15 @@ // make sure BBB and CCC are not removed; return *(short*)(p) + BBB[argc % 2] + CCC[argc % 2]; } -// CHECK-m2: 'AAA' <== {{.*}}underflows this variable -// CHECK-m1: 'AAA' <== {{.*}}partially underflows this variable -// CHECK-9: 'AAA' <== {{.*}}partially overflows this variable -// CHECK-10: 'AAA' <== {{.*}}overflows this variable -// CHECK-30: 'BBB' <== {{.*}}underflows this variable -// CHECK-31: 'BBB' <== {{.*}}partially underflows this variable -// CHECK-41: 'BBB' <== {{.*}}partially overflows this variable -// CHECK-42: 'BBB' <== {{.*}}overflows this variable -// CHECK-62: 'CCC' <== {{.*}}underflows this variable -// CHECK-63: 'CCC' <== {{.*}}partially underflows this variable -// CHECK-73: 'CCC' <== {{.*}}partially overflows this variable -// CHECK-74: 'CCC' <== {{.*}}overflows this variable +// CHECK-m2: 'AAA'{{.*}} <== {{.*}}underflows this variable +// CHECK-m1: 'AAA'{{.*}} <== {{.*}}partially underflows this variable +// CHECK-9: 'AAA'{{.*}} <== {{.*}}partially overflows this variable +// CHECK-10: 'AAA'{{.*}} <== {{.*}}overflows this variable +// CHECK-30: 'BBB'{{.*}} <== {{.*}}underflows this variable +// CHECK-31: 'BBB'{{.*}} <== {{.*}}partially underflows this variable +// CHECK-41: 'BBB'{{.*}} <== {{.*}}partially overflows this variable +// CHECK-42: 'BBB'{{.*}} <== {{.*}}overflows this variable +// CHECK-62: 'CCC'{{.*}} <== {{.*}}underflows this variable +// CHECK-63: 'CCC'{{.*}} <== {{.*}}partially underflows this variable +// CHECK-73: 'CCC'{{.*}} <== {{.*}}partially overflows this variable +// CHECK-74: 'CCC'{{.*}} <== {{.*}}overflows this variable Index: compiler-rt/trunk/test/asan/TestCases/strcasestr-1.c =================================================================== --- compiler-rt/trunk/test/asan/TestCases/strcasestr-1.c +++ compiler-rt/trunk/test/asan/TestCases/strcasestr-1.c @@ -19,7 +19,7 @@ char s1[4] = "abC"; __asan_poison_memory_region ((char *)&s1[2], 2); r = strcasestr(s1, s2); - // CHECK:'s1' <== Memory access at offset {{[0-9]+}} partially overflows this variable + // CHECK:'s1'{{.*}} <== Memory access at offset {{[0-9]+}} partially overflows this variable assert(r == s1 + 2); return 0; } Index: compiler-rt/trunk/test/asan/TestCases/strcasestr-2.c =================================================================== --- compiler-rt/trunk/test/asan/TestCases/strcasestr-2.c +++ compiler-rt/trunk/test/asan/TestCases/strcasestr-2.c @@ -20,6 +20,6 @@ __asan_poison_memory_region ((char *)&s2[2], 2); r = strcasestr(s1, s2); assert(r == 0); - // CHECK:'s2' <== Memory access at offset {{[0-9]+}} partially overflows this variable + // CHECK:'s2'{{.*}} <== Memory access at offset {{[0-9]+}} partially overflows this variable return 0; } Index: compiler-rt/trunk/test/asan/TestCases/strcspn-1.c =================================================================== --- compiler-rt/trunk/test/asan/TestCases/strcspn-1.c +++ compiler-rt/trunk/test/asan/TestCases/strcspn-1.c @@ -14,7 +14,7 @@ char s1[4] = "caB"; __asan_poison_memory_region ((char *)&s1[2], 2); r = strcspn(s1, s2); - // CHECK:'s1' <== Memory access at offset {{[0-9]+}} partially overflows this variable + // CHECK:'s1'{{.*}} <== Memory access at offset {{[0-9]+}} partially overflows this variable assert(r == 1); return 0; } Index: compiler-rt/trunk/test/asan/TestCases/strcspn-2.c =================================================================== --- compiler-rt/trunk/test/asan/TestCases/strcspn-2.c +++ compiler-rt/trunk/test/asan/TestCases/strcspn-2.c @@ -14,7 +14,7 @@ char s2[4] = "abc"; __asan_poison_memory_region ((char *)&s2[2], 2); r = strcspn(s1, s2); - // CHECK:'s2' <== Memory access at offset {{[0-9]+}} partially overflows this variable + // CHECK:'s2'{{.*}} <== Memory access at offset {{[0-9]+}} partially overflows this variable assert(r == 0); return 0; } Index: compiler-rt/trunk/test/asan/TestCases/strpbrk-1.c =================================================================== --- compiler-rt/trunk/test/asan/TestCases/strpbrk-1.c +++ compiler-rt/trunk/test/asan/TestCases/strpbrk-1.c @@ -14,7 +14,7 @@ char s1[4] = "cab"; __asan_poison_memory_region ((char *)&s1[2], 2); r = strpbrk(s1, s2); - // CHECK:'s1' <== Memory access at offset {{[0-9]+}} partially overflows this variable + // CHECK:'s1'{{.*}} <== Memory access at offset {{[0-9]+}} partially overflows this variable assert(r == s1 + 1); return 0; } Index: compiler-rt/trunk/test/asan/TestCases/strpbrk-2.c =================================================================== --- compiler-rt/trunk/test/asan/TestCases/strpbrk-2.c +++ compiler-rt/trunk/test/asan/TestCases/strpbrk-2.c @@ -14,7 +14,7 @@ char s2[4] = "bca"; __asan_poison_memory_region ((char *)&s2[2], 2); r = strpbrk(s1, s2); - // CHECK:'s2' <== Memory access at offset {{[0-9]+}} partially overflows this variable + // CHECK:'s2'{{.*}} <== Memory access at offset {{[0-9]+}} partially overflows this variable assert(r == s1); return 0; } Index: compiler-rt/trunk/test/asan/TestCases/strspn-1.c =================================================================== --- compiler-rt/trunk/test/asan/TestCases/strspn-1.c +++ compiler-rt/trunk/test/asan/TestCases/strspn-1.c @@ -14,7 +14,7 @@ char s1[4] = "acb"; __asan_poison_memory_region ((char *)&s1[2], 2); r = strspn(s1, s2); - // CHECK:'s1' <== Memory access at offset {{[0-9]+}} partially overflows this variable + // CHECK:'s1'{{.*}} <== Memory access at offset {{[0-9]+}} partially overflows this variable assert(r == 1); return 0; } Index: compiler-rt/trunk/test/asan/TestCases/strspn-2.c =================================================================== --- compiler-rt/trunk/test/asan/TestCases/strspn-2.c +++ compiler-rt/trunk/test/asan/TestCases/strspn-2.c @@ -14,7 +14,7 @@ char s2[5] = "abcd"; __asan_poison_memory_region ((char *)&s2[3], 2); r = strspn(s1, s2); - // CHECK:'s2' <== Memory access at offset {{[0-9]+}} partially overflows this variable + // CHECK:'s2'{{.*}} <== Memory access at offset {{[0-9]+}} partially overflows this variable assert(r >= 2); return 0; } Index: compiler-rt/trunk/test/asan/TestCases/strstr-1.c =================================================================== --- compiler-rt/trunk/test/asan/TestCases/strstr-1.c +++ compiler-rt/trunk/test/asan/TestCases/strstr-1.c @@ -15,7 +15,7 @@ char s1[4] = "acb"; __asan_poison_memory_region ((char *)&s1[2], 2); r = strstr(s1, s2); - // CHECK:'s1' <== Memory access at offset {{[0-9]+}} {{partially overflows this variable|is inside this variable}} + // CHECK:'s1'{{.*}} <== Memory access at offset {{[0-9]+}} {{partially overflows this variable|is inside this variable}} assert(r == s1 + 1); return 0; } Index: compiler-rt/trunk/test/asan/TestCases/strstr-2.c =================================================================== --- compiler-rt/trunk/test/asan/TestCases/strstr-2.c +++ compiler-rt/trunk/test/asan/TestCases/strstr-2.c @@ -15,7 +15,7 @@ char s2[4] = "cab"; __asan_poison_memory_region ((char *)&s2[2], 2); r = strstr(s1, s2); - // CHECK:'s2' <== Memory access at offset {{[0-9]+}} partially overflows this variable + // CHECK:'s2'{{.*}} <== Memory access at offset {{[0-9]+}} partially overflows this variable assert(r == 0); return 0; } Index: compiler-rt/trunk/test/asan/TestCases/strtok.c =================================================================== --- compiler-rt/trunk/test/asan/TestCases/strtok.c +++ compiler-rt/trunk/test/asan/TestCases/strtok.c @@ -35,7 +35,7 @@ char token_delimiter[2] = "b"; __asan_poison_memory_region ((char *)&token_delimiter[1], 2); token = strtok(s, token_delimiter); - // CHECK1:'token_delimiter' <== Memory access at offset {{[0-9]+}} partially overflows this variable + // CHECK1: 'token_delimiter'{{.*}} <== Memory access at offset {{[0-9]+}} partially overflows this variable } // Check that we find overflows in the delimiters on the second call (str == NULL) @@ -48,7 +48,7 @@ assert(strcmp(token, "a") == 0); __asan_poison_memory_region ((char *)&token_delimiter[1], 2); token = strtok(NULL, token_delimiter); - // CHECK2:'token_delimiter' <== Memory access at offset {{[0-9]+}} partially overflows this variable + // CHECK2: 'token_delimiter'{{.*}} <== Memory access at offset {{[0-9]+}} partially overflows this variable } // Check that we find overflows in the string (only on the first call) with strict_string_checks. @@ -58,7 +58,7 @@ char token_delimiter[2] = "b"; __asan_poison_memory_region ((char *)&s[3], 2); token = strtok(s, token_delimiter); - // CHECK3:'s' <== Memory access at offset {{[0-9]+}} partially overflows this variable + // CHECK3: 's'{{.*}} <== Memory access at offset {{[0-9]+}} partially overflows this variable } // Check that we do not crash when strtok returns NULL with strict_string_checks. @@ -78,7 +78,7 @@ __asan_poison_memory_region ((char *)&s[2], 2); __asan_poison_memory_region ((char *)&token_delimiter[1], 2); token = strtok(s, token_delimiter); - // CHECK5:'s' <== Memory access at offset {{[0-9]+}} partially overflows this variable + // CHECK5: 's'{{.*}} <== Memory access at offset {{[0-9]+}} partially overflows this variable } // Check that we find overflows in the delimiters (only on the first call) with !strict_string_checks. @@ -88,7 +88,7 @@ char token_delimiter[1] = {'d'}; __asan_poison_memory_region ((char *)&token_delimiter[1], 2); token = strtok(s, &token_delimiter[1]); - // CHECK6:'token_delimiter' <== Memory access at offset {{[0-9]+}} overflows this variable + // CHECK6: 'token_delimiter'{{.*}} <== Memory access at offset {{[0-9]+}} overflows this variable } int main(int argc, char **argv) { Index: compiler-rt/trunk/test/asan/TestCases/use-after-scope-inlined.cc =================================================================== --- compiler-rt/trunk/test/asan/TestCases/use-after-scope-inlined.cc +++ compiler-rt/trunk/test/asan/TestCases/use-after-scope-inlined.cc @@ -21,8 +21,8 @@ // CHECK: READ of size 4 at 0x{{.*}} thread T0 // CHECK: #0 0x{{.*}} in main // CHECK: {{.*}}use-after-scope-inlined.cc:[[@LINE-4]] - // CHECK: Address 0x{{.*}} is located in stack of thread T0 at offset - // CHECK: [[OFFSET:[^ ]*]] in frame - // CHECK: main - // CHECK: {{\[}}[[OFFSET]], {{.*}}) 'x.i:[[@LINE-15]]' + // CHECK: Address 0x{{.*}} is located in stack of thread T0 at offset [[OFFSET:[^ ]*]] in frame + // CHECK: {{.*}} in main + // CHECK: This frame has + // CHECK: {{\[}}[[OFFSET]], {{.*}}) 'x.i' (line [[@LINE-15]]) }