https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86769

--- Comment #5 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Further poking revealed that the patch above mishandles

// PR c++/86769
// { dg-do run }

#define assert(X) do { if (!(X)) __builtin_abort(); } while(0)

int g;

struct X {
  X() { g++; }
  ~X() { g--; }
  operator bool() { return g == 0; }
};

void
check_live ()
{
  assert (g > 0);
}

void
check_dead ()
{
  assert (g == 0);
}

void f(X &) { assert (!g); }

int
main ()
{
  for (int i = 0; i < 1; ++i, check_dead ())
    {
      X x = X();
      check_live ();
    }
}

So saving it here lest I lose it.

Reply via email to