Home | History | Annotate | Line # | Download | only in lint1
      1  1.7  rillig /*	$NetBSD: msg_116.c,v 1.7 2025/04/12 15:49:50 rillig Exp $	*/
      2  1.1  rillig # 3 "msg_116.c"
      3  1.1  rillig 
      4  1.7  rillig // Test for message: invalid pointer subtraction [116]
      5  1.1  rillig 
      6  1.6  rillig /* lint1-extra-flags: -X 351 */
      7  1.6  rillig 
      8  1.3  rillig /*
      9  1.3  rillig  * Subtracting an int pointer from a double pointer does not make sense.
     10  1.3  rillig  * The result cannot be reasonably defined since it is "the difference of
     11  1.3  rillig  * the subscripts of the two array elements" (C99 6.5.5p9), and these two
     12  1.3  rillig  * pointers cannot point to the same array.
     13  1.3  rillig  */
     14  1.3  rillig _Bool
     15  1.2  rillig example(int *a, double *b)
     16  1.2  rillig {
     17  1.7  rillig 	/* expect+1: error: invalid pointer subtraction [116] */
     18  1.5  rillig 	return a - b > 0;
     19  1.3  rillig }
     20  1.3  rillig 
     21  1.3  rillig /*
     22  1.3  rillig  * Even though signed char and unsigned char have the same size,
     23  1.3  rillig  * their pointer types are still considered incompatible.
     24  1.3  rillig  *
     25  1.3  rillig  * C99 6.5.5p9
     26  1.3  rillig  */
     27  1.3  rillig _Bool
     28  1.3  rillig subtract_character_pointers(signed char *scp, unsigned char *ucp)
     29  1.3  rillig {
     30  1.7  rillig 	/* expect+1: error: invalid pointer subtraction [116] */
     31  1.5  rillig 	return scp - ucp > 0;
     32  1.3  rillig }
     33  1.3  rillig 
     34  1.3  rillig _Bool
     35  1.3  rillig subtract_const_pointer(const char *ccp, char *cp)
     36  1.3  rillig {
     37  1.3  rillig 	return ccp - cp > 0;
     38  1.2  rillig }
     39