brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.7 KiB · 055f807 Raw
112 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// REQUIRES: c++03 || c++11 || c++1411 12#include <exception>13#include <stdlib.h>14#include <assert.h>15 16#if defined(__GNUC__)17#pragma GCC diagnostic ignored "-Wunreachable-code"18#pragma GCC diagnostic ignored "-Wdeprecated" // dynamic exception specifications are deprecated19#endif20 21struct A22{23    static int count;24    int id_;25    A() : id_(++count) {}26    ~A() {assert(id_ == count--);}27 28private:29    A(const A&);30    A& operator=(const A&);31};32 33int A::count = 0;34 35struct B36{37    static int count;38    int id_;39    B() : id_(++count) {}40    ~B() {assert(id_ == count--);}41 42private:43    B(const B&);44    B& operator=(const B&);45};46 47int B::count = 0;48 49struct C50{51    static int count;52    int id_;53    C() : id_(++count) {}54    ~C() {assert(id_ == count--);}55 56private:57    C(const C&);58    C& operator=(const C&);59};60 61int C::count = 0;62 63void f2()64{65    C c;66    A a;67    throw 55;68    B b;69}70 71void f1() throw (long, char, double)72{73    A a;74    B b;75    f2();76    C c;77}78 79void u_handler()80{81    exit(0);82}83 84int main(int, char**)85{86    std::set_unexpected(u_handler);87    try88    {89        f1();90        assert(false);91    }92    catch (int* i)93    {94        assert(false);95    }96    catch (long i)97    {98        assert(false);99    }100    catch (int i)101    {102        assert(i == 55);103    }104    catch (...)105    {106        assert(false);107    }108    assert(false);109 110    return 0;111}112