// PR tree-optimization/42890
// { dg-do compile }

extern "C" int puts (const char *) throw ();

struct S
{
  const char *a;
  const char **b;
  S (const char *s) { a = s; b = &a; }
  ~S () { puts (a); }
};

void
foo (int (*fn) (const char *))
{
  S a ("foo");
  fn ("bar");
}

int
main ()
{
  foo (puts);
}