xref: /llvm-project/lldb/test/API/functionalities/optimized_code/main.cpp (revision 99a05667217162029d1de84d4a49d041c06be175)
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 Rupprecht int 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