xref: /llvm-project/llvm/test/DebugInfo/PDB/Inputs/every-pointer.cpp (revision c41ce8355f88ce522dabde2b435bfe83d550a379)
1*c41ce835SZachary Turner // Build with "cl.exe /Zi /GR- /GX- every-pointer.cpp /link /debug /nodefaultlib /incremental:no /entry:main"
2*c41ce835SZachary Turner 
3*c41ce835SZachary Turner #include <stdint.h>
4*c41ce835SZachary Turner 
5*c41ce835SZachary Turner // clang-format off
6*c41ce835SZachary Turner void *__purecall = 0;
7*c41ce835SZachary Turner 
operator delete(void *,unsigned int)8*c41ce835SZachary Turner void __cdecl operator delete(void *,unsigned int) {}
operator delete(void *,unsigned __int64)9*c41ce835SZachary Turner void __cdecl operator delete(void *,unsigned __int64) {}
10*c41ce835SZachary Turner 
11*c41ce835SZachary Turner 
12*c41ce835SZachary Turner struct Foo {
13*c41ce835SZachary Turner   int X = 0;
funcFoo14*c41ce835SZachary Turner   int func() { return 42; }
15*c41ce835SZachary Turner };
16*c41ce835SZachary Turner 
17*c41ce835SZachary Turner int *IntP = nullptr;
18*c41ce835SZachary Turner Foo *FooP = nullptr;
19*c41ce835SZachary Turner 
20*c41ce835SZachary Turner Foo F;
21*c41ce835SZachary Turner 
22*c41ce835SZachary Turner Foo __unaligned *UFooP = &F;
23*c41ce835SZachary Turner Foo * __restrict RFooP = &F;
24*c41ce835SZachary Turner 
25*c41ce835SZachary Turner const Foo * CFooP = &F;
26*c41ce835SZachary Turner volatile Foo * VFooP = &F;
27*c41ce835SZachary Turner const volatile Foo * CVFooP = &F;
28*c41ce835SZachary Turner 
f(T t)29*c41ce835SZachary Turner template<typename T> void f(T t) {}
30*c41ce835SZachary Turner 
main(int argc,char ** argv)31*c41ce835SZachary Turner int main(int argc, char **argv) {
32*c41ce835SZachary Turner   f<int*>(IntP);
33*c41ce835SZachary Turner   f<Foo*>(FooP);
34*c41ce835SZachary Turner 
35*c41ce835SZachary Turner   f<Foo __unaligned *>(UFooP);
36*c41ce835SZachary Turner   f<Foo *__restrict>(RFooP);
37*c41ce835SZachary Turner 
38*c41ce835SZachary Turner   f<const Foo*>(CFooP);
39*c41ce835SZachary Turner   f<volatile Foo*>(VFooP);
40*c41ce835SZachary Turner   f<const volatile Foo*>(CVFooP);
41*c41ce835SZachary Turner 
42*c41ce835SZachary Turner   f<Foo&>(F);
43*c41ce835SZachary Turner   f<Foo&&>(static_cast<Foo&&>(F));
44*c41ce835SZachary Turner 
45*c41ce835SZachary Turner   f(&Foo::X);
46*c41ce835SZachary Turner   f(&Foo::func);
47*c41ce835SZachary Turner   return 0;
48*c41ce835SZachary Turner }
49