xref: /llvm-project/lldb/test/API/functionalities/lazy-loading/main.cpp (revision a0c735e29a4fd471fa4a9ee60b3bdea79a066e28)
199451b44SJordan Rupprecht //----------------------------------------------------------------------------//
299451b44SJordan Rupprecht // Struct loading declarations.
399451b44SJordan Rupprecht 
499451b44SJordan Rupprecht struct StructFirstMember { int i; };
599451b44SJordan Rupprecht struct StructBehindPointer { int i; };
699451b44SJordan Rupprecht struct StructBehindRef { int i; };
799451b44SJordan Rupprecht struct StructMember { int i; };
899451b44SJordan Rupprecht 
999451b44SJordan Rupprecht StructBehindRef struct_instance;
1099451b44SJordan Rupprecht 
1199451b44SJordan Rupprecht struct SomeStruct {
1299451b44SJordan Rupprecht   StructFirstMember *first;
1399451b44SJordan Rupprecht   StructBehindPointer *ptr;
1499451b44SJordan Rupprecht   StructMember member;
1599451b44SJordan Rupprecht   StructBehindRef &ref = struct_instance;
1699451b44SJordan Rupprecht };
1799451b44SJordan Rupprecht 
1899451b44SJordan Rupprecht struct OtherStruct {
1999451b44SJordan Rupprecht   int member_int;
2099451b44SJordan Rupprecht };
2199451b44SJordan Rupprecht 
2299451b44SJordan Rupprecht //----------------------------------------------------------------------------//
2399451b44SJordan Rupprecht // Class loading declarations.
2499451b44SJordan Rupprecht 
2599451b44SJordan Rupprecht struct ClassMember { int i; };
26*34c697c8SRaphael Isemann struct StaticClassMember { int i; };
2799451b44SJordan Rupprecht struct UnusedClassMember { int i; };
2899451b44SJordan Rupprecht struct UnusedClassMemberPtr { int i; };
2999451b44SJordan Rupprecht 
3099451b44SJordan Rupprecht namespace NS {
3199451b44SJordan Rupprecht class ClassInNamespace {
3299451b44SJordan Rupprecht   int i;
3399451b44SJordan Rupprecht };
3499451b44SJordan Rupprecht class ClassWeEnter {
3599451b44SJordan Rupprecht public:
3699451b44SJordan Rupprecht   int dummy; // Prevent bug where LLDB always completes first member.
3799451b44SJordan Rupprecht   ClassMember member;
38*34c697c8SRaphael Isemann   static StaticClassMember static_member;
3999451b44SJordan Rupprecht   UnusedClassMember unused_member;
4099451b44SJordan Rupprecht   UnusedClassMemberPtr *unused_member_ptr;
enteredFunction()4199451b44SJordan Rupprecht   int enteredFunction() {
4299451b44SJordan Rupprecht     return member.i; // Location: class function
4399451b44SJordan Rupprecht   }
4499451b44SJordan Rupprecht };
45*34c697c8SRaphael Isemann StaticClassMember ClassWeEnter::static_member;
4699451b44SJordan Rupprecht };
4799451b44SJordan Rupprecht 
4899451b44SJordan Rupprecht //----------------------------------------------------------------------------//
4999451b44SJordan Rupprecht // Function we can stop in.
5099451b44SJordan Rupprecht 
functionWithOtherStruct()5199451b44SJordan Rupprecht int functionWithOtherStruct() {
5299451b44SJordan Rupprecht   OtherStruct other_struct_var;
5399451b44SJordan Rupprecht   other_struct_var.member_int++; // Location: other struct function
5499451b44SJordan Rupprecht   return other_struct_var.member_int;
5599451b44SJordan Rupprecht }
5699451b44SJordan Rupprecht 
functionWithMultipleLocals()5799451b44SJordan Rupprecht int functionWithMultipleLocals() {
5899451b44SJordan Rupprecht   SomeStruct struct_var;
5999451b44SJordan Rupprecht   OtherStruct other_struct_var;
6099451b44SJordan Rupprecht   NS::ClassInNamespace namespace_class;
6199451b44SJordan Rupprecht   other_struct_var.member_int++; // Location: multiple locals function
6299451b44SJordan Rupprecht   return other_struct_var.member_int;
6399451b44SJordan Rupprecht }
6499451b44SJordan Rupprecht 
main(int argc,char ** argv)6599451b44SJordan Rupprecht int main(int argc, char **argv) {
6699451b44SJordan Rupprecht   NS::ClassWeEnter c;
6799451b44SJordan Rupprecht   c.enteredFunction();
6899451b44SJordan Rupprecht 
6999451b44SJordan Rupprecht   functionWithOtherStruct();
7099451b44SJordan Rupprecht   functionWithMultipleLocals();
7199451b44SJordan Rupprecht   return 0;
7299451b44SJordan Rupprecht }
73