1*87aa9c9eSJonas Devlieghere // To avoid linking MSVC specific libs, we don't test virtual/override methods 2*87aa9c9eSJonas Devlieghere // that needs vftable support in this file. 3*87aa9c9eSJonas Devlieghere 4*87aa9c9eSJonas Devlieghere // Enum. 5*87aa9c9eSJonas Devlieghere enum Enum { RED, GREEN, BLUE }; 6*87aa9c9eSJonas Devlieghere Enum EnumVar; 7*87aa9c9eSJonas Devlieghere 8*87aa9c9eSJonas Devlieghere // Union. 9*87aa9c9eSJonas Devlieghere union Union { 10*87aa9c9eSJonas Devlieghere short Row; 11*87aa9c9eSJonas Devlieghere unsigned short Col; 12*87aa9c9eSJonas Devlieghere int Line : 16; // Test named bitfield. 13*87aa9c9eSJonas Devlieghere short : 8; // Unnamed bitfield symbol won't be generated in PDB. 14*87aa9c9eSJonas Devlieghere long Table; 15*87aa9c9eSJonas Devlieghere }; 16*87aa9c9eSJonas Devlieghere Union UnionVar; 17*87aa9c9eSJonas Devlieghere 18*87aa9c9eSJonas Devlieghere // Struct. 19*87aa9c9eSJonas Devlieghere struct Struct; 20*87aa9c9eSJonas Devlieghere typedef Struct StructTypedef; 21*87aa9c9eSJonas Devlieghere 22*87aa9c9eSJonas Devlieghere struct Struct { 23*87aa9c9eSJonas Devlieghere bool A; 24*87aa9c9eSJonas Devlieghere unsigned char UCharVar; 25*87aa9c9eSJonas Devlieghere unsigned int UIntVar; 26*87aa9c9eSJonas Devlieghere long long LongLongVar; 27*87aa9c9eSJonas Devlieghere Enum EnumVar; // Test struct has UDT member. 28*87aa9c9eSJonas Devlieghere int array[10]; 29*87aa9c9eSJonas Devlieghere }; 30*87aa9c9eSJonas Devlieghere struct Struct StructVar; 31*87aa9c9eSJonas Devlieghere 32*87aa9c9eSJonas Devlieghere struct _List; // Forward declaration. 33*87aa9c9eSJonas Devlieghere struct Complex { 34*87aa9c9eSJonas Devlieghere struct _List *array[90]; 35*87aa9c9eSJonas Devlieghere struct { // Test unnamed struct. MSVC treats it as `int x` 36*87aa9c9eSJonas Devlieghere int x; 37*87aa9c9eSJonas Devlieghere }; 38*87aa9c9eSJonas Devlieghere union { // Test unnamed union. MSVC treats it as `int a; float b;` 39*87aa9c9eSJonas Devlieghere int a; 40*87aa9c9eSJonas Devlieghere float b; 41*87aa9c9eSJonas Devlieghere }; 42*87aa9c9eSJonas Devlieghere }; 43*87aa9c9eSJonas Devlieghere struct Complex c; 44*87aa9c9eSJonas Devlieghere 45*87aa9c9eSJonas Devlieghere struct _List { // Test doubly linked list. 46*87aa9c9eSJonas Devlieghere struct _List *current; 47*87aa9c9eSJonas Devlieghere struct _List *previous; 48*87aa9c9eSJonas Devlieghere struct _List *next; 49*87aa9c9eSJonas Devlieghere }; 50*87aa9c9eSJonas Devlieghere struct _List ListVar; 51*87aa9c9eSJonas Devlieghere 52*87aa9c9eSJonas Devlieghere typedef struct { 53*87aa9c9eSJonas Devlieghere int a; 54*87aa9c9eSJonas Devlieghere } UnnamedStruct; // Test unnamed typedef-ed struct. 55*87aa9c9eSJonas Devlieghere UnnamedStruct UnnanmedVar; 56*87aa9c9eSJonas Devlieghere 57*87aa9c9eSJonas Devlieghere // Class. 58*87aa9c9eSJonas Devlieghere namespace MemberTest { 59*87aa9c9eSJonas Devlieghere class Base { 60*87aa9c9eSJonas Devlieghere public: 61*87aa9c9eSJonas Devlieghere Base() {} 62*87aa9c9eSJonas Devlieghere ~Base() {} 63*87aa9c9eSJonas Devlieghere 64*87aa9c9eSJonas Devlieghere public: 65*87aa9c9eSJonas Devlieghere int Get() { return 0; } 66*87aa9c9eSJonas Devlieghere 67*87aa9c9eSJonas Devlieghere protected: 68*87aa9c9eSJonas Devlieghere int a; 69*87aa9c9eSJonas Devlieghere }; 70*87aa9c9eSJonas Devlieghere class Friend { 71*87aa9c9eSJonas Devlieghere public: 72*87aa9c9eSJonas Devlieghere int f() { return 3; } 73*87aa9c9eSJonas Devlieghere }; 74*87aa9c9eSJonas Devlieghere class Class : public Base { // Test base class. 75*87aa9c9eSJonas Devlieghere friend Friend; 76*87aa9c9eSJonas Devlieghere static int m_static; // Test static member variable. 77*87aa9c9eSJonas Devlieghere public: 78*87aa9c9eSJonas Devlieghere Class() : m_public(), m_private(), m_protected() {} 79*87aa9c9eSJonas Devlieghere explicit Class(int a) { m_public = a; } // Test first reference of m_public. 80*87aa9c9eSJonas Devlieghere ~Class() {} 81*87aa9c9eSJonas Devlieghere 82*87aa9c9eSJonas Devlieghere static int StaticMemberFunc(int a, ...) { 83*87aa9c9eSJonas Devlieghere return 1; 84*87aa9c9eSJonas Devlieghere } // Test static member function. 85*87aa9c9eSJonas Devlieghere int Get() { return 1; } 86*87aa9c9eSJonas Devlieghere int f(Friend c) { return c.f(); } 87*87aa9c9eSJonas Devlieghere inline bool operator==(const Class &rhs) const // Test operator. 88*87aa9c9eSJonas Devlieghere { 89*87aa9c9eSJonas Devlieghere return (m_public == rhs.m_public); 90*87aa9c9eSJonas Devlieghere } 91*87aa9c9eSJonas Devlieghere 92*87aa9c9eSJonas Devlieghere public: 93*87aa9c9eSJonas Devlieghere int m_public; 94*87aa9c9eSJonas Devlieghere struct Struct m_struct; 95*87aa9c9eSJonas Devlieghere 96*87aa9c9eSJonas Devlieghere private: 97*87aa9c9eSJonas Devlieghere Union m_union; 98*87aa9c9eSJonas Devlieghere int m_private; 99*87aa9c9eSJonas Devlieghere 100*87aa9c9eSJonas Devlieghere protected: 101*87aa9c9eSJonas Devlieghere friend class Friend; 102*87aa9c9eSJonas Devlieghere int m_protected; 103*87aa9c9eSJonas Devlieghere }; 104*87aa9c9eSJonas Devlieghere } // namespace MemberTest 105*87aa9c9eSJonas Devlieghere 106*87aa9c9eSJonas Devlieghere int main() { 107*87aa9c9eSJonas Devlieghere MemberTest::Base B1; 108*87aa9c9eSJonas Devlieghere B1.Get(); 109*87aa9c9eSJonas Devlieghere MemberTest::Class::StaticMemberFunc(1, 10, 2); 110*87aa9c9eSJonas Devlieghere return 0; 111*87aa9c9eSJonas Devlieghere } 112