xref: /netbsd-src/tests/usr.bin/xlint/lint1/msg_124.c (revision dcb32fd76a6d98c4a9af231446a80d630943641c)
1*dcb32fd7Srillig /*	$NetBSD: msg_124.c,v 1.15 2023/08/26 10:43:53 rillig Exp $	*/
2a0a15c14Srillig # 3 "msg_124.c"
3a0a15c14Srillig 
43e3b6613Srillig // Test for message: illegal combination of '%s' and '%s', op '%s' [124]
5a0a15c14Srillig 
606b80932Srillig /* lint1-extra-flags: -s -X 191,351 */
7fc1964e3Srillig 
85ba1c480Srillig typedef void(*signal_handler)(int);
95ba1c480Srillig 
105ba1c480Srillig typedef signal_handler(*sys_signal)(signal_handler);
115ba1c480Srillig 
125ba1c480Srillig typedef int(*printflike)(const char *, ...)
135ba1c480Srillig     __attribute__((format(printf, 1, 2)));
145ba1c480Srillig 
155ba1c480Srillig void
example(int * ptr)165ba1c480Srillig example(int *ptr)
175ba1c480Srillig {
1865e5c21bSrillig 	/* expect+1: warning: illegal combination of 'pointer to function(int) returning void' and 'pointer to int', op 'init' [124] */
1965e5c21bSrillig 	signal_handler handler = ptr;
2065e5c21bSrillig 	/* expect+1: warning: illegal combination of 'pointer to function(pointer to function(int) returning void) returning pointer to function(int) returning void' and 'pointer to int', op 'init' [124] */
2165e5c21bSrillig 	sys_signal signal = ptr;
2265e5c21bSrillig 	/* expect+1: warning: illegal combination of 'pointer to function(pointer to const char, ...) returning int' and 'pointer to int', op 'init' [124] */
2365e5c21bSrillig 	printflike printf = ptr;
24adda8a3bSrillig }
25adda8a3bSrillig 
26adda8a3bSrillig void ok(_Bool);
27adda8a3bSrillig void not_ok(_Bool);
28adda8a3bSrillig 
29adda8a3bSrillig void
compare_pointers(const void * vp,const char * cp,const int * ip,signal_handler fp)30adda8a3bSrillig compare_pointers(const void *vp, const char *cp, const int *ip,
31adda8a3bSrillig 		 signal_handler fp)
32adda8a3bSrillig {
33adda8a3bSrillig 	ok(vp == cp);
34adda8a3bSrillig 	ok(vp == ip);
35*dcb32fd7Srillig 	/* expect+1: warning: C90 or later forbid comparison of 'void *' with function pointer [274] */
3665e5c21bSrillig 	ok(vp == fp);
3765e5c21bSrillig 	/* expect+1: warning: illegal combination of 'pointer to const char' and 'pointer to const int', op '==' [124] */
3865e5c21bSrillig 	not_ok(cp == ip);
3965e5c21bSrillig 	/* expect+1: warning: illegal combination of 'pointer to const char' and 'pointer to function(int) returning void', op '==' [124] */
4065e5c21bSrillig 	not_ok(cp == fp);
41adda8a3bSrillig 	ok(vp == (void *)0);
42adda8a3bSrillig 	ok(cp == (void *)0);
43adda8a3bSrillig 	ok(ip == (void *)0);
442944115bSrillig 	ok(fp == (void *)0);	/* wrong 274 before 2021-01-25 */
457b8d5df0Srillig 	ok((void *)0 == vp);
467b8d5df0Srillig 	ok((void *)0 == cp);
477b8d5df0Srillig 	ok((void *)0 == ip);
482944115bSrillig 	ok((void *)0 == fp);	/* wrong 274 before 2021-01-25 */
49adda8a3bSrillig 	ok(vp == 0);
50adda8a3bSrillig 	ok(cp == 0);
51adda8a3bSrillig 	ok(ip == 0);
52adda8a3bSrillig 	ok(fp == 0);
53adda8a3bSrillig 	ok(vp == 0L);
54adda8a3bSrillig 	ok(cp == 0L);
55adda8a3bSrillig 	ok(ip == 0L);
56adda8a3bSrillig 	ok(fp == 0L);
575ba1c480Srillig }
58