The block/3 predicate and friends have been introduced before ISO compatible catch/3 exception handling for compatibility with some Prolog implementation. The only feature not covered by catch/3 and throw/1 is the possibility to execute global cuts. New code should use catch/3 and throw/1 to deal with exceptions.
fail(Label) :- !(Label), fail.