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