1//===---------------------- 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
10#include <exception>
11#include <stdlib.h>
12#include <assert.h>
13
14struct A
15{
16    static int count;
17    int id_;
18    explicit A(int id) : id_(id) {count++;}
19    A(const A& a) : id_(a.id_) {count++;}
20    ~A() {count--;}
21};
22
23int A::count = 0;
24
25void f1()
26{
27    throw A(3);
28}
29
30void f2()
31{
32    try
33    {
34        assert(A::count == 0);
35        f1();
36    }
37    catch (A a)
38    {
39        assert(A::count != 0);
40        assert(a.id_ == 3);
41        throw;
42    }
43}
44
45int main()
46{
47    try
48    {
49        f2();
50        assert(false);
51    }
52    catch (const A& a)
53    {
54        assert(A::count != 0);
55        assert(a.id_ == 3);
56    }
57    assert(A::count == 0);
58}
59