xref: /netbsd-src/tests/usr.bin/xlint/lint1/op_colon.c (revision d2c16d5796af7d64c26094d6e83f5c79714a35d6)
1*d2c16d57Srillig /*	$NetBSD: op_colon.c,v 1.8 2024/01/28 08:17:27 rillig Exp $	*/
21cb2fa84Srillig # 3 "op_colon.c"
31cb2fa84Srillig 
41cb2fa84Srillig /*
51cb2fa84Srillig  * Test handling of the operator ':', as part of the '?:'.
61cb2fa84Srillig  */
71cb2fa84Srillig 
8b2baa501Srillig /* lint1-extra-flags: -p -X 351 */
91cb2fa84Srillig 
10391c3435Srillig struct canary {
116173d74cSrillig 	int member;
126173d74cSrillig };
136173d74cSrillig 
146173d74cSrillig void
15391c3435Srillig sink(struct canary);
161cb2fa84Srillig 
171cb2fa84Srillig void
test_merge_qualifiers(_Bool cond,int * p,const int * c,volatile int * v,const volatile int * cv)181cb2fa84Srillig test_merge_qualifiers(_Bool cond, int *p, const int *c, volatile int *v,
191cb2fa84Srillig 		      const volatile int *cv)
201cb2fa84Srillig {
216173d74cSrillig 	/* expect+1: ... 'pointer to int' ... */
221cb2fa84Srillig 	sink(cond ? p : p);
23c83f7defSrillig 	/* expect+1: ... 'pointer to const int' ... */
24a4a927acSrillig 	sink(cond ? p : c);
25c83f7defSrillig 	/* expect+1: ... 'pointer to volatile int' ... */
26a4a927acSrillig 	sink(cond ? p : v);
27c83f7defSrillig 	/* expect+1: ... 'pointer to const volatile int' ... */
28a4a927acSrillig 	sink(cond ? p : cv);
291cb2fa84Srillig 
30c83f7defSrillig 	/* expect+1: ... 'pointer to const int' ... */
31a4a927acSrillig 	sink(cond ? c : p);
32c83f7defSrillig 	/* expect+1: ... 'pointer to const int' ... */
33a4a927acSrillig 	sink(cond ? c : c);
34c83f7defSrillig 	/* expect+1: ... 'pointer to const volatile int' ... */
35a4a927acSrillig 	sink(cond ? c : v);
36c83f7defSrillig 	/* expect+1: ... 'pointer to const volatile int' ... */
37a4a927acSrillig 	sink(cond ? c : cv);
381cb2fa84Srillig 
39c83f7defSrillig 	/* expect+1: ... 'pointer to volatile int' ... */
40a4a927acSrillig 	sink(cond ? v : p);
41c83f7defSrillig 	/* expect+1: ... 'pointer to const volatile int' ... */
42a4a927acSrillig 	sink(cond ? v : c);
43c83f7defSrillig 	/* expect+1: ... 'pointer to volatile int' ... */
44a4a927acSrillig 	sink(cond ? v : v);
45c83f7defSrillig 	/* expect+1: ... 'pointer to const volatile int' ... */
46a4a927acSrillig 	sink(cond ? v : cv);
471cb2fa84Srillig 
48c83f7defSrillig 	/* expect+1: ... 'pointer to const volatile int' ... */
49a4a927acSrillig 	sink(cond ? cv : p);
50c83f7defSrillig 	/* expect+1: ... 'pointer to const volatile int' ... */
51a4a927acSrillig 	sink(cond ? cv : c);
52c83f7defSrillig 	/* expect+1: ... 'pointer to const volatile int' ... */
53a4a927acSrillig 	sink(cond ? cv : v);
54c83f7defSrillig 	/* expect+1: ... 'pointer to const volatile int' ... */
55a4a927acSrillig 	sink(cond ? cv : cv);
561cb2fa84Srillig }
576173d74cSrillig 
587c0153f0Srillig /* null pointer constant + other pointer */
597c0153f0Srillig void
c99_6_5_15_p6(_Bool cond,const volatile double * cv_dp)607c0153f0Srillig c99_6_5_15_p6(_Bool cond, const volatile double *cv_dp)
617c0153f0Srillig {
62*d2c16d57Srillig 	/* expect+1: ... 'pointer to const volatile double' ... */
637c0153f0Srillig 	sink(cond ? cv_dp : (void *)0);
64*d2c16d57Srillig 	/* expect+1: ... 'pointer to const volatile double' ... */
657c0153f0Srillig 	sink(cond ? (void *)0 : cv_dp);
667c0153f0Srillig }
677c0153f0Srillig 
686173d74cSrillig void
c99_6_5_15_p8(_Bool cond,const void * c_vp,void * vp,const int * c_ip,volatile int * v_ip,int * ip,const char * c_cp)696173d74cSrillig c99_6_5_15_p8(
706173d74cSrillig     _Bool cond,
716173d74cSrillig     const void *c_vp,
726173d74cSrillig     void *vp,
736173d74cSrillig     const int *c_ip,
746173d74cSrillig     volatile int *v_ip,
756173d74cSrillig     int *ip,
766173d74cSrillig     const char *c_cp
776173d74cSrillig )
786173d74cSrillig {
79*d2c16d57Srillig 	/* expect+1: ... 'pointer to const void' ... */
806173d74cSrillig 	sink(cond ? c_vp : c_ip);
81*d2c16d57Srillig 	/* expect+1: ... 'pointer to const void' ... */
826173d74cSrillig 	sink(cond ? c_ip : c_vp);
836173d74cSrillig 
84*d2c16d57Srillig 	/* expect+1: ... 'pointer to volatile int' ... */
856173d74cSrillig 	sink(cond ? v_ip : 0);
86*d2c16d57Srillig 	/* expect+1: ... 'pointer to volatile int' ... */
876173d74cSrillig 	sink(cond ? 0 : v_ip);
886173d74cSrillig 
89*d2c16d57Srillig 	/* expect+1: ... 'pointer to const volatile int' ... */
906173d74cSrillig 	sink(cond ? c_ip : v_ip);
91*d2c16d57Srillig 	/* expect+1: ... 'pointer to const volatile int' ... */
926173d74cSrillig 	sink(cond ? v_ip : c_ip);
936173d74cSrillig 
94*d2c16d57Srillig 	/* expect+1: ... 'pointer to const void' ... */
956173d74cSrillig 	sink(cond ? vp : c_cp);
96*d2c16d57Srillig 	/* expect+1: ... 'pointer to const void' ... */
976173d74cSrillig 	sink(cond ? c_cp : vp);
986173d74cSrillig 
99*d2c16d57Srillig 	/* expect+1: ... 'pointer to const int' ... */
1006173d74cSrillig 	sink(cond ? ip : c_ip);
101*d2c16d57Srillig 	/* expect+1: ... 'pointer to const int' ... */
1026173d74cSrillig 	sink(cond ? c_ip : ip);
1036173d74cSrillig 
104*d2c16d57Srillig 	/* expect+1: ... 'pointer to void' ... */
1056173d74cSrillig 	sink(cond ? vp : ip);
106*d2c16d57Srillig 	/* expect+1: ... 'pointer to void' ... */
1076173d74cSrillig 	sink(cond ? ip : vp);
1086173d74cSrillig }
109