199451b44SJordan Rupprecht // This is a regression test that checks whether lldb can inspect the variables 299451b44SJordan Rupprecht // in this program without triggering an ASan exception. 399451b44SJordan Rupprecht use(int x)499451b44SJordan Rupprecht__attribute__((noinline, optnone)) int use(int x) { return x; } 599451b44SJordan Rupprecht 699451b44SJordan Rupprecht volatile int sink; 799451b44SJordan Rupprecht 899451b44SJordan Rupprecht struct S1 { 999451b44SJordan Rupprecht int f1; 1099451b44SJordan Rupprecht int *f2; 1199451b44SJordan Rupprecht }; 1299451b44SJordan Rupprecht 1399451b44SJordan Rupprecht struct S2 { 14*99a05667SArthur Eubanks char a = 0; 15*99a05667SArthur Eubanks char b = 0; 16*99a05667SArthur Eubanks int pad = 0; S2S21799451b44SJordan Rupprecht S2(int x) { 1899451b44SJordan Rupprecht a = x & 0xff; 1999451b44SJordan Rupprecht b = x & 0xff00; 2099451b44SJordan Rupprecht } 2199451b44SJordan Rupprecht }; 2299451b44SJordan Rupprecht main()2399451b44SJordan Rupprechtint main() { 2499451b44SJordan Rupprecht S1 v1; 2599451b44SJordan Rupprecht v1.f1 = sink; 2699451b44SJordan Rupprecht v1.f2 = nullptr; 2799451b44SJordan Rupprecht sink++; //% self.expect("frame variable v1", substrs=["S1"]) 2899451b44SJordan Rupprecht S2 v2(v1.f1); 2999451b44SJordan Rupprecht sink += use(v2.a); //% self.expect("frame variable v2", substrs=["S2"]) 3099451b44SJordan Rupprecht sink += use(v2.pad); //% self.expect("frame variable v2", substrs=["S2"]) 3199451b44SJordan Rupprecht return 0; 3299451b44SJordan Rupprecht } 33