Home | History | Annotate | Line # | Download | only in lint1
decl_arg.c revision 1.9
      1  1.9  rillig /*	$NetBSD: decl_arg.c,v 1.9 2023/07/09 11:01:27 rillig Exp $	*/
      2  1.1  rillig # 3 "decl_arg.c"
      3  1.1  rillig 
      4  1.1  rillig /*
      5  1.1  rillig  * Tests for declarations of function arguments.
      6  1.1  rillig  *
      7  1.1  rillig  * See arg_declaration in cgram.y.
      8  1.1  rillig  */
      9  1.1  rillig 
     10  1.8  rillig /* lint1-extra-flags: -X 351 */
     11  1.8  rillig 
     12  1.1  rillig typedef double number;
     13  1.1  rillig 
     14  1.1  rillig void no_args(void);
     15  1.1  rillig void type_unnamed(double );
     16  1.1  rillig void type_named(double arg);
     17  1.1  rillig void typedef_unnamed_prototype(number);
     18  1.1  rillig void typedef_named(number arg);
     19  1.1  rillig 
     20  1.1  rillig void type_qualifier(const number);
     21  1.1  rillig void type_qualifier_pointer(const number *const);
     22  1.1  rillig 
     23  1.1  rillig /*
     24  1.1  rillig  * Just some unrealistic coverage for the grammar rule 'arg_declaration'.
     25  1.1  rillig  */
     26  1.1  rillig /* expect+6: warning: argument 'an_int' unused in function 'old_style' [231] */
     27  1.1  rillig /* expect+5: warning: argument 'a_const_int' unused in function 'old_style' [231] */
     28  1.1  rillig /* expect+4: warning: argument 'a_number' unused in function 'old_style' [231] */
     29  1.1  rillig /* expect+3: warning: argument 'a_function' unused in function 'old_style' [231] */
     30  1.1  rillig /* expect+2: warning: argument 'a_struct' unused in function 'old_style' [231] */
     31  1.1  rillig extern void
     32  1.1  rillig old_style(an_int, a_const_int, a_number, a_function, a_struct)
     33  1.1  rillig /* expect+2: warning: empty declaration [2] */
     34  1.9  rillig /* expect+1: error: only 'register' is valid as storage class in parameter [9] */
     35  1.1  rillig static;
     36  1.1  rillig /* expect+1: error: syntax error '"' [249] */
     37  1.1  rillig static "error";
     38  1.1  rillig /* expect+1: warning: empty declaration [2] */
     39  1.1  rillig const;
     40  1.7  rillig /* expect+1: error: declared argument 'undeclared' is missing [53] */
     41  1.1  rillig const undeclared;
     42  1.7  rillig /* expect+2: error: declared argument 'undeclared_initialized' is missing [53] */
     43  1.7  rillig /* expect+1: error: cannot initialize parameter 'undeclared_initialized' [52] */
     44  1.1  rillig const undeclared_initialized = 12345;
     45  1.1  rillig /* expect+1: warning: empty declaration [2] */
     46  1.1  rillig int;
     47  1.1  rillig /* expect+1: warning: 'struct arg_struct' declared in argument declaration list [3] */
     48  1.1  rillig struct arg_struct { int member; };
     49  1.7  rillig /* expect+1: error: cannot initialize parameter 'an_int' [52] */
     50  1.1  rillig int an_int = 12345;
     51  1.1  rillig const int a_const_int;
     52  1.1  rillig number a_number;
     53  1.1  rillig void (a_function) (number);
     54  1.1  rillig /* expect+1: warning: 'struct a_struct' declared in argument declaration list [3] */
     55  1.1  rillig struct a_struct { int member; } a_struct;
     56  1.1  rillig {
     57  1.1  rillig }
     58  1.1  rillig 
     59  1.1  rillig /*
     60  1.6  rillig  * Just some unrealistic coverage for the grammar rule
     61  1.6  rillig  * 'notype_direct_declarator'.
     62  1.1  rillig  */
     63  1.1  rillig extern int
     64  1.1  rillig cover_notype_direct_decl(arg)
     65  1.1  rillig int arg;
     66  1.7  rillig /* expect+1: error: declared argument 'name' is missing [53] */
     67  1.1  rillig const name;
     68  1.7  rillig /* expect+1: error: declared argument 'parenthesized_name' is missing [53] */
     69  1.1  rillig const (parenthesized_name);
     70  1.7  rillig /* expect+1: error: declared argument 'array' is missing [53] */
     71  1.1  rillig const array[];
     72  1.7  rillig /* expect+1: error: declared argument 'array_size' is missing [53] */
     73  1.1  rillig const array_size[1+1+1];
     74  1.7  rillig /* expect+2: error: declared argument 'multi_array' is missing [53] */
     75  1.1  rillig /* expect+1: error: null dimension [17] */
     76  1.1  rillig const multi_array[][][][][][];
     77  1.7  rillig /* expect+1: error: declared argument 'function' is missing [53] */
     78  1.1  rillig const function(void);
     79  1.7  rillig /* expect+1: error: declared argument 'prefix_attribute' is missing [53] */
     80  1.1  rillig const __attribute__((deprecated)) prefix_attribute;
     81  1.7  rillig /* expect+1: error: declared argument 'postfix_attribute' is missing [53] */
     82  1.1  rillig const postfix_attribute __attribute__((deprecated));
     83  1.7  rillig /* expect+1: error: declared argument 'infix_attribute' is missing [53] */
     84  1.1  rillig const __attribute__((deprecated)) infix_attribute __attribute__((deprecated));
     85  1.1  rillig /* The __attribute__ before the '*' is consumed by some other grammar rule. */
     86  1.7  rillig /* expect+7: error: declared argument 'pointer_prefix_attribute' is missing [53] */
     87  1.1  rillig const
     88  1.1  rillig     __attribute__((deprecated))
     89  1.1  rillig     *
     90  1.1  rillig     __attribute__((deprecated))
     91  1.1  rillig     __attribute__((deprecated))
     92  1.1  rillig     __attribute__((deprecated))
     93  1.1  rillig     pointer_prefix_attribute;
     94  1.1  rillig {
     95  1.1  rillig 	return arg;
     96  1.1  rillig }
     97  1.2  rillig 
     98  1.2  rillig void test_varargs_attribute(
     99  1.2  rillig     void (*pr)(const char *, ...)
    100  1.2  rillig 	__attribute__((__format__(__printf__, 1, 2)))
    101  1.2  rillig );
    102  1.3  rillig 
    103  1.3  rillig /*
    104  1.3  rillig  * XXX: To cover the grammar rule 'direct_notype_param_decl', the parameters
    105  1.3  rillig  *  need to be enclosed by one more pair of parentheses than usual.
    106  1.3  rillig  */
    107  1.3  rillig void cover_direct_notype_param_decl(
    108  1.4  rillig     double (identifier),
    109  1.3  rillig     double ((parenthesized)),
    110  1.3  rillig     double (array[]),
    111  1.3  rillig     double (array_size[3]),
    112  1.3  rillig     double (*)(void (function()))
    113  1.3  rillig );
    114  1.4  rillig 
    115  1.4  rillig /*
    116  1.4  rillig  * Just some unrealistic code to cover the grammar rule parameter_declaration.
    117  1.4  rillig  */
    118  1.9  rillig /* expect+4: error: only 'register' is valid as storage class in parameter [9] */
    119  1.4  rillig void cover_parameter_declaration(
    120  1.4  rillig     volatile,			/* 1 */
    121  1.4  rillig     double,			/* 2 */
    122  1.4  rillig     static storage_class,	/* 3.1 */
    123  1.4  rillig     const type_qualifier,	/* 3.2 */
    124  1.4  rillig     double (identifier),	/* 4 */
    125  1.4  rillig     const (*),			/* 5 */
    126  1.4  rillig     double *const,		/* 6 */
    127  1.4  rillig     ...
    128  1.4  rillig );
    129  1.5  rillig 
    130  1.5  rillig void cover_asm_or_symbolrename_asm(void)
    131  1.5  rillig     __asm("assembly code");
    132  1.5  rillig 
    133  1.5  rillig void cover_asm_or_symbolrename_symbolrename(void)
    134  1.5  rillig     __symbolrename(alternate_name);
    135  1.6  rillig 
    136  1.6  rillig // FIXME: internal error in decl.c:906 near decl_arg.c:134: length(0)
    137  1.6  rillig //void cover_abstract_declarator_typeof(void (*)(typeof(no_args)));
    138