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