about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@mozilla.com>2010-12-08 15:29:09 -0800
committerGraydon Hoare <graydon@mozilla.com>2010-12-08 15:29:09 -0800
commit2b36a8eab41a4e323f9c234ff89a46fbe2cd84d5 (patch)
treecdb523adcb43bf4b3436521715b66048fdd556b5 /src
parent6ccfba34f3eab71abc7eed4adc30cfee9fabd49e (diff)
downloadrust-2b36a8eab41a4e323f9c234ff89a46fbe2cd84d5.tar.gz
rust-2b36a8eab41a4e323f9c234ff89a46fbe2cd84d5.zip
Fix log upcall translation bug. Un-XFAIL rec-auto.rs.
Diffstat (limited to 'src')
-rw-r--r--src/Makefile1
-rw-r--r--src/comp/middle/trans.rs32
2 files changed, 13 insertions, 20 deletions
diff --git a/src/Makefile b/src/Makefile
index cd3ce63572c..2a41351d2fe 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -544,6 +544,7 @@ TEST_XFAILS_SELF := $(filter-out \
                         multiline-comment.rs \
                         readalias.rs \
                         rec.rs \
+                        rec-auto.rs \
                         rec-tup.rs \
                         return-nil.rs \
                         tup.rs \
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index c5cc20638d3..5e96f58e2b0 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -1547,31 +1547,23 @@ fn load_non_structural(@block_ctxt cx,
 }
 
 impure fn trans_log(@block_ctxt cx, @ast.expr e) -> result {
-    alt (e.node) {
-        case (ast.expr_lit(?lit, _)) {
-            alt (lit.node) {
-                case (ast.lit_str(_)) {
-                    auto sub = trans_expr(cx, e);
-                    auto v = sub.bcx.build.PtrToInt(sub.val, T_int());
-                    ret trans_upcall(sub.bcx,
-                                     "upcall_log_str",
-                                     vec(v));
-                }
 
-                case (_) {
-                    auto sub = trans_expr(cx, e);
-                    ret trans_upcall(sub.bcx,
-                                     "upcall_log_int",
-                                     vec(sub.val));
-                }
-            }
+    auto sub = trans_expr(cx, e);
+    auto e_ty = typeck.expr_ty(e);
+    alt (e_ty.struct) {
+        case (typeck.ty_str) {
+            auto v = sub.bcx.build.PtrToInt(sub.val, T_int());
+            ret trans_upcall(sub.bcx,
+                             "upcall_log_str",
+                             vec(v));
         }
-
         case (_) {
-            auto sub = trans_expr(cx, e);
-            ret trans_upcall(sub.bcx, "upcall_log_int", vec(sub.val));
+            ret trans_upcall(sub.bcx,
+                             "upcall_log_int",
+                             vec(sub.val));
         }
     }
+    fail;
 }
 
 impure fn trans_check_expr(@block_ctxt cx, @ast.expr e) -> result {