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