op_colon.c revision 1.4 1 1.4 rillig /* $NetBSD: op_colon.c,v 1.4 2023/01/03 22:02:20 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.4 rillig struct unknown {
11 1.4 rillig int member;
12 1.4 rillig };
13 1.4 rillig
14 1.4 rillig void
15 1.4 rillig sink(struct unknown *);
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.4 rillig void
59 1.4 rillig c99_6_5_15_p8(
60 1.4 rillig _Bool cond,
61 1.4 rillig const void *c_vp,
62 1.4 rillig void *vp,
63 1.4 rillig const int *c_ip,
64 1.4 rillig volatile int *v_ip,
65 1.4 rillig int *ip,
66 1.4 rillig const char *c_cp
67 1.4 rillig )
68 1.4 rillig {
69 1.4 rillig /* FIXME: expect+2: ... 'pointer to const void' ... */
70 1.4 rillig /* FIXME: expect+2: ... 'pointer to const void' ... */
71 1.4 rillig /* expect+2: ... 'pointer to const int' ... */
72 1.4 rillig /* expect+2: ... 'pointer to const int' ... */
73 1.4 rillig sink(cond ? c_vp : c_ip);
74 1.4 rillig sink(cond ? c_ip : c_vp);
75 1.4 rillig
76 1.4 rillig /* expect+2: ... 'pointer to volatile int' ... */
77 1.4 rillig /* expect+2: ... 'pointer to volatile int' ... */
78 1.4 rillig sink(cond ? v_ip : 0);
79 1.4 rillig sink(cond ? 0 : v_ip);
80 1.4 rillig
81 1.4 rillig /* expect+2: ... 'pointer to const volatile int' ... */
82 1.4 rillig /* expect+2: ... 'pointer to const volatile int' ... */
83 1.4 rillig sink(cond ? c_ip : v_ip);
84 1.4 rillig sink(cond ? v_ip : c_ip);
85 1.4 rillig
86 1.4 rillig /* FIXME: expect+2: ... 'pointer to const void' ... */
87 1.4 rillig /* FIXME: expect+2: ... 'pointer to const void' ... */
88 1.4 rillig /* expect+2: ... 'pointer to const char' ... */
89 1.4 rillig /* expect+2: ... 'pointer to const char' ... */
90 1.4 rillig sink(cond ? vp : c_cp);
91 1.4 rillig sink(cond ? c_cp : vp);
92 1.4 rillig
93 1.4 rillig /* expect+2: ... 'pointer to const int' ... */
94 1.4 rillig /* expect+2: ... 'pointer to const int' ... */
95 1.4 rillig sink(cond ? ip : c_ip);
96 1.4 rillig sink(cond ? c_ip : ip);
97 1.4 rillig
98 1.4 rillig /* FIXME: expect+2: ... 'pointer to void' ... */
99 1.4 rillig /* FIXME: expect+2: ... 'pointer to void' ... */
100 1.4 rillig /* expect+2: ... 'pointer to int' ... */
101 1.4 rillig /* expect+2: ... 'pointer to int' ... */
102 1.4 rillig sink(cond ? vp : ip);
103 1.4 rillig sink(cond ? ip : vp);
104 1.4 rillig }
105