From a4d88dacc9dd70547ece3dcc65fbc61a8fcfa91d Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Fri, 17 Jun 2011 11:23:32 -0700 Subject: [PATCH] rustc: Fail to unify if two ty_vars don't unify Closes #500 --- src/comp/middle/ty.rs | 7 ++++++- src/test/compile-fail/binop-typeck.rs | 9 +++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 src/test/compile-fail/binop-typeck.rs diff --git a/src/comp/middle/ty.rs b/src/comp/middle/ty.rs index c8050eb1bc9e..deaf925f0b87 100644 --- a/src/comp/middle/ty.rs +++ b/src/comp/middle/ty.rs @@ -1943,7 +1943,12 @@ mod unify { alt (struct(cx.tcx, expected)) { case (ty::ty_var(?expected_id)) { auto expected_n = expected_id as uint; - union(cx, expected_n, actual_n); + alt(union(cx, expected_n, actual_n)) { + case (unres_ok) { /* fall through */ } + case (unres_err(?t_e)) { + ret ures_err(t_e); + } + } } case (_) { diff --git a/src/test/compile-fail/binop-typeck.rs b/src/test/compile-fail/binop-typeck.rs new file mode 100644 index 000000000000..5d48300e7427 --- /dev/null +++ b/src/test/compile-fail/binop-typeck.rs @@ -0,0 +1,9 @@ +// xfail-stage0 +// error-pattern:mismatched types +// issue #500 + +fn main() { + auto x = true; + auto y = 1; + auto z = x + y; +}