op_colon.c revision 1.5 1 /* $NetBSD: op_colon.c,v 1.5 2023/01/04 05:08:22 rillig Exp $ */
2 # 3 "op_colon.c"
3
4 /*
5 * Test handling of the operator ':', as part of the '?:'.
6 */
7
8 /* lint1-extra-flags: -p */
9
10 struct canary {
11 int member;
12 };
13
14 void
15 sink(struct canary);
16
17 void
18 test_merge_qualifiers(_Bool cond, int *p, const int *c, volatile int *v,
19 const volatile int *cv)
20 {
21 /* expect+1: ... 'pointer to int' ... */
22 sink(cond ? p : p);
23 /* expect+1: ... 'pointer to const int' ... */
24 sink(cond ? p : c);
25 /* expect+1: ... 'pointer to volatile int' ... */
26 sink(cond ? p : v);
27 /* expect+1: ... 'pointer to const volatile int' ... */
28 sink(cond ? p : cv);
29
30 /* expect+1: ... 'pointer to const int' ... */
31 sink(cond ? c : p);
32 /* expect+1: ... 'pointer to const int' ... */
33 sink(cond ? c : c);
34 /* expect+1: ... 'pointer to const volatile int' ... */
35 sink(cond ? c : v);
36 /* expect+1: ... 'pointer to const volatile int' ... */
37 sink(cond ? c : cv);
38
39 /* expect+1: ... 'pointer to volatile int' ... */
40 sink(cond ? v : p);
41 /* expect+1: ... 'pointer to const volatile int' ... */
42 sink(cond ? v : c);
43 /* expect+1: ... 'pointer to volatile int' ... */
44 sink(cond ? v : v);
45 /* expect+1: ... 'pointer to const volatile int' ... */
46 sink(cond ? v : cv);
47
48 /* expect+1: ... 'pointer to const volatile int' ... */
49 sink(cond ? cv : p);
50 /* expect+1: ... 'pointer to const volatile int' ... */
51 sink(cond ? cv : c);
52 /* expect+1: ... 'pointer to const volatile int' ... */
53 sink(cond ? cv : v);
54 /* expect+1: ... 'pointer to const volatile int' ... */
55 sink(cond ? cv : cv);
56 }
57
58 void
59 c99_6_5_15_p8(
60 _Bool cond,
61 const void *c_vp,
62 void *vp,
63 const int *c_ip,
64 volatile int *v_ip,
65 int *ip,
66 const char *c_cp
67 )
68 {
69 /* expect+2: ... 'pointer to const void' ... */
70 /* expect+2: ... 'pointer to const void' ... */
71 sink(cond ? c_vp : c_ip);
72 sink(cond ? c_ip : c_vp);
73
74 /* expect+2: ... 'pointer to volatile int' ... */
75 /* expect+2: ... 'pointer to volatile int' ... */
76 sink(cond ? v_ip : 0);
77 sink(cond ? 0 : v_ip);
78
79 /* expect+2: ... 'pointer to const volatile int' ... */
80 /* expect+2: ... 'pointer to const volatile int' ... */
81 sink(cond ? c_ip : v_ip);
82 sink(cond ? v_ip : c_ip);
83
84 /* expect+2: ... 'pointer to const void' ... */
85 /* expect+2: ... 'pointer to const void' ... */
86 sink(cond ? vp : c_cp);
87 sink(cond ? c_cp : vp);
88
89 /* expect+2: ... 'pointer to const int' ... */
90 /* expect+2: ... 'pointer to const int' ... */
91 sink(cond ? ip : c_ip);
92 sink(cond ? c_ip : ip);
93
94 /* expect+2: ... 'pointer to void' ... */
95 /* expect+2: ... 'pointer to void' ... */
96 sink(cond ? vp : ip);
97 sink(cond ? ip : vp);
98 }
99