1 | // Tests evaluating expressions with side effects. |
2 | // Applied side effect should be visible to the debugger. |
3 | |
4 | // RUN: %build %s -o %t |
5 | // RUN: %lldb %t \ |
6 | // RUN: -o "settings set target.process.track-memory-cache-changes false" \ |
7 | // RUN: -o "run" \ |
8 | // RUN: -o "frame variable x" \ |
9 | // RUN: -o "expr x.inc()" \ |
10 | // RUN: -o "frame variable x" \ |
11 | // RUN: -o "continue" \ |
12 | // RUN: -o "frame variable x" \ |
13 | // RUN: -o "expr x.i = 10" \ |
14 | // RUN: -o "frame variable x" \ |
15 | // RUN: -o "continue" \ |
16 | // RUN: -o "frame variable x" \ |
17 | // RUN: -o "exit" | FileCheck %s -dump-input=fail |
18 | |
19 | class X { |
20 | int i = 0; |
21 | |
22 | public: |
23 | void inc() { ++i; } |
24 | }; |
25 | |
26 | int main() { |
27 | X x; |
28 | x.inc(); |
29 | |
30 | __builtin_debugtrap(); |
31 | __builtin_debugtrap(); |
32 | __builtin_debugtrap(); |
33 | return 0; |
34 | } |
35 | |
36 | // CHECK-LABEL: frame variable x |
37 | // CHECK: (X) x = (i = 1) |
38 | |
39 | // CHECK-LABEL: expr x.inc() |
40 | // CHECK-LABEL: frame variable x |
41 | // CHECK: (X) x = (i = 2) |
42 | |
43 | // CHECK-LABEL: continue |
44 | // CHECK-LABEL: frame variable x |
45 | // CHECK: (X) x = (i = 2) |
46 | |
47 | // CHECK-LABEL: expr x.i = 10 |
48 | // CHECK: (int) $0 = 10 |
49 | |
50 | // CHECK-LABEL: frame variable x |
51 | // CHECK: (X) x = (i = 10) |
52 | |
53 | // CHECK-LABEL: continue |
54 | // CHECK-LABEL: frame variable x |
55 | // CHECK: (X) x = (i = 10) |
56 | |