1/*	$NetBSD: msg_035.c,v 1.11 2022/06/15 20:18:31 rillig Exp $	*/
2# 3 "msg_035.c"
3
4// Test for message: illegal bit-field type '%s' [35]
5
6/* Omit -g, see gcc_bit_field_types.c. */
7/* lint1-flags: -Sw */
8
9/*
10 * In traditional C, only unsigned int is a portable bit-field type.
11 *
12 * In C90, only int, signed int and unsigned int are allowed (3.5.2.1p7).
13 *
14 * In C99 and C11, only _Bool, signed int and unsigned int are allowed,
15 * plus implementation-defined types (6.7.2.1p5).
16 */
17
18typedef struct {
19	int dummy;
20} example_struct;
21
22typedef union {
23	int dummy;
24} example_union;
25
26typedef enum {
27	NO, YES
28} example_enum;
29
30typedef void (example_function)(int, const char *);
31
32/* Try all types from tspec_t. */
33struct example {
34	signed signed_flag: 1;
35	unsigned unsigned_flag: 1;
36	_Bool boolean_flag: 1;
37	char char_flag: 1;
38	signed char signed_char_flag: 1;
39	unsigned char unsigned_char_flag: 1;
40	short short_flag: 1;
41	unsigned short unsigned_short_flag: 1;
42	int int_flag: 1;
43	unsigned int unsigned_int_flag: 1;
44
45	/* expect+1: warning: illegal bit-field type 'long' [35] */
46	long long_flag: 1;
47	/* expect+1: warning: illegal bit-field type 'unsigned long' [35] */
48	unsigned long unsigned_long_flag: 1;
49	/* expect+1: warning: illegal bit-field type 'long long' [35] */
50	long long long_long_flag: 1;
51	/* expect+1: warning: illegal bit-field type 'unsigned long long' [35] */
52	unsigned long long unsigned_long_long_flag: 1;
53
54	/* __int128_t omitted since it is not always defined */
55	/* __uint128_t omitted since it is not always defined */
56
57	/* expect+1: warning: illegal bit-field type 'float' [35] */
58	float float_flag: 1;
59	/* expect+1: warning: illegal bit-field type 'double' [35] */
60	double double_flag: 1;
61	/* expect+1: warning: illegal bit-field type 'long double' [35] */
62	long double long_double_flag: 1;
63	/* expect+2: error: void type for 'void_flag' [19] */
64	/* expect+1: error: zero size bit-field [37] */
65	void void_flag: 1;
66	/* expect+1: warning: illegal bit-field type 'struct typedef example_struct' [35] */
67	example_struct struct_flag: 1;
68	/* expect+1: warning: illegal bit-field type 'union typedef example_union' [35] */
69	example_union union_flag: 1;
70
71	example_enum enum_flag: 1;
72
73	/* expect+1: warning: illegal bit-field type 'pointer to void' [35] */
74	void *pointer_flag: 1;
75	/* expect+1: warning: illegal bit-field type 'array[4] of unsigned int' [35] */
76	unsigned int array_flag[4]: 1;
77	/* expect+1: warning: illegal bit-field type 'function(int, pointer to const char) returning void' [35] */
78	example_function function_flag: 1;
79	/* expect+2: error: invalid type for _Complex [308] */
80	/* expect+1: warning: illegal bit-field type 'double _Complex' [35] */
81	_Complex complex_flag: 1;
82	/* expect+1: warning: illegal bit-field type 'float _Complex' [35] */
83	float _Complex float_complex_flag: 1;
84	/* expect+1: warning: illegal bit-field type 'double _Complex' [35] */
85	double _Complex double_complex_flag: 1;
86	/* expect+1: warning: illegal bit-field type 'long double _Complex' [35] */
87	long double _Complex long_double_complex_flag: 1;
88};
89