Skip to content

Commit c425a42

Browse files
committed
Manipulate contexts correctly in trans_fail_expr
This fixes Issue #617
1 parent 9349826 commit c425a42

File tree

3 files changed

+20
-7
lines changed

3 files changed

+20
-7
lines changed

src/comp/middle/trans.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6370,24 +6370,26 @@ fn trans_check_expr(&@block_ctxt cx, &@ast::expr e, &str s) -> result {
63706370
fn trans_fail_expr(&@block_ctxt cx, &option::t[common::span] sp_opt,
63716371
&option::t[@ast::expr] fail_expr)
63726372
-> result {
6373+
auto bcx = cx;
63736374
alt (fail_expr) {
63746375
case (some(?expr)) {
6375-
auto tcx = cx.fcx.lcx.ccx.tcx;
6376-
auto expr_res = trans_expr(cx, expr);
6376+
auto tcx = bcx.fcx.lcx.ccx.tcx;
6377+
auto expr_res = trans_expr(bcx, expr);
63776378
auto e_ty = ty::expr_ty(tcx, expr);
6379+
bcx = expr_res.bcx;
63786380

63796381
if (ty::type_is_str(tcx, e_ty)) {
6380-
auto elt = cx.build.GEP(expr_res.val,
6382+
auto elt = bcx.build.GEP(expr_res.val,
63816383
[C_int(0), C_int(abi::vec_elt_data)]);
6382-
ret trans_fail_value(cx, sp_opt, elt);
6384+
ret trans_fail_value(bcx, sp_opt, elt);
63836385
} else {
6384-
cx.fcx.lcx.ccx.sess.span_fatal(expr.span,
6386+
bcx.fcx.lcx.ccx.sess.span_fatal(expr.span,
63856387
"fail called with unsupported \
63866388
type " + ty_to_str(tcx, e_ty));
63876389
}
63886390
}
63896391
case (_) {
6390-
ret trans_fail(cx, sp_opt, "explicit failure");
6392+
ret trans_fail(bcx, sp_opt, "explicit failure");
63916393
}
63926394
}
63936395
}

src/comp/middle/visit.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,9 @@ fn visit_expr[E](&@expr ex, &E e, &vt[E] v) {
359359
case (expr_ext(_, _, _, ?expansion)) {
360360
vt(v).visit_expr(expansion, e, v);
361361
}
362-
case (expr_fail(_)) { }
362+
case (expr_fail(?eo)) {
363+
visit_expr_opt(eo, e, v);
364+
}
363365
case (expr_break) { }
364366
case (expr_cont) { }
365367
case (expr_ret(?eo)) { visit_expr_opt(eo, e, v); }

src/test/run-fail/fmt-fail.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// xfail-stage0
2+
// error-pattern:meh
3+
use std;
4+
import std::str;
5+
6+
fn main() {
7+
let str str_var = "meh";
8+
fail #fmt("%s", str_var);
9+
}

0 commit comments

Comments
 (0)