15029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11
25029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman// expected-no-diagnostics
35029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman
45029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman// Test that the alignment of a empty direct base class is correctly
55029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman// inherited by the derived class.
65029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman
75029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedmanstruct A {
85029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman} __attribute__ ((aligned(16)));
95029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman
105029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedmanstatic_assert(__alignof(A) == 16, "A should be aligned to 16 bytes");
115029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman
125029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedmanstruct B1 : public A {
135029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman};
145029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman
155029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedmanstatic_assert(__alignof(B1) == 16, "B1 should be aligned to 16 bytes");
165029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman
175029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedmanstruct B2 : public A {
185029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman} __attribute__ ((aligned(2)));
195029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman
205029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedmanstatic_assert(__alignof(B2) == 16, "B2 should be aligned to 16 bytes");
215029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman
225029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedmanstruct B3 : public A {
235029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman} __attribute__ ((aligned(4)));
245029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman
255029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedmanstatic_assert(__alignof(B3) == 16, "B3 should be aligned to 16 bytes");
265029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman
275029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedmanstruct B4 : public A {
285029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman} __attribute__ ((aligned(8)));
295029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman
305029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedmanstatic_assert(__alignof(B4) == 16, "B4 should be aligned to 16 bytes");
315029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman
325029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedmanstruct B5 : public A {
335029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman} __attribute__ ((aligned(16)));
345029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman
355029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedmanstatic_assert(__alignof(B5) == 16, "B5 should be aligned to 16 bytes");
365029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman
375029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedmanstruct B6 : public A {
385029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman} __attribute__ ((aligned(32)));
395029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman
405029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedmanstatic_assert(__alignof(B6) == 32, "B6 should be aligned to 32 bytes");
415029bd518b4d5363ceb049c9162c30e5b38ba199Eli Friedman
42