1// 2003-03-08 Jerry Quinn <jlquinn@optonline.net> 2 3// Copyright (C) 2003, 2005 Free Software Foundation, Inc. 4// 5// This file is part of the GNU ISO C++ Library. This library is free 6// software; you can redistribute it and/or modify it under the 7// terms of the GNU General Public License as published by the 8// Free Software Foundation; either version 2, or (at your option) 9// any later version. 10 11// This library is distributed in the hope that it will be useful, 12// but WITHOUT ANY WARRANTY; without even the implied warranty of 13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14// GNU General Public License for more details. 15 16// You should have received a copy of the GNU General Public License along 17// with this library; see the file COPYING. If not, write to the Free 18// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 19// USA. 20 21#include <ostream> 22#include <streambuf> 23#include <testsuite_hooks.h> 24 25// libstdc++/9561 26struct foobar: std::exception { }; 27 28struct buf: std::streambuf 29{ 30 virtual int_type 31 overflow(int_type) 32 { 33 throw foobar(); 34 return int_type(); 35 } 36}; 37 38void test01() 39{ 40 using namespace std; 41 bool test __attribute__((unused)) = true; 42 43 buf b; 44 std::ostream strm (&b); 45 strm.exceptions(std::ios::badbit); 46 47 try 48 { 49 strm << std::endl; 50 } 51 catch(foobar) 52 { 53 // strm should throw foobar and not do anything else 54 VERIFY(strm.bad()); 55 return; 56 } 57 catch(...) 58 { 59 VERIFY( false ); 60 return; 61 } 62 63 VERIFY( false ); 64} 65 66int main() 67{ 68 test01(); 69 return 0; 70} 71