1*e6298b92Srillig /* $NetBSD: msg_116.c,v 1.6 2023/07/07 19:45:22 rillig Exp $ */ 2a0a15c14Srillig # 3 "msg_116.c" 3a0a15c14Srillig 4a0a15c14Srillig // Test for message: illegal pointer subtraction [116] 5a0a15c14Srillig 6*e6298b92Srillig /* lint1-extra-flags: -X 351 */ 7*e6298b92Srillig 86bb8504fSrillig /* 96bb8504fSrillig * Subtracting an int pointer from a double pointer does not make sense. 106bb8504fSrillig * The result cannot be reasonably defined since it is "the difference of 116bb8504fSrillig * the subscripts of the two array elements" (C99 6.5.5p9), and these two 126bb8504fSrillig * pointers cannot point to the same array. 136bb8504fSrillig */ 146bb8504fSrillig _Bool example(int * a,double * b)15af03d2a0Srilligexample(int *a, double *b) 16af03d2a0Srillig { 1765e5c21bSrillig /* expect+1: error: illegal pointer subtraction [116] */ 1865e5c21bSrillig return a - b > 0; 196bb8504fSrillig } 206bb8504fSrillig 216bb8504fSrillig /* 226bb8504fSrillig * Even though signed char and unsigned char have the same size, 236bb8504fSrillig * their pointer types are still considered incompatible. 246bb8504fSrillig * 256bb8504fSrillig * C99 6.5.5p9 266bb8504fSrillig */ 276bb8504fSrillig _Bool subtract_character_pointers(signed char * scp,unsigned char * ucp)286bb8504fSrilligsubtract_character_pointers(signed char *scp, unsigned char *ucp) 296bb8504fSrillig { 3065e5c21bSrillig /* expect+1: error: illegal pointer subtraction [116] */ 3165e5c21bSrillig return scp - ucp > 0; 326bb8504fSrillig } 336bb8504fSrillig 346bb8504fSrillig _Bool subtract_const_pointer(const char * ccp,char * cp)356bb8504fSrilligsubtract_const_pointer(const char *ccp, char *cp) 366bb8504fSrillig { 376bb8504fSrillig return ccp - cp > 0; 38af03d2a0Srillig } 39