// ehopt was only copying one statement from the cleanup of the B temporary
// into the following try block, so we lost its destructor call.

// { dg-do run }

template <class T, class U>
class A;

bool b;
int count;

template <>
class A<int, int>
{
public:
  A(int) { ++count; if (b) throw 1; }
  A(const A&) { ++count; if (b) throw 1; }
  ~A()
#if __cplusplus <= 201402L
  throw(int)			// { dg-warning "deprecated" "" { target { c++11 && { ! c++17 } } } }
#else
  noexcept(false)
#endif
  { --count; if (b) throw 1; }
};

typedef A<int, int> B;

template <>
class A<void *, void *>
{
public:
  A() { if (b) throw 1; }
  A(const B&) { if (b) throw 1; }
  ~A()
#if __cplusplus <= 201402L
  throw(int)			// { dg-warning "deprecated" "" { target { c++11 && { ! c++17 } } } }
#else
  noexcept(false)
#endif
  { if (b) throw 1; }
};

typedef A<void *, void *> C;

void f() { if (b) throw 1; }

int
main (void)
{
  {
    C a(1);
    f();
  }
  return count;
}
