Home | History | Annotate | Line # | Download | only in lint1
      1  1.3  rillig /*	$NetBSD: expr_binary_trad.c,v 1.3 2023/03/28 14:44:34 rillig Exp $	*/
      2  1.1  rillig # 3 "expr_binary_trad.c"
      3  1.1  rillig 
      4  1.1  rillig /*
      5  1.1  rillig  * Test binary operators in traditional C.
      6  1.1  rillig  */
      7  1.1  rillig 
      8  1.3  rillig /* lint1-flags: -tw -X 351 */
      9  1.1  rillig 
     10  1.1  rillig struct incompatible {		/* just to generate the error message */
     11  1.1  rillig 	int member;
     12  1.1  rillig };
     13  1.1  rillig struct incompatible sink;
     14  1.1  rillig 
     15  1.1  rillig /*
     16  1.1  rillig  * Test the usual arithmetic conversions.
     17  1.1  rillig  *
     18  1.1  rillig  * C99 6.3.1.8 "Usual arithmetic conversions"
     19  1.1  rillig  */
     20  1.1  rillig void
     21  1.1  rillig cover_balance()
     22  1.1  rillig {
     23  1.1  rillig 
     24  1.2  rillig 	/* expect+1: ... 'pointer to char' ... */
     25  1.1  rillig 	sink = (char *)0 + 0;
     26  1.1  rillig 
     27  1.2  rillig 	/* expect+1: ... 'pointer to char' ... */
     28  1.1  rillig 	sink = 0 + (char *)0;
     29  1.1  rillig 
     30  1.2  rillig 	/* expect+1: ... 'int' ... */
     31  1.1  rillig 	sink = 1 + 1;
     32  1.1  rillig 
     33  1.2  rillig 	/* expect+1: ... 'double' ... */
     34  1.1  rillig 	sink = 0.0 + 0;
     35  1.2  rillig 	/* expect+1: ... 'double' ... */
     36  1.1  rillig 	sink = 0 + 0.0;
     37  1.2  rillig 	/* expect+1: ... 'double' ... */
     38  1.1  rillig 	sink = 0.0 + (float)0.0;
     39  1.2  rillig 	/* expect+1: ... 'double' ... */
     40  1.1  rillig 	sink = (float)0.0 + 0.0;
     41  1.1  rillig 
     42  1.1  rillig 	/*
     43  1.1  rillig 	 * In traditional C, 'float' gets promoted to 'double' before
     44  1.1  rillig 	 * applying the usual arithmetic conversions; see 'promote'.
     45  1.1  rillig 	 */
     46  1.2  rillig 	/* expect+1: ... 'double' ... */
     47  1.1  rillig 	sink = (float)0.0 + 0;
     48  1.2  rillig 	/* expect+1: ... 'double' ... */
     49  1.1  rillig 	sink = 0 + (float)0.0;
     50  1.1  rillig 
     51  1.2  rillig 	/* expect+1: ... 'unsigned long' ... */
     52  1.1  rillig 	sink = (unsigned long)0 + 0;
     53  1.2  rillig 	/* expect+1: ... 'unsigned long' ... */
     54  1.1  rillig 	sink = 0 + (unsigned long)0;
     55  1.1  rillig 
     56  1.2  rillig 	/* expect+1: ... 'unsigned long' ... */
     57  1.1  rillig 	sink = (unsigned long)0 + (long)0;
     58  1.2  rillig 	/* expect+1: ... 'unsigned long' ... */
     59  1.1  rillig 	sink = (long)0 + (unsigned long)0;
     60  1.1  rillig 
     61  1.1  rillig 	/*
     62  1.1  rillig 	 * In traditional C, if one of the operands is unsigned, the result
     63  1.1  rillig 	 * is unsigned as well.
     64  1.1  rillig 	 */
     65  1.2  rillig 	/* expect+1: ... 'unsigned long' ... */
     66  1.1  rillig 	sink = (unsigned)0 + (long)0;
     67  1.1  rillig }
     68