omit-destructor-call-scope.C   [plain text]


/* APPLE LOCAL file 5559195 */
// { dg-do compile }
// { dg-final { scan-assembler-not "(\tcall|\tbl)\[ 	\]*__ZN6ClassAD1Ev" } }
// { dg-final { scan-assembler "(\tcall|\tbl)\[ 	\]*__ZN6ClassBD1Ev" } }

// Verify that implicit calls to empty destructors are omitted and implicit
// calls to non-empty destructors are not omitted when instances fall out of
// scope.

int n;

class ClassA {
public:
  // Empty destructor.  Should not be called when ClassA instance falls out
  // of scope.
  ~ClassA() {}
};

class ClassB {
public:
  // Non-empty destructor.  Should be called when ClassB instance falls out
  // of scope.
  ~ClassB() {
    n = 0;
  }
};

int
main() {
  n = 1;
  {
    ClassA a; // Destructor not called.
    ClassB b; // Destructor called.
  }
  return n;
}