; RUN: opt < %s -inline -prune-eh -disable-output
; PR992
target datalayout = "e-p:32:32"
target triple = "i686-pc-linux-gnu"
	%struct._IO_FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct._IO_FILE*, i32, i32, i32, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i32, [52 x i8] }
	%struct._IO_marker = type { %struct._IO_marker*, %struct._IO_FILE*, i32 }
	%"struct.__cxxabiv1::__array_type_info" = type { %"struct.std::type_info" }
	%"struct.__cxxabiv1::__si_class_type_info" = type { %"struct.__cxxabiv1::__array_type_info", %"struct.__cxxabiv1::__array_type_info"* }
	%"struct.__gnu_cxx::_Rope_rep_alloc_base<char,std::allocator<char>, true>" = type { i32 }
	%"struct.__gnu_cxx::__normal_iterator<char*,std::basic_string<char, std::char_traits<char>, std::allocator<char> > >" = type { i8* }
	%"struct.__gnu_cxx::__normal_iterator<const wchar_t*,std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > >" = type { i32* }
	%"struct.__gnu_cxx::char_producer<char>" = type { i32 (...)** }
	%"struct.__gnu_cxx::stdio_sync_filebuf<char,std::char_traits<char> >" = type { %"struct.std::basic_streambuf<char,std::char_traits<char> >", %struct._IO_FILE*, i32 }
	%"struct.__gnu_cxx::stdio_sync_filebuf<wchar_t,std::char_traits<wchar_t> >" = type { %"struct.std::basic_streambuf<wchar_t,std::char_traits<wchar_t> >", %struct._IO_FILE*, i32 }
	%struct.__locale_struct = type { [13 x %struct.locale_data*], i16*, i32*, i32*, [13 x i8*] }
	%struct.__mbstate_t = type { i32, %"struct.__gnu_cxx::_Rope_rep_alloc_base<char,std::allocator<char>, true>" }
	%struct.locale_data = type opaque
	%"struct.std::__basic_file<char>" = type { %struct._IO_FILE*, i1 }
	%"struct.std::__codecvt_abstract_base<char,char,__mbstate_t>" = type { %"struct.std::locale::facet" }
	%"struct.std::basic_filebuf<char,std::char_traits<char> >" = type { %"struct.std::basic_streambuf<char,std::char_traits<char> >", i32, %"struct.std::__basic_file<char>", i32, %struct.__mbstate_t, %struct.__mbstate_t, i8*, i32, i1, i1, i1, i1, i8, i8*, i8*, i1, %"struct.std::codecvt<char,char,__mbstate_t>"*, i8*, i32, i8*, i8* }
	%"struct.std::basic_filebuf<wchar_t,std::char_traits<wchar_t> >" = type { %"struct.std::basic_streambuf<wchar_t,std::char_traits<wchar_t> >", i32, %"struct.std::__basic_file<char>", i32, %struct.__mbstate_t, %struct.__mbstate_t, i32*, i32, i1, i1, i1, i1, i32, i32*, i32*, i1, %"struct.std::codecvt<char,char,__mbstate_t>"*, i8*, i32, i8*, i8* }
	%"struct.std::basic_fstream<char,std::char_traits<char> >" = type { { %"struct.std::locale::facet", %"struct.__gnu_cxx::char_producer<char>" }, %"struct.std::basic_filebuf<char,std::char_traits<char> >", %"struct.std::basic_ios<char,std::char_traits<char> >" }
	%"struct.std::basic_fstream<wchar_t,std::char_traits<wchar_t> >" = type { { %"struct.std::locale::facet", %"struct.__gnu_cxx::char_producer<char>" }, %"struct.std::basic_filebuf<wchar_t,std::char_traits<wchar_t> >", %"struct.std::basic_ios<wchar_t,std::char_traits<wchar_t> >" }
	%"struct.std::basic_ios<char,std::char_traits<char> >" = type { %"struct.std::ios_base", %"struct.std::basic_ostream<char,std::char_traits<char> >"*, i8, i1, %"struct.std::basic_streambuf<char,std::char_traits<char> >"*, %"struct.std::ctype<char>"*, %"struct.std::__codecvt_abstract_base<char,char,__mbstate_t>"*, %"struct.std::__codecvt_abstract_base<char,char,__mbstate_t>"* }
	%"struct.std::basic_ios<wchar_t,std::char_traits<wchar_t> >" = type { %"struct.std::ios_base", %"struct.std::basic_ostream<wchar_t,std::char_traits<wchar_t> >"*, i32, i1, %"struct.std::basic_streambuf<wchar_t,std::char_traits<wchar_t> >"*, %"struct.std::codecvt<char,char,__mbstate_t>"*, %"struct.std::__codecvt_abstract_base<char,char,__mbstate_t>"*, %"struct.std::__codecvt_abstract_base<char,char,__mbstate_t>"* }
	%"struct.std::basic_iostream<wchar_t,std::char_traits<wchar_t> >" = type { %"struct.std::locale::facet", %"struct.__gnu_cxx::char_producer<char>", %"struct.std::basic_ios<wchar_t,std::char_traits<wchar_t> >" }
	%"struct.std::basic_ostream<char,std::char_traits<char> >" = type { i32 (...)**, %"struct.std::basic_ios<char,std::char_traits<char> >" }
	%"struct.std::basic_ostream<wchar_t,std::char_traits<wchar_t> >" = type { i32 (...)**, %"struct.std::basic_ios<wchar_t,std::char_traits<wchar_t> >" }
	%"struct.std::basic_streambuf<char,std::char_traits<char> >" = type { i32 (...)**, i8*, i8*, i8*, i8*, i8*, i8*, %"struct.std::locale" }
	%"struct.std::basic_streambuf<wchar_t,std::char_traits<wchar_t> >" = type { i32 (...)**, i32*, i32*, i32*, i32*, i32*, i32*, %"struct.std::locale" }
	%"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >" = type { %"struct.__gnu_cxx::__normal_iterator<char*,std::basic_string<char, std::char_traits<char>, std::allocator<char> > >" }
	%"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Rep" = type { %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Rep_base" }
	%"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Rep_base" = type { i32, i32, i32 }
	%"struct.std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >" = type { %"struct.__gnu_cxx::__normal_iterator<const wchar_t*,std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > >" }
	%"struct.std::codecvt<char,char,__mbstate_t>" = type { %"struct.std::__codecvt_abstract_base<char,char,__mbstate_t>", %struct.__locale_struct* }
	%"struct.std::collate<char>" = type { %"struct.std::locale::facet", %struct.__locale_struct* }
	%"struct.std::collate_byname<char>" = type { %"struct.std::collate<char>" }
	%"struct.std::ctype<char>" = type { %"struct.std::__codecvt_abstract_base<char,char,__mbstate_t>", %struct.__locale_struct*, i1, i32*, i32*, i16* }
	%"struct.std::ctype_byname<char>" = type { %"struct.std::ctype<char>" }
	%"struct.std::domain_error" = type { %"struct.std::logic_error" }
	%"struct.std::ios_base" = type { i32 (...)**, i32, i32, i32, i32, i32, %"struct.std::ios_base::_Callback_list"*, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, %"struct.std::ios_base::_Words"*, %"struct.std::locale" }
	%"struct.std::ios_base::_Callback_list" = type { %"struct.std::ios_base::_Callback_list"*, void (i32, %"struct.std::ios_base"*, i32)*, i32, i32 }
	%"struct.std::ios_base::_Words" = type { i8*, i32 }
	%"struct.std::istreambuf_iterator<char,std::char_traits<char> >" = type { %"struct.std::basic_streambuf<char,std::char_traits<char> >"*, i32 }
	%"struct.std::istreambuf_iterator<wchar_t,std::char_traits<wchar_t> >" = type { %"struct.std::basic_streambuf<wchar_t,std::char_traits<wchar_t> >"*, i32 }
	%"struct.std::locale" = type { %"struct.std::locale::_Impl"* }
	%"struct.std::locale::_Impl" = type { i32, %"struct.std::locale::facet"**, i32, %"struct.std::locale::facet"**, i8** }
	%"struct.std::locale::facet" = type { i32 (...)**, i32 }
	%"struct.std::logic_error" = type { %"struct.__gnu_cxx::char_producer<char>", %"struct.std::basic_string<char,std::char_traits<char>,std::allocator<char> >" }
	%"struct.std::type_info" = type { i32 (...)**, i8* }
@.str_11 = external global [42 x i8]		; <[42 x i8]*> [#uses=0]
@.str_9 = external global [24 x i8]		; <[24 x i8]*> [#uses=0]
@.str_1 = external global [17 x i8]		; <[17 x i8]*> [#uses=0]

define void @main() {
entry:
	tail call fastcc void @_ZNSolsEi( )
	ret void
}

define fastcc void @_ZNSolsEi() {
entry:
	%tmp.22 = icmp eq i32 0, 0		; <i1> [#uses=1]
	br i1 %tmp.22, label %else, label %then

then:		; preds = %entry
	ret void

else:		; preds = %entry
	tail call fastcc void @_ZNSolsEl( )
	ret void
}

define void @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_() {
entry:
	ret void
}

define fastcc void @_ZNSt9basic_iosIcSt11char_traitsIcEE8setstateESt12_Ios_Iostate() {
entry:
	tail call fastcc void @_ZSt19__throw_ios_failurePKc( )
	ret void
}

define fastcc void @_ZNSo3putEc() {
entry:
	ret void
}

define fastcc void @_ZNSolsEl() {
entry:
	%tmp.21.i = icmp eq %"struct.std::basic_ostream<char,std::char_traits<char> >"* null, null		; <i1> [#uses=1]
	br i1 %tmp.21.i, label %endif.0.i, label %shortcirc_next.i

shortcirc_next.i:		; preds = %entry
	ret void

endif.0.i:		; preds = %entry
	call fastcc void @_ZNSt9basic_iosIcSt11char_traitsIcEE8setstateESt12_Ios_Iostate( )
	ret void
}

define fastcc void @_ZSt19__throw_ios_failurePKc() {
entry:
	call fastcc void @_ZNSsC1EPKcRKSaIcE( )
	ret void
}

define fastcc void @_ZNSt8ios_baseD2Ev() {
entry:
	unreachable
}

define void @_ZN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEE5uflowEv() {
entry:
	unreachable
}

define void @_ZN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEED1Ev() {
entry:
	unreachable
}

define void @_ZNSt15basic_streambufIcSt11char_traitsIcEE6setbufEPci() {
entry:
	ret void
}

define fastcc void @_ZSt9use_facetISt5ctypeIcEERKT_RKSt6locale() {
entry:
	ret void
}

declare fastcc void @_ZNSaIcED1Ev()

define fastcc void @_ZSt19__throw_logic_errorPKc() {
entry:
	call fastcc void @_ZNSt11logic_errorC1ERKSs( )
	ret void
}

define fastcc void @_ZNSs4_Rep9_S_createEjRKSaIcE() {
entry:
	br i1 false, label %then.0, label %endif.0

then.0:		; preds = %entry
	call fastcc void @_ZSt20__throw_length_errorPKc( )
	ret void

endif.0:		; preds = %entry
	ret void
}

define fastcc void @_ZSt20__throw_length_errorPKc() {
entry:
	call fastcc void @_ZNSt12length_errorC1ERKSs( )
	ret void
}

define fastcc void @_ZNSs16_S_construct_auxIPKcEEPcT_S3_RKSaIcE12__false_type() {
entry:
	br i1 false, label %then.1.i, label %endif.1.i

then.1.i:		; preds = %entry
	call fastcc void @_ZSt19__throw_logic_errorPKc( )
	ret void

endif.1.i:		; preds = %entry
	call fastcc void @_ZNSs4_Rep9_S_createEjRKSaIcE( )
	unreachable
}

define fastcc void @_ZNSsC1ERKSs() personality i32 (...)* @__gxx_personality_v0 {
entry:
	call fastcc void @_ZNSs4_Rep7_M_grabERKSaIcES2_( )
	invoke fastcc void @_ZNSaIcEC1ERKS_( )
			to label %invoke_cont.1 unwind label %invoke_catch.1

invoke_catch.1:		; preds = %entry
        %exn = landingpad {i8*, i32}
                 catch i8* null
	call fastcc void @_ZNSaIcED1Ev( )
	resume { i8*, i32 } %exn

invoke_cont.1:		; preds = %entry
	call fastcc void @_ZNSaIcEC2ERKS_( )
	ret void
}

define fastcc void @_ZNSs7reserveEj() {
entry:
	ret void
}

define fastcc void @_ZNSaIcEC1ERKS_() {
entry:
	ret void
}

define fastcc void @_ZNSs4_Rep7_M_grabERKSaIcES2_() {
entry:
	br i1 false, label %else.i, label %cond_true

cond_true:		; preds = %entry
	ret void

else.i:		; preds = %entry
	tail call fastcc void @_ZNSs4_Rep9_S_createEjRKSaIcE( )
	ret void
}

define fastcc void @_ZNSsC1EPKcRKSaIcE() {
entry:
	tail call fastcc void @_ZNSs16_S_construct_auxIPKcEEPcT_S3_RKSaIcE12__false_type( )
	unreachable
}

define fastcc void @_ZNSaIcEC2ERKS_() {
entry:
	ret void
}

define void @_ZNSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev() {
entry:
	unreachable
}

define void @_ZNSt14collate_bynameIcED1Ev() {
entry:
	unreachable
}

define void @_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRy() {
entry:
	ret void
}

define void @_ZNSt23__codecvt_abstract_baseIcc11__mbstate_tED1Ev() {
entry:
	unreachable
}

define void @_ZNSt12ctype_bynameIcED0Ev() {
entry:
	unreachable
}

define fastcc void @_ZNSt8messagesIwEC1Ej() {
entry:
	ret void
}

define fastcc void @_ZSt14__convert_to_vIlEvPKcRT_RSt12_Ios_IostateRKP15__locale_structi() {
entry:
	ret void
}

define fastcc void @_ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEC1Ej() {
entry:
	ret void
}

define fastcc void @_ZNSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEC1Ej() {
entry:
	ret void
}

define fastcc void @_ZNKSt7num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE16_M_extract_floatES3_S3_RSt8ios_baseRSt12_Ios_IostateRSs() {
entry:
	unreachable
}

define fastcc void @_ZNSbIwSt11char_traitsIwESaIwEE4swapERS2_() {
entry:
	ret void
}

define void @_ZNSt14basic_iostreamIwSt11char_traitsIwEED0Ev() {
entry:
	unreachable
}

define void @_ZNSt15basic_streambufIcSt11char_traitsIcEE9showmanycEv() {
entry:
	ret void
}

define void @_ZNSt9exceptionD0Ev() {
entry:
	unreachable
}

define fastcc void @_ZNSt11logic_errorC1ERKSs() {
entry:
	call fastcc void @_ZNSsC1ERKSs( )
	ret void
}

define fastcc void @_ZNSt11logic_errorD2Ev() {
entry:
	unreachable
}

define fastcc void @_ZNSt12length_errorC1ERKSs() personality i32 (...)* @__gxx_personality_v0 {
entry:
	invoke fastcc void @_ZNSsC1ERKSs( )
			to label %_ZNSt11logic_errorC2ERKSs.exit unwind label %invoke_catch.i

invoke_catch.i:		; preds = %entry
        %exn = landingpad {i8*, i32}
                 catch i8* null
	resume { i8*, i32 } %exn

_ZNSt11logic_errorC2ERKSs.exit:		; preds = %entry
	ret void
}

define void @_ZNK10__cxxabiv120__si_class_type_info20__do_find_public_srcEiPKvPKNS_17__class_type_infoES2_() {
entry:
	ret void
}

define fastcc void @_ZNSbIwSt11char_traitsIwESaIwEE16_S_construct_auxIPKwEEPwT_S7_RKS1_12__false_type() {
entry:
	ret void
}

define void @_ZTv0_n12_NSt13basic_fstreamIwSt11char_traitsIwEED1Ev() {
entry:
	ret void
}

define void @_ZNSt13basic_fstreamIcSt11char_traitsIcEED1Ev() {
entry:
	unreachable
}

define fastcc void @_ZNSt5ctypeIcEC1EPKtbj() {
entry:
	ret void
}

declare i32 @__gxx_personality_v0(...)
