(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
avr/
pr71676-3.c
       1  /* { dg-do run } */
       2  /* { dg-options "-Os -fno-tree-switch-conversion" } */
       3  
       4  #define MK_FUN(NAME, TYP, V)                            \
       5    static __inline__ __attribute__((always_inline))      \
       6    unsigned char value_## NAME (TYP x, unsigned char y)  \
       7    {                                                     \
       8      switch (x)                                          \
       9        {                                                 \
      10        case V + 0: return 0 + y;                         \
      11        case V + 1: return 1;                             \
      12        case V + 2: return 2 + y;                         \
      13        case V + 3: return 3;                             \
      14        case V + 4: return 4 + y;                         \
      15        case V + 5: return 5;                             \
      16        case V + 6: return 6 + y;                         \
      17        case V + 7: return 7;                             \
      18        case V + 8: return 8 + y;                         \
      19        case V + 9: return 9;                             \
      20        case V + 10: return 10 + y;                       \
      21        case V + 11: return 11;                           \
      22        case V + 12: return 12 + y;                       \
      23        case V + 13: return 13;                           \
      24        case V + 14: return 14 + y;                       \
      25        case V + 15: return 15;                           \
      26        }                                                 \
      27      return x;                                           \
      28    }                                                     \
      29                                                          \
      30    __attribute__((noinline,noclone))                     \
      31    unsigned char select_## NAME (TYP x, unsigned char y) \
      32    {                                                     \
      33      return value_## NAME (x, y);                        \
      34    }                                                     \
      35                                                          \
      36    static __inline__ __attribute__((always_inline))      \
      37    void test1_## NAME (TYP x)                            \
      38    {                                                     \
      39      if (select_## NAME (x, 0) != value_## NAME (x, 0))  \
      40        __builtin_abort();                                \
      41    }                                                     \
      42                                                          \
      43    void test_## NAME (void)                              \
      44    {                                                     \
      45      test1_## NAME (V);                                  \
      46      test1_## NAME (V - 1);                              \
      47      test1_## NAME (V + 15);                             \
      48      test1_## NAME (V + 16);                             \
      49    }
      50  
      51  MK_FUN (0_s8, signed char, 0)
      52  MK_FUN (0_u8, unsigned char, 0)
      53  MK_FUN (0_s16, signed int, 0)
      54  MK_FUN (0_u16, unsigned int, 0)
      55  
      56  MK_FUN (m4_s8, signed char, -4)
      57  MK_FUN (m4_s16, signed int, -4)
      58  
      59  MK_FUN (4_s8, signed char, 4)
      60  MK_FUN (4_u8, unsigned char, 4)
      61  MK_FUN (4_s16, signed int, 4)
      62  MK_FUN (4_u16, unsigned int, 4)
      63  
      64  int main (void)
      65  {
      66    test_0_s8();
      67    test_0_u8();
      68    test_0_s16();
      69    test_0_u16();
      70  
      71    test_m4_s8();
      72    test_m4_s16();
      73  
      74    test_4_s8();
      75    test_4_u8();
      76    test_4_s16();
      77    test_4_u16();
      78  
      79    return 0;
      80  }