Files
clang-p2996/llvm/test/DebugInfo/PDB/Inputs/every-pointer.cpp
Zachary Turner c41ce8355f [PDB] Better support for enumerating pointer types.
There were several issues with the previous implementation.

1) There were no tests.
2) We didn't support creating PDBSymbolTypePointer records for
   builtin types since those aren't described by LF_POINTER
   records.
3) We didn't support a wide enough variety of builtin types even
   ignoring pointers.

This patch fixes all of these issues.  In order to add tests,
it's helpful to be able to ignore the symbol index id hierarchy
because it makes the golden output from the DIA version not match
our output, so I've extended the dumper to disable dumping of id
fields.

llvm-svn: 342493
2018-09-18 16:35:05 +00:00

49 lines
897 B
C++

// Build with "cl.exe /Zi /GR- /GX- every-pointer.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) {}
struct Foo {
int X = 0;
int func() { return 42; }
};
int *IntP = nullptr;
Foo *FooP = nullptr;
Foo F;
Foo __unaligned *UFooP = &F;
Foo * __restrict RFooP = &F;
const Foo * CFooP = &F;
volatile Foo * VFooP = &F;
const volatile Foo * CVFooP = &F;
template<typename T> void f(T t) {}
int main(int argc, char **argv) {
f<int*>(IntP);
f<Foo*>(FooP);
f<Foo __unaligned *>(UFooP);
f<Foo *__restrict>(RFooP);
f<const Foo*>(CFooP);
f<volatile Foo*>(VFooP);
f<const volatile Foo*>(CVFooP);
f<Foo&>(F);
f<Foo&&>(static_cast<Foo&&>(F));
f(&Foo::X);
f(&Foo::func);
return 0;
}