Files
archived-llvm/test/DebugInfo/PDB/Inputs/every-enum.cpp
Zachary Turner 8d5fd87893 [PDB] Make the native reader support enumerators.
Previously we would dump the names of enum types, but not their
enumerator values.  This adds support for enumerator values.  In
doing so, we have to introduce a general purpose mechanism for
caching symbol indices of field list members.  Unlike global
types, FieldList members do not have a TypeIndex.  So instead,
we identify them by the pair {TypeIndexOfFieldList, IndexInFieldList}.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@342415 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-17 21:08:11 +00:00

111 lines
1.4 KiB
C++

// Build with "cl.exe /Zi /GR- /GX- every-enum.cpp /link /debug /nodefaultlib /incremental:no /entry:main"
#include <stdint.h>
// clang-format off
void *__purecall = 0;
void __cdecl operator delete(void *,unsigned int) {}
void __cdecl operator delete(void *,unsigned __int64) {}
enum I8 : int8_t {
I8A = INT8_MIN,
I8B = 0,
I8C = INT8_MAX
};
enum I16 : int16_t {
I16A = INT16_MIN,
I16B = 0,
I16C = INT16_MAX,
};
enum I32 : int32_t {
I32A = INT32_MIN,
I32B = 0,
I32C = INT32_MAX,
};
enum I64 : int64_t {
I64A = INT64_MIN,
I64B = 0,
I64C = INT64_MAX,
};
enum U8 : uint8_t {
U8A = 0,
U8B = UINT8_MAX
};
enum U16 : uint16_t {
U16A = 0,
U16B = UINT16_MAX,
};
enum U32 : uint32_t {
U32A = 0,
U32B = UINT32_MAX,
};
enum U64 : uint64_t {
U64A = 0,
U64B = UINT64_MAX,
};
enum Char16 : char16_t {
C16A = u'a',
C16B = u'b',
};
enum Char32 : char32_t {
C32A = U'a',
C32B = U'b',
};
enum WChar : wchar_t {
WCA = L'a',
WCB = L'b',
};
enum Bool : bool {
BA = true,
BB = false
};
enum class EC {
A = 1,
B = 2
};
struct Struct {
enum Nested {
A = 1,
B = 2
};
};
template<typename T> void f(T t) {}
int main(int argc, char **argv) {
f(I8A);
f(I16A);
f(I32A);
f(I64A);
f(U8A);
f(U16A);
f(U32A);
f(U64A);
f(C16A);
f(C32A);
f(WCA);
f(BA);
f(EC::A);
f(Struct::A);
f<const volatile EC>(EC::A);
}