blob: ed02fa618e8ee69e6cf91d891c17681e8b48d4be [file] [log] [blame]
Howard Hinnant3e519522010-05-11 19:42:16 +00001//===----------------------------------------------------------------------===//
2//
Howard Hinnant5b08a8a2010-05-11 21:36:01 +00003// The LLVM Compiler Infrastructure
Howard Hinnant3e519522010-05-11 19:42:16 +00004//
Howard Hinnant412dbeb2010-11-16 22:09:02 +00005// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
Howard Hinnant3e519522010-05-11 19:42:16 +00007//
8//===----------------------------------------------------------------------===//
Howard Hinnantb5a4c50a2010-08-22 00:31:12 +00009
Howard Hinnant3e519522010-05-11 19:42:16 +000010// test set_unexpected
11
12#include <exception>
13#include <cassert>
Nick Kledzik749c7582010-05-14 20:17:42 +000014#include <cstdlib>
Howard Hinnant3e519522010-05-11 19:42:16 +000015
16void f1() {}
17void f2() {}
18
Nick Kledzik749c7582010-05-14 20:17:42 +000019void f3()
20{
21 std::exit(0);
22}
23
Howard Hinnant3e519522010-05-11 19:42:16 +000024int main()
25{
Howard Hinnantfae824a2010-08-22 13:53:14 +000026 std::unexpected_handler old = std::set_unexpected(f1);
Nick Kledzik749c7582010-05-14 20:17:42 +000027 // verify there is a previous unexpected handler
Howard Hinnantfae824a2010-08-22 13:53:14 +000028 assert(old);
29 // verify f1 was replace with f2
Howard Hinnantb5a4c50a2010-08-22 00:31:12 +000030 assert(std::set_unexpected(f2) == f1);
Howard Hinnantfae824a2010-08-22 13:53:14 +000031 // verify calling original unexpected handler calls terminate
32 std::set_terminate(f3);
33 (*old)();
34 assert(0);
Howard Hinnant3e519522010-05-11 19:42:16 +000035}