diff options
Diffstat (limited to 'lldb/test/lang/cpp/virtual/main.cpp')
| -rw-r--r-- | lldb/test/lang/cpp/virtual/main.cpp | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/lldb/test/lang/cpp/virtual/main.cpp b/lldb/test/lang/cpp/virtual/main.cpp new file mode 100644 index 00000000000..0c3d29202a7 --- /dev/null +++ b/lldb/test/lang/cpp/virtual/main.cpp @@ -0,0 +1,112 @@ +#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; +} |

