1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify -Wmissing-field-initializers %s 2*67e74705SXin Li 3*67e74705SXin Li // This was PR4808. 4*67e74705SXin Li 5*67e74705SXin Li struct Foo { int a, b; }; 6*67e74705SXin Li 7*67e74705SXin Li struct Foo foo0 = { 1 }; // expected-warning {{missing field 'b' initializer}} 8*67e74705SXin Li struct Foo foo1 = { .a = 1 }; // designator avoids MFI warning 9*67e74705SXin Li struct Foo foo2 = { .b = 1 }; // designator avoids MFI warning 10*67e74705SXin Li 11*67e74705SXin Li struct Foo bar0[] = { 12*67e74705SXin Li { 1,2 }, 13*67e74705SXin Li { 1 }, // expected-warning {{missing field 'b' initializer}} 14*67e74705SXin Li { 1,2 } 15*67e74705SXin Li }; 16*67e74705SXin Li 17*67e74705SXin Li struct Foo bar1[] = { 18*67e74705SXin Li 1, 2, 19*67e74705SXin Li 1, 2, 20*67e74705SXin Li 1 21*67e74705SXin Li }; // expected-warning {{missing field 'b' initializer}} 22*67e74705SXin Li 23*67e74705SXin Li struct Foo bar2[] = { {}, {}, {} }; 24*67e74705SXin Li 25*67e74705SXin Li struct One { int a; int b; }; 26*67e74705SXin Li struct Two { float c; float d; float e; }; 27*67e74705SXin Li 28*67e74705SXin Li struct Three { 29*67e74705SXin Li union { 30*67e74705SXin Li struct One one; 31*67e74705SXin Li struct Two two; 32*67e74705SXin Li } both; 33*67e74705SXin Li }; 34*67e74705SXin Li 35*67e74705SXin Li struct Three t0 = { 36*67e74705SXin Li { .one = { 1, 2 } } 37*67e74705SXin Li }; 38*67e74705SXin Li struct Three t1 = { 39*67e74705SXin Li { .two = { 1.0f, 2.0f, 3.0f } } 40*67e74705SXin Li }; 41*67e74705SXin Li 42*67e74705SXin Li struct Three data[] = { 43*67e74705SXin Li { { .one = { 1, 2 } } }, 44*67e74705SXin Li { { .one = { 1 } } }, // expected-warning {{missing field 'b' initializer}} 45*67e74705SXin Li { { .two = { 1.0f, 2.0f, 3.0f } } }, 46*67e74705SXin Li { { .two = { 1.0f, 2.0f } } } // expected-warning {{missing field 'e' initializer}} 47*67e74705SXin Li }; 48*67e74705SXin Li 49*67e74705SXin Li struct { int:5; int a; int:5; int b; int:5; } noNamedImplicit[] = { 50*67e74705SXin Li { 1, 2 }, 51*67e74705SXin Li { 1 } // expected-warning {{missing field 'b' initializer}} 52*67e74705SXin Li }; 53