diff options
author | Reid Kleckner <rnk@google.com> | 2017-08-31 18:16:55 +0000 |
---|---|---|
committer | Reid Kleckner <rnk@google.com> | 2017-08-31 18:16:55 +0000 |
commit | 16de9c7f59190092d20a27af1f3ee3e0cd24c49f (patch) | |
tree | f139a68764104c2218e8ee56c30413f0234d29cc /debuginfo-tests | |
parent | d37cfa9f92a441c0f6a16155476ab80940d35802 (diff) |
Fix debuginfo-tests with GDB on Linux
Summary:
Split asan.c into asan.c and asan-blocks.c, which will be
darwin-specific. I suspect we could make it pass on Linux by adding
cmake to build BlocksRuntime from compiler-rt, but I'm not shaving that
yak yet.
asan.c and safestack.c: GDB and LLDB appear to print aggregates
differently today. Print individual elements instead of the entire
aggregate.
dbg-arg.c: GDB doesn't appear to print leading zeros when printing
pointers.
stack-var.c: Add the optnone attribute so that LLVM won't optimize away
this no-op function call. This should be a cross-platform failure
observable on Mac, so this is surprising.
Reviewers: aprantl, dblaikie
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D37344
Diffstat (limited to 'debuginfo-tests')
-rw-r--r-- | debuginfo-tests/asan-blocks.c | 41 | ||||
-rw-r--r-- | debuginfo-tests/asan.c | 37 | ||||
-rw-r--r-- | debuginfo-tests/dbg-arg.c | 6 | ||||
-rw-r--r-- | debuginfo-tests/safestack.c | 22 | ||||
-rw-r--r-- | debuginfo-tests/stack-var.c | 6 |
5 files changed, 80 insertions, 32 deletions
diff --git a/debuginfo-tests/asan-blocks.c b/debuginfo-tests/asan-blocks.c new file mode 100644 index 00000000000..b919a291eba --- /dev/null +++ b/debuginfo-tests/asan-blocks.c @@ -0,0 +1,41 @@ +// RUN: %clang -fblocks %target_itanium_abi_host_triple -arch x86_64 %s -o %t.out -g -fsanitize=address +// RUN: %test_debuginfo %s %t.out +// FIXME: Remove system-darwin when we build BlocksRuntime everywhere. +// REQUIRES: not_asan, system-darwin +// Zorg configures the ASAN stage2 bots to not build the asan +// compiler-rt. Only run this test on non-asanified configurations. +void b(); +struct S { + int a[8]; +}; + +int f(struct S s, unsigned i) { + // DEBUGGER: break 17 + // DEBUGGER: r + // DEBUGGER: p s + // CHECK: a = ([0] = 0, [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5, [6] = 6, [7] = 7) + return s.a[i]; +} + +int main(int argc, const char **argv) { + struct S s = {{0, 1, 2, 3, 4, 5, 6, 7}}; + if (f(s, 4) == 4) { + // DEBUGGER: break 27 + // DEBUGGER: c + // DEBUGGER: p s + // CHECK: a = ([0] = 0, [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5, [6] = 6, [7] = 7) + b(); + } + return 0; +} + +void c() {} + +void b() { + // DEBUGGER: break 40 + // DEBUGGER: c + // DEBUGGER: p x + // CHECK: 42 + __block int x = 42; + c(); +} diff --git a/debuginfo-tests/asan.c b/debuginfo-tests/asan.c index 1407e01ed6b..a2df7545722 100644 --- a/debuginfo-tests/asan.c +++ b/debuginfo-tests/asan.c @@ -1,40 +1,31 @@ -// RUN: %clang %target_itanium_abi_host_triple -arch x86_64 %s -o %t.out -g -fsanitize=address +// RUN: %clang -fblocks %target_itanium_abi_host_triple -arch x86_64 %s -o %t.out -g -fsanitize=address // RUN: %test_debuginfo %s %t.out // REQUIRES: not_asan // Zorg configures the ASAN stage2 bots to not build the asan // compiler-rt. Only run this test on non-asanified configurations. -void b(); +// + struct S { int a[8]; }; int f(struct S s, unsigned i) { - // DEBUGGER: break 16 - // DEBUGGER: r - // DEBUGGER: p s - // CHECK: a = ([0] = 0, [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5, [6] = 6, [7] = 7) + // DEBUGGER: break 14 return s.a[i]; } int main(int argc, const char **argv) { struct S s = {{0, 1, 2, 3, 4, 5, 6, 7}}; - if (f(s, 4) == 4) { - // DEBUGGER: break 26 - // DEBUGGER: c - // DEBUGGER: p s - // CHECK: a = ([0] = 0, [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5, [6] = 6, [7] = 7) - b(); - } + if (f(s, 4) == 4) + return f(s, 0); return 0; } -void c() {} - -void b() { - // DEBUGGER: break 39 - // DEBUGGER: c - // DEBUGGER: p x - // CHECK: 42 - __block int x = 42; - c(); -} +// DEBUGGER: r +// DEBUGGER: p s +// CHECK: a = +// DEBUGGER: p s.a[0] +// CHECK: = 0 +// DEBUGGER: p s.a[1] +// CHECK: = 1 +// DEBUGGER: p s.a[7] diff --git a/debuginfo-tests/dbg-arg.c b/debuginfo-tests/dbg-arg.c index c44bfd48803..a65dc910b8b 100644 --- a/debuginfo-tests/dbg-arg.c +++ b/debuginfo-tests/dbg-arg.c @@ -1,12 +1,12 @@ // This test case checks debug info during register moves for an argument. -// RUN: %clang %target_itanium_abi_host_triple -arch x86_64 -mllvm -fast-isel=false %s -c -o %t.o -g -// RUN: %clang %target_itanium_abi_host_triple -arch x86_64 %t.o -o %t.out +// RUN: %clang %target_itanium_abi_host_triple -m64 -mllvm -fast-isel=false %s -c -o %t.o -g +// RUN: %clang %target_itanium_abi_host_triple -m64 %t.o -o %t.out // RUN: %test_debuginfo %s %t.out // // DEBUGGER: break 26 // DEBUGGER: r // DEBUGGER: print mutex -// CHECK: ={{.*}} 0x0 +// CHECK: ={{.* 0x[0-9A-Fa-f]+}} // // Radar 8412415 diff --git a/debuginfo-tests/safestack.c b/debuginfo-tests/safestack.c index a3b36c9838f..01c5f7ede92 100644 --- a/debuginfo-tests/safestack.c +++ b/debuginfo-tests/safestack.c @@ -26,10 +26,26 @@ int f(struct S s, unsigned i) { // DEBUGGER: r // DEBUGGER: p s -// CHECK: a = ([0] = 0, [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5, [6] = 6, [7] = 7) +// CHECK: a = +// DEBUGGER: p s.a[0] +// CHECK: = 0 +// DEBUGGER: p s.a[1] +// CHECK: = 1 +// DEBUGGER: p s.a[7] +// CHECK: = 7 // DEBUGGER: c // DEBUGGER: p s -// CHECK: a = ([0] = 0, [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5, [6] = 6, [7] = 7) +// CHECK: a = +// DEBUGGER: p s.a[0] +// CHECK: = 0 +// DEBUGGER: p s.a[1] +// CHECK: = 1 +// DEBUGGER: p s.a[7] // DEBUGGER: c // DEBUGGER: p s -// CHECK: a = ([0] = 0, [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5, [6] = 6, [7] = 7) +// CHECK: a = +// DEBUGGER: p s.a[0] +// CHECK: = 0 +// DEBUGGER: p s.a[1] +// CHECK: = 1 +// DEBUGGER: p s.a[7] diff --git a/debuginfo-tests/stack-var.c b/debuginfo-tests/stack-var.c index 8569546e184..372139c59b0 100644 --- a/debuginfo-tests/stack-var.c +++ b/debuginfo-tests/stack-var.c @@ -1,18 +1,18 @@ // RUN: %clang %target_itanium_abi_host_triple %s -O -o %t.out -g // RUN: %test_debuginfo %s %t.out -void __attribute__((noinline)) bar(int *test) {} +void __attribute__((noinline, optnone)) bar(int *test) {} int main() { int test; test = 23; // DEBUGGER: break 12 // DEBUGGER: r // DEBUGGER: p test - // CHECK: 23 + // CHECK: = 23 bar(&test); // DEBUGGER: break 17 // DEBUGGER: c // DEBUGGER: p test - // CHECK: 23 + // CHECK: = 23 return test; } |