1*67e74705SXin Li // RUN: %clang_cc1 -triple x86_64-unknown-unknown %s -fsyntax-only -verify -std=c++98 -Wno-inaccessible-base 2*67e74705SXin Li // RUN: %clang_cc1 -triple x86_64-unknown-unknown %s -fsyntax-only -verify -std=c++11 -Wno-inaccessible-base 3*67e74705SXin Li // expected-no-diagnostics 4*67e74705SXin Li 5*67e74705SXin Li #define SA(n, p) int a##n[(p) ? 1 : -1] 6*67e74705SXin Li 7*67e74705SXin Li struct A { 8*67e74705SXin Li int a; 9*67e74705SXin Li char b; 10*67e74705SXin Li }; 11*67e74705SXin Li 12*67e74705SXin Li SA(0, sizeof(A) == 8); 13*67e74705SXin Li 14*67e74705SXin Li struct B : A { 15*67e74705SXin Li char c; 16*67e74705SXin Li }; 17*67e74705SXin Li 18*67e74705SXin Li SA(1, sizeof(B) == 12); 19*67e74705SXin Li 20*67e74705SXin Li struct C { 21*67e74705SXin Li // Make fields private so C won't be a POD type. 22*67e74705SXin Li private: 23*67e74705SXin Li int a; 24*67e74705SXin Li char b; 25*67e74705SXin Li }; 26*67e74705SXin Li 27*67e74705SXin Li SA(2, sizeof(C) == 8); 28*67e74705SXin Li 29*67e74705SXin Li struct D : C { 30*67e74705SXin Li char c; 31*67e74705SXin Li }; 32*67e74705SXin Li 33*67e74705SXin Li SA(3, sizeof(D) == 8); 34*67e74705SXin Li 35*67e74705SXin Li struct __attribute__((packed)) E { 36*67e74705SXin Li char b; 37*67e74705SXin Li int a; 38*67e74705SXin Li }; 39*67e74705SXin Li 40*67e74705SXin Li SA(4, sizeof(E) == 5); 41*67e74705SXin Li 42*67e74705SXin Li struct __attribute__((packed)) F : E { 43*67e74705SXin Li char d; 44*67e74705SXin Li }; 45*67e74705SXin Li 46*67e74705SXin Li SA(5, sizeof(F) == 6); 47*67e74705SXin Li 48*67e74705SXin Li struct G { G(); }; 49*67e74705SXin Li struct H : G { }; 50*67e74705SXin Li 51*67e74705SXin Li SA(6, sizeof(H) == 1); 52*67e74705SXin Li 53*67e74705SXin Li struct I { 54*67e74705SXin Li char b; 55*67e74705SXin Li int a; 56*67e74705SXin Li } __attribute__((packed)); 57*67e74705SXin Li 58*67e74705SXin Li SA(6_1, sizeof(I) == 5); 59*67e74705SXin Li 60*67e74705SXin Li // PR5580 61*67e74705SXin Li namespace PR5580 { 62*67e74705SXin Li 63*67e74705SXin Li class A { bool iv0 : 1; }; 64*67e74705SXin Li SA(7, sizeof(A) == 1); 65*67e74705SXin Li 66*67e74705SXin Li class B : A { bool iv0 : 1; }; 67*67e74705SXin Li SA(8, sizeof(B) == 2); 68*67e74705SXin Li 69*67e74705SXin Li struct C { bool iv0 : 1; }; 70*67e74705SXin Li SA(9, sizeof(C) == 1); 71*67e74705SXin Li 72*67e74705SXin Li struct D : C { bool iv0 : 1; }; 73*67e74705SXin Li SA(10, sizeof(D) == 2); 74*67e74705SXin Li 75*67e74705SXin Li } 76*67e74705SXin Li 77*67e74705SXin Li namespace Test1 { 78*67e74705SXin Li 79*67e74705SXin Li // Test that we don't assert on this hierarchy. 80*67e74705SXin Li struct A { }; 81*67e74705SXin Li struct B : A { virtual void b(); }; 82*67e74705SXin Li class C : virtual A { int c; }; 83*67e74705SXin Li struct D : virtual B { }; 84*67e74705SXin Li struct E : C, virtual D { }; 85*67e74705SXin Li class F : virtual E { }; 86*67e74705SXin Li struct G : virtual E, F { }; 87*67e74705SXin Li 88*67e74705SXin Li SA(0, sizeof(G) == 24); 89*67e74705SXin Li 90*67e74705SXin Li } 91*67e74705SXin Li 92*67e74705SXin Li namespace Test2 { 93*67e74705SXin Li 94*67e74705SXin Li // Test that this somewhat complex class structure is laid out correctly. 95*67e74705SXin Li struct A { }; 96*67e74705SXin Li struct B : A { virtual void b(); }; 97*67e74705SXin Li struct C : virtual B { }; 98*67e74705SXin Li struct D : virtual A { }; 99*67e74705SXin Li struct E : virtual B, D { }; 100*67e74705SXin Li struct F : E, virtual C { }; 101*67e74705SXin Li struct G : virtual F, A { }; 102*67e74705SXin Li struct H { G g; }; 103*67e74705SXin Li 104*67e74705SXin Li SA(0, sizeof(H) == 24); 105*67e74705SXin Li 106*67e74705SXin Li } 107*67e74705SXin Li 108*67e74705SXin Li namespace PR16537 { 109*67e74705SXin Li namespace test1 { 110*67e74705SXin Li struct pod_in_11_only { 111*67e74705SXin Li private: 112*67e74705SXin Li long long x; 113*67e74705SXin Li }; 114*67e74705SXin Li 115*67e74705SXin Li struct tail_padded_pod_in_11_only { 116*67e74705SXin Li pod_in_11_only pod11; 117*67e74705SXin Li char tail_padding; 118*67e74705SXin Li }; 119*67e74705SXin Li 120*67e74705SXin Li struct might_use_tail_padding : public tail_padded_pod_in_11_only { 121*67e74705SXin Li char may_go_into_tail_padding; 122*67e74705SXin Li }; 123*67e74705SXin Li 124*67e74705SXin Li SA(0, sizeof(might_use_tail_padding) == 16); 125*67e74705SXin Li } 126*67e74705SXin Li 127*67e74705SXin Li namespace test2 { 128*67e74705SXin Li struct pod_in_11_only { 129*67e74705SXin Li private: 130*67e74705SXin Li long long x; 131*67e74705SXin Li }; 132*67e74705SXin Li 133*67e74705SXin Li struct tail_padded_pod_in_11_only { 134*67e74705SXin Li pod_in_11_only pod11 __attribute__((aligned(16))); 135*67e74705SXin Li }; 136*67e74705SXin Li 137*67e74705SXin Li struct might_use_tail_padding : public tail_padded_pod_in_11_only { 138*67e74705SXin Li char may_go_into_tail_padding; 139*67e74705SXin Li }; 140*67e74705SXin Li 141*67e74705SXin Li SA(0, sizeof(might_use_tail_padding) == 16); 142*67e74705SXin Li } 143*67e74705SXin Li 144*67e74705SXin Li namespace test3 { 145*67e74705SXin Li struct pod_in_11_only { 146*67e74705SXin Li private: 147*67e74705SXin Li long long x; 148*67e74705SXin Li }; 149*67e74705SXin Li 150*67e74705SXin Li struct tail_padded_pod_in_11_only { 151*67e74705SXin Li pod_in_11_only pod11; 152*67e74705SXin Li char tail_padding; 153*67e74705SXin Li }; 154*67e74705SXin Li 155*67e74705SXin Li struct second_base { 156*67e74705SXin Li char foo; 157*67e74705SXin Li }; 158*67e74705SXin Li 159*67e74705SXin Li struct might_use_tail_padding : public tail_padded_pod_in_11_only, public second_base { 160*67e74705SXin Li 161*67e74705SXin Li }; 162*67e74705SXin Li SA(0, sizeof(might_use_tail_padding) == 16); 163*67e74705SXin Li } 164*67e74705SXin Li 165*67e74705SXin Li namespace test4 { 166*67e74705SXin Li struct pod_in_11_only { 167*67e74705SXin Li private: 168*67e74705SXin Li long long x; 169*67e74705SXin Li }; 170*67e74705SXin Li 171*67e74705SXin Li struct tail_padded_pod_in_11_only { 172*67e74705SXin Li pod_in_11_only pod11; 173*67e74705SXin Li char tail_padding; 174*67e74705SXin Li }; 175*67e74705SXin Li 176*67e74705SXin Li struct second_base { 177*67e74705SXin Li char foo; 178*67e74705SXin Li }; 179*67e74705SXin Li 180*67e74705SXin Li struct might_use_tail_padding : public tail_padded_pod_in_11_only, public second_base { 181*67e74705SXin Li char may_go_into_tail_padding; 182*67e74705SXin Li }; 183*67e74705SXin Li SA(0, sizeof(might_use_tail_padding) == 16); 184*67e74705SXin Li } 185*67e74705SXin Li 186*67e74705SXin Li namespace test5 { 187*67e74705SXin Li struct pod_in_11_only { 188*67e74705SXin Li private: 189*67e74705SXin Li long long x; 190*67e74705SXin Li }; 191*67e74705SXin Li 192*67e74705SXin Li struct pod_in_11_only2 { 193*67e74705SXin Li private: 194*67e74705SXin Li long long x; 195*67e74705SXin Li }; 196*67e74705SXin Li 197*67e74705SXin Li struct tail_padded_pod_in_11_only { 198*67e74705SXin Li pod_in_11_only pod11; 199*67e74705SXin Li char tail_padding; 200*67e74705SXin Li }; 201*67e74705SXin Li 202*67e74705SXin Li struct second_base { 203*67e74705SXin Li pod_in_11_only2 two; 204*67e74705SXin Li char foo; 205*67e74705SXin Li }; 206*67e74705SXin Li 207*67e74705SXin Li struct might_use_tail_padding : public tail_padded_pod_in_11_only, public second_base { 208*67e74705SXin Li char may_go_into_tail_padding; 209*67e74705SXin Li }; 210*67e74705SXin Li SA(0, sizeof(might_use_tail_padding) == 32); 211*67e74705SXin Li } 212*67e74705SXin Li 213*67e74705SXin Li namespace test6 { 214*67e74705SXin Li struct pod_in_11_only { 215*67e74705SXin Li private: 216*67e74705SXin Li long long x; 217*67e74705SXin Li }; 218*67e74705SXin Li 219*67e74705SXin Li struct pod_in_11_only2 { 220*67e74705SXin Li private: 221*67e74705SXin Li long long x; 222*67e74705SXin Li }; 223*67e74705SXin Li 224*67e74705SXin Li struct tail_padded_pod_in_11_only { 225*67e74705SXin Li pod_in_11_only pod11; 226*67e74705SXin Li char tail_padding; 227*67e74705SXin Li }; 228*67e74705SXin Li 229*67e74705SXin Li struct second_base { 230*67e74705SXin Li pod_in_11_only2 two; 231*67e74705SXin Li char foo; 232*67e74705SXin Li }; 233*67e74705SXin Li 234*67e74705SXin Li struct might_use_tail_padding : public tail_padded_pod_in_11_only, public second_base { 235*67e74705SXin Li char may_go_into_tail_padding; 236*67e74705SXin Li }; 237*67e74705SXin Li SA(0, sizeof(might_use_tail_padding) == 32); 238*67e74705SXin Li } 239*67e74705SXin Li 240*67e74705SXin Li namespace test7 { 241*67e74705SXin Li struct pod_in_11_only { 242*67e74705SXin Li private: 243*67e74705SXin Li long long x; 244*67e74705SXin Li }; 245*67e74705SXin Li 246*67e74705SXin Li struct tail_padded_pod_in_11_only { 247*67e74705SXin Li pod_in_11_only pod11; 248*67e74705SXin Li pod_in_11_only pod12; 249*67e74705SXin Li char tail_padding; 250*67e74705SXin Li }; 251*67e74705SXin Li 252*67e74705SXin Li struct might_use_tail_padding : public tail_padded_pod_in_11_only { 253*67e74705SXin Li char may_go_into_tail_padding; 254*67e74705SXin Li }; 255*67e74705SXin Li 256*67e74705SXin Li SA(0, sizeof(might_use_tail_padding) == 24); 257*67e74705SXin Li } 258*67e74705SXin Li 259*67e74705SXin Li namespace test8 { 260*67e74705SXin Li struct pod_in_11_only { 261*67e74705SXin Li private: 262*67e74705SXin Li long long x; 263*67e74705SXin Li }; 264*67e74705SXin Li 265*67e74705SXin Li struct tail_padded_pod_in_11_only { 266*67e74705SXin Li pod_in_11_only pod11; 267*67e74705SXin Li char tail_padding; 268*67e74705SXin Li }; 269*67e74705SXin Li 270*67e74705SXin Li struct another_layer { 271*67e74705SXin Li tail_padded_pod_in_11_only pod; 272*67e74705SXin Li char padding; 273*67e74705SXin Li }; 274*67e74705SXin Li 275*67e74705SXin Li struct might_use_tail_padding : public another_layer { 276*67e74705SXin Li char may_go_into_tail_padding; 277*67e74705SXin Li }; 278*67e74705SXin Li 279*67e74705SXin Li SA(0, sizeof(might_use_tail_padding) == 24); 280*67e74705SXin Li } 281*67e74705SXin Li 282*67e74705SXin Li namespace test9 { 283*67e74705SXin Li struct pod_in_11_only { 284*67e74705SXin Li private: 285*67e74705SXin Li long long x; 286*67e74705SXin Li }; 287*67e74705SXin Li 288*67e74705SXin Li struct tail_padded_pod_in_11_only { 289*67e74705SXin Li pod_in_11_only pod11; 290*67e74705SXin Li char tail_padding; 291*67e74705SXin Li }; 292*67e74705SXin Li 293*67e74705SXin Li struct another_layer : tail_padded_pod_in_11_only { 294*67e74705SXin Li }; 295*67e74705SXin Li 296*67e74705SXin Li struct might_use_tail_padding : public another_layer { 297*67e74705SXin Li char may_go_into_tail_padding; 298*67e74705SXin Li }; 299*67e74705SXin Li 300*67e74705SXin Li SA(0, sizeof(might_use_tail_padding) == 16); 301*67e74705SXin Li } 302*67e74705SXin Li 303*67e74705SXin Li namespace test10 { 304*67e74705SXin Li struct pod_in_11_only { 305*67e74705SXin Li private: 306*67e74705SXin Li long long x; 307*67e74705SXin Li }; 308*67e74705SXin Li 309*67e74705SXin Li struct A { 310*67e74705SXin Li pod_in_11_only a; 311*67e74705SXin Li char apad; 312*67e74705SXin Li }; 313*67e74705SXin Li 314*67e74705SXin Li struct B { 315*67e74705SXin Li char b; 316*67e74705SXin Li }; 317*67e74705SXin Li 318*67e74705SXin Li struct C { 319*67e74705SXin Li pod_in_11_only c; 320*67e74705SXin Li char cpad; 321*67e74705SXin Li }; 322*67e74705SXin Li 323*67e74705SXin Li struct D { 324*67e74705SXin Li char d; 325*67e74705SXin Li }; 326*67e74705SXin Li 327*67e74705SXin Li struct might_use_tail_padding : public A, public B, public C, public D { 328*67e74705SXin Li }; 329*67e74705SXin Li 330*67e74705SXin Li SA(0, sizeof(might_use_tail_padding) == 32); 331*67e74705SXin Li } 332*67e74705SXin Li 333*67e74705SXin Li namespace test11 { 334*67e74705SXin Li struct pod_in_11_only { 335*67e74705SXin Li private: 336*67e74705SXin Li long long x; 337*67e74705SXin Li }; 338*67e74705SXin Li 339*67e74705SXin Li struct A { 340*67e74705SXin Li pod_in_11_only a; 341*67e74705SXin Li char apad; 342*67e74705SXin Li }; 343*67e74705SXin Li 344*67e74705SXin Li struct B { 345*67e74705SXin Li char b_pre; 346*67e74705SXin Li pod_in_11_only b; 347*67e74705SXin Li char bpad; 348*67e74705SXin Li }; 349*67e74705SXin Li 350*67e74705SXin Li struct C { 351*67e74705SXin Li char c_pre; 352*67e74705SXin Li pod_in_11_only c; 353*67e74705SXin Li char cpad; 354*67e74705SXin Li }; 355*67e74705SXin Li 356*67e74705SXin Li struct D { 357*67e74705SXin Li char d_pre; 358*67e74705SXin Li pod_in_11_only d; 359*67e74705SXin Li char dpad; 360*67e74705SXin Li }; 361*67e74705SXin Li 362*67e74705SXin Li struct might_use_tail_padding : public A, public B, public C, public D { 363*67e74705SXin Li char m; 364*67e74705SXin Li }; 365*67e74705SXin Li 366*67e74705SXin Li SA(0, sizeof(might_use_tail_padding) == 88); 367*67e74705SXin Li } 368*67e74705SXin Li 369*67e74705SXin Li namespace test12 { 370*67e74705SXin Li struct pod_in_11_only { 371*67e74705SXin Li private: 372*67e74705SXin Li long long x; 373*67e74705SXin Li }; 374*67e74705SXin Li 375*67e74705SXin Li struct A { 376*67e74705SXin Li pod_in_11_only a __attribute__((aligned(128))); 377*67e74705SXin Li }; 378*67e74705SXin Li 379*67e74705SXin Li struct B { 380*67e74705SXin Li char bpad; 381*67e74705SXin Li }; 382*67e74705SXin Li 383*67e74705SXin Li struct C { 384*67e74705SXin Li char cpad; 385*67e74705SXin Li }; 386*67e74705SXin Li 387*67e74705SXin Li struct D { 388*67e74705SXin Li char dpad; 389*67e74705SXin Li }; 390*67e74705SXin Li 391*67e74705SXin Li struct might_use_tail_padding : public A, public B, public C, public D { 392*67e74705SXin Li char m; 393*67e74705SXin Li }; 394*67e74705SXin Li SA(0, sizeof(might_use_tail_padding) == 128); 395*67e74705SXin Li } 396*67e74705SXin Li 397*67e74705SXin Li namespace test13 { 398*67e74705SXin Li struct pod_in_11_only { 399*67e74705SXin Li private: 400*67e74705SXin Li long long x; 401*67e74705SXin Li }; 402*67e74705SXin Li 403*67e74705SXin Li struct A { 404*67e74705SXin Li pod_in_11_only a; 405*67e74705SXin Li char apad; 406*67e74705SXin Li }; 407*67e74705SXin Li 408*67e74705SXin Li struct B { 409*67e74705SXin Li }; 410*67e74705SXin Li 411*67e74705SXin Li struct C { 412*67e74705SXin Li char c_pre; 413*67e74705SXin Li pod_in_11_only c; 414*67e74705SXin Li char cpad; 415*67e74705SXin Li }; 416*67e74705SXin Li 417*67e74705SXin Li struct D { 418*67e74705SXin Li }; 419*67e74705SXin Li 420*67e74705SXin Li struct might_use_tail_padding : public A, public B, public C, public D { 421*67e74705SXin Li char m; 422*67e74705SXin Li }; 423*67e74705SXin Li SA(0, sizeof(might_use_tail_padding) == 40); 424*67e74705SXin Li } 425*67e74705SXin Li 426*67e74705SXin Li namespace test14 { 427*67e74705SXin Li struct pod_in_11_only { 428*67e74705SXin Li private: 429*67e74705SXin Li long long x; 430*67e74705SXin Li }; 431*67e74705SXin Li 432*67e74705SXin Li struct A { 433*67e74705SXin Li pod_in_11_only a; 434*67e74705SXin Li char apad; 435*67e74705SXin Li }; 436*67e74705SXin Li 437*67e74705SXin Li struct might_use_tail_padding : public A { 438*67e74705SXin Li struct { 439*67e74705SXin Li int : 0; 440*67e74705SXin Li } x; 441*67e74705SXin Li }; 442*67e74705SXin Li SA(0, sizeof(might_use_tail_padding) == 16); 443*67e74705SXin Li } 444*67e74705SXin Li 445*67e74705SXin Li namespace test15 { 446*67e74705SXin Li struct pod_in_11_only { 447*67e74705SXin Li private: 448*67e74705SXin Li long long x; 449*67e74705SXin Li }; 450*67e74705SXin Li 451*67e74705SXin Li struct A { 452*67e74705SXin Li pod_in_11_only a; 453*67e74705SXin Li char apad; 454*67e74705SXin Li }; 455*67e74705SXin Li 456*67e74705SXin Li struct might_use_tail_padding : public A { 457*67e74705SXin Li struct { 458*67e74705SXin Li char a:1; 459*67e74705SXin Li char b:2; 460*67e74705SXin Li char c:2; 461*67e74705SXin Li char d:2; 462*67e74705SXin Li char e:1; 463*67e74705SXin Li } x; 464*67e74705SXin Li }; 465*67e74705SXin Li SA(0, sizeof(might_use_tail_padding) == 16); 466*67e74705SXin Li } 467*67e74705SXin Li 468*67e74705SXin Li namespace test16 { 469*67e74705SXin Li struct pod_in_11_only { 470*67e74705SXin Li private: 471*67e74705SXin Li long long x; 472*67e74705SXin Li }; 473*67e74705SXin Li 474*67e74705SXin Li struct A { 475*67e74705SXin Li pod_in_11_only a; 476*67e74705SXin Li char apad; 477*67e74705SXin Li }; 478*67e74705SXin Li 479*67e74705SXin Li struct B { 480*67e74705SXin Li char bpod; 481*67e74705SXin Li pod_in_11_only b; 482*67e74705SXin Li char bpad; 483*67e74705SXin Li }; 484*67e74705SXin Li 485*67e74705SXin Li struct C : public A, public B { 486*67e74705SXin Li }; 487*67e74705SXin Li 488*67e74705SXin Li struct D : public C { 489*67e74705SXin Li }; 490*67e74705SXin Li 491*67e74705SXin Li struct might_use_tail_padding : public D { 492*67e74705SXin Li char m; 493*67e74705SXin Li }; 494*67e74705SXin Li SA(0, sizeof(might_use_tail_padding) == 40); 495*67e74705SXin Li } 496*67e74705SXin Li 497*67e74705SXin Li namespace test17 { 498*67e74705SXin Li struct pod_in_11_only { 499*67e74705SXin Li private: 500*67e74705SXin Li long long x; 501*67e74705SXin Li }; 502*67e74705SXin Li 503*67e74705SXin Li struct A { 504*67e74705SXin Li pod_in_11_only a __attribute__((aligned(512))); 505*67e74705SXin Li }; 506*67e74705SXin Li 507*67e74705SXin Li struct B { 508*67e74705SXin Li char bpad; 509*67e74705SXin Li pod_in_11_only foo; 510*67e74705SXin Li char btail; 511*67e74705SXin Li }; 512*67e74705SXin Li 513*67e74705SXin Li struct C { 514*67e74705SXin Li char cpad; 515*67e74705SXin Li }; 516*67e74705SXin Li 517*67e74705SXin Li struct D { 518*67e74705SXin Li char dpad; 519*67e74705SXin Li }; 520*67e74705SXin Li 521*67e74705SXin Li struct might_use_tail_padding : public A, public B, public C, public D { 522*67e74705SXin Li char a; 523*67e74705SXin Li }; 524*67e74705SXin Li SA(0, sizeof(might_use_tail_padding) == 512); 525*67e74705SXin Li } 526*67e74705SXin Li 527*67e74705SXin Li namespace test18 { 528*67e74705SXin Li struct pod_in_11_only { 529*67e74705SXin Li private: 530*67e74705SXin Li long long x; 531*67e74705SXin Li }; 532*67e74705SXin Li 533*67e74705SXin Li struct A { 534*67e74705SXin Li pod_in_11_only a; 535*67e74705SXin Li char apad; 536*67e74705SXin Li }; 537*67e74705SXin Li 538*67e74705SXin Li struct B { 539*67e74705SXin Li char bpod; 540*67e74705SXin Li pod_in_11_only b; 541*67e74705SXin Li char bpad; 542*67e74705SXin Li }; 543*67e74705SXin Li 544*67e74705SXin Li struct A1 { 545*67e74705SXin Li pod_in_11_only a; 546*67e74705SXin Li char apad; 547*67e74705SXin Li }; 548*67e74705SXin Li 549*67e74705SXin Li struct B1 { 550*67e74705SXin Li char bpod; 551*67e74705SXin Li pod_in_11_only b; 552*67e74705SXin Li char bpad; 553*67e74705SXin Li }; 554*67e74705SXin Li 555*67e74705SXin Li struct C : public A, public B { 556*67e74705SXin Li }; 557*67e74705SXin Li 558*67e74705SXin Li struct D : public A1, public B1 { 559*67e74705SXin Li }; 560*67e74705SXin Li 561*67e74705SXin Li struct E : public D, public C { 562*67e74705SXin Li }; 563*67e74705SXin Li 564*67e74705SXin Li struct F : public E { 565*67e74705SXin Li }; 566*67e74705SXin Li 567*67e74705SXin Li struct might_use_tail_padding : public F { 568*67e74705SXin Li char m; 569*67e74705SXin Li }; 570*67e74705SXin Li SA(0, sizeof(might_use_tail_padding) == 80); 571*67e74705SXin Li } 572*67e74705SXin Li } // namespace PR16537 573