xref: /aosp_15_r20/external/clang/test/Sema/missing-field-initializers.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
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