1 /* $NetBSD: op_colon.c,v 1.8 2024/01/28 08:17:27 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 -X 351 */ 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 /* null pointer constant + other pointer */ 59 void 60 c99_6_5_15_p6(_Bool cond, const volatile double *cv_dp) 61 { 62 /* expect+1: ... 'pointer to const volatile double' ... */ 63 sink(cond ? cv_dp : (void *)0); 64 /* expect+1: ... 'pointer to const volatile double' ... */ 65 sink(cond ? (void *)0 : cv_dp); 66 } 67 68 void 69 c99_6_5_15_p8( 70 _Bool cond, 71 const void *c_vp, 72 void *vp, 73 const int *c_ip, 74 volatile int *v_ip, 75 int *ip, 76 const char *c_cp 77 ) 78 { 79 /* expect+1: ... 'pointer to const void' ... */ 80 sink(cond ? c_vp : c_ip); 81 /* expect+1: ... 'pointer to const void' ... */ 82 sink(cond ? c_ip : c_vp); 83 84 /* expect+1: ... 'pointer to volatile int' ... */ 85 sink(cond ? v_ip : 0); 86 /* expect+1: ... 'pointer to volatile int' ... */ 87 sink(cond ? 0 : v_ip); 88 89 /* expect+1: ... 'pointer to const volatile int' ... */ 90 sink(cond ? c_ip : v_ip); 91 /* expect+1: ... 'pointer to const volatile int' ... */ 92 sink(cond ? v_ip : c_ip); 93 94 /* expect+1: ... 'pointer to const void' ... */ 95 sink(cond ? vp : c_cp); 96 /* expect+1: ... 'pointer to const void' ... */ 97 sink(cond ? c_cp : vp); 98 99 /* expect+1: ... 'pointer to const int' ... */ 100 sink(cond ? ip : c_ip); 101 /* expect+1: ... 'pointer to const int' ... */ 102 sink(cond ? c_ip : ip); 103 104 /* expect+1: ... 'pointer to void' ... */ 105 sink(cond ? vp : ip); 106 /* expect+1: ... 'pointer to void' ... */ 107 sink(cond ? ip : vp); 108 } 109