1 1.3 rillig /* $NetBSD: msg_116.c,v 1.3 2021/01/09 22:55: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.3 rillig return a - b > 0; 16 1.3 rillig } 17 1.3 rillig 18 1.3 rillig /* 19 1.3 rillig * Even though signed char and unsigned char have the same size, 20 1.3 rillig * their pointer types are still considered incompatible. 21 1.3 rillig * 22 1.3 rillig * C99 6.5.5p9 23 1.3 rillig */ 24 1.3 rillig _Bool 25 1.3 rillig subtract_character_pointers(signed char *scp, unsigned char *ucp) 26 1.3 rillig { 27 1.3 rillig return scp - ucp > 0; 28 1.3 rillig } 29 1.3 rillig 30 1.3 rillig _Bool 31 1.3 rillig subtract_const_pointer(const char *ccp, char *cp) 32 1.3 rillig { 33 1.3 rillig return ccp - cp > 0; 34 1.2 rillig } 35