62 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9// UNSUPPORTED: no-exceptions10 11#include <exception>12#include <stdlib.h>13#include <assert.h>14 15struct A16{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 try34 {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 try49 {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