forked from OSchip/llvm-project
113 lines
2.1 KiB
C++
113 lines
2.1 KiB
C++
#include <stdio.h>
|
|
#include <stdint.h>
|
|
|
|
class A
|
|
{
|
|
public:
|
|
A () : m_pad ('c') {}
|
|
|
|
virtual ~A () {}
|
|
|
|
virtual const char * a()
|
|
{
|
|
return __PRETTY_FUNCTION__;
|
|
}
|
|
|
|
virtual const char * b()
|
|
{
|
|
return __PRETTY_FUNCTION__;
|
|
}
|
|
|
|
virtual const char * c()
|
|
{
|
|
return __PRETTY_FUNCTION__;
|
|
}
|
|
protected:
|
|
char m_pad;
|
|
};
|
|
|
|
class AA
|
|
{
|
|
public:
|
|
AA () : m_pad('A') {}
|
|
virtual ~AA () {}
|
|
|
|
virtual const char * aa()
|
|
{
|
|
return __PRETTY_FUNCTION__;
|
|
}
|
|
|
|
protected:
|
|
char m_pad;
|
|
};
|
|
|
|
class B : virtual public A, public AA
|
|
{
|
|
public:
|
|
B () : m_pad ('c') {}
|
|
|
|
virtual ~B () {}
|
|
|
|
virtual const char * a()
|
|
{
|
|
return __PRETTY_FUNCTION__;
|
|
}
|
|
|
|
virtual const char * b()
|
|
{
|
|
return __PRETTY_FUNCTION__;
|
|
}
|
|
protected:
|
|
char m_pad;
|
|
};
|
|
|
|
class C : public B, virtual public A
|
|
{
|
|
public:
|
|
C () : m_pad ('c') {}
|
|
|
|
virtual ~C () {}
|
|
|
|
virtual const char * a()
|
|
{
|
|
return __PRETTY_FUNCTION__;
|
|
}
|
|
protected:
|
|
char m_pad;
|
|
};
|
|
|
|
int main (int argc, char const *argv[], char const *envp[])
|
|
{
|
|
A *a_as_A = new A();
|
|
B *b_as_B = new B();
|
|
A *b_as_A = b_as_B;
|
|
C *c_as_C = new C();
|
|
A *c_as_A = c_as_C;
|
|
|
|
// Set first breakpoint here.
|
|
// then evaluate:
|
|
// expression a_as_A->a()
|
|
// expression a_as_A->b()
|
|
// expression a_as_A->c()
|
|
// expression b_as_A->a()
|
|
// expression b_as_A->b()
|
|
// expression b_as_A->c()
|
|
// expression b_as_B->aa()
|
|
// expression c_as_A->a()
|
|
// expression c_as_A->b()
|
|
// expression c_as_A->c()
|
|
// expression c_as_C->aa()
|
|
printf ("a_as_A->a() = '%s'\n", a_as_A->a());
|
|
printf ("a_as_A->b() = '%s'\n", a_as_A->b());
|
|
printf ("a_as_A->c() = '%s'\n", a_as_A->c());
|
|
printf ("b_as_A->a() = '%s'\n", b_as_A->a());
|
|
printf ("b_as_A->b() = '%s'\n", b_as_A->b());
|
|
printf ("b_as_A->c() = '%s'\n", b_as_A->c());
|
|
printf ("b_as_B->aa() = '%s'\n", b_as_B->aa());
|
|
printf ("c_as_A->a() = '%s'\n", c_as_A->a());
|
|
printf ("c_as_A->b() = '%s'\n", c_as_A->b());
|
|
printf ("c_as_A->c() = '%s'\n", c_as_A->c());
|
|
printf ("c_as_C->aa() = '%s'\n", c_as_C->aa());
|
|
return 0;
|
|
}
|