blob: 56b84d6ba9cd1c8a5342d6e6cb2c3e31cbfc0718 [file] [log] [blame]
Howard Hinnant372e2f42012-01-31 23:52:20 +00001//===---------------------- catch_class_01.cpp ----------------------------===//
2//
Chandler Carruth57b08b02019-01-19 10:56:40 +00003// 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
Howard Hinnant372e2f42012-01-31 23:52:20 +00006//
7//===----------------------------------------------------------------------===//
8
Louis Dionne8c611142020-04-17 10:29:15 -04009// UNSUPPORTED: no-exceptions
Asiri Rathnayake57e446d2016-05-31 12:01:32 +000010
Howard Hinnant372e2f42012-01-31 23:52:20 +000011#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
Louis Dionne504bc072020-10-08 13:36:33 -040046int main(int, char**)
Howard Hinnant372e2f42012-01-31 23:52:20 +000047{
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);
Louis Dionne504bc072020-10-08 13:36:33 -040059
60 return 0;
Howard Hinnant372e2f42012-01-31 23:52:20 +000061}