Merge pull request #3316 from Vincent-Belliard/issue_3222

fix issue #3222
This commit is contained in:
Tim Chevalier 2012-09-05 10:58:16 -07:00
commit 9db4445454
2 changed files with 55 additions and 4 deletions

View File

@ -58,8 +58,7 @@ fn trans_opt(bcx: block, o: opt) -> opt_result {
return single_result(rslt(bcx, *cell));
}
_ => {
return single_result(
rslt(bcx, consts::const_expr(ccx, l)));
return single_result(trans_temp_expr(bcx, l));
}
}
}
@ -636,13 +635,14 @@ fn compile_submatch(bcx: block, m: match_, vals: ~[ValueRef],
}
}
lit(_) => {
test_val = Load(bcx, val);
let pty = node_id_type(bcx, pat_id);
test_val = load_if_immediate(bcx, val, pty);
kind = if ty::type_is_integral(pty) { switch }
else { compare };
}
range(_, _) => {
test_val = Load(bcx, val);
let pty = node_id_type(bcx, pat_id);
test_val = load_if_immediate(bcx, val, pty);
kind = compare;
}
}

View File

@ -0,0 +1,51 @@
// -*- rust -*-
fn f1(ref_string: &str) {
match ref_string {
"a" => io::println("found a"),
"b" => io::println("found b"),
_ => io::println("not found")
}
}
fn f2(ref_string: &str) {
match ref_string {
"a" => io::println("found a"),
"b" => io::println("found b"),
s => io::println(fmt!("not found (%s)", s))
}
}
fn g1(ref_1: &str, ref_2: &str) {
match (ref_1, ref_2) {
("a", "b") => io::println("found a,b"),
("b", "c") => io::println("found b,c"),
_ => io::println("not found")
}
}
fn g2(ref_1: &str, ref_2: &str) {
match (ref_1, ref_2) {
("a", "b") => io::println("found a,b"),
("b", "c") => io::println("found b,c"),
(s1, s2) => io::println(fmt!("not found (%s, %s)", s1, s2))
}
}
fn main() {
f1(@"a");
f1(~"b");
f1(&"c");
f1("d");
f2(@"a");
f2(~"b");
f2(&"c");
f2("d");
g1(@"a", @"b");
g1(~"b", ~"c");
g1(&"c", &"d");
g1("d", "e");
g2(@"a", @"b");
g2(~"b", ~"c");
g2(&"c", &"d");
g2("d", "e");
}