1  /* { dg-do run } */
       2  /* { dg-options "-std=gnu99" } */
       3  
       4  #include <stdlib.h>
       5  #include <stdarg.h>
       6  
       7  #ifndef __FLASH
       8  #define __flash /* empty */
       9  #define __memx  /* empty */
      10  #endif
      11  
      12  #define NC __attribute__((noinline,noclone))
      13  
      14  void NC vfun (char n, ...)
      15  {
      16    va_list ap;
      17  
      18    va_start (ap, n);
      19  
      20    switch (n)
      21      {
      22      default:
      23        abort();
      24      case 1:
      25        if (11 != va_arg (ap, int))
      26          abort();
      27        break;
      28      case 2:
      29        if (2222 != va_arg (ap, int))
      30          abort();
      31        break;
      32      case 3:
      33        if (333333 != va_arg (ap, __int24))
      34          abort();
      35        break;
      36      case 4:
      37        if (44444444 != va_arg (ap, long))
      38          abort();
      39        break;
      40      case 8:
      41        if (8888888888888888 != va_arg (ap, long long))
      42          abort();
      43        break;
      44      }
      45  
      46    va_end (ap);
      47  }
      48  
      49  
      50  void NC boo_qi (const __flash char *p)
      51  {
      52    vfun (1, *p);
      53  }
      54  
      55  void NC boox_qi (const __memx char *p)
      56  {
      57    vfun (1, *p);
      58  }
      59  
      60  void NC boo_hi (const __flash int *p)
      61  {
      62    vfun (2, *p);
      63  }
      64  
      65  void NC boox_hi (const __memx int *p)
      66  {
      67    vfun (2, *p);
      68  }
      69  
      70  void NC boo_psi (const __flash __int24 *p)
      71  {
      72    vfun (3, *p);
      73  }
      74  
      75  void NC boox_psi (const __memx __int24 *p)
      76  {
      77    vfun (3, *p);
      78  }
      79  
      80  void NC boo_si (const __flash long *p)
      81  {
      82    vfun (4, *p);
      83  }
      84  
      85  void NC boox_si (const __memx long *p)
      86  {
      87    vfun (4, *p);
      88  }
      89  
      90  void NC boo_di (const __flash long long *p)
      91  {
      92    vfun (8, *p);
      93  }
      94  
      95  void NC boox_di (const __memx long long *p)
      96  {
      97    vfun (8, *p);
      98  }
      99  
     100  const __flash char f_qi = 11;
     101  const __flash int f_hi = 2222;
     102  const __flash __int24 f_psi = 333333;
     103  const __flash long f_si = 44444444;
     104  const __flash long long f_di = 8888888888888888;
     105  
     106  const __memx char x_qi = 11;
     107  const __memx int x_hi = 2222;
     108  const __memx __int24 x_psi = 333333;
     109  const __memx long x_si = 44444444;
     110  const __memx long long x_di = 8888888888888888;
     111  
     112  char r_qi = 11;
     113  int r_hi = 2222;
     114  __int24 r_psi = 333333;
     115  long r_si = 44444444;
     116  long long r_di = 8888888888888888;
     117  
     118  int main (void)
     119  {
     120    boo_qi (&f_qi);
     121    boo_hi (&f_hi);
     122    boo_psi (&f_psi);
     123    boo_si (&f_si);
     124    boo_di (&f_di);
     125  
     126    boox_qi (&x_qi);
     127    boox_hi (&x_hi);
     128    boox_psi (&x_psi);
     129    boox_si (&x_si);
     130    boox_di (&x_di);
     131  
     132    boox_qi (&r_qi);
     133    boox_hi (&r_hi);
     134    boox_psi (&r_psi);
     135    boox_si (&r_si);
     136    boox_di (&r_di);
     137  
     138    exit (0);
     139  }