(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
pr89888.c
       1  /* PR c/89888 */
       2  /* { dg-do compile { target { int32 } } } */
       3  /* { dg-options "" } */
       4  
       5  long long y;
       6  
       7  void
       8  foo (unsigned char x)
       9  {
      10    switch (x)
      11      {
      12      case -1: y = -1; break;			/* { dg-message "previously used here" } */
      13  						/* { dg-warning "case label value is less than minimum value for type" "" { target *-*-* } .-1 } */
      14      case 0xffffffff: y = 0xffffffff; break;	/* { dg-error "duplicate case value|narrowing" } */
      15      case ~0U: y = ~0U; break;			/* { dg-error "duplicate case value|narrowing" } */
      16      }
      17  }
      18  
      19  void
      20  bar (unsigned char x)
      21  {
      22    switch (x)
      23      {
      24      case -1: y = -1; break;			/* { dg-message "previously used here" } */
      25  						/* { dg-warning "case label value is less than minimum value for type" "" { target *-*-* } .-1  } */
      26      case -1: y = -1; break;			/* { dg-error "duplicate case value" } */
      27      case -1: y = -1; break;			/* { dg-error "duplicate case value" } */
      28      }
      29  }
      30  
      31  void
      32  baz (unsigned char x)
      33  {
      34    switch (x)
      35      {
      36      case -7: y = -7; break;			/* { dg-warning "case label value is less than minimum value for type" } */
      37      case -5 ... 2: y = -5; break;		/* { dg-warning "lower value in case label range less than minimum value for type" } */
      38      case 18: y = 18; break;
      39      case (unsigned char) -2 ... 4 + (unsigned char) -2: y = 2; break;	/* { dg-warning "upper value in case label range exceeds maximum value for type" } */
      40      case 24 + (unsigned char) -2: y = 3; break;	/* { dg-warning "case label value exceeds maximum value for type" } */
      41      }
      42  }
      43  
      44  void
      45  qux (unsigned char x)
      46  {
      47    switch (x)
      48      {
      49      case (unsigned char) -1 ... 1 + (unsigned char) -1: y = 2; break;	/* { dg-warning "upper value in case label range exceeds maximum value for type" } */
      50      case -12: y = -7; break;			/* { dg-warning "case label value is less than minimum value for type" } */
      51      case 18: y = 18; break;
      52      case 27 + (unsigned char) -1: y = 3; break;	/* { dg-warning "case label value exceeds maximum value for type" } */
      53      case -1 ... 0: y = -5; break;		/* { dg-warning "lower value in case label range less than minimum value for type" } */
      54      }
      55  }
      56  
      57  void
      58  quux (unsigned char x)
      59  {
      60    switch (x)
      61      {
      62      case (unsigned char) -2 ... (unsigned char) -1: y = 2; break;
      63      case 18: y = 18; break;
      64      case 1 + (unsigned char) -1: y = 3; break;	/* { dg-warning "case label value exceeds maximum value for type" } */
      65      case -2 ... -1: y = -5; break;		/* { dg-warning "case label value is less than minimum value for type" } */
      66      }
      67  }