Home | History | Annotate | Line # | Download | only in lint1
decl.c revision 1.1
      1  1.1  rillig /*	$NetBSD: decl.c,v 1.1 2021/07/10 18:25:57 rillig Exp $	*/
      2  1.1  rillig # 3 "decl.c"
      3  1.1  rillig 
      4  1.1  rillig /*
      5  1.1  rillig  * Tests for declarations, especially the distinction between the
      6  1.1  rillig  * declaration-specifiers and the declarators.
      7  1.1  rillig  */
      8  1.1  rillig 
      9  1.1  rillig /*
     10  1.1  rillig  * Even though 'const' comes after 'char' and is therefore quite close to the
     11  1.1  rillig  * first identifier, it applies to both identifiers.
     12  1.1  rillig  */
     13  1.1  rillig void
     14  1.1  rillig specifier_qualifier(void)
     15  1.1  rillig {
     16  1.1  rillig 	char const a = 1, b = 2;
     17  1.1  rillig 
     18  1.1  rillig 	/* expect+1: warning: left operand of '=' must be modifiable lvalue [115] */
     19  1.1  rillig 	a = 1;
     20  1.1  rillig 	/* expect+1: warning: left operand of '=' must be modifiable lvalue [115] */
     21  1.1  rillig 	b = 2;
     22  1.1  rillig }
     23  1.1  rillig 
     24  1.1  rillig /*
     25  1.1  rillig  * Since 'const' comes before 'char', there is no ambiguity whether the
     26  1.1  rillig  * 'const' applies to all variables or just to the first.
     27  1.1  rillig  */
     28  1.1  rillig void
     29  1.1  rillig qualifier_specifier(void)
     30  1.1  rillig {
     31  1.1  rillig 	const char a = 1, b = 2;
     32  1.1  rillig 
     33  1.1  rillig 	/* expect+1: warning: left operand of '=' must be modifiable lvalue [115] */
     34  1.1  rillig 	a = 3;
     35  1.1  rillig 	/* expect+1: warning: left operand of '=' must be modifiable lvalue [115] */
     36  1.1  rillig 	b = 5;
     37  1.1  rillig }
     38  1.1  rillig 
     39  1.1  rillig void
     40  1.1  rillig declarator_with_prefix_qualifier(void)
     41  1.1  rillig {
     42  1.1  rillig 	/* expect+1: syntax error 'const' [249] */
     43  1.1  rillig 	char a = 1, const b = 2;
     44  1.1  rillig 
     45  1.1  rillig 	a = 1;
     46  1.1  rillig 	/* expect+1: error: 'b' undefined [99] */
     47  1.1  rillig 	b = 2;
     48  1.1  rillig }
     49  1.1  rillig 
     50  1.1  rillig void
     51  1.1  rillig declarator_with_postfix_qualifier(void)
     52  1.1  rillig {
     53  1.1  rillig 	/* expect+1: syntax error 'const' [249] */
     54  1.1  rillig 	char a = 1, b const = 2;
     55  1.1  rillig 
     56  1.1  rillig 	a = 1;
     57  1.1  rillig 	b = 2;
     58  1.1  rillig }
     59  1.1  rillig 
     60  1.1  rillig void sink(double *);
     61  1.1  rillig 
     62  1.1  rillig void
     63  1.1  rillig declarators(void)
     64  1.1  rillig {
     65  1.1  rillig 	char *pc = 0, c = 0, **ppc = 0;
     66  1.1  rillig 
     67  1.1  rillig 	/* expect+1: warning: converting 'pointer to char' to incompatible 'pointer to double' */
     68  1.1  rillig 	sink(pc);
     69  1.1  rillig 	/* expect+1: warning: illegal combination of pointer (pointer to double) and integer (char) */
     70  1.1  rillig 	sink(c);
     71  1.1  rillig 	/* expect+1: converting 'pointer to pointer to char' to incompatible 'pointer to double' */
     72  1.1  rillig 	sink(ppc);
     73  1.1  rillig }
     74