annotate gcc/testsuite/g++.dg/cpp0x/nullptr35.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // { dg-do run { target c++11 } }
kono
parents:
diff changeset
2
kono
parents:
diff changeset
3 // Test catching as pointer and pointer to member types, [except.handle] p3.
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 extern "C" void abort (void);
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 typedef decltype(nullptr) nullptr_t;
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 int result = 0;
kono
parents:
diff changeset
10
kono
parents:
diff changeset
11 void __attribute__((noinline))
kono
parents:
diff changeset
12 caught(int bit)
kono
parents:
diff changeset
13 {
kono
parents:
diff changeset
14 result |= bit;
kono
parents:
diff changeset
15 }
kono
parents:
diff changeset
16
kono
parents:
diff changeset
17 struct A { };
kono
parents:
diff changeset
18
kono
parents:
diff changeset
19 int main()
kono
parents:
diff changeset
20 {
kono
parents:
diff changeset
21 try {
kono
parents:
diff changeset
22 try {
kono
parents:
diff changeset
23 try {
kono
parents:
diff changeset
24 try {
kono
parents:
diff changeset
25 try {
kono
parents:
diff changeset
26 throw nullptr;
kono
parents:
diff changeset
27 } catch (void* p) {
kono
parents:
diff changeset
28 if (p == nullptr)
kono
parents:
diff changeset
29 caught(1);
kono
parents:
diff changeset
30 throw;
kono
parents:
diff changeset
31 }
kono
parents:
diff changeset
32 } catch (void(*pf)()) {
kono
parents:
diff changeset
33 if (pf == nullptr)
kono
parents:
diff changeset
34 caught(2);
kono
parents:
diff changeset
35 throw;
kono
parents:
diff changeset
36 }
kono
parents:
diff changeset
37 } catch (int A::*pm) {
kono
parents:
diff changeset
38 if (pm == nullptr)
kono
parents:
diff changeset
39 caught(4);
kono
parents:
diff changeset
40 throw;
kono
parents:
diff changeset
41 }
kono
parents:
diff changeset
42 } catch (int (A::*pmf)()) {
kono
parents:
diff changeset
43 if (pmf == nullptr)
kono
parents:
diff changeset
44 caught(8);
kono
parents:
diff changeset
45 throw;
kono
parents:
diff changeset
46 }
kono
parents:
diff changeset
47 } catch (nullptr_t) {
kono
parents:
diff changeset
48 }
kono
parents:
diff changeset
49
kono
parents:
diff changeset
50 try {
kono
parents:
diff changeset
51 try {
kono
parents:
diff changeset
52 try {
kono
parents:
diff changeset
53 try {
kono
parents:
diff changeset
54 try {
kono
parents:
diff changeset
55 throw nullptr;
kono
parents:
diff changeset
56 } catch (void* const& p) {
kono
parents:
diff changeset
57 if (p == nullptr)
kono
parents:
diff changeset
58 caught(16);
kono
parents:
diff changeset
59 throw;
kono
parents:
diff changeset
60 }
kono
parents:
diff changeset
61 } catch (void(* const& pf)()) {
kono
parents:
diff changeset
62 if (pf == nullptr)
kono
parents:
diff changeset
63 caught(32);
kono
parents:
diff changeset
64 throw;
kono
parents:
diff changeset
65 }
kono
parents:
diff changeset
66 } catch (int A::* const& pm) {
kono
parents:
diff changeset
67 if (pm == nullptr)
kono
parents:
diff changeset
68 caught(64);
kono
parents:
diff changeset
69 throw;
kono
parents:
diff changeset
70 }
kono
parents:
diff changeset
71 } catch (int (A::* const& pmf)()) {
kono
parents:
diff changeset
72 if (pmf == nullptr)
kono
parents:
diff changeset
73 caught(128);
kono
parents:
diff changeset
74 throw;
kono
parents:
diff changeset
75 }
kono
parents:
diff changeset
76 } catch (nullptr_t) {
kono
parents:
diff changeset
77 }
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79 if (result != 255)
kono
parents:
diff changeset
80 abort ();
kono
parents:
diff changeset
81 }