diff options
| author | Jonas Devlieghere <jonas@devlieghere.com> | 2019-10-09 19:22:02 +0000 |
|---|---|---|
| committer | Jonas Devlieghere <jonas@devlieghere.com> | 2019-10-09 19:22:02 +0000 |
| commit | 87aa9c9e4d41ed881453e2fab85b3d25f648bb55 (patch) | |
| tree | 63efe79832bf3de4f63e4e81c62e73923947b882 /lldb/test/Shell/Reproducer/Functionalities | |
| parent | fd18e94697c987d5f24e25aa4e27adaffff3cce4 (diff) | |
| download | bcm5719-llvm-87aa9c9e4d41ed881453e2fab85b3d25f648bb55.tar.gz bcm5719-llvm-87aa9c9e4d41ed881453e2fab85b3d25f648bb55.zip | |
Re-land "[test] Split LLDB tests into API, Shell & Unit"
The original patch got reverted because it broke `check-lldb` on a clean
build. This fixes that.
llvm-svn: 374201
Diffstat (limited to 'lldb/test/Shell/Reproducer/Functionalities')
6 files changed, 203 insertions, 0 deletions
diff --git a/lldb/test/Shell/Reproducer/Functionalities/Inputs/DataFormatter.in b/lldb/test/Shell/Reproducer/Functionalities/Inputs/DataFormatter.in new file mode 100644 index 00000000000..5c4e821656d --- /dev/null +++ b/lldb/test/Shell/Reproducer/Functionalities/Inputs/DataFormatter.in @@ -0,0 +1,7 @@ +breakpoint set -f foo.cpp -l 11 +run +frame var foo +next +frame var foo +cont +reproducer generate diff --git a/lldb/test/Shell/Reproducer/Functionalities/Inputs/foo.cpp b/lldb/test/Shell/Reproducer/Functionalities/Inputs/foo.cpp new file mode 100644 index 00000000000..91f27388d0c --- /dev/null +++ b/lldb/test/Shell/Reproducer/Functionalities/Inputs/foo.cpp @@ -0,0 +1,13 @@ +class Foo { +public: + Foo(int i, double d) : m_i(i), m_d(d){}; + +private: + int m_i; + int m_d; +}; + +int main(int argc, char **argv) { + static Foo foo(1, 2.22); + return 0; +} diff --git a/lldb/test/Shell/Reproducer/Functionalities/Inputs/stepping.c b/lldb/test/Shell/Reproducer/Functionalities/Inputs/stepping.c new file mode 100644 index 00000000000..7b56eb22193 --- /dev/null +++ b/lldb/test/Shell/Reproducer/Functionalities/Inputs/stepping.c @@ -0,0 +1,37 @@ +int a(int); +int b(int); +int c(int); +int complex(int, int, int); + +int a(int val) { + int return_value = val; + + if (val <= 1) { + return_value = b(val); + } else if (val >= 3) { + return_value = c(val); + } + + return return_value; +} + +int b(int val) { + int rc = c(val); + return rc; +} + +int c(int val) { return val + 3; } + +int complex(int first, int second, int third) { return first + second + third; } + +int main(int argc, char const *argv[]) { + int A1 = a(1); + + int B2 = b(2); + + int A3 = a(3); + + int A4 = complex(a(1), b(2), c(3)); + + return 0; +} diff --git a/lldb/test/Shell/Reproducer/Functionalities/TestDataFormatter.test b/lldb/test/Shell/Reproducer/Functionalities/TestDataFormatter.test new file mode 100644 index 00000000000..8ee181e8035 --- /dev/null +++ b/lldb/test/Shell/Reproducer/Functionalities/TestDataFormatter.test @@ -0,0 +1,16 @@ +# UNSUPPORTED: system-windows, system-freebsd + +# This tests that data formatters continue to work when replaying a reproducer. + +# RUN: rm -rf %t.repro +# RUN: %clangxx %S/Inputs/foo.cpp -g -o %t.out + +# RUN: %lldb -x -b -s %S/Inputs/DataFormatter.in --capture --capture-path %t.repro %t.out | FileCheck %s +# RUN: %lldb --replay %t.repro | FileCheck %s + +# CHECK: stop reason = breakpoint 1.1 +# CHECK: (Foo) foo = (m_i = 0, m_d = 0) +# CHECK: stop reason = step over +# CHECK: (Foo) foo = (m_i = 1, m_d = 2) +# CHECK: Process {{.*}} resuming +# CHECK: Process {{.*}} exited with status = 0 diff --git a/lldb/test/Shell/Reproducer/Functionalities/TestImageList.test b/lldb/test/Shell/Reproducer/Functionalities/TestImageList.test new file mode 100644 index 00000000000..d0abae164f0 --- /dev/null +++ b/lldb/test/Shell/Reproducer/Functionalities/TestImageList.test @@ -0,0 +1,30 @@ +# UNSUPPORTED: system-windows, system-freebsd + +# This tests that image list works when replaying. We arbitrarily assume +# there's at least two entries and compare that they're identical. + +# RUN: %clang %S/Inputs/stepping.c -g -o %t.out + +# RUN: rm -rf %t.txt + +# RUN: echo "CAPTURE" >> %t.txt +# RUN: %lldb -x -b --capture --capture-path %t.repro \ +# RUN: -o 'run' \ +# RUN: -o 'image list' \ +# RUN: -o 'reproducer generate' \ +# RUN: %t.out >> %t.txt 2>&1 + +# RUN: echo "REPLAY" >> %t.txt +# RUN: %lldb -x -b --replay %t.repro >> %t.txt 2>&1 + +# RUN: cat %t.txt | FileCheck %s + +# CHECK: CAPTURE +# CHECK: image list +# CHECK: [ 0] [[ZERO:.*]] +# CHECK: [ 1] [[ONE:.*]] + +# CHECK: REPLAY +# CHECK: image list +# CHECK: [ 0] {{.*}}[[ZERO]] +# CHECK: [ 1] {{.*}}[[ONE]] diff --git a/lldb/test/Shell/Reproducer/Functionalities/TestStepping.test b/lldb/test/Shell/Reproducer/Functionalities/TestStepping.test new file mode 100644 index 00000000000..f43680f3e22 --- /dev/null +++ b/lldb/test/Shell/Reproducer/Functionalities/TestStepping.test @@ -0,0 +1,100 @@ +# UNSUPPORTED: system-windows, system-freebsd + +# This tests that stepping continues to work when replaying a reproducer. + +# RUN: rm -rf %t.repro +# RUN: %clang %S/Inputs/stepping.c -O0 -g -o %t.out +# RUN: grep -v '#' %s > %t.in + +# RUN: %lldb -x -b -s %t.in --capture --capture-path %t.repro %t.out | FileCheck %s --check-prefix CHECK +# RUN: %lldb --replay %t.repro | FileCheck %s --check-prefix CHECK + +# Set breakpoints in a,b and c and verify we stop there when stepping. + +breakpoint set -f stepping.c -l 28 +# CHECK: Breakpoint 1: {{.*}} stepping.c:28 + +breakpoint set -f stepping.c -l 10 +# CHECK: Breakpoint 2: {{.*}} stepping.c:10 + +breakpoint set -f stepping.c -l 19 +# CHECK: Breakpoint 3: {{.*}} stepping.c:19 + +breakpoint set -f stepping.c -l 23 +# CHECK: Breakpoint 4: {{.*}} stepping.c:23 + +run +# CHECK: Process {{.*}} stopped +# CHECK: stop reason = breakpoint 1.1 + +next +# CHECK: Process {{.*}} stopped +# CHECK: stop reason = breakpoint 2.1 + +next +# CHECK: Process {{.*}} stopped +# CHECK: stop reason = breakpoint 3.1 + +next +# CHECK: Process {{.*}} stopped +# CHECK: stop reason = breakpoint 4.1 + +bt +# CHECK: frame #0: {{.*}}`c +# CHECK: frame #1: {{.*}}`b +# CHECK: frame #2: {{.*}}`a + +# Continue and stop resulting from the step overs. + +cont +# CHECK: Process {{.*}} resuming +# CHECK: Process {{.*}} stopped +# CHECK: stop reason = step over +cont +# CHECK: Process {{.*}} resuming +# CHECK: Process {{.*}} stopped +# CHECK: stop reason = step over +cont +# CHECK: Process {{.*}} resuming +# CHECK: Process {{.*}} stopped +# CHECK: stop reason = step over + +breakpoint disable 1 +# CHECK: 1 breakpoints disabled. + +breakpoint disable 2 +# CHECK: 1 breakpoints disabled. + +breakpoint disable 3 +# CHECK: 1 breakpoints disabled. + +breakpoint disable 4 +# CHECK: 1 breakpoints disabled. + +# Continue to line 48. + +next +# CHECK: stop reason = step over +next +# CHECK: stop reason = step over + +# Step into c. +thread step-in +# CHECK: stop reason = step in +thread step-in +# CHECK: stop reason = step in +thread step-in +# CHECK: stop reason = step in +thread step-in +# CHECK: stop reason = step in +thread step-in +# CHECK: stop reason = step in + +# Finally continue until the end. + +cont +# CHECK: Process {{.*}} resuming +# CHECK: Process {{.*}} exited with status = 0 + +# Generate the reproducer. +reproducer generate |

