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