about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@mozilla.com>2011-04-19 16:52:59 -0700
committerGraydon Hoare <graydon@mozilla.com>2011-04-19 16:53:12 -0700
commitd1b9ddc8d49744a4e7e478e775d02d071dbd78a4 (patch)
tree770ede20366096233245c4e348f86bbfab27d780 /src
parent6651826677842083c59725903a856eb39d8e5051 (diff)
downloadrust-d1b9ddc8d49744a4e7e478e775d02d071dbd78a4.tar.gz
rust-d1b9ddc8d49744a4e7e478e775d02d071dbd78a4.zip
Add testcase for bootstrap blocker and fix for each result type to nil.
Diffstat (limited to 'src')
-rw-r--r--src/comp/middle/trans.rs7
-rw-r--r--src/test/run-pass/alt-phi.rs22
2 files changed, 26 insertions, 3 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index d3ccd909805..468173b7f46 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -3583,12 +3583,12 @@ fn trans_for_each(@block_ctxt cx,
     bcx.build.Store(lllvar, lllvarptr);
     fcx.llupvars.insert(decl_id, lllvarptr);
 
-    auto res = trans_block(bcx, body);
+    auto r = trans_block(bcx, body);
 
     // Tie up the llallocas -> lltop edge.
     new_builder(fcx.llallocas).Br(lltop);
 
-    res.bcx.build.RetVoid();
+    r.bcx.build.RetVoid();
 
 
     // Step 3: Call iter passing [lliterbody, llenv], plus other args.
@@ -3611,10 +3611,11 @@ fn trans_for_each(@block_ctxt cx,
             cx.build.Store(llenvblobptr, env_cell);
 
             // log "lliterbody: " + val_str(cx.fcx.lcx.ccx.tn, lliterbody);
-            ret trans_call(cx, f,
+            r = trans_call(cx, f,
                            some[ValueRef](cx.build.Load(pair)),
                            args,
                            ann);
+            ret res(r.bcx, C_nil());
         }
     }
     fail;
diff --git a/src/test/run-pass/alt-phi.rs b/src/test/run-pass/alt-phi.rs
new file mode 100644
index 00000000000..607a434a8c9
--- /dev/null
+++ b/src/test/run-pass/alt-phi.rs
@@ -0,0 +1,22 @@
+tag thing { a; b; c; }
+
+iter foo() -> int {
+  put 10;
+}
+
+fn main() {
+  auto x = true;
+    alt (a) {
+        case (a) {
+            x = true;
+            for each (int i in foo()) {
+            }
+        }
+        case (b) {
+            x = false;
+        }
+        case (c) {
+            x = false;
+        }
+    }
+}