// PR optimization/5547
// This testcase caused ICE on IA-32, since DWARF-2 was unable
// to emit location expression for parameter a of operator+.
// { dg-do compile { target fpic } }
// { dg-options "-fpic" }

struct A { char *s; };

inline A operator+ (char a, const A &b)
{
  A s;
  s.s = new char[12];
  s.s[0] = a;
  return s;
}

int b (const A &);

void test1 (const A &x, int y)
{
  int j = b ("012345"[y] + x);
  for (int i = 0; i < y; i++);
}

void test2 (const A &x, int y)
{
  int j = b ("012345678"[y + 2] + x);
  for (int i = 0; i < y; i++);
}

void test3 (const A &x, int y)
{
  int j = b ("012345678"[y - 6] + x);
  for (int i = 0; i < y; i++);
}

void test4 (const A &x, int y)
{
  int j = b ("012345678"[2 * y - 10] + x);
  for (int i = 0; i < y; i++);
}

void test5 (const A &x, int y)
{
  int j = b ("012345678"[4 * y] + x);
  for (int i = 0; i < y; i++);
}
