10a248bf714f18b1cdcda5d7b811303c232d6e885Daniel Dunbar(* RUN: rm -rf %t.builddir 20a248bf714f18b1cdcda5d7b811303c232d6e885Daniel Dunbar * RUN: mkdir -p %t.builddir 30a248bf714f18b1cdcda5d7b811303c232d6e885Daniel Dunbar * RUN: cp %s %t.builddir 40a248bf714f18b1cdcda5d7b811303c232d6e885Daniel Dunbar * RUN: %ocamlopt -warn-error A llvm.cmxa llvm_analysis.cmxa %t.builddir/analysis.ml -o %t 58a78ff63c017796d699d297d5ab67064e8914542Erick Tryzelaar * RUN: %t 6874f021bc16aaf4619fd818da150f1b63e408c80Daniel Dunbar * XFAIL: vg_leak 7c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen *) 8c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen 9c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksenopen Llvm 10c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksenopen Llvm_analysis 11c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen 12c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen(* Note that this takes a moment to link, so it's best to keep the number of 13c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen individual tests low. *) 14c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen 15b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarlet context = global_context () 16b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar 17c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksenlet test x = if not x then exit 1 else () 18c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen 19c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksenlet bomb msg = 20c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen prerr_endline msg; 21c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen exit 2 22c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen 23c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksenlet _ = 24b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar let fty = function_type (void_type context) [| |] in 25b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar let m = create_module context "valid_m" in 26c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen let fn = define_function "valid_fn" fty m in 27b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar let at_entry = builder_at_end context (entry_block fn) in 28c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen ignore (build_ret_void at_entry); 29c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen 30c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen 31c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen (* Test that valid constructs verify. *) 32c8d7194b481cbdf859e3ce8ad49cd40ec86b06feGordon Henriksen begin match verify_module m with 33c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen Some msg -> bomb "valid module failed verification!" 34c8d7194b481cbdf859e3ce8ad49cd40ec86b06feGordon Henriksen | None -> () 35c8d7194b481cbdf859e3ce8ad49cd40ec86b06feGordon Henriksen end; 36c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen 37c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen if not (verify_function fn) then bomb "valid function failed verification!"; 38c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen 39c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen 40c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen (* Test that invalid constructs do not verify. 41c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen A basic block can contain only one terminator instruction. *) 42c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen ignore (build_ret_void at_entry); 43c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen 44c8d7194b481cbdf859e3ce8ad49cd40ec86b06feGordon Henriksen begin match verify_module m with 45c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen Some msg -> () 46c8d7194b481cbdf859e3ce8ad49cd40ec86b06feGordon Henriksen | None -> bomb "invalid module passed verification!" 47c8d7194b481cbdf859e3ce8ad49cd40ec86b06feGordon Henriksen end; 48c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen 49c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen if verify_function fn then bomb "invalid function passed verification!"; 50c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen 51c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen 52c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen dispose_module m 53c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen 54c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen (* Don't bother to test assert_valid_{module,function}. *) 55