diff options
author | dim <dim@FreeBSD.org> | 2013-12-22 00:07:40 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2013-12-22 00:07:40 +0000 |
commit | 952eddef9aff85b1e92626e89baaf7a360e2ac85 (patch) | |
tree | df8df0b0067b381eab470a3b8f28d14a552a6340 /test/Layout/ms-x86-size-alignment-fail.cpp | |
parent | ea266cad53e3d49771fa38103913d3ec7a166694 (diff) | |
download | FreeBSD-src-952eddef9aff85b1e92626e89baaf7a360e2ac85.zip FreeBSD-src-952eddef9aff85b1e92626e89baaf7a360e2ac85.tar.gz |
Vendor import of clang release_34 branch r197841 (effectively, 3.4 RC3):
https://llvm.org/svn/llvm-project/cfe/branches/release_34@197841
Diffstat (limited to 'test/Layout/ms-x86-size-alignment-fail.cpp')
-rw-r--r-- | test/Layout/ms-x86-size-alignment-fail.cpp | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/test/Layout/ms-x86-size-alignment-fail.cpp b/test/Layout/ms-x86-size-alignment-fail.cpp new file mode 100644 index 0000000..f998ee1 --- /dev/null +++ b/test/Layout/ms-x86-size-alignment-fail.cpp @@ -0,0 +1,123 @@ +// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fdump-record-layouts -cxx-abi microsoft %s 2>/dev/null \ +// RUN: | FileCheck %s +// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fdump-record-layouts -cxx-abi microsoft %s 2>/dev/null \ +// RUN: | FileCheck %s -check-prefix CHECK-X64 + +extern "C" int printf(const char *fmt, ...); + +struct B0 { char a; B0() : a(0xB0) {} }; +struct __declspec(align(1)) B1 {}; + +struct A : virtual B0 {}; + +// CHECK: *** Dumping AST Record Layout +// CHECK: 0 | struct A +// CHECK: 0 | (A vbtable pointer) +// CHECK: 4 | struct B0 (virtual base) +// CHECK: 4 | char a +// CHECK: | [sizeof=5, align=4 +// CHECK: | nvsize=4, nvalign=4] +// CHECK-X64: *** Dumping AST Record Layout +// CHECK-X64: 0 | struct A +// CHECK-X64: 0 | (A vbtable pointer) +// CHECK-X64: 8 | struct B0 (virtual base) +// CHECK-X64: 8 | char a +// CHECK-X64: | [sizeof=16, align=8 +// CHECK-X64: | nvsize=8, nvalign=8] + +struct __declspec(align(1)) B : virtual B0 {}; + +// CHECK: *** Dumping AST Record Layout +// CHECK: 0 | struct B +// CHECK: 0 | (B vbtable pointer) +// CHECK: 4 | struct B0 (virtual base) +// CHECK: 4 | char a +// CHECK: | [sizeof=8, align=4 +// CHECK: | nvsize=4, nvalign=4] +// CHECK-X64: *** Dumping AST Record Layout +// CHECK-X64: 0 | struct B +// CHECK-X64: 0 | (B vbtable pointer) +// CHECK-X64: 8 | struct B0 (virtual base) +// CHECK-X64: 8 | char a +// CHECK-X64: | [sizeof=16, align=8 +// CHECK-X64: | nvsize=8, nvalign=8] + +struct C : virtual B0 { int a; C() : a(0xC) {} }; + +// CHECK: *** Dumping AST Record Layout +// CHECK: 0 | struct C +// CHECK: 0 | (C vbtable pointer) +// CHECK: 4 | int a +// CHECK: 8 | struct B0 (virtual base) +// CHECK: 8 | char a +// CHECK: | [sizeof=9, align=4 +// CHECK: | nvsize=8, nvalign=4] +// CHECK-X64: *** Dumping AST Record Layout +// CHECK-X64: 0 | struct C +// CHECK-X64: 0 | (C vbtable pointer) +// CHECK-X64: 8 | int a +// CHECK-X64: 16 | struct B0 (virtual base) +// CHECK-X64: 16 | char a +// CHECK-X64: | [sizeof=24, align=8 +// CHECK-X64: | nvsize=16, nvalign=8] + +struct D : virtual B0 { __declspec(align(1)) int a; D() : a(0xD) {} }; + +// CHECK: *** Dumping AST Record Layout +// CHECK: 0 | struct D +// CHECK: 0 | (D vbtable pointer) +// CHECK: 4 | int a +// CHECK: 8 | struct B0 (virtual base) +// CHECK: 8 | char a +// CHECK: | [sizeof=12, align=4 +// CHECK: | nvsize=8, nvalign=4] +// CHECK-X64: *** Dumping AST Record Layout +// CHECK-X64: 0 | struct D +// CHECK-X64: 0 | (D vbtable pointer) +// CHECK-X64: 8 | int a +// CHECK-X64: 16 | struct B0 (virtual base) +// CHECK-X64: 16 | char a +// CHECK-X64: | [sizeof=24, align=8 +// CHECK-X64: | nvsize=16, nvalign=8] + +struct E : virtual B0, virtual B1 {}; + +// CHECK: *** Dumping AST Record Layout +// CHECK: 0 | struct E +// CHECK: 0 | (E vbtable pointer) +// CHECK: 4 | struct B0 (virtual base) +// CHECK: 4 | char a +// CHECK: 5 | struct B1 (virtual base) (empty) +// CHECK: | [sizeof=8, align=4 +// CHECK: | nvsize=4, nvalign=4] +// CHECK-X64: *** Dumping AST Record Layout +// CHECK-X64: 0 | struct E +// CHECK-X64: 0 | (E vbtable pointer) +// CHECK-X64: 8 | struct B0 (virtual base) +// CHECK-X64: 8 | char a +// CHECK-X64: 9 | struct B1 (virtual base) (empty) +// CHECK-X64: | [sizeof=16, align=8 +// CHECK-X64: | nvsize=8, nvalign=8] + +struct F { char a; virtual ~F(); }; + +// CHECK: *** Dumping AST Record Layout +// CHECK: 0 | struct F +// CHECK: 0 | (F vftable pointer) +// CHECK: 4 | char a +// CHECK: | [sizeof=8, align=4 +// CHECK: | nvsize=8, nvalign=4] +// CHECK-X64: *** Dumping AST Record Layout +// CHECK-X64: 0 | struct F +// CHECK-X64: 0 | (F vftable pointer) +// CHECK-X64: 8 | char a +// CHECK-X64: | [sizeof=16, align=8 +// CHECK-X64: | nvsize=16, nvalign=8] + +int a[ +sizeof(A)+ +sizeof(B)+ +sizeof(C)+ +sizeof(D)+ +sizeof(E)+ +sizeof(F)]; |