blob: bc46b4e72af76185eb11674fc07367886f3d55ff [file] [log] [blame]
Howard Hinnant830713c2012-01-31 23:52:20 +00001//===---------------------- catch_class_01.cpp ----------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
Asiri Rathnayake4174e8b2016-05-31 12:01:32 +000010// UNSUPPORTED: libcxxabi-no-exceptions
11
Howard Hinnant830713c2012-01-31 23:52:20 +000012#include <exception>
13#include <stdlib.h>
14#include <assert.h>
15
16struct A
17{
18 static int count;
19 int id_;
20 explicit A(int id) : id_(id) {count++;}
21 A(const A& a) : id_(a.id_) {count++;}
22 ~A() {count--;}
23};
24
25int A::count = 0;
26
27void f1()
28{
29 throw A(3);
30}
31
32void f2()
33{
34 try
35 {
36 assert(A::count == 0);
37 f1();
38 }
39 catch (A a)
40 {
41 assert(A::count != 0);
42 assert(a.id_ == 3);
43 throw;
44 }
45}
46
47int main()
48{
49 try
50 {
51 f2();
52 assert(false);
53 }
54 catch (const A& a)
55 {
56 assert(A::count != 0);
57 assert(a.id_ == 3);
58 }
59 assert(A::count == 0);
60}