xref: /llvm-project/libcxxabi/test/cxa_call_terminate.pass.cpp (revision 0c9f537d41a118c190ba7677175795329f355148)
1*0c9f537dSNikolas Klauser //===----------------------------------------------------------------------===//
2*0c9f537dSNikolas Klauser //
3*0c9f537dSNikolas Klauser // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*0c9f537dSNikolas Klauser // See https://llvm.org/LICENSE.txt for license information.
5*0c9f537dSNikolas Klauser // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*0c9f537dSNikolas Klauser //
7*0c9f537dSNikolas Klauser //===----------------------------------------------------------------------===//
8*0c9f537dSNikolas Klauser 
9*0c9f537dSNikolas Klauser // UNSUPPORTED: no-exceptions
10*0c9f537dSNikolas Klauser 
11*0c9f537dSNikolas Klauser // We're testing the diagnosed behaviour here.
12*0c9f537dSNikolas Klauser // ADDITIONAL_COMPILE_FLAGS: -Wno-exceptions
13*0c9f537dSNikolas Klauser 
14*0c9f537dSNikolas Klauser #include <cassert>
15*0c9f537dSNikolas Klauser #include <cstdlib>
16*0c9f537dSNikolas Klauser #include <exception>
17*0c9f537dSNikolas Klauser 
18*0c9f537dSNikolas Klauser #include "test_macros.h"
19*0c9f537dSNikolas Klauser 
func()20*0c9f537dSNikolas Klauser void func() TEST_NOEXCEPT {
21*0c9f537dSNikolas Klauser   try {
22*0c9f537dSNikolas Klauser     throw 1;
23*0c9f537dSNikolas Klauser   } catch (float) {
24*0c9f537dSNikolas Klauser   }
25*0c9f537dSNikolas Klauser }
26*0c9f537dSNikolas Klauser 
terminate_handler()27*0c9f537dSNikolas Klauser void terminate_handler() {
28*0c9f537dSNikolas Klauser   assert(std::current_exception() != nullptr);
29*0c9f537dSNikolas Klauser   std::exit(0);
30*0c9f537dSNikolas Klauser }
31*0c9f537dSNikolas Klauser 
main(int,char **)32*0c9f537dSNikolas Klauser int main(int, char**) {
33*0c9f537dSNikolas Klauser   std::set_terminate(terminate_handler);
34*0c9f537dSNikolas Klauser   func();
35*0c9f537dSNikolas Klauser   assert(false);
36*0c9f537dSNikolas Klauser }
37