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

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