xref: /llvm-project/llvm/test/DebugInfo/PDB/Inputs/every-class.cpp (revision cfa1d499f92d52c2ac2443c52fb77ad2fc64591d)
1*cfa1d499SZachary Turner // Build with "cl.exe /Z7 /GR- /GS- /GX- every-class.cpp /link /debug:full /nodefaultlib /incremental:no /entry:main"
2*cfa1d499SZachary Turner 
3*cfa1d499SZachary Turner #include <stdint.h>
4*cfa1d499SZachary Turner 
5*cfa1d499SZachary Turner // clang-format off
6*cfa1d499SZachary Turner void *__purecall = 0;
7*cfa1d499SZachary Turner 
operator delete(void *,unsigned int)8*cfa1d499SZachary Turner void __cdecl operator delete(void *, unsigned int) {}
operator delete(void *,unsigned __int64)9*cfa1d499SZachary Turner void __cdecl operator delete(void *, unsigned __int64) {}
10*cfa1d499SZachary Turner 
11*cfa1d499SZachary Turner struct Nothing {};
ConstructorConstructor12*cfa1d499SZachary Turner struct Constructor { Constructor() {} };
13*cfa1d499SZachary Turner struct Assignment {
operator =Assignment14*cfa1d499SZachary Turner   Assignment &operator=(Assignment Other) { return *this; }
15*cfa1d499SZachary Turner };
16*cfa1d499SZachary Turner struct Cast {
operator intCast17*cfa1d499SZachary Turner   operator int() { return 42; }
18*cfa1d499SZachary Turner };
19*cfa1d499SZachary Turner 
20*cfa1d499SZachary Turner struct Nested {
21*cfa1d499SZachary Turner   struct F {};
22*cfa1d499SZachary Turner };
23*cfa1d499SZachary Turner struct Operator {
operator +Operator24*cfa1d499SZachary Turner   int operator+(int X) { return 42; }
25*cfa1d499SZachary Turner };
26*cfa1d499SZachary Turner 
27*cfa1d499SZachary Turner class Class {};
28*cfa1d499SZachary Turner 
29*cfa1d499SZachary Turner union Union {};
30*cfa1d499SZachary Turner 
31*cfa1d499SZachary Turner enum class Enum {A};
32*cfa1d499SZachary Turner 
33*cfa1d499SZachary Turner 
f(T t)34*cfa1d499SZachary Turner template<typename T> void f(T t) {}
35*cfa1d499SZachary Turner 
main(int argc,char ** argv)36*cfa1d499SZachary Turner int main(int argc, char **argv) {
37*cfa1d499SZachary Turner   struct Scoped {};
38*cfa1d499SZachary Turner 
39*cfa1d499SZachary Turner   struct { } Anonymous;
40*cfa1d499SZachary Turner 
41*cfa1d499SZachary Turner   f(Nothing{});
42*cfa1d499SZachary Turner   f(Constructor{});
43*cfa1d499SZachary Turner   f(Assignment{});
44*cfa1d499SZachary Turner   f(Cast{});
45*cfa1d499SZachary Turner   f(Nested{});
46*cfa1d499SZachary Turner   f(Operator{});
47*cfa1d499SZachary Turner   f(Nested::F{});
48*cfa1d499SZachary Turner   f(Scoped{});
49*cfa1d499SZachary Turner   f(Class{});
50*cfa1d499SZachary Turner   f(Union{});
51*cfa1d499SZachary Turner   f(Anonymous);
52*cfa1d499SZachary Turner   f(Enum::A);
53*cfa1d499SZachary Turner 
54*cfa1d499SZachary Turner 
55*cfa1d499SZachary Turner   f<const Nothing>(Nothing{});
56*cfa1d499SZachary Turner   f<volatile Nothing>(Nothing{});
57*cfa1d499SZachary Turner   f<const volatile Nothing>(Nothing{});
58*cfa1d499SZachary Turner   f<__unaligned Nothing>(Nothing{});
59*cfa1d499SZachary Turner 
60*cfa1d499SZachary Turner   return 0;
61*cfa1d499SZachary Turner }
62