| // To avoid linking MSVC specific libs, we don't test virtual/override methods | |
| // that needs vftable support in this file. | |
| // Enum. | |
| enum Enum { RED, GREEN, BLUE }; | |
| Enum EnumVar; | |
| // Union. | |
| union Union { | |
| short Row; | |
| unsigned short Col; | |
| int Line : 16; // Test named bitfield. | |
| short : 8; // Unnamed bitfield symbol won't be generated in PDB. | |
| long Table; | |
| }; | |
| Union UnionVar; | |
| // Struct. | |
| struct Struct; | |
| typedef Struct StructTypedef; | |
| struct Struct { | |
| bool A; | |
| unsigned char UCharVar; | |
| unsigned int UIntVar; | |
| long long LongLongVar; | |
| Enum EnumVar; // Test struct has UDT member. | |
| int array[10]; | |
| }; | |
| struct Struct StructVar; | |
| struct _List; // Forward declaration. | |
| struct Complex { | |
| struct _List *array[90]; | |
| struct { // Test unnamed struct. MSVC treats it as `int x` | |
| int x; | |
| }; | |
| union { // Test unnamed union. MSVC treats it as `int a; float b;` | |
| int a; | |
| float b; | |
| }; | |
| }; | |
| struct Complex c; | |
| struct _List { // Test doubly linked list. | |
| struct _List *current; | |
| struct _List *previous; | |
| struct _List *next; | |
| }; | |
| struct _List ListVar; | |
| typedef struct { | |
| int a; | |
| } UnnamedStruct; // Test unnamed typedef-ed struct. | |
| UnnamedStruct UnnanmedVar; | |
| // Class. | |
| namespace MemberTest { | |
| class Base { | |
| public: | |
| Base() {} | |
| ~Base() {} | |
| public: | |
| int Get() { return 0; } | |
| protected: | |
| int a; | |
| }; | |
| class Friend { | |
| public: | |
| int f() { return 3; } | |
| }; | |
| class Class : public Base { // Test base class. | |
| friend Friend; | |
| static int m_static; // Test static member variable. | |
| public: | |
| Class() : m_public(), m_private(), m_protected() {} | |
| explicit Class(int a) { m_public = a; } // Test first reference of m_public. | |
| ~Class() {} | |
| static int StaticMemberFunc(int a, ...) { return 1; } // Test static member function. | |
| int Get() { return 1; } | |
| int f(Friend c) { return c.f(); } | |
| inline bool operator==(const Class &rhs) const // Test operator. | |
| { | |
| return (m_public == rhs.m_public); | |
| } | |
| public: | |
| int m_public; | |
| struct Struct m_struct; | |
| private: | |
| Union m_union; | |
| int m_private; | |
| protected: | |
| friend class Friend; | |
| int m_protected; | |
| }; | |
| } // namespace MemberTest | |
| int main() { | |
| MemberTest::Base B1; | |
| B1.Get(); | |
| // Create instance of C1 so that it has debug info (due to constructor | |
| // homing). | |
| MemberTest::Class C1; | |
| MemberTest::Class::StaticMemberFunc(1, 10, 2); | |
| return 0; | |
| } |