xref: /llvm-project/llvm/test/DebugInfo/PDB/Inputs/every-enum.cpp (revision bdf0381e216e2aaa1aa736fd288d94786e4447e0)
1 // Build with "cl.exe /Zi /GR- /GX- every-enum.cpp /link /debug /nodefaultlib /incremental:no /entry:main"
2 
3 #include <stdint.h>
4 
5 // clang-format off
6 void *__purecall = 0;
7 
operator delete(void *,unsigned int)8 void __cdecl operator delete(void *,unsigned int) {}
operator delete(void *,unsigned __int64)9 void __cdecl operator delete(void *,unsigned __int64) {}
10 
11 
12 enum I8 : int8_t {
13   I8A = INT8_MIN,
14   I8B = 0,
15   I8C = INT8_MAX
16 };
17 
18 enum I16 : int16_t {
19   I16A = INT16_MIN,
20   I16B = 0,
21   I16C = INT16_MAX,
22 };
23 
24 enum I32 : int32_t {
25   I32A = INT32_MIN,
26   I32B = 0,
27   I32C = INT32_MAX,
28 };
29 
30 enum I64 : int64_t {
31   I64A = INT64_MIN,
32   I64B = 0,
33   I64C = INT64_MAX,
34 };
35 
36 enum U8 : uint8_t {
37   U8A = 0,
38   U8B = UINT8_MAX
39 };
40 
41 enum U16 : uint16_t {
42   U16A = 0,
43   U16B = UINT16_MAX,
44 };
45 
46 enum U32 : uint32_t {
47   U32A = 0,
48   U32B = UINT32_MAX,
49 };
50 
51 enum U64 : uint64_t {
52   U64A = 0,
53   U64B = UINT64_MAX,
54 };
55 
56 enum Char16 : char16_t {
57   C16A = u'a',
58   C16B = u'b',
59 };
60 
61 enum Char32 : char32_t {
62   C32A = U'a',
63   C32B = U'b',
64 };
65 
66 enum WChar : wchar_t {
67   WCA = L'a',
68   WCB = L'b',
69 };
70 
71 enum Bool : bool {
72   BA = true,
73   BB = false
74 };
75 
76 enum class EC {
77   A = 1,
78   B = 2
79 };
80 
81 struct Struct {
82   enum Nested {
83     A = 1,
84     B = 2
85   };
86 };
87 
f(T t)88 template<typename T> void f(T t) {}
89 
main(int argc,char ** argv)90 int main(int argc, char **argv) {
91   f(I8A);
92   f(I16A);
93   f(I32A);
94   f(I64A);
95   f(U8A);
96   f(U16A);
97   f(U32A);
98   f(U64A);
99 
100   f(C16A);
101   f(C32A);
102   f(WCA);
103   f(BA);
104 
105 
106   f(EC::A);
107   f(Struct::A);
108 
109   f<const volatile EC>(EC::A);
110 }
111