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