1a54b7ddbSZachary Turner // Compile with "cl /c /Zi /GR- symbolformat.cpp" 2a54b7ddbSZachary Turner // Compile symbolformat-fpo.cpp (see file for instructions) 3a54b7ddbSZachary Turner // Link with "link symbolformat.obj symbolformat-fpo.obj /debug /nodefaultlib 4a54b7ddbSZachary Turner // /entry:main /out:symbolformat.exe" 5a54b7ddbSZachary Turner _purecall(void)6a54b7ddbSZachary Turnerint __cdecl _purecall(void) { return 0; } 7a54b7ddbSZachary Turner 829c69105SZachary Turner enum TestEnum { 929c69105SZachary Turner Value, 1029c69105SZachary Turner Value10 = 10 1129c69105SZachary Turner }; 1229c69105SZachary Turner 1329c69105SZachary Turner enum class TestEnumClass { 1429c69105SZachary Turner Value, 1529c69105SZachary Turner Value10 = 10 1629c69105SZachary Turner }; 1729c69105SZachary Turner 18a54b7ddbSZachary Turner struct A { PureFuncA19a54b7ddbSZachary Turner virtual void PureFunc() = 0 {} VirtualFuncA20a54b7ddbSZachary Turner virtual void VirtualFunc() {} RegularFuncA21a54b7ddbSZachary Turner void RegularFunc() {} 22a54b7ddbSZachary Turner }; 23a54b7ddbSZachary Turner 2429c69105SZachary Turner struct VirtualBase { 25a54b7ddbSZachary Turner }; 26a54b7ddbSZachary Turner 2729c69105SZachary Turner struct B : public A, protected virtual VirtualBase { PureFuncB2829c69105SZachary Turner void PureFunc() override {} 29d270d22fSZachary Turner }; 3029c69105SZachary Turner 31d270d22fSZachary Turner struct MemberTest { 3229c69105SZachary Turner enum NestedEnum { 3329c69105SZachary Turner FirstVal, 3429c69105SZachary Turner SecondVal 3529c69105SZachary Turner }; 3629c69105SZachary Turner 3729c69105SZachary Turner typedef int NestedTypedef; 38d270d22fSZachary Turner 39d270d22fSZachary Turner NestedEnum m_nested_enum; 40d270d22fSZachary Turner NestedTypedef m_typedef; 41d270d22fSZachary Turner bool m_bool; 42d270d22fSZachary Turner char m_char; 43d270d22fSZachary Turner wchar_t m_wchar_t; 44d270d22fSZachary Turner int m_int; 45d270d22fSZachary Turner unsigned m_unsigned; 46d270d22fSZachary Turner long m_long; 47d270d22fSZachary Turner unsigned long m_unsigned_long; 48d270d22fSZachary Turner __int64 m_int64; 49d270d22fSZachary Turner unsigned __int64 m_unsigned_int64; 50d270d22fSZachary Turner float m_float; 51d270d22fSZachary Turner double m_double; 52d270d22fSZachary Turner void (*m_pfn_2_args)(int, double); 53*08eb343cSAdrian McCarthy int m_multidimensional_array[2][3]; 5429c69105SZachary Turner }; 5529c69105SZachary Turner 5629c69105SZachary Turner typedef int IntType; 5729c69105SZachary Turner typedef A ClassAType; 5829c69105SZachary Turner 59db18f5caSZachary Turner int g_global_int; 60db18f5caSZachary Turner void *g_global_pointer = nullptr; 61db18f5caSZachary Turner 62*08eb343cSAdrian McCarthy typedef int int_array[3]; 63*08eb343cSAdrian McCarthy int_array g_array = { 1, 2, 3 }; 64*08eb343cSAdrian McCarthy int_array *g_pointer_to_array = &g_array; 65*08eb343cSAdrian McCarthy const int *g_pointer_to_const_int = nullptr; 66*08eb343cSAdrian McCarthy int * const g_const_pointer_to_int = nullptr; 67*08eb343cSAdrian McCarthy const int * const g_const_pointer_to_const_int = nullptr; 68*08eb343cSAdrian McCarthy main(int argc,char ** argv)69a54b7ddbSZachary Turnerint main(int argc, char **argv) { 70d270d22fSZachary Turner // Force symbol references so the linker generates debug info 71a54b7ddbSZachary Turner B b; 72d270d22fSZachary Turner MemberTest members; 73a54b7ddbSZachary Turner auto PureAddr = &B::PureFunc; 74a54b7ddbSZachary Turner auto VirtualAddr = &A::PureFunc; 75a54b7ddbSZachary Turner auto RegularAddr = &A::RegularFunc; 7629c69105SZachary Turner TestEnum Enum = Value; 7729c69105SZachary Turner TestEnumClass EnumClass = TestEnumClass::Value10; 7829c69105SZachary Turner IntType Int = 12; 7929c69105SZachary Turner ClassAType *ClassA = &b; 80a54b7ddbSZachary Turner return 0; 81a54b7ddbSZachary Turner } 82