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
19class X {
20 int i = 0;
21
22public:
23 void inc() { ++i; }
24};
25
26int 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

source code of lldb/test/Shell/Expr/TestExprWithSideEffect.cpp