parent
9349826909
commit
c425a422ed
@ -6370,24 +6370,26 @@ fn trans_check_expr(&@block_ctxt cx, &@ast::expr e, &str s) -> result {
|
||||
fn trans_fail_expr(&@block_ctxt cx, &option::t[common::span] sp_opt,
|
||||
&option::t[@ast::expr] fail_expr)
|
||||
-> result {
|
||||
auto bcx = cx;
|
||||
alt (fail_expr) {
|
||||
case (some(?expr)) {
|
||||
auto tcx = cx.fcx.lcx.ccx.tcx;
|
||||
auto expr_res = trans_expr(cx, expr);
|
||||
auto tcx = bcx.fcx.lcx.ccx.tcx;
|
||||
auto expr_res = trans_expr(bcx, expr);
|
||||
auto e_ty = ty::expr_ty(tcx, expr);
|
||||
bcx = expr_res.bcx;
|
||||
|
||||
if (ty::type_is_str(tcx, e_ty)) {
|
||||
auto elt = cx.build.GEP(expr_res.val,
|
||||
auto elt = bcx.build.GEP(expr_res.val,
|
||||
[C_int(0), C_int(abi::vec_elt_data)]);
|
||||
ret trans_fail_value(cx, sp_opt, elt);
|
||||
ret trans_fail_value(bcx, sp_opt, elt);
|
||||
} else {
|
||||
cx.fcx.lcx.ccx.sess.span_fatal(expr.span,
|
||||
bcx.fcx.lcx.ccx.sess.span_fatal(expr.span,
|
||||
"fail called with unsupported \
|
||||
type " + ty_to_str(tcx, e_ty));
|
||||
}
|
||||
}
|
||||
case (_) {
|
||||
ret trans_fail(cx, sp_opt, "explicit failure");
|
||||
ret trans_fail(bcx, sp_opt, "explicit failure");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -359,7 +359,9 @@ fn visit_expr[E](&@expr ex, &E e, &vt[E] v) {
|
||||
case (expr_ext(_, _, _, ?expansion)) {
|
||||
vt(v).visit_expr(expansion, e, v);
|
||||
}
|
||||
case (expr_fail(_)) { }
|
||||
case (expr_fail(?eo)) {
|
||||
visit_expr_opt(eo, e, v);
|
||||
}
|
||||
case (expr_break) { }
|
||||
case (expr_cont) { }
|
||||
case (expr_ret(?eo)) { visit_expr_opt(eo, e, v); }
|
||||
|
9
src/test/run-fail/fmt-fail.rs
Normal file
9
src/test/run-fail/fmt-fail.rs
Normal file
@ -0,0 +1,9 @@
|
||||
// xfail-stage0
|
||||
// error-pattern:meh
|
||||
use std;
|
||||
import std::str;
|
||||
|
||||
fn main() {
|
||||
let str str_var = "meh";
|
||||
fail #fmt("%s", str_var);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user