diff options
| author | Brian Anderson <banderson@mozilla.com> | 2011-07-06 13:36:27 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2011-07-06 14:04:52 -0700 |
| commit | 0eac640fdd56caa93d5f398a75d24e62feef4730 (patch) | |
| tree | 626a90e9558f477b366f9a9b7733ab1b684e32c8 | |
| parent | 05954f37b76e6357fe8c162008176b3477e7b5a8 (diff) | |
| download | rust-0eac640fdd56caa93d5f398a75d24e62feef4730.tar.gz rust-0eac640fdd56caa93d5f398a75d24e62feef4730.zip | |
Swap the expected/actual for typechecking fields of updated records
In 'rec(a = b with c)', if a exists in c then the expected type for b is the type of c.
| -rw-r--r-- | src/comp/middle/typeck.rs | 4 | ||||
| -rw-r--r-- | src/test/compile-fail/rec-extend.rs | 9 |
2 files changed, 11 insertions, 2 deletions
diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs index 6d0ffb43202..5d06e9e7d04 100644 --- a/src/comp/middle/typeck.rs +++ b/src/comp/middle/typeck.rs @@ -2120,8 +2120,8 @@ fn check_expr(&@fn_ctxt fcx, &@ast::expr expr) { auto found = false; for (ty::field bf in base_fields) { if (str::eq(f.ident, bf.ident)) { - demand::simple(fcx, expr.span, f.mt.ty, - bf.mt.ty); + demand::simple(fcx, expr.span, bf.mt.ty, + f.mt.ty); found = true; } } diff --git a/src/test/compile-fail/rec-extend.rs b/src/test/compile-fail/rec-extend.rs new file mode 100644 index 00000000000..936c76b346f --- /dev/null +++ b/src/test/compile-fail/rec-extend.rs @@ -0,0 +1,9 @@ +// xfail-stage0 +// error-pattern:expected int but found bool + +fn main() { + + auto a = rec(foo = 0); + + auto b = rec(foo = true with a); +} |
