aboutsummaryrefslogtreecommitdiff
path: root/src/comp
diff options
context:
space:
mode:
authorGraydon Hoare <[email protected]>2011-02-02 15:23:49 -0800
committerGraydon Hoare <[email protected]>2011-02-02 15:23:49 -0800
commit8e963f63a8d076c8e2f162ba27c49e6cb1dacb96 (patch)
treea3070ffd22701b441b51c1b395ff6a01169c9ce1 /src/comp
parentAdd most of the plumbing for native items and add support for parsing native ... (diff)
downloadrust-8e963f63a8d076c8e2f162ba27c49e6cb1dacb96.tar.xz
rust-8e963f63a8d076c8e2f162ba27c49e6cb1dacb96.zip
Add trace and trap helpers to trans for low level diagnostics.
Diffstat (limited to 'src/comp')
-rw-r--r--src/comp/middle/trans.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index c955340e..d091e3ad 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -4186,6 +4186,24 @@ fn declare_intrinsics(ModuleRef llmod) -> hashmap[str,ValueRef] {
ret intrinsics;
}
+
+fn trace_str(@block_ctxt cx, str s) {
+ trans_upcall(cx, "upcall_trace_str", vec(p2i(C_cstr(cx.fcx.ccx, s))));
+}
+
+fn trace_word(@block_ctxt cx, ValueRef v) {
+ trans_upcall(cx, "upcall_trace_word", vec(v));
+}
+
+fn trace_ptr(@block_ctxt cx, ValueRef v) {
+ trace_word(cx, cx.build.PtrToInt(v, T_int()));
+}
+
+fn trap(@block_ctxt bcx) {
+ let vec[ValueRef] v = vec();
+ bcx.build.Call(bcx.fcx.ccx.intrinsics.get("llvm.trap"), v);
+}
+
fn check_module(ModuleRef llmod) {
auto pm = mk_pass_manager();
llvm.LLVMAddVerifierPass(pm.llpm);