empty-class-layout.cpp revision a5728872c7702ddd09537c95bc3cbd20e1f2fb09
1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -triple x86_64-unknown-unknown %s -fsyntax-only -verify
21345bd2b093e78620c32f5148b1279ed290188e8Anders Carlsson
31345bd2b093e78620c32f5148b1279ed290188e8Anders Carlsson#define SA(n, p) int a##n[(p) ? 1 : -1]
41345bd2b093e78620c32f5148b1279ed290188e8Anders Carlsson
51345bd2b093e78620c32f5148b1279ed290188e8Anders Carlssonstruct A { int a; };
61345bd2b093e78620c32f5148b1279ed290188e8Anders CarlssonSA(0, sizeof(A) == 4);
71345bd2b093e78620c32f5148b1279ed290188e8Anders Carlsson
81345bd2b093e78620c32f5148b1279ed290188e8Anders Carlssonstruct B { };
91345bd2b093e78620c32f5148b1279ed290188e8Anders CarlssonSA(1, sizeof(B) == 1);
101345bd2b093e78620c32f5148b1279ed290188e8Anders Carlsson
111345bd2b093e78620c32f5148b1279ed290188e8Anders Carlssonstruct C : A, B { };
121345bd2b093e78620c32f5148b1279ed290188e8Anders CarlssonSA(2, sizeof(C) == 4);
13ffbdefc7a24c01a0f77425423278774796a3aa53Anders Carlsson
14ffbdefc7a24c01a0f77425423278774796a3aa53Anders Carlssonstruct D { };
15ffbdefc7a24c01a0f77425423278774796a3aa53Anders Carlssonstruct E : D { };
16ffbdefc7a24c01a0f77425423278774796a3aa53Anders Carlssonstruct F : E { };
17ffbdefc7a24c01a0f77425423278774796a3aa53Anders Carlsson
18ffbdefc7a24c01a0f77425423278774796a3aa53Anders Carlssonstruct G : E, F { };
19ffbdefc7a24c01a0f77425423278774796a3aa53Anders CarlssonSA(3, sizeof(G) == 2);
206026504302763f74102592602b392cecd5ced3aeAnders Carlsson
21fbbce49c116aa8c8c7c0707cb6048b55f70461a9Anders Carlssonstruct Empty { Empty(); };
226026504302763f74102592602b392cecd5ced3aeAnders Carlsson
23fbbce49c116aa8c8c7c0707cb6048b55f70461a9Anders Carlssonstruct I : Empty {
24fbbce49c116aa8c8c7c0707cb6048b55f70461a9Anders Carlsson  Empty e;
256026504302763f74102592602b392cecd5ced3aeAnders Carlsson};
266026504302763f74102592602b392cecd5ced3aeAnders CarlssonSA(4, sizeof(I) == 2);
27fbbce49c116aa8c8c7c0707cb6048b55f70461a9Anders Carlsson
28fbbce49c116aa8c8c7c0707cb6048b55f70461a9Anders Carlssonstruct J : Empty {
29fbbce49c116aa8c8c7c0707cb6048b55f70461a9Anders Carlsson  Empty e[2];
30fbbce49c116aa8c8c7c0707cb6048b55f70461a9Anders Carlsson};
31a4c6081abd5582515b110bdcb576b4b85536467bAnders CarlssonSA(5, sizeof(J) == 3);
32a4c6081abd5582515b110bdcb576b4b85536467bAnders Carlsson
33a4c6081abd5582515b110bdcb576b4b85536467bAnders Carlssontemplate<int N> struct Derived : Empty, Derived<N - 1> {
34a4c6081abd5582515b110bdcb576b4b85536467bAnders Carlsson};
35a4c6081abd5582515b110bdcb576b4b85536467bAnders Carlssontemplate<> struct Derived<0> : Empty { };
36a4c6081abd5582515b110bdcb576b4b85536467bAnders Carlsson
37a4c6081abd5582515b110bdcb576b4b85536467bAnders Carlssonstruct S1 : virtual Derived<10> {
38a4c6081abd5582515b110bdcb576b4b85536467bAnders Carlsson  Empty e;
39a4c6081abd5582515b110bdcb576b4b85536467bAnders Carlsson};
40a4c6081abd5582515b110bdcb576b4b85536467bAnders CarlssonSA(6, sizeof(S1) == 24);
41a4c6081abd5582515b110bdcb576b4b85536467bAnders Carlsson
42a4c6081abd5582515b110bdcb576b4b85536467bAnders Carlssonstruct S2 : virtual Derived<10> {
43a4c6081abd5582515b110bdcb576b4b85536467bAnders Carlsson  Empty e[2];
44a4c6081abd5582515b110bdcb576b4b85536467bAnders Carlsson};
45a4c6081abd5582515b110bdcb576b4b85536467bAnders CarlssonSA(7, sizeof(S2) == 24);
461eca99b815e531eba63233c0558af0dc971387aaAnders Carlsson
471eca99b815e531eba63233c0558af0dc971387aaAnders Carlssonstruct S3 {
481eca99b815e531eba63233c0558af0dc971387aaAnders Carlsson  Empty e;
491eca99b815e531eba63233c0558af0dc971387aaAnders Carlsson};
501eca99b815e531eba63233c0558af0dc971387aaAnders Carlsson
511eca99b815e531eba63233c0558af0dc971387aaAnders Carlssonstruct S4 : Empty, S3 {
521eca99b815e531eba63233c0558af0dc971387aaAnders Carlsson};
531eca99b815e531eba63233c0558af0dc971387aaAnders CarlssonSA(8, sizeof(S4) == 2);
541eca99b815e531eba63233c0558af0dc971387aaAnders Carlsson
551eca99b815e531eba63233c0558af0dc971387aaAnders Carlssonstruct S5 : S3, Empty {};
561eca99b815e531eba63233c0558af0dc971387aaAnders CarlssonSA(9, sizeof(S5) == 2);
571eca99b815e531eba63233c0558af0dc971387aaAnders Carlsson
581eca99b815e531eba63233c0558af0dc971387aaAnders Carlssonstruct S6 : S5 { };
591eca99b815e531eba63233c0558af0dc971387aaAnders CarlssonSA(10, sizeof(S6) == 2);
607e41038723bf77132674f55b12f60e24e5473b33Anders Carlsson
617e41038723bf77132674f55b12f60e24e5473b33Anders Carlssonstruct S7 : Empty {
627e41038723bf77132674f55b12f60e24e5473b33Anders Carlsson  void *v;
637e41038723bf77132674f55b12f60e24e5473b33Anders Carlsson};
647e41038723bf77132674f55b12f60e24e5473b33Anders CarlssonSA(11, sizeof(S7) == 8);
65dfde681bddd525fd8dcebc98865ff74682d8b833Anders Carlsson
66dfde681bddd525fd8dcebc98865ff74682d8b833Anders Carlssonstruct S8 : Empty, A {
67dfde681bddd525fd8dcebc98865ff74682d8b833Anders Carlsson};
68dfde681bddd525fd8dcebc98865ff74682d8b833Anders CarlssonSA(12, sizeof(S8) == 4);
69