1  /* { dg-do run } */
       2  
       3  #define NI __attribute__((noinline, noclone))
       4  
       5  typedef __INT8_TYPE__ s8;
       6  typedef __INT16_TYPE__ s16;
       7  typedef __int24 s24;
       8  typedef __INT32_TYPE__ s32;
       9  
      10  static const s8 arr8[] = { 12, 23, 34 };
      11  static const s16 arr16[] = { 123, 234, 345 };
      12  static const s24 arr24[] = { 1234, 2345, 3456 };
      13  static const s32 arr32[] = { 12345, 23456, 34567 };
      14  
      15  NI s8  add8  (const s8  *p) { return p[0] + p[1] + p[2]; }
      16  NI s16 add16 (const s16 *p) { return p[0] + p[1] + p[2]; }
      17  NI s24 add24 (const s24 *p) { return p[0] + p[1] + p[2]; }
      18  NI s32 add32 (const s32 *p) { return p[0] + p[1] + p[2]; }
      19  
      20  void test8 (void)
      21  {
      22    if (add8 (arr8) != arr8[0] + arr8[1] + arr8[2])
      23      __builtin_abort();
      24  }
      25  
      26  void test16 (void)
      27  {
      28    if (add16 (arr16) != arr16[0] + arr16[1] + arr16[2])
      29      __builtin_abort();
      30  }
      31  
      32  void test24 (void)
      33  {
      34    if (add24 (arr24) != arr24[0] + arr24[1] + arr24[2])
      35      __builtin_abort();
      36  }
      37  
      38  void test32 (void)
      39  {
      40    if (add32 (arr32) != arr32[0] + arr32[1] + arr32[2])
      41      __builtin_abort();
      42  }
      43  
      44  int main (void)
      45  {
      46    test8();
      47    test16();
      48    test24();
      49    test32();
      50  
      51    return 0;
      52  }