xref: /llvm-project/lldb/test/API/lang/cpp/dynamic-value/pass-to-base.cpp (revision dd5d73007240712957f2b633f795d9965afaadd6)
1*dd5d7300SPavel Labath #include "a.h"
2*dd5d7300SPavel Labath 
3*dd5d7300SPavel Labath void A::doSomething(A &anotherA) {
4*dd5d7300SPavel Labath   printf("In A %p doing something with %d.\n", this, m_a_value);
5*dd5d7300SPavel Labath   int tmp_value = anotherA.Value();
6*dd5d7300SPavel Labath   printf("Also have another A at %p: %d.\n", &anotherA, tmp_value); // Break here in doSomething.
7*dd5d7300SPavel Labath }
899451b44SJordan Rupprecht 
999451b44SJordan Rupprecht class Extra
1099451b44SJordan Rupprecht {
1199451b44SJordan Rupprecht public:
1299451b44SJordan Rupprecht   Extra (int in_one, int in_two) : m_extra_one(in_one), m_extra_two(in_two) {}
1399451b44SJordan Rupprecht 
1499451b44SJordan Rupprecht private:
1599451b44SJordan Rupprecht   int m_extra_one;
1699451b44SJordan Rupprecht   int m_extra_two;
1799451b44SJordan Rupprecht };
1899451b44SJordan Rupprecht 
1999451b44SJordan Rupprecht class B : public Extra, public virtual A
2099451b44SJordan Rupprecht {
2199451b44SJordan Rupprecht public:
2299451b44SJordan Rupprecht   B (int b_value, int a_value) : Extra(b_value, a_value), A(a_value), m_b_value(b_value) {}
2399451b44SJordan Rupprecht   B (int b_value, int a_value, A *client_A) : Extra(b_value, a_value), A(a_value, client_A), m_b_value(b_value) {}
2499451b44SJordan Rupprecht 
2599451b44SJordan Rupprecht   virtual ~B () {}
2699451b44SJordan Rupprecht 
2799451b44SJordan Rupprecht private:
2899451b44SJordan Rupprecht   int m_b_value;
2999451b44SJordan Rupprecht };
3099451b44SJordan Rupprecht 
3199451b44SJordan Rupprecht static A* my_global_A_ptr;
3299451b44SJordan Rupprecht 
3399451b44SJordan Rupprecht int
3499451b44SJordan Rupprecht main (int argc, char **argv)
3599451b44SJordan Rupprecht {
3699451b44SJordan Rupprecht   my_global_A_ptr = new B (100, 200);
3799451b44SJordan Rupprecht   B myB (10, 20, my_global_A_ptr);
3899451b44SJordan Rupprecht   B *second_fake_A_ptr = new B (150, 250);
3999451b44SJordan Rupprecht   B otherB (300, 400, second_fake_A_ptr);
4099451b44SJordan Rupprecht 
4199451b44SJordan Rupprecht   myB.doSomething(otherB); // Break here and get real addresses of myB and otherB.
4299451b44SJordan Rupprecht 
4399451b44SJordan Rupprecht   A reallyA (500);
4499451b44SJordan Rupprecht   myB.doSomething (reallyA);  // Break here and get real address of reallyA.
4599451b44SJordan Rupprecht 
46*dd5d7300SPavel Labath   myB.doSomething(*make_anonymous_B());
47*dd5d7300SPavel Labath 
4899451b44SJordan Rupprecht   return 0;
4999451b44SJordan Rupprecht }
50