Home | History | Annotate | Line # | Download | only in lint1
      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