diff options
author | Zachary Turner <zturner@google.com> | 2017-04-24 17:47:24 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2017-04-24 17:47:24 +0000 |
commit | 1690164cac96cf3670f380a74b27443c71b6a32e (patch) | |
tree | 199cc2fd16d66ae9664d50afbfdf01eb536276a5 /llvm/test/tools/llvm-pdbdump/Inputs/ComplexPaddingTest.cpp | |
parent | cadadabb7664407be7553363e1a580f92d681548 (diff) | |
download | bcm5719-llvm-1690164cac96cf3670f380a74b27443c71b6a32e.tar.gz bcm5719-llvm-1690164cac96cf3670f380a74b27443c71b6a32e.zip |
[llvm-pdbdump] Re-write the record layout code to be more resilient.
This reworks the way virtual bases are handled, and also the way
padding is detected across multiple levels of aggregates, producing
a much more accurate result.
llvm-svn: 301203
Diffstat (limited to 'llvm/test/tools/llvm-pdbdump/Inputs/ComplexPaddingTest.cpp')
-rw-r--r-- | llvm/test/tools/llvm-pdbdump/Inputs/ComplexPaddingTest.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-pdbdump/Inputs/ComplexPaddingTest.cpp b/llvm/test/tools/llvm-pdbdump/Inputs/ComplexPaddingTest.cpp new file mode 100644 index 00000000000..44a4e304ccb --- /dev/null +++ b/llvm/test/tools/llvm-pdbdump/Inputs/ComplexPaddingTest.cpp @@ -0,0 +1,48 @@ +// Compile with "cl /c /Zi /GR- ComplexPaddingTest.cpp" +// Link with "link ComplexPaddingTest.obj /debug /nodefaultlib /entry:main" + +#include <stdint.h> + +extern "C" using at_exit_handler = void(); + +int atexit(at_exit_handler handler) { return 0; } + +struct TestVB { + static void operator delete(void *ptr, size_t sz) {} + virtual ~TestVB() {} + virtual void IntroFunction1() {} + int X; +} A; + +struct TestNVB { + static void operator delete(void *ptr, size_t sz) {} + virtual ~TestNVB() {} + virtual void IntroFunction2() {} + int Y; +} B; + +struct TestVBLayout + : public virtual TestVB, + public TestNVB { + static void operator delete(void *ptr, size_t sz) {} + int Z; +} C; + +struct TestIVBBase : public virtual TestVB { + int A; +} D; + +struct TestIVBDerived : public TestIVBBase { + int B; +} E; + +struct TestIVBMergedDerived + : public virtual TestVB, + public TestIVBBase { + int B; +} F; + +int main(int argc, char **argv) { + + return 0; +} |