groff1.C   [plain text]


// { dg-do run  }
// PRMS Id: 3744
// Bug: unswitching a COND_EXPR initializer fails to set SIDE_EFFECTS on the
// result, so expand_expr ignores it.

extern "C" {
  int printf(const char *,...);
  void exit(int);
}

struct A {
  int x;
  int y;

  A() : x(0), y(0) { }
};

struct S {
  S() : flags(0) { }
  unsigned flags;
  A from;
  void foo(const A &pos);
};

void S::foo(const A &pos)
{
  A a = flags ? from : pos;
  printf("%d %d\n", a.x, a.y);
  if (a.x != 17 || a.y != 12)
    exit (1);
}

int main()
{
  A pos;
  pos.x = 17;
  pos.y = 12;
  S s;
  s.foo(pos);
  return 0;
}