From cf5df271b66822e1325e3825ccb439ca5a63bc51 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sun, 9 Jun 2019 13:16:13 +0800 Subject: [PATCH 1/4] Changed the error message to more clearly explain what is allowed --- src/librustc_typeck/astconv.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/librustc_typeck/astconv.rs b/src/librustc_typeck/astconv.rs index cc054adee7bea..6721730d94590 100644 --- a/src/librustc_typeck/astconv.rs +++ b/src/librustc_typeck/astconv.rs @@ -1011,7 +1011,7 @@ impl<'o, 'gcx: 'tcx, 'tcx> dyn AstConv<'gcx, 'tcx> + 'o { if regular_traits.is_empty() && auto_traits.is_empty() { span_err!(tcx.sess, span, E0224, - "at least one non-builtin trait is required for an object type"); + "at least one non-builtin trait, outside of &send, is required for an object type"); return tcx.types.err; } From 4e9615d88532c5373ff15dd1e7e29b54e250bbef Mon Sep 17 00:00:00 2001 From: Andrew Date: Sun, 9 Jun 2019 14:31:39 +0800 Subject: [PATCH 2/4] changed the language of the error message to make it more clear --- src/librustc_typeck/astconv.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/librustc_typeck/astconv.rs b/src/librustc_typeck/astconv.rs index 6721730d94590..6dd8349299a30 100644 --- a/src/librustc_typeck/astconv.rs +++ b/src/librustc_typeck/astconv.rs @@ -1011,7 +1011,7 @@ impl<'o, 'gcx: 'tcx, 'tcx> dyn AstConv<'gcx, 'tcx> + 'o { if regular_traits.is_empty() && auto_traits.is_empty() { span_err!(tcx.sess, span, E0224, - "at least one non-builtin trait, outside of &send, is required for an object type"); + "at least one trait is required for an object type"); return tcx.types.err; } From 54acbd96f989b7100d4f5184e56bfc6159dd2777 Mon Sep 17 00:00:00 2001 From: Andrew Date: Fri, 21 Jun 2019 22:12:07 +0800 Subject: [PATCH 3/4] changed expected output in tests so it now passes with changed output --- .../ui/traits/trait-alias/trait-alias-only-maybe-bound.stderr | 4 ++-- src/test/ui/traits/trait-object-macro-matcher.stderr | 2 +- src/test/ui/traits/trait-object-vs-lifetime-2.stderr | 2 +- src/test/ui/traits/trait-object-vs-lifetime.stderr | 4 ++-- src/test/ui/traits/wf-trait-object-only-maybe-bound.stderr | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/test/ui/traits/trait-alias/trait-alias-only-maybe-bound.stderr b/src/test/ui/traits/trait-alias/trait-alias-only-maybe-bound.stderr index d4f77200fd5a0..6de79fa917b16 100644 --- a/src/test/ui/traits/trait-alias/trait-alias-only-maybe-bound.stderr +++ b/src/test/ui/traits/trait-alias/trait-alias-only-maybe-bound.stderr @@ -1,10 +1,10 @@ -error[E0224]: at least one non-builtin trait is required for an object type +error[E0224]: at least one trait is required for an object type --> $DIR/trait-alias-only-maybe-bound.rs:13:12 | LL | type _T0 = dyn _1; | ^^^^^^ -error[E0224]: at least one non-builtin trait is required for an object type +error[E0224]: at least one trait is required for an object type --> $DIR/trait-alias-only-maybe-bound.rs:19:12 | LL | type _T1 = dyn _2; diff --git a/src/test/ui/traits/trait-object-macro-matcher.stderr b/src/test/ui/traits/trait-object-macro-matcher.stderr index 0b84c3dfcb057..6b5effaad9bc4 100644 --- a/src/test/ui/traits/trait-object-macro-matcher.stderr +++ b/src/test/ui/traits/trait-object-macro-matcher.stderr @@ -1,4 +1,4 @@ -error[E0224]: at least one non-builtin trait is required for an object type +error[E0224]: at least one trait is required for an object type --> $DIR/trait-object-macro-matcher.rs:11:8 | LL | m!(dyn 'static +); diff --git a/src/test/ui/traits/trait-object-vs-lifetime-2.stderr b/src/test/ui/traits/trait-object-vs-lifetime-2.stderr index ef5e2407b9a0e..014d380b63ca5 100644 --- a/src/test/ui/traits/trait-object-vs-lifetime-2.stderr +++ b/src/test/ui/traits/trait-object-vs-lifetime-2.stderr @@ -1,4 +1,4 @@ -error[E0224]: at least one non-builtin trait is required for an object type +error[E0224]: at least one trait is required for an object type --> $DIR/trait-object-vs-lifetime-2.rs:7:5 | LL | dyn 'static +: 'static + Copy, diff --git a/src/test/ui/traits/trait-object-vs-lifetime.stderr b/src/test/ui/traits/trait-object-vs-lifetime.stderr index be1af59ed4f5c..be1958770a426 100644 --- a/src/test/ui/traits/trait-object-vs-lifetime.stderr +++ b/src/test/ui/traits/trait-object-vs-lifetime.stderr @@ -4,7 +4,7 @@ error: lifetime arguments must be declared prior to type arguments LL | let _: S; | ^^^^^^^ -error[E0224]: at least one non-builtin trait is required for an object type +error[E0224]: at least one trait is required for an object type --> $DIR/trait-object-vs-lifetime.rs:9:23 | LL | let _: S<'static, dyn 'static +>; @@ -22,7 +22,7 @@ error[E0107]: wrong number of type arguments: expected 1, found 0 LL | let _: S<'static, 'static>; | ^^^^^^^^^^^^^^^^^^^ expected 1 type argument -error[E0224]: at least one non-builtin trait is required for an object type +error[E0224]: at least one trait is required for an object type --> $DIR/trait-object-vs-lifetime.rs:14:14 | LL | let _: S; diff --git a/src/test/ui/traits/wf-trait-object-only-maybe-bound.stderr b/src/test/ui/traits/wf-trait-object-only-maybe-bound.stderr index 0cfb389fd899e..8cc97addc7dd4 100644 --- a/src/test/ui/traits/wf-trait-object-only-maybe-bound.stderr +++ b/src/test/ui/traits/wf-trait-object-only-maybe-bound.stderr @@ -4,7 +4,7 @@ error: `?Trait` is not permitted in trait object types LL | type _0 = dyn ?Sized; | ^^^^^^ -error[E0224]: at least one non-builtin trait is required for an object type +error[E0224]: at least one trait is required for an object type --> $DIR/wf-trait-object-only-maybe-bound.rs:3:11 | LL | type _0 = dyn ?Sized; From f4cd3c205431e987504b5e3ca56de74fab49deb3 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sat, 22 Jun 2019 00:12:28 +0800 Subject: [PATCH 4/4] adding in these files that didn't get added in previous commit --- .../ui/traits/trait-alias/trait-alias-only-maybe-bound.rs | 4 ++-- src/test/ui/traits/trait-object-macro-matcher.rs | 2 +- src/test/ui/traits/trait-object-vs-lifetime-2.rs | 2 +- src/test/ui/traits/trait-object-vs-lifetime.rs | 4 ++-- src/test/ui/traits/wf-trait-object-only-maybe-bound.rs | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/test/ui/traits/trait-alias/trait-alias-only-maybe-bound.rs b/src/test/ui/traits/trait-alias/trait-alias-only-maybe-bound.rs index d6c611d2a4d91..e4abf314e0a96 100644 --- a/src/test/ui/traits/trait-alias/trait-alias-only-maybe-bound.rs +++ b/src/test/ui/traits/trait-alias/trait-alias-only-maybe-bound.rs @@ -11,12 +11,12 @@ trait _1 = _0; // Straight list expansion: type _T0 = dyn _1; -//~^ ERROR at least one non-builtin trait is required for an object type [E0224] +//~^ ERROR at least one trait is required for an object type [E0224] // Twice: trait _2 = _1 + _1; type _T1 = dyn _2; -//~^ ERROR at least one non-builtin trait is required for an object type [E0224] +//~^ ERROR at least one trait is required for an object type [E0224] fn main() {} diff --git a/src/test/ui/traits/trait-object-macro-matcher.rs b/src/test/ui/traits/trait-object-macro-matcher.rs index 5ec157275a629..a6852569f3a12 100644 --- a/src/test/ui/traits/trait-object-macro-matcher.rs +++ b/src/test/ui/traits/trait-object-macro-matcher.rs @@ -8,5 +8,5 @@ fn main() { m!(dyn Copy + Send + 'static); //~^ ERROR the trait `std::marker::Copy` cannot be made into an object m!(dyn 'static + Send); - m!(dyn 'static +); //~ ERROR at least one non-builtin trait is required for an object type + m!(dyn 'static +); //~ ERROR at least one trait is required for an object type } diff --git a/src/test/ui/traits/trait-object-vs-lifetime-2.rs b/src/test/ui/traits/trait-object-vs-lifetime-2.rs index 8a9b8e793487c..0b33dc7f69a3a 100644 --- a/src/test/ui/traits/trait-object-vs-lifetime-2.rs +++ b/src/test/ui/traits/trait-object-vs-lifetime-2.rs @@ -5,7 +5,7 @@ fn g() where 'static: 'static, dyn 'static +: 'static + Copy, - //~^ ERROR at least one non-builtin trait is required for an object type + //~^ ERROR at least one trait is required for an object type {} fn main() {} diff --git a/src/test/ui/traits/trait-object-vs-lifetime.rs b/src/test/ui/traits/trait-object-vs-lifetime.rs index 803b29367c8a8..e0ff734948376 100644 --- a/src/test/ui/traits/trait-object-vs-lifetime.rs +++ b/src/test/ui/traits/trait-object-vs-lifetime.rs @@ -7,11 +7,11 @@ fn main() { // `'static` is a lifetime argument, `'static +` is a type argument let _: S<'static, u8>; let _: S<'static, dyn 'static +>; - //~^ at least one non-builtin trait is required for an object type + //~^ at least one trait is required for an object type let _: S<'static, 'static>; //~^ ERROR wrong number of lifetime arguments: expected 1, found 2 //~| ERROR wrong number of type arguments: expected 1, found 0 let _: S; //~^ ERROR lifetime arguments must be declared prior to type arguments - //~| ERROR at least one non-builtin trait is required for an object type + //~| ERROR at least one trait is required for an object type } diff --git a/src/test/ui/traits/wf-trait-object-only-maybe-bound.rs b/src/test/ui/traits/wf-trait-object-only-maybe-bound.rs index 1b83d2487f4c6..3e6db3e997c9b 100644 --- a/src/test/ui/traits/wf-trait-object-only-maybe-bound.rs +++ b/src/test/ui/traits/wf-trait-object-only-maybe-bound.rs @@ -1,7 +1,7 @@ // Test that `dyn ?Sized` (i.e., a trait object with only a maybe buond) is not allowed. type _0 = dyn ?Sized; -//~^ ERROR at least one non-builtin trait is required for an object type [E0224] +//~^ ERROR at least one trait is required for an object type [E0224] //~| ERROR ?Trait` is not permitted in trait object types fn main() {}