1ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant//===--------------------- catch_pointer_nullptr.cpp ----------------------===//
2ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant//
3ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant//                     The LLVM Compiler Infrastructure
4ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant//
5ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant//
8ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant//===----------------------------------------------------------------------===//
9ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant
10ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant#include <cassert>
11ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant
12ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant#if __has_feature(cxx_nullptr)
13ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant
14ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnantvoid test1()
15ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant{
16ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant    try
17ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant    {
18ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant        throw nullptr;
19ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant        assert(false);
20ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant    }
21ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant    catch (int*)
22ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant    {
23ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant    }
24ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant    catch (long*)
25ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant    {
26ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant        assert(false);
27ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant    }
28ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant}
29ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant
30ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnantstruct A {};
31ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant
32ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnantvoid test2()
33ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant{
34ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant    try
35ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant    {
36ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant        throw nullptr;
37ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant        assert(false);
38ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant    }
39ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant    catch (A*)
40ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant    {
41ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant    }
42ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant    catch (int*)
43ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant    {
44ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant        assert(false);
45ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant    }
46ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant}
47ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant
48ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant#else
49ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant
50ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnantvoid test1()
51ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant{
52ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant}
53ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant
54ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnantvoid test2()
55ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant{
56ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant}
57ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant
58ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant#endif
59ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant
60ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnantint main()
61ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant{
62ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant    test1();
63ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant    test2();
64ebe450533fae286801d85a4cbfd12e0c4ce8f507Howard Hinnant}
65