llvm-project

Форк
0
/
catch_pointer_nullptr.pass.cpp 
77 строк · 1.3 Кб
1
//===----------------------------------------------------------------------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8

9
// UNSUPPORTED: c++03
10
// UNSUPPORTED: no-exceptions
11

12
#include <cassert>
13
#include <cstdlib>
14

15
struct A {};
16

17
void test1()
18
{
19
    try
20
    {
21
        throw nullptr;
22
        assert(false);
23
    }
24
    catch (int* p)
25
    {
26
        assert(!p);
27
    }
28
    catch (long*)
29
    {
30
        assert(false);
31
    }
32
}
33

34
void test2()
35
{
36
    try
37
    {
38
        throw nullptr;
39
        assert(false);
40
    }
41
    catch (A* p)
42
    {
43
        assert(!p);
44
    }
45
    catch (int*)
46
    {
47
        assert(false);
48
    }
49
}
50

51
template <class Catch>
52
void catch_nullptr_test() {
53
  try {
54
    throw nullptr;
55
    assert(false);
56
  } catch (Catch c) {
57
    assert(!c);
58
  } catch (...) {
59
    assert(false);
60
  }
61
}
62

63

64
int main(int, char**)
65
{
66
  // catch naked nullptrs
67
  test1();
68
  test2();
69

70
  catch_nullptr_test<int*>();
71
  catch_nullptr_test<int**>();
72
  catch_nullptr_test<int A::*>();
73
  catch_nullptr_test<const int A::*>();
74
  catch_nullptr_test<int A::**>();
75

76
  return 0;
77
}
78

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.