Add type parameters when checking wildcard patterns
For some reason, wildcard patterns were never getting type parameter substitutions attached. This would cause an assertion failure when checking a wildcard pattern that matches against a tag with polymorphic type (not sure why this didn't come up before). Fixed it. (The diff and test case may be easier to understand than this note :P) Closes #1503.
This commit is contained in:
parent
8818f42b19
commit
565ea068ca
|
@ -1264,7 +1264,18 @@ fn valid_range_bounds(from: @ast::expr, to: @ast::expr) -> bool {
|
|||
fn check_pat(fcx: @fn_ctxt, map: ast_util::pat_id_map, pat: @ast::pat,
|
||||
expected: ty::t) {
|
||||
alt pat.node {
|
||||
ast::pat_wild. { write::ty_only_fixup(fcx, pat.id, expected); }
|
||||
ast::pat_wild. {
|
||||
alt structure_of(fcx, pat.span, expected) {
|
||||
ty::ty_tag(_, expected_tps) {
|
||||
let path_tpt = {substs: some(expected_tps),
|
||||
ty: expected};
|
||||
write::ty_fixup(fcx, pat.id, path_tpt);
|
||||
}
|
||||
_ {
|
||||
write::ty_only_fixup(fcx, pat.id, expected);
|
||||
}
|
||||
}
|
||||
}
|
||||
ast::pat_lit(lt) {
|
||||
check_expr_with(fcx, lt, expected);
|
||||
write::ty_only_fixup(fcx, pat.id, expr_ty(fcx.ccx.tcx, lt));
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
// error-pattern:squirrelcupcake
|
||||
fn cmp() -> int {
|
||||
alt(option::some('a'), option::none::<char>) {
|
||||
(option::some(_), _) { fail "squirrelcupcake"; }
|
||||
(_, option::some(_)) { fail; }
|
||||
}
|
||||
}
|
||||
|
||||
fn main() { log(error, cmp()); }
|
Loading…
Reference in New Issue