Gordon Henriksen | 874c786 | 2007-12-22 19:41:30 +0000 | [diff] [blame] | 1 | (* RUN: %ocamlc -warn-error A llvm.cma llvm_analysis.cma %s -o %t |
Gordon Henriksen | 3ed7236 | 2007-10-06 21:00:36 +0000 | [diff] [blame] | 2 | * RUN: ./%t %t.bc |
| 3 | *) |
| 4 | |
| 5 | open Llvm |
| 6 | open Llvm_analysis |
| 7 | |
| 8 | (* Note that this takes a moment to link, so it's best to keep the number of |
| 9 | individual tests low. *) |
| 10 | |
| 11 | let test x = if not x then exit 1 else () |
| 12 | |
| 13 | let bomb msg = |
| 14 | prerr_endline msg; |
| 15 | exit 2 |
| 16 | |
| 17 | let _ = |
| 18 | let fty = function_type void_type [| |] in |
| 19 | let m = create_module "valid_m" in |
| 20 | let fn = define_function "valid_fn" fty m in |
| 21 | let at_entry = builder_at_end (entry_block fn) in |
| 22 | ignore (build_ret_void at_entry); |
| 23 | |
| 24 | |
| 25 | (* Test that valid constructs verify. *) |
Gordon Henriksen | 63a180b | 2007-12-01 20:59:23 +0000 | [diff] [blame] | 26 | begin match verify_module m with |
Gordon Henriksen | 3ed7236 | 2007-10-06 21:00:36 +0000 | [diff] [blame] | 27 | Some msg -> bomb "valid module failed verification!" |
Gordon Henriksen | 63a180b | 2007-12-01 20:59:23 +0000 | [diff] [blame] | 28 | | None -> () |
| 29 | end; |
Gordon Henriksen | 3ed7236 | 2007-10-06 21:00:36 +0000 | [diff] [blame] | 30 | |
| 31 | if not (verify_function fn) then bomb "valid function failed verification!"; |
| 32 | |
| 33 | |
| 34 | (* Test that invalid constructs do not verify. |
| 35 | A basic block can contain only one terminator instruction. *) |
| 36 | ignore (build_ret_void at_entry); |
| 37 | |
Gordon Henriksen | 63a180b | 2007-12-01 20:59:23 +0000 | [diff] [blame] | 38 | begin match verify_module m with |
Gordon Henriksen | 3ed7236 | 2007-10-06 21:00:36 +0000 | [diff] [blame] | 39 | Some msg -> () |
Gordon Henriksen | 63a180b | 2007-12-01 20:59:23 +0000 | [diff] [blame] | 40 | | None -> bomb "invalid module passed verification!" |
| 41 | end; |
Gordon Henriksen | 3ed7236 | 2007-10-06 21:00:36 +0000 | [diff] [blame] | 42 | |
| 43 | if verify_function fn then bomb "invalid function passed verification!"; |
| 44 | |
| 45 | |
| 46 | dispose_module m |
| 47 | |
| 48 | (* Don't bother to test assert_valid_{module,function}. *) |