1*99451b44SJordan Rupprecht // This is a regression test that checks whether lldb can inspect the variables
2*99451b44SJordan Rupprecht // in this program without triggering an ASan exception.
3*99451b44SJordan Rupprecht 
use(int x)4*99451b44SJordan Rupprecht __attribute__((noinline, optnone)) int use(int x) { return x; }
5*99451b44SJordan Rupprecht 
6*99451b44SJordan Rupprecht volatile int sink;
7*99451b44SJordan Rupprecht 
8*99451b44SJordan Rupprecht struct S1 {
9*99451b44SJordan Rupprecht   int f1;
10*99451b44SJordan Rupprecht   int *f2;
11*99451b44SJordan Rupprecht };
12*99451b44SJordan Rupprecht 
13*99451b44SJordan Rupprecht struct S2 {
14*99451b44SJordan Rupprecht   char a, b;
15*99451b44SJordan Rupprecht   int pad;
S2S216*99451b44SJordan Rupprecht   S2(int x) {
17*99451b44SJordan Rupprecht     a = x & 0xff;
18*99451b44SJordan Rupprecht     b = x & 0xff00;
19*99451b44SJordan Rupprecht   }
20*99451b44SJordan Rupprecht };
21*99451b44SJordan Rupprecht 
main()22*99451b44SJordan Rupprecht int main() {
23*99451b44SJordan Rupprecht   S1 v1;
24*99451b44SJordan Rupprecht   v1.f1 = sink;
25*99451b44SJordan Rupprecht   v1.f2 = nullptr;
26*99451b44SJordan Rupprecht   sink++; //% self.expect("frame variable v1", substrs=["S1"])
27*99451b44SJordan Rupprecht   S2 v2(v1.f1);
28*99451b44SJordan Rupprecht   sink += use(v2.a); //% self.expect("frame variable v2", substrs=["S2"])
29*99451b44SJordan Rupprecht   sink += use(v2.pad); //% self.expect("frame variable v2", substrs=["S2"])
30*99451b44SJordan Rupprecht   return 0;
31*99451b44SJordan Rupprecht }
32