1c527d7e5a814b834aaece6e67d2447b9d2d2be5eErick Tryzelaar(* RUN: %ocamlopt -warn-error A llvm.cmxa llvm_analysis.cmxa %s -o %t 27b3dc63390c7884273f0cb4098a19505871fd5cfErick Tryzelaar * RUN: %t 3bf7ea373ecb90a933592061eda4a3dca45e84b25Daniel Dunbar * XFAIL: vg_leak 43ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen *) 53ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen 63ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksenopen Llvm 73ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksenopen Llvm_analysis 83ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen 93ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen(* Note that this takes a moment to link, so it's best to keep the number of 103ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen individual tests low. *) 113ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen 1293ac6ab49c58d81cc332c9a9af74f0442d4acaa8Erick Tryzelaarlet context = global_context () 1393ac6ab49c58d81cc332c9a9af74f0442d4acaa8Erick Tryzelaar 143ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksenlet test x = if not x then exit 1 else () 153ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen 163ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksenlet bomb msg = 173ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen prerr_endline msg; 183ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen exit 2 193ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen 203ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksenlet _ = 2193ac6ab49c58d81cc332c9a9af74f0442d4acaa8Erick Tryzelaar let fty = function_type (void_type context) [| |] in 2293ac6ab49c58d81cc332c9a9af74f0442d4acaa8Erick Tryzelaar let m = create_module context "valid_m" in 233ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen let fn = define_function "valid_fn" fty m in 2493ac6ab49c58d81cc332c9a9af74f0442d4acaa8Erick Tryzelaar let at_entry = builder_at_end context (entry_block fn) in 253ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen ignore (build_ret_void at_entry); 263ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen 273ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen 283ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen (* Test that valid constructs verify. *) 2963a180bab88d10a5577e8427d77a2b2e65e9446eGordon Henriksen begin match verify_module m with 303ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen Some msg -> bomb "valid module failed verification!" 3163a180bab88d10a5577e8427d77a2b2e65e9446eGordon Henriksen | None -> () 3263a180bab88d10a5577e8427d77a2b2e65e9446eGordon Henriksen end; 333ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen 343ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen if not (verify_function fn) then bomb "valid function failed verification!"; 353ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen 363ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen 373ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen (* Test that invalid constructs do not verify. 383ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen A basic block can contain only one terminator instruction. *) 393ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen ignore (build_ret_void at_entry); 403ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen 4163a180bab88d10a5577e8427d77a2b2e65e9446eGordon Henriksen begin match verify_module m with 423ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen Some msg -> () 4363a180bab88d10a5577e8427d77a2b2e65e9446eGordon Henriksen | None -> bomb "invalid module passed verification!" 4463a180bab88d10a5577e8427d77a2b2e65e9446eGordon Henriksen end; 453ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen 463ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen if verify_function fn then bomb "invalid function passed verification!"; 473ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen 483ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen 493ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen dispose_module m 503ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen 513ed72368453d39942c9a3e0f41242485d9f3cfdfGordon Henriksen (* Don't bother to test assert_valid_{module,function}. *) 52