1 1.8 rillig /* $NetBSD: op_colon.c,v 1.8 2024/01/28 08:17:27 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.7 rillig /* lint1-extra-flags: -p -X 351 */ 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.8 rillig /* expect+1: ... 'pointer to const volatile double' ... */ 63 1.6 rillig sink(cond ? cv_dp : (void *)0); 64 1.8 rillig /* expect+1: ... 'pointer to const volatile double' ... */ 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.8 rillig /* expect+1: ... 'pointer to const void' ... */ 80 1.4 rillig sink(cond ? c_vp : c_ip); 81 1.8 rillig /* expect+1: ... 'pointer to const void' ... */ 82 1.4 rillig sink(cond ? c_ip : c_vp); 83 1.4 rillig 84 1.8 rillig /* expect+1: ... 'pointer to volatile int' ... */ 85 1.4 rillig sink(cond ? v_ip : 0); 86 1.8 rillig /* expect+1: ... 'pointer to volatile int' ... */ 87 1.4 rillig sink(cond ? 0 : v_ip); 88 1.4 rillig 89 1.8 rillig /* expect+1: ... 'pointer to const volatile int' ... */ 90 1.4 rillig sink(cond ? c_ip : v_ip); 91 1.8 rillig /* expect+1: ... 'pointer to const volatile int' ... */ 92 1.4 rillig sink(cond ? v_ip : c_ip); 93 1.4 rillig 94 1.8 rillig /* expect+1: ... 'pointer to const void' ... */ 95 1.4 rillig sink(cond ? vp : c_cp); 96 1.8 rillig /* expect+1: ... 'pointer to const void' ... */ 97 1.4 rillig sink(cond ? c_cp : vp); 98 1.4 rillig 99 1.8 rillig /* expect+1: ... 'pointer to const int' ... */ 100 1.4 rillig sink(cond ? ip : c_ip); 101 1.8 rillig /* expect+1: ... 'pointer to const int' ... */ 102 1.4 rillig sink(cond ? c_ip : ip); 103 1.4 rillig 104 1.8 rillig /* expect+1: ... 'pointer to void' ... */ 105 1.4 rillig sink(cond ? vp : ip); 106 1.8 rillig /* expect+1: ... 'pointer to void' ... */ 107 1.4 rillig sink(cond ? ip : vp); 108 1.4 rillig } 109