init.c revision 1.4
11.4Srillig/*	$NetBSD: init.c,v 1.4 2021/12/17 10:22:30 rillig Exp $	*/
21.1Srillig# 3 "init.c"
31.1Srillig
41.1Srillig/*
51.1Srillig * Tests for initialization.
61.1Srillig *
71.1Srillig * C99 6.7.8
81.1Srillig */
91.1Srillig
101.1Srillig/*
111.1Srillig * C99 does not allow empty initializer braces syntactically.
121.1Srillig * Lint allows this syntactically, it just complains if the resulting
131.1Srillig * object is empty.
141.1Srillig */
151.1Srillig/* expect+1: error: empty array declaration: empty_array_with_initializer [190] */
161.1Srilligdouble empty_array_with_initializer[] = {};
171.1Srilligdouble array_with_empty_initializer[3] = {};
181.1Srillig
191.1Srillig/*
201.1Srillig * C99 does not allow empty initializer braces syntactically.
211.1Srillig */
221.1Srilligstruct {
231.1Srillig	int member;
241.1Srillig} empty_struct_initializer = {};
251.2Srillig
261.2Srillig
271.2Srilligtypedef struct {
281.2Srillig	const char *key;
291.2Srillig	int n;
301.2Srillig} histogram_entry;
311.2Srillig
321.2Srillig/*
331.2Srillig * The C standards allow omitting braces around the structural levels.  For
341.2Srillig * human readers, it is usually clearer to include them.
351.2Srillig *
361.2Srillig * Seen in external/ibm-public/postfix/dist/src/util/dict.c(624).
371.3Srillig *
381.3Srillig * TODO: Properly handle this situation; as of init.c 1.212 from 2021-12-17,
391.3Srillig *  the below initialization sets in->in_err but shouldn't.
401.2Srillig */
411.2Srilligconst histogram_entry hgr[] = {
421.2Srillig	"odd", 5,
431.2Srillig	"even", 5,
441.2Srillig};
451.4Srillig
461.4Srillig
471.4Srillig/* Initialization with fewer braces than usual, must still be accepted. */
481.4Srilligstruct {
491.4Srillig	int x, y;
501.4Srillig} points[] = {
511.4Srillig	0, 0, 3, 0, 0, 4, 3, 4
521.4Srillig};
531.4Srillig/* expect-1: error: empty array declaration: points [190] */
54