/*      $NetBSD: msg_035.c,v 1.12 2025/04/12 15:49:50 rillig Exp $      */
# 3 "msg_035.c"

// Test for message: invalid bit-field type '%s' [35]

/* Omit -g, see gcc_bit_field_types.c. */
/* lint1-flags: -Sw */

/*
* In traditional C, only unsigned int is a portable bit-field type.
*
* In C90, only int, signed int and unsigned int are allowed (3.5.2.1p7).
*
* In C99 and C11, only _Bool, signed int and unsigned int are allowed,
* plus implementation-defined types (6.7.2.1p5).
*/

typedef struct {
       int dummy;
} example_struct;

typedef union {
       int dummy;
} example_union;

typedef enum {
       NO, YES
} example_enum;

typedef void (example_function)(int, const char *);

/* Try all types from tspec_t. */
struct example {
       signed signed_flag: 1;
       unsigned unsigned_flag: 1;
       _Bool boolean_flag: 1;
       char char_flag: 1;
       signed char signed_char_flag: 1;
       unsigned char unsigned_char_flag: 1;
       short short_flag: 1;
       unsigned short unsigned_short_flag: 1;
       int int_flag: 1;
       unsigned int unsigned_int_flag: 1;

       /* expect+1: warning: invalid bit-field type 'long' [35] */
       long long_flag: 1;
       /* expect+1: warning: invalid bit-field type 'unsigned long' [35] */
       unsigned long unsigned_long_flag: 1;
       /* expect+1: warning: invalid bit-field type 'long long' [35] */
       long long long_long_flag: 1;
       /* expect+1: warning: invalid bit-field type 'unsigned long long' [35] */
       unsigned long long unsigned_long_long_flag: 1;

       /* __int128_t omitted since it is not always defined */
       /* __uint128_t omitted since it is not always defined */

       /* expect+1: warning: invalid bit-field type 'float' [35] */
       float float_flag: 1;
       /* expect+1: warning: invalid bit-field type 'double' [35] */
       double double_flag: 1;
       /* expect+1: warning: invalid bit-field type 'long double' [35] */
       long double long_double_flag: 1;
       /* expect+2: error: void type for 'void_flag' [19] */
       /* expect+1: error: zero size bit-field [37] */
       void void_flag: 1;
       /* expect+1: warning: invalid bit-field type 'struct typedef example_struct' [35] */
       example_struct struct_flag: 1;
       /* expect+1: warning: invalid bit-field type 'union typedef example_union' [35] */
       example_union union_flag: 1;

       example_enum enum_flag: 1;

       /* expect+1: warning: invalid bit-field type 'pointer to void' [35] */
       void *pointer_flag: 1;
       /* expect+1: warning: invalid bit-field type 'array[4] of unsigned int' [35] */
       unsigned int array_flag[4]: 1;
       /* expect+1: warning: invalid bit-field type 'function(int, pointer to const char) returning void' [35] */
       example_function function_flag: 1;
       /* expect+2: error: invalid type for _Complex [308] */
       /* expect+1: warning: invalid bit-field type 'double _Complex' [35] */
       _Complex complex_flag: 1;
       /* expect+1: warning: invalid bit-field type 'float _Complex' [35] */
       float _Complex float_complex_flag: 1;
       /* expect+1: warning: invalid bit-field type 'double _Complex' [35] */
       double _Complex double_complex_flag: 1;
       /* expect+1: warning: invalid bit-field type 'long double _Complex' [35] */
       long double _Complex long_double_complex_flag: 1;
};