blob: 8d961f4bae335e839c9be1b0a5ce36e5a4ed0624 [file] [log] [blame]
/*
* Copyright (c) 2013 The Native Client Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include <stdio.h>
#include <stdlib.h>
#include <exception>
#include "native_client/src/include/nacl_compiler_annotations.h"
// This test checks that C++ destructors are not called when an
// uncaught exception occurs.
//
// The C++ standard makes it optional whether destructors are called
// in this situation. It is more convenient for debugging if
// destructors are not called, because unwinding the stack to call
// them would lose the context of where the uncaught exception was
// thrown from.
static void terminate_handler() {
fprintf(stderr, "std::terminate() called as expected\n");
// Indicate success.
exit(55);
}
class ObjWithDtor {
public:
~ObjWithDtor() {
fprintf(stderr, "Error: Destructor called unexpectedly\n");
exit(1);
}
};
int main() {
std::set_terminate(terminate_handler);
ObjWithDtor obj;
UNREFERENCED_PARAMETER(obj);
throw 1;
return 1;
}