1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
(* TEST_BELOW
(* Blank lines added here to preserve locations. *)
*)
exception Exn
let return_exn ?(raise_it_instead=false) () =
if raise_it_instead then
raise Exn
else
Exn
[@@inline never]
let without_reraise () =
match return_exn () with
| Exn as exn
| exception (Exn as exn) ->
raise exn
| _ -> assert false
let with_reraise () =
match return_exn ~raise_it_instead:true () with
| Exn as exn
| exception (Exn as exn) ->
raise exn
| _ -> assert false
let trickier () =
try raise Not_found
with e ->
match return_exn () with
| Exn as exn
| exception (Exn as exn) ->
raise exn
| _ -> assert false
let run f =
try f ()
with exn ->
Printf.printf "exception %s\n" (Printexc.to_string exn);
Printexc.print_backtrace stdout;
Printf.printf "---------------------------\n%!"
let _ =
run without_reraise;
run with_reraise;
run trickier
(* TEST
flags = "-g";
ocamlrunparam += ",b=1";
*)
|