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