From 42247372c6c507beed4d309ea5867579d5b65511 Mon Sep 17 00:00:00 2001 From: Jonathan Turner Date: Thu, 11 Aug 2016 21:47:56 -0700 Subject: [PATCH] Improve &-ptr printing --- src/librustc/ty/error.rs | 19 ++++++++++++++++++- src/test/compile-fail/coercion-slice.rs | 2 +- src/test/compile-fail/cross-borrow-trait.rs | 2 +- .../compile-fail/destructure-trait-ref.rs | 4 ++-- src/test/compile-fail/dst-bad-coercions.rs | 4 ++-- src/test/compile-fail/issue-12997-2.rs | 2 +- src/test/compile-fail/issue-16338.rs | 2 +- src/test/compile-fail/issue-17033.rs | 2 +- src/test/compile-fail/issue-20225.rs | 6 +++--- src/test/compile-fail/issue-29084.rs | 2 +- src/test/compile-fail/issue-5100.rs | 2 +- src/test/compile-fail/issue-5500.rs | 2 +- src/test/compile-fail/issue-7061.rs | 2 +- src/test/compile-fail/issue-7867.rs | 4 ++-- src/test/compile-fail/method-self-arg-1.rs | 2 +- src/test/compile-fail/overloaded-calls-bad.rs | 2 +- src/test/compile-fail/repeat_count.rs | 2 +- 17 files changed, 39 insertions(+), 22 deletions(-) diff --git a/src/librustc/ty/error.rs b/src/librustc/ty/error.rs index bddc2dbdb7e77..fd1a795574f2f 100644 --- a/src/librustc/ty/error.rs +++ b/src/librustc/ty/error.rs @@ -222,7 +222,24 @@ impl<'a, 'gcx, 'lcx, 'tcx> ty::TyS<'tcx> { ty::TyArray(_, n) => format!("array of {} elements", n), ty::TySlice(_) => "slice".to_string(), ty::TyRawPtr(_) => "*-ptr".to_string(), - ty::TyRef(_, _) => "&-ptr".to_string(), + ty::TyRef(region, tymut) => { + let tymut_string = tymut.to_string(); + if tymut_string == "_" || //unknown type name, + tymut_string.len() > 10 || //name longer than saying "reference", + region.to_string() != "" //... or a complex type + { + match tymut { + ty::TypeAndMut{mutbl, ..} => { + format!("{}reference", match mutbl { + hir::Mutability::MutMutable => "mutable ", + _ => "" + }) + } + } + } else { + format!("&{}", tymut_string) + } + } ty::TyFnDef(..) => format!("fn item"), ty::TyFnPtr(_) => "fn pointer".to_string(), ty::TyTrait(ref inner) => { diff --git a/src/test/compile-fail/coercion-slice.rs b/src/test/compile-fail/coercion-slice.rs index a619f33468f4a..6b468ff96620d 100644 --- a/src/test/compile-fail/coercion-slice.rs +++ b/src/test/compile-fail/coercion-slice.rs @@ -15,5 +15,5 @@ fn main() { //~^ ERROR mismatched types //~| expected type `&[i32]` //~| found type `[{integer}; 1]` - //~| expected &-ptr, found array of 1 elements + //~| expected &[i32], found array of 1 elements } diff --git a/src/test/compile-fail/cross-borrow-trait.rs b/src/test/compile-fail/cross-borrow-trait.rs index ea9a29c0e2ae5..672ff464718f8 100644 --- a/src/test/compile-fail/cross-borrow-trait.rs +++ b/src/test/compile-fail/cross-borrow-trait.rs @@ -21,5 +21,5 @@ pub fn main() { let _y: &Trait = x; //~ ERROR mismatched types //~| expected type `&Trait` //~| found type `Box` - //~| expected &-ptr, found box + //~| expected &Trait, found box } diff --git a/src/test/compile-fail/destructure-trait-ref.rs b/src/test/compile-fail/destructure-trait-ref.rs index d0a31fbce91ed..89fb1e105900d 100644 --- a/src/test/compile-fail/destructure-trait-ref.rs +++ b/src/test/compile-fail/destructure-trait-ref.rs @@ -42,12 +42,12 @@ fn main() { //~^ ERROR mismatched types //~| expected type `T` //~| found type `&_` - //~| expected trait T, found &-ptr + //~| expected trait T, found reference let &&&x = &(&1isize as &T); //~^ ERROR mismatched types //~| expected type `T` //~| found type `&_` - //~| expected trait T, found &-ptr + //~| expected trait T, found reference let box box x = box 1isize as Box; //~^ ERROR mismatched types //~| expected type `T` diff --git a/src/test/compile-fail/dst-bad-coercions.rs b/src/test/compile-fail/dst-bad-coercions.rs index b7a07e487994d..883c16b089581 100644 --- a/src/test/compile-fail/dst-bad-coercions.rs +++ b/src/test/compile-fail/dst-bad-coercions.rs @@ -19,12 +19,12 @@ struct Foo { } pub fn main() { - // Test that we cannot convert from *-ptr to &-ptr + // Test that we cannot convert from *-ptr to &S and &T let x: *const S = &S; let y: &S = x; //~ ERROR mismatched types let y: &T = x; //~ ERROR mismatched types - // Test that we cannot convert from *-ptr to &-ptr (mut version) + // Test that we cannot convert from *-ptr to &S and &T (mut version) let x: *mut S = &mut S; let y: &S = x; //~ ERROR mismatched types let y: &T = x; //~ ERROR mismatched types diff --git a/src/test/compile-fail/issue-12997-2.rs b/src/test/compile-fail/issue-12997-2.rs index 436d9e91dc72f..276d7f7c9ed33 100644 --- a/src/test/compile-fail/issue-12997-2.rs +++ b/src/test/compile-fail/issue-12997-2.rs @@ -17,4 +17,4 @@ fn bar(x: isize) { } //~^ ERROR mismatched types //~| expected type `fn(&mut __test::test::Bencher)` //~| found type `fn(isize) {bar}` -//~| expected &-ptr, found isize +//~| expected mutable reference, found isize diff --git a/src/test/compile-fail/issue-16338.rs b/src/test/compile-fail/issue-16338.rs index c6ce0c4c95b8b..a4517e60d66e1 100644 --- a/src/test/compile-fail/issue-16338.rs +++ b/src/test/compile-fail/issue-16338.rs @@ -18,5 +18,5 @@ fn main() { //~^ ERROR mismatched types //~| expected type `&str` //~| found type `Slice<_>` - //~| expected &-ptr, found struct `Slice` + //~| expected &str, found struct `Slice` } diff --git a/src/test/compile-fail/issue-17033.rs b/src/test/compile-fail/issue-17033.rs index 0ec05b941a960..1cd43cbb0f857 100644 --- a/src/test/compile-fail/issue-17033.rs +++ b/src/test/compile-fail/issue-17033.rs @@ -12,7 +12,7 @@ fn f<'r>(p: &'r mut fn(p: &mut ())) { (*p)(()) //~ ERROR mismatched types //~| expected type `&mut ()` //~| found type `()` - //~| expected &-ptr, found () + //~| expected &mut (), found () } fn main() {} diff --git a/src/test/compile-fail/issue-20225.rs b/src/test/compile-fail/issue-20225.rs index b7845f1f1168a..f38961c427ae9 100644 --- a/src/test/compile-fail/issue-20225.rs +++ b/src/test/compile-fail/issue-20225.rs @@ -15,13 +15,13 @@ struct Foo; impl<'a, T> Fn<(&'a T,)> for Foo { extern "rust-call" fn call(&self, (_,): (T,)) {} //~^ ERROR: has an incompatible type for trait - //~| expected &-ptr + //~| expected reference } impl<'a, T> FnMut<(&'a T,)> for Foo { extern "rust-call" fn call_mut(&mut self, (_,): (T,)) {} //~^ ERROR: has an incompatible type for trait - //~| expected &-ptr + //~| expected reference } impl<'a, T> FnOnce<(&'a T,)> for Foo { @@ -29,7 +29,7 @@ impl<'a, T> FnOnce<(&'a T,)> for Foo { extern "rust-call" fn call_once(self, (_,): (T,)) {} //~^ ERROR: has an incompatible type for trait - //~| expected &-ptr + //~| expected reference } fn main() {} diff --git a/src/test/compile-fail/issue-29084.rs b/src/test/compile-fail/issue-29084.rs index 00d2969a0f67d..6cb6bbf1893fc 100644 --- a/src/test/compile-fail/issue-29084.rs +++ b/src/test/compile-fail/issue-29084.rs @@ -13,7 +13,7 @@ macro_rules! foo { fn bar(d: u8) { } bar(&mut $d); //~^ ERROR mismatched types - //~| expected u8, found &-ptr + //~| expected u8, found &mut u8 //~| expected type `u8` //~| found type `&mut u8` }} diff --git a/src/test/compile-fail/issue-5100.rs b/src/test/compile-fail/issue-5100.rs index 9e78b7b947f98..a1f5d74b30e36 100644 --- a/src/test/compile-fail/issue-5100.rs +++ b/src/test/compile-fail/issue-5100.rs @@ -52,7 +52,7 @@ fn main() { //~^ ERROR mismatched types //~| expected type `(bool, bool)` //~| found type `&_` -//~| expected tuple, found &-ptr +//~| expected tuple, found reference } diff --git a/src/test/compile-fail/issue-5500.rs b/src/test/compile-fail/issue-5500.rs index cacbf7656def2..1cbb7588e17df 100644 --- a/src/test/compile-fail/issue-5500.rs +++ b/src/test/compile-fail/issue-5500.rs @@ -13,5 +13,5 @@ fn main() { //~^ ERROR mismatched types //~| expected type `()` //~| found type `&_` - //~| expected (), found &-ptr + //~| expected (), found reference } diff --git a/src/test/compile-fail/issue-7061.rs b/src/test/compile-fail/issue-7061.rs index 1519d71dd3be2..da6f49f3efe91 100644 --- a/src/test/compile-fail/issue-7061.rs +++ b/src/test/compile-fail/issue-7061.rs @@ -15,7 +15,7 @@ impl<'a> BarStruct { //~^ ERROR mismatched types //~| expected type `Box` //~| found type `&'a mut BarStruct` - //~| expected box, found &-ptr + //~| expected box, found mutable reference } fn main() {} diff --git a/src/test/compile-fail/issue-7867.rs b/src/test/compile-fail/issue-7867.rs index ed465117344d4..7d9f8e9058521 100644 --- a/src/test/compile-fail/issue-7867.rs +++ b/src/test/compile-fail/issue-7867.rs @@ -27,11 +27,11 @@ fn main() { //~^ ERROR mismatched types //~| expected type `&std::option::Option<{integer}>` //~| found type `std::option::Option<_>` - //~| expected &-ptr, found enum `std::option::Option` + //~| expected reference, found enum `std::option::Option` None => () //~^ ERROR mismatched types //~| expected type `&std::option::Option<{integer}>` //~| found type `std::option::Option<_>` - //~| expected &-ptr, found enum `std::option::Option` + //~| expected reference, found enum `std::option::Option` } } diff --git a/src/test/compile-fail/method-self-arg-1.rs b/src/test/compile-fail/method-self-arg-1.rs index 03816362d46c3..4c8800878f07d 100644 --- a/src/test/compile-fail/method-self-arg-1.rs +++ b/src/test/compile-fail/method-self-arg-1.rs @@ -21,7 +21,7 @@ fn main() { Foo::bar(x); //~ ERROR mismatched types //~| expected type `&Foo` //~| found type `Foo` - //~| expected &-ptr, found struct `Foo` + //~| expected &Foo, found struct `Foo` Foo::bar(&42); //~ ERROR mismatched types //~| expected type `&Foo` //~| found type `&{integer}` diff --git a/src/test/compile-fail/overloaded-calls-bad.rs b/src/test/compile-fail/overloaded-calls-bad.rs index 5865d93e1282f..1825ec61f1ed7 100644 --- a/src/test/compile-fail/overloaded-calls-bad.rs +++ b/src/test/compile-fail/overloaded-calls-bad.rs @@ -36,7 +36,7 @@ fn main() { y: 3, }; let ans = s("what"); //~ ERROR mismatched types - //~^ NOTE expected isize, found &-ptr + //~^ NOTE expected isize, found reference //~| NOTE expected type //~| NOTE found type let ans = s(); diff --git a/src/test/compile-fail/repeat_count.rs b/src/test/compile-fail/repeat_count.rs index 555dd0f0c3945..5d5113ce07c71 100644 --- a/src/test/compile-fail/repeat_count.rs +++ b/src/test/compile-fail/repeat_count.rs @@ -38,7 +38,7 @@ fn main() { //~^ ERROR mismatched types //~| expected type `usize` //~| found type `&'static str` - //~| expected usize, found &-ptr + //~| expected usize, found reference //~| ERROR expected `usize` for repeat count, found string literal [E0306] //~| expected `usize` let f = [0; -4_isize];