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

source code of libcxxabi/test/catch_class_01.pass.cpp