mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-28 07:49:01 -04:00
86 lines
1.7 KiB
C++
86 lines
1.7 KiB
C++
//===-- main.cpp ------------------------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
#include <stdio.h>
|
|
|
|
static int g_next_value = 12345;
|
|
|
|
class VBase
|
|
{
|
|
public:
|
|
VBase() : m_value(g_next_value++) {}
|
|
virtual ~VBase() {}
|
|
void Print()
|
|
{
|
|
printf("%p: %s\n%p: m_value = 0x%8.8x\n", this, __PRETTY_FUNCTION__, &m_value, m_value);
|
|
}
|
|
int m_value;
|
|
};
|
|
|
|
class Derived1 : public virtual VBase
|
|
{
|
|
public:
|
|
Derived1() {};
|
|
void Print ()
|
|
{
|
|
printf("%p: %s\n", this, __PRETTY_FUNCTION__);
|
|
VBase::Print();
|
|
}
|
|
|
|
};
|
|
|
|
class Derived2 : public virtual VBase
|
|
{
|
|
public:
|
|
Derived2() {};
|
|
|
|
void Print ()
|
|
{
|
|
printf("%p: %s\n", this, __PRETTY_FUNCTION__);
|
|
VBase::Print();
|
|
}
|
|
};
|
|
|
|
class Joiner1 : public Derived1, public Derived2
|
|
{
|
|
public:
|
|
Joiner1() :
|
|
m_joiner1(3456),
|
|
m_joiner2(6789) {}
|
|
void Print ()
|
|
{
|
|
printf("%p: %s \n%p: m_joiner1 = 0x%8.8x\n%p: m_joiner2 = 0x%8.8x\n",
|
|
this,
|
|
__PRETTY_FUNCTION__,
|
|
&m_joiner1,
|
|
m_joiner1,
|
|
&m_joiner2,
|
|
m_joiner2);
|
|
Derived1::Print();
|
|
Derived2::Print();
|
|
}
|
|
int m_joiner1;
|
|
int m_joiner2;
|
|
};
|
|
|
|
class Joiner2 : public Derived2
|
|
{
|
|
int m_stuff[32];
|
|
};
|
|
|
|
int main(int argc, const char * argv[])
|
|
{
|
|
Joiner1 j1;
|
|
Joiner2 j2;
|
|
j1.Print();
|
|
j2.Print();
|
|
Derived2 *d = &j1;
|
|
d = &j2; // breakpoint 1
|
|
return 0; // breakpoint 2
|
|
}
|