(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
pr60439.c
       1  /* PR c/60439 */
       2  /* { dg-do compile } */
       3  /* { dg-prune-output "case label value exceeds" } */
       4  
       5  #ifndef __cplusplus
       6  # define bool _Bool
       7  #endif
       8  
       9  extern bool foo (void);
      10  
      11  void
      12  f1 (bool b)
      13  {
      14    switch (b) /* { dg-warning "switch condition has" } */
      15      {
      16      case 3:
      17        break;
      18      }
      19  }
      20  
      21  void
      22  f2 (int a, int b)
      23  {
      24    switch (a && b) /* { dg-warning "switch condition has" } */
      25      {
      26      case 3:
      27        break;
      28      }
      29    switch ((bool) (a && b)) /* { dg-warning "switch condition has" } */
      30      {
      31      case 3:
      32        break;
      33      }
      34    switch ((a && b) || a) /* { dg-warning "switch condition has" } */
      35      {
      36      case 3:
      37        break;
      38      }
      39    /* No warnings on following.  */
      40    switch ((int) (a && b))
      41      break;
      42    switch ((unsigned int) (a && b))
      43      break;
      44    switch ((unsigned short int) (a && b))
      45      break;
      46    switch ((char) (a && b))
      47      break;
      48  }
      49  
      50  void
      51  f3 (int a)
      52  {
      53    switch (!!a) /* { dg-warning "switch condition has" } */
      54      {
      55      case 3:
      56        break;
      57      }
      58    switch (!a) /* { dg-warning "switch condition has" } */
      59      {
      60      case 3:
      61        break;
      62      }
      63  }
      64  
      65  void
      66  f4 (void)
      67  {
      68    switch (foo ()) /* { dg-warning "switch condition has" } */
      69      {
      70      case 3:
      71        break;
      72      }
      73  }
      74  
      75  void
      76  f5 (int a)
      77  {
      78    switch (a == 3) /* { dg-warning "switch condition has" } */
      79      {
      80      case 3:
      81        break;
      82      }
      83    switch (a != 3) /* { dg-warning "switch condition has" } */
      84      {
      85      case 3:
      86        break;
      87      }
      88    switch (a > 3) /* { dg-warning "switch condition has" } */
      89      {
      90      case 3:
      91        break;
      92      }
      93    switch (a < 3) /* { dg-warning "switch condition has" } */
      94      {
      95      case 3:
      96        break;
      97      }
      98    switch (a <= 3) /* { dg-warning "switch condition has" } */
      99      {
     100      case 3:
     101        break;
     102      }
     103    switch (a >= 3) /* { dg-warning "switch condition has" } */
     104      {
     105      case 3:
     106        break;
     107      }
     108    switch (foo (), foo (), a >= 42) /* { dg-warning "switch condition has" } */
     109      {
     110      case 3:
     111        break;
     112      }
     113    switch (a == 3, a & 4, a ^ 5, a)
     114      break;
     115    switch ((int) (a == 3))
     116      break;
     117    switch ((int) (a != 3))
     118      break;
     119  }
     120  
     121  void
     122  f6 (bool b)
     123  {
     124    switch (b) /* { dg-warning "switch condition has" } */
     125      {
     126      case 3:
     127        break;
     128      }
     129    switch (!b) /* { dg-warning "switch condition has" } */
     130      {
     131      case 3:
     132        break;
     133      }
     134  }
     135  
     136  void
     137  f7 (void)
     138  {
     139    bool b;
     140    switch (b = 1) /* { dg-warning "switch condition has" } */
     141      {
     142      case 3:
     143        break;
     144      }
     145  }
     146  
     147  void
     148  f8 (int i)
     149  {
     150    switch (i)
     151      break;
     152    switch ((int) i)
     153      break;
     154    switch ((unsigned int) i)
     155      break;
     156    switch ((bool) i) /* { dg-warning "switch condition has" } */
     157      {
     158      case 11:
     159        break;
     160      }
     161  }