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