Home | History | Annotate | Line # | Download | only in lint1
      1 /*	$NetBSD: msg_035.c,v 1.12 2025/04/12 15:49:50 rillig Exp $	*/
      2 # 3 "msg_035.c"
      3 
      4 // Test for message: invalid 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: invalid bit-field type 'long' [35] */
     46 	long long_flag: 1;
     47 	/* expect+1: warning: invalid bit-field type 'unsigned long' [35] */
     48 	unsigned long unsigned_long_flag: 1;
     49 	/* expect+1: warning: invalid bit-field type 'long long' [35] */
     50 	long long long_long_flag: 1;
     51 	/* expect+1: warning: invalid 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: invalid bit-field type 'float' [35] */
     58 	float float_flag: 1;
     59 	/* expect+1: warning: invalid bit-field type 'double' [35] */
     60 	double double_flag: 1;
     61 	/* expect+1: warning: invalid 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: invalid bit-field type 'struct typedef example_struct' [35] */
     67 	example_struct struct_flag: 1;
     68 	/* expect+1: warning: invalid 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: invalid bit-field type 'pointer to void' [35] */
     74 	void *pointer_flag: 1;
     75 	/* expect+1: warning: invalid bit-field type 'array[4] of unsigned int' [35] */
     76 	unsigned int array_flag[4]: 1;
     77 	/* expect+1: warning: invalid 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: invalid bit-field type 'double _Complex' [35] */
     81 	_Complex complex_flag: 1;
     82 	/* expect+1: warning: invalid bit-field type 'float _Complex' [35] */
     83 	float _Complex float_complex_flag: 1;
     84 	/* expect+1: warning: invalid bit-field type 'double _Complex' [35] */
     85 	double _Complex double_complex_flag: 1;
     86 	/* expect+1: warning: invalid bit-field type 'long double _Complex' [35] */
     87 	long double _Complex long_double_complex_flag: 1;
     88 };
     89