Mercurial > hg > CbC > CbC_llvm
comparison libcxxabi/test/unwind_01.pass.cpp @ 150:1d019706d866
LLVM10
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 15:10:13 +0900 |
parents | |
children | 0572611fdcc8 |
comparison
equal
deleted
inserted
replaced
147:c2174574ed3a | 150:1d019706d866 |
---|---|
1 //===------------------------- unwind_01.cpp ------------------------------===// | |
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: libcxxabi-no-exceptions | |
10 | |
11 #include <assert.h> | |
12 | |
13 #if defined(__GNUC__) | |
14 #pragma GCC diagnostic ignored "-Wunreachable-code" | |
15 #endif | |
16 | |
17 struct A | |
18 { | |
19 static int count; | |
20 int id_; | |
21 A() : id_(++count) {} | |
22 ~A() {assert(id_ == count--);} | |
23 | |
24 private: | |
25 A(const A&); | |
26 A& operator=(const A&); | |
27 }; | |
28 | |
29 int A::count = 0; | |
30 | |
31 struct B | |
32 { | |
33 static int count; | |
34 int id_; | |
35 B() : id_(++count) {} | |
36 ~B() {assert(id_ == count--);} | |
37 | |
38 private: | |
39 B(const B&); | |
40 B& operator=(const B&); | |
41 }; | |
42 | |
43 int B::count = 0; | |
44 | |
45 struct C | |
46 { | |
47 static int count; | |
48 int id_; | |
49 C() : id_(++count) {} | |
50 ~C() {assert(id_ == count--);} | |
51 | |
52 private: | |
53 C(const C&); | |
54 C& operator=(const C&); | |
55 }; | |
56 | |
57 int C::count = 0; | |
58 | |
59 void f2() | |
60 { | |
61 C c; | |
62 A a; | |
63 throw 55; | |
64 B b; | |
65 } | |
66 | |
67 void f1() | |
68 { | |
69 A a; | |
70 B b; | |
71 f2(); | |
72 C c; | |
73 } | |
74 | |
75 int main() | |
76 { | |
77 try | |
78 { | |
79 f1(); | |
80 assert(false); | |
81 } | |
82 catch (int* i) | |
83 { | |
84 assert(false); | |
85 } | |
86 catch (long i) | |
87 { | |
88 assert(false); | |
89 } | |
90 catch (int i) | |
91 { | |
92 assert(i == 55); | |
93 } | |
94 catch (...) | |
95 { | |
96 assert(false); | |
97 } | |
98 assert(A::count == 0); | |
99 assert(B::count == 0); | |
100 assert(C::count == 0); | |
101 } |