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