Home | History | Annotate | Line # | Download | only in lint1
decl_arg.c revision 1.12
      1  1.12  rillig /*	$NetBSD: decl_arg.c,v 1.12 2023/08/02 18:51:25 rillig Exp $	*/
      2   1.1  rillig # 3 "decl_arg.c"
      3   1.1  rillig 
      4   1.1  rillig /*
      5  1.12  rillig  * Tests for declarations of function parameters.
      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.10  rillig /* expect+6: warning: parameter 'an_int' unused in function 'old_style' [231] */
     27  1.10  rillig /* expect+5: warning: parameter 'a_const_int' unused in function 'old_style' [231] */
     28  1.10  rillig /* expect+4: warning: parameter 'a_number' unused in function 'old_style' [231] */
     29  1.10  rillig /* expect+3: warning: parameter 'a_function' unused in function 'old_style' [231] */
     30  1.10  rillig /* expect+2: warning: parameter '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.12  rillig /* expect+1: error: declared parameter 'undeclared' is missing [53] */
     41   1.1  rillig const undeclared;
     42  1.12  rillig /* expect+2: error: declared parameter '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.12  rillig /* expect+1: warning: 'struct arg_struct' declared in parameter 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.12  rillig /* expect+1: warning: 'struct a_struct' declared in parameter 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.12  rillig /* expect+1: error: declared parameter 'name' is missing [53] */
     67   1.1  rillig const name;
     68  1.12  rillig /* expect+1: error: declared parameter 'parenthesized_name' is missing [53] */
     69   1.1  rillig const (parenthesized_name);
     70  1.12  rillig /* expect+1: error: declared parameter 'array' is missing [53] */
     71   1.1  rillig const array[];
     72  1.12  rillig /* expect+1: error: declared parameter 'array_size' is missing [53] */
     73   1.1  rillig const array_size[1+1+1];
     74  1.12  rillig /* expect+2: error: declared parameter 'multi_array' is missing [53] */
     75   1.1  rillig /* expect+1: error: null dimension [17] */
     76   1.1  rillig const multi_array[][][][][][];
     77  1.12  rillig /* expect+1: error: declared parameter 'function' is missing [53] */
     78   1.1  rillig const function(void);
     79  1.12  rillig /* expect+1: error: declared parameter 'prefix_attribute' is missing [53] */
     80   1.1  rillig const __attribute__((deprecated)) prefix_attribute;
     81  1.12  rillig /* expect+1: error: declared parameter 'postfix_attribute' is missing [53] */
     82   1.1  rillig const postfix_attribute __attribute__((deprecated));
     83  1.12  rillig /* expect+1: error: declared parameter '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.12  rillig /* expect+7: error: declared parameter '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.11  rillig 
    137  1.11  rillig double
    138  1.11  rillig f(e, s, r, a, t, n)
    139  1.11  rillig 	/* expect+1: error: only 'register' is valid as storage class in parameter [9] */
    140  1.11  rillig 	extern double e;
    141  1.11  rillig 	/* expect+1: error: only 'register' is valid as storage class in parameter [9] */
    142  1.11  rillig 	static double s;
    143  1.11  rillig 	register double r;
    144  1.11  rillig 	/* expect+1: error: only 'register' is valid as storage class in parameter [9] */
    145  1.11  rillig 	auto double a;
    146  1.11  rillig 	/* expect+1: error: only 'register' is valid as storage class in parameter [9] */
    147  1.11  rillig 	typedef double t;
    148  1.11  rillig 	double n;
    149  1.11  rillig {
    150  1.11  rillig 	return e + s + r + a + t + n;
    151  1.11  rillig }
    152  1.11  rillig 
    153  1.11  rillig 
    154   1.6  rillig // FIXME: internal error in decl.c:906 near decl_arg.c:134: length(0)
    155   1.6  rillig //void cover_abstract_declarator_typeof(void (*)(typeof(no_args)));
    156