11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci//===---------------------- catch_class_01.cpp ----------------------------===// 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// The LLVM Compiler Infrastructure 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// This file is dual licensed under the MIT and the University of Illinois Open 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Source Licenses. See LICENSE.TXT for details. 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci//===----------------------------------------------------------------------===// 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <exception> 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <stdlib.h> 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <assert.h> 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistruct A 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci{ 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static int count; 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int id_; 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci explicit A(int id) : id_(id) {count++;} 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci A(const A& a) : id_(a.id_) {count++;} 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ~A() {count--;} 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint A::count = 0; 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid f1() 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci{ 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci throw A(3); 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid f2() 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci{ 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci try 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assert(A::count == 0); 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci f1(); 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci catch (A a) 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assert(A::count != 0); 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assert(a.id_ == 3); 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci throw; 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint main() 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci{ 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci try 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci f2(); 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assert(false); 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci catch (const A& a) 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assert(A::count != 0); 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assert(a.id_ == 3); 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci assert(A::count == 0); 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci