brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.0 KiB · 724dad3 Raw
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