]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - packages/Python/lldbsuite/test/lang/cpp/virtual/main.cpp
Vendor import of lldb release_39 branch r276489:
[FreeBSD/FreeBSD.git] / packages / Python / lldbsuite / test / lang / cpp / virtual / main.cpp
1 #include <stdio.h>
2 #include <stdint.h>
3
4 class A
5 {
6 public:
7     A () : m_pad ('c') {}
8
9     virtual ~A () {}
10     
11     virtual const char * a()
12     {
13         return __PRETTY_FUNCTION__;
14     }
15
16     virtual const char * b()
17     {
18         return __PRETTY_FUNCTION__;
19     }
20
21     virtual const char * c()
22     {
23         return __PRETTY_FUNCTION__;
24     }
25 protected:
26     char m_pad;
27 };
28
29 class AA
30 {
31 public:
32     AA () : m_pad('A') {}
33     virtual ~AA () {}
34
35     virtual const char * aa()
36     {
37         return __PRETTY_FUNCTION__;
38     }
39   
40 protected:
41     char m_pad;
42 };
43
44 class B : virtual public A, public AA
45 {
46 public:
47     B () : m_pad ('c')  {}
48
49     virtual ~B () {}
50     
51     virtual const char * a()
52     {
53         return __PRETTY_FUNCTION__;
54     }
55
56     virtual const char * b()
57     {
58         return __PRETTY_FUNCTION__;
59     }
60 protected:
61     char m_pad;
62 };
63
64 class C : public B, virtual public A
65 {
66 public:
67     C () : m_pad ('c') {}
68
69     virtual ~C () {}
70     
71     virtual const char * a()
72     {
73         return __PRETTY_FUNCTION__;
74     }
75 protected:
76     char m_pad;
77 };
78
79 int main (int argc, char const *argv[], char const *envp[])
80 {
81     A *a_as_A = new A();
82     B *b_as_B = new B();
83     A *b_as_A = b_as_B;
84     C *c_as_C = new C();
85     A *c_as_A = c_as_C;
86
87     char golden[4096];
88     char *p = golden;
89     char *end = p + sizeof golden;
90     p += snprintf(p, end-p, "a_as_A->a() = '%s'\n", a_as_A->a());
91     p += snprintf(p, end-p, "a_as_A->b() = '%s'\n", a_as_A->b());
92     p += snprintf(p, end-p, "a_as_A->c() = '%s'\n", a_as_A->c());
93     p += snprintf(p, end-p, "b_as_A->a() = '%s'\n", b_as_A->a());
94     p += snprintf(p, end-p, "b_as_A->b() = '%s'\n", b_as_A->b());
95     p += snprintf(p, end-p, "b_as_A->c() = '%s'\n", b_as_A->c());
96     p += snprintf(p, end-p, "b_as_B->aa() = '%s'\n", b_as_B->aa());
97     p += snprintf(p, end-p, "c_as_A->a() = '%s'\n", c_as_A->a());
98     p += snprintf(p, end-p, "c_as_A->b() = '%s'\n", c_as_A->b());
99     p += snprintf(p, end-p, "c_as_A->c() = '%s'\n", c_as_A->c());
100     p += snprintf(p, end-p, "c_as_C->aa() = '%s'\n", c_as_C->aa());
101     puts("");// Set first breakpoint here.
102     // then evaluate:
103     // expression a_as_A->a()
104     // expression a_as_A->b()
105     // expression a_as_A->c()
106     // expression b_as_A->a()
107     // expression b_as_A->b()
108     // expression b_as_A->c()
109     // expression b_as_B->aa()
110     // expression c_as_A->a()
111     // expression c_as_A->b()
112     // expression c_as_A->c()
113     // expression c_as_C->aa()
114     
115     return 0;
116 }