xref: /netbsd-src/tests/usr.bin/xlint/lint1/msg_035.c (revision ccd9df534e375a4366c5b55f23782053c7a98d82)
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 
18 typedef struct {
19 	int dummy;
20 } example_struct;
21 
22 typedef union {
23 	int dummy;
24 } example_union;
25 
26 typedef enum {
27 	NO, YES
28 } example_enum;
29 
30 typedef void (example_function)(int, const char *);
31 
32 /* Try all types from tspec_t. */
33 struct 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