teak-llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/virtual/main.cpp
Pavel Labath 0314b00daa Avoid using stdio in TestVirtual
Summary:
using stdio in tests does not work on windows, and it is not completely reliable on linux.
Avoid using stdio in this test, as it is not necessary for this purpose.

Reviewers: clayborg

Subscribers: lldb-commits, zturner

Differential Revision: http://reviews.llvm.org/D20567

llvm-svn: 270831
2016-05-26 08:38:02 +00:00

117 lines
2.4 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;
char golden[4096];
char *p = golden;
char *end = p + sizeof golden;
p += snprintf(p, end-p, "a_as_A->a() = '%s'\n", a_as_A->a());
p += snprintf(p, end-p, "a_as_A->b() = '%s'\n", a_as_A->b());
p += snprintf(p, end-p, "a_as_A->c() = '%s'\n", a_as_A->c());
p += snprintf(p, end-p, "b_as_A->a() = '%s'\n", b_as_A->a());
p += snprintf(p, end-p, "b_as_A->b() = '%s'\n", b_as_A->b());
p += snprintf(p, end-p, "b_as_A->c() = '%s'\n", b_as_A->c());
p += snprintf(p, end-p, "b_as_B->aa() = '%s'\n", b_as_B->aa());
p += snprintf(p, end-p, "c_as_A->a() = '%s'\n", c_as_A->a());
p += snprintf(p, end-p, "c_as_A->b() = '%s'\n", c_as_A->b());
p += snprintf(p, end-p, "c_as_A->c() = '%s'\n", c_as_A->c());
p += snprintf(p, end-p, "c_as_C->aa() = '%s'\n", c_as_C->aa());
puts("");// 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()
return 0;
}