blob: 8b54ea1c66f2813c3e529f5a821407827a6c83a7 [file] [log] [blame]
Anders Carlsson1345bd22009-09-24 03:22:10 +00001// RUN: clang-cc -triple x86_64-unknown-unknown %s -fsyntax-only -verify
2
3#define SA(n, p) int a##n[(p) ? 1 : -1]
4
5struct A { int a; };
6SA(0, sizeof(A) == 4);
7
8struct B { };
9SA(1, sizeof(B) == 1);
10
11struct C : A, B { };
12SA(2, sizeof(C) == 4);
Anders Carlssonffbdefc2009-09-24 05:21:31 +000013
14struct D { };
15struct E : D { };
16struct F : E { };
17
18struct G : E, F { };
19SA(3, sizeof(G) == 2);
Anders Carlsson60265042009-09-25 00:02:51 +000020
Anders Carlssonfbbce492009-09-25 01:23:32 +000021struct Empty { Empty(); };
Anders Carlsson60265042009-09-25 00:02:51 +000022
Anders Carlssonfbbce492009-09-25 01:23:32 +000023struct I : Empty {
24 Empty e;
Anders Carlsson60265042009-09-25 00:02:51 +000025};
26SA(4, sizeof(I) == 2);
Anders Carlssonfbbce492009-09-25 01:23:32 +000027
28struct J : Empty {
29 Empty e[2];
30};
Anders Carlssona4c60812009-09-25 01:54:38 +000031SA(5, sizeof(J) == 3);
32
33template<int N> struct Derived : Empty, Derived<N - 1> {
34};
35template<> struct Derived<0> : Empty { };
36
37struct S1 : virtual Derived<10> {
38 Empty e;
39};
40SA(6, sizeof(S1) == 24);
41
42struct S2 : virtual Derived<10> {
43 Empty e[2];
44};
45SA(7, sizeof(S2) == 24);
Anders Carlsson1eca99b2009-09-25 15:39:00 +000046
47struct S3 {
48 Empty e;
49};
50
51struct S4 : Empty, S3 {
52};
53SA(8, sizeof(S4) == 2);
54
55struct S5 : S3, Empty {};
56SA(9, sizeof(S5) == 2);
57
58struct S6 : S5 { };
59SA(10, sizeof(S6) == 2);
Anders Carlsson7e410382009-09-26 01:09:35 +000060
61struct S7 : Empty {
62 void *v;
63};
64SA(11, sizeof(S7) == 8);
Anders Carlssondfde6812009-09-26 01:29:10 +000065
66struct S8 : Empty, A {
67};
68SA(12, sizeof(S8) == 4);