diff --git a/src/librustc/middle/typeck/infer/mod.rs b/src/librustc/middle/typeck/infer/mod.rs
index 7d799b7ea2fb6..55a9527213848 100644
--- a/src/librustc/middle/typeck/infer/mod.rs
+++ b/src/librustc/middle/typeck/infer/mod.rs
@@ -733,10 +733,10 @@ impl @mut InferCtxt {
fn report_mismatched_types(sp: span, e: ty::t, a: ty::t,
err: &ty::type_err) {
- // Don't report an error if expected is ty_err
let resolved_expected =
self.resolve_type_vars_if_possible(e);
let mk_msg = match ty::get(resolved_expected).sty {
+ // Don't report an error if expected is ty_err
ty::ty_err => return,
_ => {
// if I leave out : ~str, it infers &str and complains
@@ -779,4 +779,3 @@ impl @mut InferCtxt {
}
}
-
diff --git a/src/librustc/util/ppaux.rs b/src/librustc/util/ppaux.rs
index 8b0c84cff8343..a337431cefdb8 100644
--- a/src/librustc/util/ppaux.rs
+++ b/src/librustc/util/ppaux.rs
@@ -238,19 +238,19 @@ pub fn vstore_to_str(cx: ctxt, vs: ty::vstore) -> ~str {
ty::vstore_fixed(n) => fmt!("%u", n),
ty::vstore_uniq => ~"~",
ty::vstore_box => ~"@",
- ty::vstore_slice(r) => region_to_str(cx, r)
+ ty::vstore_slice(r) => region_to_str_adorned(cx, "&", r, "/")
}
}
pub fn vstore_ty_to_str(cx: ctxt, ty: ~str, vs: ty::vstore) -> ~str {
match vs {
ty::vstore_fixed(_) => {
- fmt!("%s/%s", ty, vstore_to_str(cx, vs))
+ fmt!("[%s * %s]", ty, vstore_to_str(cx, vs))
}
ty::vstore_slice(_) => {
fmt!("%s/%s", vstore_to_str(cx, vs), ty)
}
- _ => fmt!("%s%s", vstore_to_str(cx, vs), ty)
+ _ => fmt!("%s[%s]", vstore_to_str(cx, vs), ty)
}
}
@@ -453,13 +453,13 @@ pub fn ty_to_str(cx: ctxt, typ: t) -> ~str {
ty_trait(did, ref substs, vs) => {
let path = ty::item_path(cx, did);
let base = ast_map::path_to_str(path, cx.sess.intr());
- let result = parameterized(cx, base, substs.self_r, substs.tps);
- vstore_ty_to_str(cx, result, vs)
+ let ty = parameterized(cx, base, substs.self_r, substs.tps);
+ fmt!("%s%s", vstore_to_str(cx, vs), ty)
}
ty_evec(mt, vs) => {
- vstore_ty_to_str(cx, fmt!("[%s]", mt_to_str(cx, mt)), vs)
+ vstore_ty_to_str(cx, fmt!("%s", mt_to_str(cx, mt)), vs)
}
- ty_estr(vs) => vstore_ty_to_str(cx, ~"str", vs),
+ ty_estr(vs) => fmt!("%s%s", vstore_to_str(cx, vs), ~"str"),
ty_opaque_box => ~"@?",
ty_opaque_closure_ptr(ast::BorrowedSigil) => ~"closure&",
ty_opaque_closure_ptr(ast::ManagedSigil) => ~"closure@",
diff --git a/src/test/compile-fail/issue-2149.rs b/src/test/compile-fail/issue-2149.rs
index 7e3ffb92950ad..0880cabb2abf9 100644
--- a/src/test/compile-fail/issue-2149.rs
+++ b/src/test/compile-fail/issue-2149.rs
@@ -22,6 +22,6 @@ impl vec_monad for ~[A] {
}
fn main() {
["hi"].bind(|x| [x] );
- //~^ ERROR type `[&static/str]/1` does not implement any method in scope named `bind`
+ //~^ ERROR type `[&static/str * 1]` does not implement any method in scope named `bind`
//~^^ ERROR Unconstrained region variable
}
diff --git a/src/test/compile-fail/issue-4517.rs b/src/test/compile-fail/issue-4517.rs
new file mode 100644
index 0000000000000..18caaa697a17d
--- /dev/null
+++ b/src/test/compile-fail/issue-4517.rs
@@ -0,0 +1,6 @@
+fn bar(int_param: int) {}
+
+fn main() {
+ let foo: [u8 * 4] = [1u8, ..4u8];
+ bar(foo); //~ ERROR mismatched types: expected `int` but found `[u8 * 4]` (expected int but found vector)
+}