summaryrefslogtreecommitdiffstats
path: root/llvm/test/tools/llvm-pdbdump/Inputs/ComplexPaddingTest.cpp
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2017-04-24 17:47:24 +0000
committerZachary Turner <zturner@google.com>2017-04-24 17:47:24 +0000
commit1690164cac96cf3670f380a74b27443c71b6a32e (patch)
tree199cc2fd16d66ae9664d50afbfdf01eb536276a5 /llvm/test/tools/llvm-pdbdump/Inputs/ComplexPaddingTest.cpp
parentcadadabb7664407be7553363e1a580f92d681548 (diff)
downloadbcm5719-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.cpp48
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;
+}
OpenPOWER on IntegriCloud