1*465ab238Srillig /* $NetBSD: msg_346.c,v 1.10 2024/08/31 06:57:31 rillig Exp $ */ 29cea3ffaSrillig # 3 "msg_346.c" 39cea3ffaSrillig 49cea3ffaSrillig // Test for message: call to '%s' effectively discards 'const' from argument [346] 59cea3ffaSrillig 6b2baa501Srillig /* lint1-extra-flags: -X 351 */ 7b2baa501Srillig 802254ebbSrillig typedef unsigned long size_t; 902254ebbSrillig 1002254ebbSrillig void *memchr(const void *, int, size_t); /* C99 7.21.5.1 */ 1102254ebbSrillig char *strchr(const char *, int); /* C99 7.21.5.2 */ 1202254ebbSrillig char *strpbrk(const char *, const char *); /* C99 7.21.5.4 */ 1302254ebbSrillig char *strrchr(const char *, int); /* C99 7.21.5.5 */ 1402254ebbSrillig char *strstr(const char *, const char *); /* C99 7.21.5.7 */ 159cea3ffaSrillig 169cea3ffaSrillig void take_const_char_ptr(const char *); 179cea3ffaSrillig void take_char_ptr(char *); 189cea3ffaSrillig 199cea3ffaSrillig void 209cea3ffaSrillig example(void) 219cea3ffaSrillig { 229cea3ffaSrillig const char *ccp = "const char *"; 239cea3ffaSrillig char *cp = "char *"; 249cea3ffaSrillig 259cea3ffaSrillig ccp = strchr(ccp, 'c'); 269cea3ffaSrillig ccp = strchr(cp, 'c'); 279cea3ffaSrillig /* expect+1: warning: call to 'strchr' effectively discards 'const' from argument [346] */ 289cea3ffaSrillig cp = strchr(ccp, 'c'); 299cea3ffaSrillig cp = strchr(cp, 'c'); 309cea3ffaSrillig 319cea3ffaSrillig take_const_char_ptr(strchr(ccp, 'c')); 329cea3ffaSrillig take_const_char_ptr(strchr(cp, 'c')); 339cea3ffaSrillig /* expect+1: warning: call to 'strchr' effectively discards 'const' from argument [346] */ 349cea3ffaSrillig take_char_ptr(strchr(ccp, 'c')); 359cea3ffaSrillig take_char_ptr(strchr(cp, 'c')); 369cea3ffaSrillig 379cea3ffaSrillig take_const_char_ptr(strchr("literal", 'c')); 389cea3ffaSrillig /* expect+1: warning: call to 'strchr' effectively discards 'const' from argument [346] */ 399cea3ffaSrillig take_char_ptr(strchr("literal", 'c')); 409cea3ffaSrillig } 4102254ebbSrillig 4202254ebbSrillig void 4302254ebbSrillig all_functions(void) 4402254ebbSrillig { 4534e56d2dSrillig /* expect+1: warning: call to 'memchr' effectively discards 'const' from argument [346] */ 4602254ebbSrillig take_char_ptr(memchr("string", 'c', 7)); 4702254ebbSrillig /* expect+1: warning: call to 'strchr' effectively discards 'const' from argument [346] */ 4802254ebbSrillig take_char_ptr(strchr("string", 'c')); 4934e56d2dSrillig /* expect+1: warning: call to 'strpbrk' effectively discards 'const' from argument [346] */ 5002254ebbSrillig take_char_ptr(strpbrk("string", "c")); 5134e56d2dSrillig /* expect+1: warning: call to 'strrchr' effectively discards 'const' from argument [346] */ 5202254ebbSrillig take_char_ptr(strrchr("string", 'c')); 5334e56d2dSrillig /* expect+1: warning: call to 'strstr' effectively discards 'const' from argument [346] */ 5402254ebbSrillig take_char_ptr(strstr("string", "c")); 5502254ebbSrillig } 561678a18aSrillig 571678a18aSrillig void 581678a18aSrillig edge_cases(void) 59f2bab287Srillig { 601678a18aSrillig /* No arguments, to cover the 'an == NULL' in is_first_arg_const. */ 61f2bab287Srillig /* expect+1: error: argument mismatch: 0 arguments passed, 2 expected [150] */ 621678a18aSrillig take_char_ptr(strchr()); 631678a18aSrillig } 640ad85c20Srillig 650ad85c20Srillig /* 660ad85c20Srillig * Bsearch is another standard function that effectively discards the 'const' 670ad85c20Srillig * modifier, but from the second argument, not the first. 680ad85c20Srillig */ 690ad85c20Srillig 700ad85c20Srillig void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, 710ad85c20Srillig int (*compar) (const void *, const void *)); 720ad85c20Srillig 730ad85c20Srillig int cmp(const void *, const void *); 740ad85c20Srillig 750ad85c20Srillig void take_void_ptr(void *); 76c43e4b83Srillig void take_const_void_ptr(const void *); 770ad85c20Srillig 780ad85c20Srillig void 790ad85c20Srillig bsearch_example(void) 800ad85c20Srillig { 81c43e4b83Srillig int arr[] = { 1 }; 820ad85c20Srillig const int const_arr[] = { 1 }; 830ad85c20Srillig 840ad85c20Srillig take_const_void_ptr(bsearch("", const_arr, 4, 1, cmp)); 850ad85c20Srillig take_const_void_ptr(bsearch("", arr, 4, 1, cmp)); 860ad85c20Srillig take_void_ptr(bsearch("", arr, 4, 1, cmp)); 870ad85c20Srillig 88c43e4b83Srillig /* expect+1: warning: call to 'bsearch' effectively discards 'const' from argument [346] */ 890ad85c20Srillig take_void_ptr(bsearch("", const_arr, 4, 1, cmp)); 900ad85c20Srillig } 91