Home | History | Annotate | Line # | Download | only in lint1
msg_346.c revision 1.7
      1  1.7  rillig /*	$NetBSD: msg_346.c,v 1.7 2022/06/22 19:23:18 rillig Exp $	*/
      2  1.1  rillig # 3 "msg_346.c"
      3  1.1  rillig 
      4  1.1  rillig // Test for message: call to '%s' effectively discards 'const' from argument [346]
      5  1.1  rillig 
      6  1.2  rillig typedef unsigned long size_t;
      7  1.2  rillig 
      8  1.2  rillig void* memchr(const void *, int, size_t);		/* C99 7.21.5.1 */
      9  1.2  rillig char *strchr(const char *, int);			/* C99 7.21.5.2 */
     10  1.2  rillig char* strpbrk(const char *, const char *);		/* C99 7.21.5.4 */
     11  1.2  rillig char* strrchr(const char *, int);			/* C99 7.21.5.5 */
     12  1.2  rillig char* strstr(const char *, const char *);		/* C99 7.21.5.7 */
     13  1.1  rillig 
     14  1.1  rillig void take_const_char_ptr(const char *);
     15  1.1  rillig void take_char_ptr(char *);
     16  1.1  rillig 
     17  1.1  rillig void
     18  1.1  rillig example(void)
     19  1.1  rillig {
     20  1.1  rillig 	const char *ccp = "const char *";
     21  1.1  rillig 	char *cp = "char *";
     22  1.1  rillig 
     23  1.1  rillig 	ccp = strchr(ccp, 'c');
     24  1.1  rillig 	ccp = strchr(cp, 'c');
     25  1.1  rillig 	/* expect+1: warning: call to 'strchr' effectively discards 'const' from argument [346] */
     26  1.1  rillig 	cp = strchr(ccp, 'c');
     27  1.1  rillig 	cp = strchr(cp, 'c');
     28  1.1  rillig 
     29  1.1  rillig 	take_const_char_ptr(strchr(ccp, 'c'));
     30  1.1  rillig 	take_const_char_ptr(strchr(cp, 'c'));
     31  1.1  rillig 	/* expect+1: warning: call to 'strchr' effectively discards 'const' from argument [346] */
     32  1.1  rillig 	take_char_ptr(strchr(ccp, 'c'));
     33  1.1  rillig 	take_char_ptr(strchr(cp, 'c'));
     34  1.1  rillig 
     35  1.1  rillig 	take_const_char_ptr(strchr("literal", 'c'));
     36  1.1  rillig 	/* expect+1: warning: call to 'strchr' effectively discards 'const' from argument [346] */
     37  1.1  rillig 	take_char_ptr(strchr("literal", 'c'));
     38  1.1  rillig }
     39  1.2  rillig 
     40  1.2  rillig void
     41  1.2  rillig all_functions(void)
     42  1.2  rillig {
     43  1.3  rillig 	/* expect+1: warning: call to 'memchr' effectively discards 'const' from argument [346] */
     44  1.2  rillig 	take_char_ptr(memchr("string", 'c', 7));
     45  1.2  rillig 	/* expect+1: warning: call to 'strchr' effectively discards 'const' from argument [346] */
     46  1.2  rillig 	take_char_ptr(strchr("string", 'c'));
     47  1.3  rillig 	/* expect+1: warning: call to 'strpbrk' effectively discards 'const' from argument [346] */
     48  1.2  rillig 	take_char_ptr(strpbrk("string", "c"));
     49  1.3  rillig 	/* expect+1: warning: call to 'strrchr' effectively discards 'const' from argument [346] */
     50  1.2  rillig 	take_char_ptr(strrchr("string", 'c'));
     51  1.3  rillig 	/* expect+1: warning: call to 'strstr' effectively discards 'const' from argument [346] */
     52  1.2  rillig 	take_char_ptr(strstr("string", "c"));
     53  1.2  rillig }
     54  1.4  rillig 
     55  1.4  rillig void
     56  1.4  rillig edge_cases(void)
     57  1.7  rillig {	/* TODO: '0 argument passed' is not correct English */
     58  1.4  rillig 	/* No arguments, to cover the 'an == NULL' in is_first_arg_const. */
     59  1.7  rillig 	/* expect+1: error: argument mismatch: 0 argument passed, 2 expected [150] */
     60  1.4  rillig 	take_char_ptr(strchr());
     61  1.4  rillig }
     62  1.5  rillig 
     63  1.5  rillig /*
     64  1.5  rillig  * Bsearch is another standard function that effectively discards the 'const'
     65  1.5  rillig  * modifier, but from the second argument, not the first.
     66  1.5  rillig  */
     67  1.5  rillig 
     68  1.5  rillig void *bsearch(const void *key, const void *base, size_t nmemb, size_t size,
     69  1.5  rillig 	int (*compar) (const void *, const void *));
     70  1.5  rillig 
     71  1.5  rillig int cmp(const void *, const void *);
     72  1.5  rillig 
     73  1.5  rillig void take_void_ptr(void *);
     74  1.6  rillig void take_const_void_ptr(const void *);
     75  1.5  rillig 
     76  1.5  rillig void
     77  1.5  rillig bsearch_example(void)
     78  1.5  rillig {
     79  1.6  rillig 	int arr[] = { 1 };
     80  1.5  rillig 	const int const_arr[] = { 1 };
     81  1.5  rillig 
     82  1.5  rillig 	take_const_void_ptr(bsearch("", const_arr, 4, 1, cmp));
     83  1.5  rillig 	take_const_void_ptr(bsearch("", arr, 4, 1, cmp));
     84  1.5  rillig 	take_void_ptr(bsearch("", arr, 4, 1, cmp));
     85  1.5  rillig 
     86  1.6  rillig 	/* expect+1: warning: call to 'bsearch' effectively discards 'const' from argument [346] */
     87  1.5  rillig 	take_void_ptr(bsearch("", const_arr, 4, 1, cmp));
     88  1.5  rillig }
     89