:- module thread.
:- use_module builtin, io, private_builtin, profiling_builtin.
:- pred thread.call_back_to_mercury(pred(io.state, io.state), io.state, io.state).
:- mode thread.call_back_to_mercury((pred((builtin.di), (builtin.uo)) is cc_multi), (builtin.di), (builtin.uo)) is cc_multi.
thread.call_back_to_mercury(Goal_4, STATE_VARIABLE_IO_0_6, STATE_VARIABLE_IO_7) :-
    call(Goal_4, STATE_VARIABLE_IO_0_6, STATE_VARIABLE_IO_7).
:- pragma exceptions(predicate, (thread.can_spawn), 0, 0, will_not_throw).
:- pragma exceptions(predicate, (thread.spawn), 3, 0, will_not_throw).
:- pragma exceptions(predicate, (thread.yield), 2, 0, will_not_throw).
:- pragma exceptions(predicate, (thread.call_back_to_mercury), 3, 0, may_throw(user_exception)).
:- pragma termination_info((thread.can_spawn), finite(0, []), cannot_loop).
:- pragma termination_info(thread.spawn(builtin.in((pred((builtin.di), (builtin.uo)) is cc_multi)), (builtin.di), (builtin.uo)), infinite, cannot_loop).
:- pragma termination_info(thread.yield((builtin.di), (builtin.uo)), infinite, cannot_loop).
:- pragma termination_info(thread.call_back_to_mercury((pred((builtin.di), (builtin.uo)) is cc_multi), (builtin.di), (builtin.uo)), infinite, can_loop).
