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