/* { dg-do compile } */
/* { dg-options "-O2 -mlra" } */

typedef int int8_t __attribute__ ((__mode__ (__QI__)));
typedef int int16_t __attribute__ ((__mode__ (__HI__)));
typedef int int32_t __attribute__ ((__mode__ (__SI__)));
typedef int int64_t __attribute__ ((__mode__ (__DI__)));
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
__extension__ typedef unsigned long long int uint64_t;
typedef int intptr_t;
typedef struct BigStruct{
  uint8_t a;
  int8_t b;
  uint16_t c;
  int16_t d;
  uint32_t e;
  int32_t f;
  uint64_t g;
  int64_t h;
  float i;
  double j;
  long double k;
  char* l;
  uint8_t m;
  int8_t n;
  uint16_t o;
  int16_t p;
  uint32_t q;
  int32_t r;
  uint64_t s;
  int64_t t;
  float u;
  double v;
  long double w;
  char* x;
  uint8_t y;
  int8_t z;
  uint16_t aa;
  int16_t bb;
  uint32_t cc;
  int32_t dd;
  uint64_t ee;
  int64_t ff;
  float gg;
  double hh;
  long double ii;
  char* jj;
  uint8_t kk;
  int8_t ll;
  uint16_t mm;
  int16_t nn;
  uint32_t oo;
  int32_t pp;
  uint64_t qq;
  int64_t rr;
  float ss;
  double tt;
  long double uu;
  char* vv;
  uint8_t ww;
  int8_t xx;
}  BigStruct;

extern void foobar();

void
test_large_fn (uint8_t ui8_1, int8_t si8_1, uint16_t ui16_1, int16_t si16_1,
	       uint32_t ui32_1, int32_t si32_1, uint64_t ui64_1, int64_t si64_1,
	       float f_1, double d_1, long double ld_1, char* p_1,
	       uint8_t ui8_2, int8_t si8_2, uint16_t ui16_2, int16_t si16_2,
	       uint32_t ui32_2, int32_t si32_2, uint64_t ui64_2, int64_t si64_2,
	       float f_2, double d_2, long double ld_2, char* p_2,
	       uint8_t ui8_3, int8_t si8_3, uint16_t ui16_3, int16_t si16_3,
	       uint32_t ui32_3, int32_t si32_3, uint64_t ui64_3, int64_t si64_3,
	       float f_3, double d_3, long double ld_3, char* p_3,
	       uint8_t ui8_4, int8_t si8_4, uint16_t ui16_4, int16_t si16_4,
	       uint32_t ui32_4, int32_t si32_4, uint64_t ui64_4, int64_t si64_4,
	       float f_4, double d_4, long double ld_4, char* p_4,
	       uint8_t ui8_5, int8_t si8_5)
{
    BigStruct retVal =
      {
	ui8_1 + 1, si8_1 + 1, ui16_1 + 1, si16_1 + 1,
	ui32_1 + 1, si32_1 + 1, ui64_1 + 1, si64_1 + 1,
	f_1 + 1, d_1 + 1, ld_1 + 1, (char*)((intptr_t)p_1 + 1),
	ui8_2 + 2, si8_2 + 2, ui16_2 + 2, si16_2 + 2,
	ui32_2 + 2, si32_2 + 2, ui64_2 + 2, si64_2 + 2,
	f_2 + 2, d_2 + 2, ld_2 + 2, (char*)((intptr_t)p_2 + 2),
	ui8_3 + 3, si8_3 + 3, ui16_3 + 3, si16_3 + 3,
	ui32_3 + 3, si32_3 + 3, ui64_3 + 3, si64_3 + 3,
	f_3 + 3, d_3 + 3, ld_3 + 3, (char*)((intptr_t)p_3 + 3),
	ui8_4 + 4, si8_4 + 4, ui16_4 + 4, si16_4 + 4,
	ui32_4 + 4, si32_4 + 4, ui64_4 + 4, si64_4 + 4,
	f_4 + 4, d_4 + 4, ld_4 + 4, (char*)((intptr_t)p_4 + 4),
	ui8_5 + 5, si8_5 + 5
      };

    foobar ("%" "u" " %" "d" " %hu %hd %u %d %" "ll" "u" " %" "ll" "d"
	      " %.0f %.0f %.0Lf %#lx " "%" "u" " %" "d" " %hu %hd %u %d %"
	      "ll" "u" " %" "ll" "d" " %.0f %.0f %.0Lf %#lx " "%" "u"
	      " %" "d" " %hu %hd %u %d %" "ll" "u" " %" "ll" "d"
	      " %.0f %.0f %.0Lf %#lx " "%" "u" " %" "d" " %hu %hd %u %d %"
	      "ll" "u" " %" "ll" "d" " %.0f %.0f %.0Lf %#lx %" "u" " %"
	      "d" ": " "%" "u" " %" "d" " %hu %hd %u %d %" "ll" "u" " %"
	      "ll" "d" " %.0f %.0f %.0Lf %#lx " "%" "u" " %" "d"
	      " %hu %hd %u %d %" "ll" "u" " %" "ll" "d" " %.0f %.0f %.0Lf %#lx "
	      "%" "u" " %" "d" " %hu %hd %u %d %" "ll" "u" " %" "ll" "d"
	      " %.0f %.0f %.0Lf %#lx " "%" "u" " %" "d" " %hu %hd %u %d %"
	    "ll" "u" " %" "ll" "d" " %.0f %.0f %.0Lf %#lx %" "u" " %" "d" "\n",
	    ui8_1, si8_1, ui16_1, si16_1, ui32_1, si32_1, ui64_1, si64_1,
	    f_1, d_1, ld_1, (unsigned long)p_1, ui8_2, si8_2, ui16_2, si16_2,
	    ui32_2, si32_2, ui64_2, si64_2, f_2, d_2, ld_2, (unsigned long)p_2,
	    ui8_3, si8_3, ui16_3, si16_3, ui32_3, si32_3, ui64_3, si64_3, f_3,
	    d_3, ld_3, (unsigned long)p_3, ui8_4, si8_4, ui16_4, si16_4, ui32_4,
	    si32_4, ui64_4, si64_4, f_4, d_4, ld_4, (unsigned long)p_4, ui8_5,
	    si8_5, retVal.a, retVal.b, retVal.c, retVal.d, retVal.e, retVal.f,
	    retVal.g, retVal.h, retVal.i, retVal.j, retVal.k,
	    (unsigned long)retVal.l, retVal.m, retVal.n, retVal.o, retVal.p,
	    retVal.q, retVal.r, retVal.s, retVal.t, retVal.u, retVal.v,
	    retVal.w, (unsigned long)retVal.x, retVal.y, retVal.z, retVal.aa,
	    retVal.bb, retVal.cc, retVal.dd, retVal.ee, retVal.ff, retVal.gg,
	    retVal.hh, retVal.ii, (unsigned long)retVal.jj, retVal.kk,
	    retVal.ll, retVal.mm, retVal.nn, retVal.oo, retVal.pp, retVal.qq,
	    retVal.rr, retVal.ss, retVal.tt, retVal.uu, (unsigned long)retVal.vv,
	    retVal.ww, retVal.xx);
}
