| // 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; |
| } |