mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-04 19:12:50 +00:00
Rollup merge of #88892 - estebank:trait-objects, r=petrochenkov
Move object safety suggestions to the end of the error
This commit is contained in:
commit
14eb87dd26
@ -83,10 +83,6 @@ pub fn report_object_safety_error(
|
||||
messages.push(msg.clone());
|
||||
}
|
||||
}
|
||||
if trait_span.is_some() {
|
||||
// Only provide the help if its a local trait, otherwise it's not actionable.
|
||||
violation.solution(&mut err);
|
||||
}
|
||||
}
|
||||
}
|
||||
let has_multi_span = !multi_span.is_empty();
|
||||
@ -104,5 +100,13 @@ pub fn report_object_safety_error(
|
||||
to be resolvable dynamically; for more information visit \
|
||||
<https://doc.rust-lang.org/reference/items/traits.html#object-safety>",
|
||||
);
|
||||
if trait_span.is_some() {
|
||||
let mut reported_violations: Vec<_> = reported_violations.into_iter().collect();
|
||||
reported_violations.sort();
|
||||
for violation in reported_violations {
|
||||
// Only provide the help if its a local trait, otherwise it's not actionable.
|
||||
violation.solution(&mut err);
|
||||
}
|
||||
}
|
||||
err
|
||||
}
|
||||
|
@ -730,7 +730,7 @@ pub struct ImplSourceTraitAliasData<'tcx, N> {
|
||||
pub nested: Vec<N>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash, HashStable)]
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Hash, HashStable, PartialOrd, Ord)]
|
||||
pub enum ObjectSafetyViolation {
|
||||
/// `Self: Sized` declared on the trait.
|
||||
SizedSelf(SmallVec<[Span; 1]>),
|
||||
@ -879,7 +879,7 @@ impl ObjectSafetyViolation {
|
||||
}
|
||||
|
||||
/// Reasons a method might not be object-safe.
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, HashStable)]
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, HashStable, PartialOrd, Ord)]
|
||||
pub enum MethodViolationCode {
|
||||
/// e.g., `fn foo()`
|
||||
StaticMethod(Option<(&'static str, Span)>, Span, bool /* has args */),
|
||||
|
@ -4,7 +4,6 @@ error[E0038]: the trait `Trait` cannot be made into an object
|
||||
LL | impl dyn Trait {
|
||||
| ^^^^^^^^^ `Trait` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `N` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/associated-const-in-trait.rs:6:11
|
||||
|
|
||||
@ -12,6 +11,7 @@ LL | trait Trait {
|
||||
| ----- this trait cannot be made into an object...
|
||||
LL | const N: usize;
|
||||
| ^ ...because it contains this associated `const`
|
||||
= help: consider moving `N` to another trait
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -21,7 +21,6 @@ error[E0038]: the trait `Bar` cannot be made into an object
|
||||
LL | impl dyn Bar {}
|
||||
| ^^^^^^^ `Bar` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `X` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/issue-48027.rs:2:11
|
||||
|
|
||||
@ -29,6 +28,7 @@ LL | trait Bar {
|
||||
| --- this trait cannot be made into an object...
|
||||
LL | const X: usize;
|
||||
| ^ ...because it contains this associated `const`
|
||||
= help: consider moving `X` to another trait
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
@ -4,7 +4,6 @@ error[E0038]: the trait `NotObjectSafe` cannot be made into an object
|
||||
LL | impl NotObjectSafe for dyn NotObjectSafe { }
|
||||
| ^^^^^^^^^^^^^^^^^ `NotObjectSafe` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `eq` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/coherence-impl-trait-for-trait-object-safe.rs:6:43
|
||||
|
|
||||
@ -12,6 +11,7 @@ LL | trait NotObjectSafe { fn eq(&self, other: Self); }
|
||||
| ------------- ^^^^ ...because method `eq` references the `Self` type in this parameter
|
||||
| |
|
||||
| this trait cannot be made into an object...
|
||||
= help: consider moving `eq` to another trait
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -4,7 +4,6 @@ error[E0038]: the trait `Foo` cannot be made into an object
|
||||
LL | fn use_dyn(v: &dyn Foo) {
|
||||
| ^^^^^^^ `Foo` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `test` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/object-safety-err-ret.rs:8:23
|
||||
|
|
||||
@ -12,6 +11,7 @@ LL | trait Foo {
|
||||
| --- this trait cannot be made into an object...
|
||||
LL | fn test(&self) -> [u8; bar::<Self>()];
|
||||
| ^^^^^^^^^^^^^^^^^^^ ...because method `test` references the `Self` type in its return type
|
||||
= help: consider moving `test` to another trait
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -4,7 +4,6 @@ error[E0038]: the trait `Trait` cannot be made into an object
|
||||
LL | fn call_foo(x: Box<dyn Trait>) {
|
||||
| ^^^^^^^^^ `Trait` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `foo` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/E0038.rs:2:22
|
||||
|
|
||||
@ -12,6 +11,7 @@ LL | trait Trait {
|
||||
| ----- this trait cannot be made into an object...
|
||||
LL | fn foo(&self) -> Self;
|
||||
| ^^^^ ...because method `foo` references the `Self` type in its return type
|
||||
= help: consider moving `foo` to another trait
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -40,7 +40,6 @@ error[E0038]: the trait `NonObjectSafe3` cannot be made into an object
|
||||
LL | fn takes_non_object_safe_box(obj: Box<dyn NonObjectSafe3>) {
|
||||
| ^^^^^^^^^^^^^^^^^^ `NonObjectSafe3` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `foo` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/feature-gate-object_safe_for_dispatch.rs:11:8
|
||||
|
|
||||
@ -48,6 +47,7 @@ LL | trait NonObjectSafe3 {
|
||||
| -------------- this trait cannot be made into an object...
|
||||
LL | fn foo<T>(&self);
|
||||
| ^^^ ...because method `foo` has generic type parameters
|
||||
= help: consider moving `foo` to another trait
|
||||
|
||||
error[E0038]: the trait `NonObjectSafe4` cannot be made into an object
|
||||
--> $DIR/feature-gate-object_safe_for_dispatch.rs:31:35
|
||||
@ -55,7 +55,6 @@ error[E0038]: the trait `NonObjectSafe4` cannot be made into an object
|
||||
LL | fn return_non_object_safe_rc() -> std::rc::Rc<dyn NonObjectSafe4> {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `NonObjectSafe4` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `foo` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/feature-gate-object_safe_for_dispatch.rs:15:22
|
||||
|
|
||||
@ -63,6 +62,7 @@ LL | trait NonObjectSafe4 {
|
||||
| -------------- this trait cannot be made into an object...
|
||||
LL | fn foo(&self, s: &Self);
|
||||
| ^^^^^ ...because method `foo` references the `Self` type in this parameter
|
||||
= help: consider moving `foo` to another trait
|
||||
|
||||
error[E0038]: the trait `NonObjectSafe1` cannot be made into an object
|
||||
--> $DIR/feature-gate-object_safe_for_dispatch.rs:38:16
|
||||
|
@ -4,7 +4,6 @@ error[E0038]: the trait `Foo` cannot be made into an object
|
||||
LL | fn f(_arg : Box<dyn for<'a> Foo<A<'a> = &'a ()>>) {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `Foo` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `A` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/gat-in-trait-path.rs:5:10
|
||||
|
|
||||
@ -12,6 +11,7 @@ LL | trait Foo {
|
||||
| --- this trait cannot be made into an object...
|
||||
LL | type A<'a> where Self: 'a;
|
||||
| ^ ...because it contains the generic associated type `A`
|
||||
= help: consider moving `A` to another trait
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -4,7 +4,6 @@ error[E0038]: the trait `X` cannot be made into an object
|
||||
LL | fn _func1<'a>(_x: Box<dyn X<Y<'a>=&'a ()>>) {}
|
||||
| ^^^^^^^^^^^^^^^^^^^ `X` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `Y` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/issue-67510-pass.rs:4:10
|
||||
|
|
||||
@ -12,6 +11,7 @@ LL | trait X {
|
||||
| - this trait cannot be made into an object...
|
||||
LL | type Y<'a>;
|
||||
| ^ ...because it contains the generic associated type `Y`
|
||||
= help: consider moving `Y` to another trait
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -20,7 +20,6 @@ error[E0038]: the trait `SuperTrait` cannot be made into an object
|
||||
LL | let sub: Box<dyn SuperTrait<SubType = SubStruct>> = Box::new(SuperStruct::new(0));
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `SuperTrait` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `SubType` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/issue-76535.rs:6:10
|
||||
|
|
||||
@ -28,6 +27,7 @@ LL | pub trait SuperTrait {
|
||||
| ---------- this trait cannot be made into an object...
|
||||
LL | type SubType<'a>: SubTrait;
|
||||
| ^^^^^^^ ...because it contains the generic associated type `SubType`
|
||||
= help: consider moving `SubType` to another trait
|
||||
|
||||
error[E0038]: the trait `SuperTrait` cannot be made into an object
|
||||
--> $DIR/issue-76535.rs:36:57
|
||||
@ -35,7 +35,6 @@ error[E0038]: the trait `SuperTrait` cannot be made into an object
|
||||
LL | let sub: Box<dyn SuperTrait<SubType = SubStruct>> = Box::new(SuperStruct::new(0));
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `SuperTrait` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `SubType` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/issue-76535.rs:6:10
|
||||
|
|
||||
@ -43,6 +42,7 @@ LL | pub trait SuperTrait {
|
||||
| ---------- this trait cannot be made into an object...
|
||||
LL | type SubType<'a>: SubTrait;
|
||||
| ^^^^^^^ ...because it contains the generic associated type `SubType`
|
||||
= help: consider moving `SubType` to another trait
|
||||
= note: required because of the requirements on the impl of `CoerceUnsized<Box<dyn SuperTrait<SubType = SubStruct<'_>>>>` for `Box<SuperStruct>`
|
||||
= note: required by cast to type `Box<dyn SuperTrait<SubType = SubStruct<'_>>>`
|
||||
|
||||
|
@ -20,7 +20,6 @@ error[E0038]: the trait `CollectionFamily` cannot be made into an object
|
||||
LL | Box::new(Family) as &dyn CollectionFamily<Member=usize>
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `CollectionFamily` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `Member` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/issue-78671.rs:4:10
|
||||
|
|
||||
@ -28,6 +27,7 @@ LL | trait CollectionFamily {
|
||||
| ---------------- this trait cannot be made into an object...
|
||||
LL | type Member<T>;
|
||||
| ^^^^^^ ...because it contains the generic associated type `Member`
|
||||
= help: consider moving `Member` to another trait
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
@ -20,7 +20,6 @@ error[E0038]: the trait `MapLike` cannot be made into an object
|
||||
LL | as Box<dyn MapLike<u8, u8, VRefCont = dyn RefCont<'_, u8>>>;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `MapLike` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `VRefCont` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/issue-79422.rs:20:10
|
||||
|
|
||||
@ -28,6 +27,7 @@ LL | trait MapLike<K, V> {
|
||||
| ------- this trait cannot be made into an object...
|
||||
LL | type VRefCont<'a>: RefCont<'a, V>;
|
||||
| ^^^^^^^^ ...because it contains the generic associated type `VRefCont`
|
||||
= help: consider moving `VRefCont` to another trait
|
||||
|
||||
error[E0038]: the trait `MapLike` cannot be made into an object
|
||||
--> $DIR/issue-79422.rs:41:13
|
||||
@ -35,7 +35,6 @@ error[E0038]: the trait `MapLike` cannot be made into an object
|
||||
LL | let m = Box::new(std::collections::BTreeMap::<u8, u8>::new())
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `MapLike` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `VRefCont` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/issue-79422.rs:20:10
|
||||
|
|
||||
@ -43,6 +42,7 @@ LL | trait MapLike<K, V> {
|
||||
| ------- this trait cannot be made into an object...
|
||||
LL | type VRefCont<'a>: RefCont<'a, V>;
|
||||
| ^^^^^^^^ ...because it contains the generic associated type `VRefCont`
|
||||
= help: consider moving `VRefCont` to another trait
|
||||
= note: required because of the requirements on the impl of `CoerceUnsized<Box<dyn MapLike<u8, u8, VRefCont = (dyn RefCont<'_, u8> + 'static)>>>` for `Box<BTreeMap<u8, u8>>`
|
||||
= note: required by cast to type `Box<dyn MapLike<u8, u8, VRefCont = (dyn RefCont<'_, u8> + 'static)>>`
|
||||
|
||||
|
@ -4,7 +4,6 @@ error[E0038]: the trait `StreamingIterator` cannot be made into an object
|
||||
LL | fn min_size(x: &mut dyn for<'a> StreamingIterator<Item<'a> = &'a i32>) -> usize {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `StreamingIterator` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `Item` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/trait-objects.rs:4:10
|
||||
|
|
||||
@ -12,6 +11,7 @@ LL | trait StreamingIterator {
|
||||
| ----------------- this trait cannot be made into an object...
|
||||
LL | type Item<'a> where Self: 'a;
|
||||
| ^^^^ ...because it contains the generic associated type `Item`
|
||||
= help: consider moving `Item` to another trait
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -4,7 +4,6 @@ error[E0038]: the trait `Bar` cannot be made into an object
|
||||
LL | fn foo(b: &dyn Bar) {
|
||||
| ^^^^^^^ `Bar` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `foo` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/issue-18959.rs:1:20
|
||||
|
|
||||
@ -12,6 +11,7 @@ LL | pub trait Foo { fn foo<T>(&self, ext_thing: &T); }
|
||||
| ^^^ ...because method `foo` has generic type parameters
|
||||
LL | pub trait Bar: Foo { }
|
||||
| --- this trait cannot be made into an object...
|
||||
= help: consider moving `foo` to another trait
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -4,7 +4,6 @@ error[E0038]: the trait `Bar` cannot be made into an object
|
||||
LL | let test: &mut dyn Bar = &mut thing;
|
||||
| ^^^^^^^^^^^^ `Bar` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `foo` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/issue-19538.rs:2:8
|
||||
|
|
||||
@ -13,6 +12,7 @@ LL | fn foo<T>(&self, val: T);
|
||||
...
|
||||
LL | trait Bar: Foo { }
|
||||
| --- this trait cannot be made into an object...
|
||||
= help: consider moving `foo` to another trait
|
||||
|
||||
error[E0038]: the trait `Bar` cannot be made into an object
|
||||
--> $DIR/issue-19538.rs:17:30
|
||||
@ -20,7 +20,6 @@ error[E0038]: the trait `Bar` cannot be made into an object
|
||||
LL | let test: &mut dyn Bar = &mut thing;
|
||||
| ^^^^^^^^^^ `Bar` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `foo` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/issue-19538.rs:2:8
|
||||
|
|
||||
@ -29,6 +28,7 @@ LL | fn foo<T>(&self, val: T);
|
||||
...
|
||||
LL | trait Bar: Foo { }
|
||||
| --- this trait cannot be made into an object...
|
||||
= help: consider moving `foo` to another trait
|
||||
= note: required because of the requirements on the impl of `CoerceUnsized<&mut dyn Bar>` for `&mut Thing`
|
||||
= note: required by cast to type `&mut dyn Bar`
|
||||
|
||||
|
@ -4,7 +4,6 @@ error[E0038]: the trait `Bar` cannot be made into an object
|
||||
LL | fn make_bar<T:Bar>(t: &T) -> &dyn Bar {
|
||||
| ^^^^^^^^ `Bar` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `X` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/object-safety-associated-consts.rs:9:11
|
||||
|
|
||||
@ -12,6 +11,7 @@ LL | trait Bar {
|
||||
| --- this trait cannot be made into an object...
|
||||
LL | const X: usize;
|
||||
| ^ ...because it contains this associated `const`
|
||||
= help: consider moving `X` to another trait
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -4,7 +4,6 @@ error[E0038]: the trait `Bar` cannot be made into an object
|
||||
LL | t
|
||||
| ^ `Bar` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `X` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/object-safety-associated-consts.rs:9:11
|
||||
|
|
||||
@ -12,6 +11,7 @@ LL | trait Bar {
|
||||
| --- this trait cannot be made into an object...
|
||||
LL | const X: usize;
|
||||
| ^ ...because it contains this associated `const`
|
||||
= help: consider moving `X` to another trait
|
||||
= note: required because of the requirements on the impl of `CoerceUnsized<&dyn Bar>` for `&T`
|
||||
= note: required by cast to type `&dyn Bar`
|
||||
|
||||
|
@ -4,7 +4,6 @@ error[E0038]: the trait `Bar` cannot be made into an object
|
||||
LL | fn make_bar<T:Bar>(t: &T) -> &dyn Bar {
|
||||
| ^^^^^^^^ `Bar` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `bar` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/object-safety-generics.rs:10:8
|
||||
|
|
||||
@ -12,6 +11,7 @@ LL | trait Bar {
|
||||
| --- this trait cannot be made into an object...
|
||||
LL | fn bar<T>(&self, t: T);
|
||||
| ^^^ ...because method `bar` has generic type parameters
|
||||
= help: consider moving `bar` to another trait
|
||||
|
||||
error[E0038]: the trait `Bar` cannot be made into an object
|
||||
--> $DIR/object-safety-generics.rs:24:39
|
||||
@ -19,7 +19,6 @@ error[E0038]: the trait `Bar` cannot be made into an object
|
||||
LL | fn make_bar_explicit<T:Bar>(t: &T) -> &dyn Bar {
|
||||
| ^^^^^^^^ `Bar` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `bar` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/object-safety-generics.rs:10:8
|
||||
|
|
||||
@ -27,6 +26,7 @@ LL | trait Bar {
|
||||
| --- this trait cannot be made into an object...
|
||||
LL | fn bar<T>(&self, t: T);
|
||||
| ^^^ ...because method `bar` has generic type parameters
|
||||
= help: consider moving `bar` to another trait
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
@ -4,7 +4,6 @@ error[E0038]: the trait `Bar` cannot be made into an object
|
||||
LL | t
|
||||
| ^ `Bar` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `bar` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/object-safety-generics.rs:10:8
|
||||
|
|
||||
@ -12,6 +11,7 @@ LL | trait Bar {
|
||||
| --- this trait cannot be made into an object...
|
||||
LL | fn bar<T>(&self, t: T);
|
||||
| ^^^ ...because method `bar` has generic type parameters
|
||||
= help: consider moving `bar` to another trait
|
||||
= note: required because of the requirements on the impl of `CoerceUnsized<&dyn Bar>` for `&T`
|
||||
= note: required by cast to type `&dyn Bar`
|
||||
|
||||
@ -21,7 +21,6 @@ error[E0038]: the trait `Bar` cannot be made into an object
|
||||
LL | t as &dyn Bar
|
||||
| ^ `Bar` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `bar` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/object-safety-generics.rs:10:8
|
||||
|
|
||||
@ -29,6 +28,7 @@ LL | trait Bar {
|
||||
| --- this trait cannot be made into an object...
|
||||
LL | fn bar<T>(&self, t: T);
|
||||
| ^^^ ...because method `bar` has generic type parameters
|
||||
= help: consider moving `bar` to another trait
|
||||
= note: required because of the requirements on the impl of `CoerceUnsized<&dyn Bar>` for `&T`
|
||||
= note: required by cast to type `&dyn Bar`
|
||||
|
||||
|
@ -4,7 +4,6 @@ error[E0038]: the trait `Bar` cannot be made into an object
|
||||
LL | fn make_bar<T:Bar>(t: &T) -> &dyn Bar {
|
||||
| ^^^^^^^^ `Bar` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `bar` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/object-safety-mentions-Self.rs:11:22
|
||||
|
|
||||
@ -12,6 +11,7 @@ LL | trait Bar {
|
||||
| --- this trait cannot be made into an object...
|
||||
LL | fn bar(&self, x: &Self);
|
||||
| ^^^^^ ...because method `bar` references the `Self` type in this parameter
|
||||
= help: consider moving `bar` to another trait
|
||||
|
||||
error[E0038]: the trait `Baz` cannot be made into an object
|
||||
--> $DIR/object-safety-mentions-Self.rs:28:30
|
||||
@ -19,7 +19,6 @@ error[E0038]: the trait `Baz` cannot be made into an object
|
||||
LL | fn make_baz<T:Baz>(t: &T) -> &dyn Baz {
|
||||
| ^^^^^^^^ `Baz` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `baz` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/object-safety-mentions-Self.rs:15:22
|
||||
|
|
||||
@ -27,6 +26,7 @@ LL | trait Baz {
|
||||
| --- this trait cannot be made into an object...
|
||||
LL | fn baz(&self) -> Self;
|
||||
| ^^^^ ...because method `baz` references the `Self` type in its return type
|
||||
= help: consider moving `baz` to another trait
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
@ -4,7 +4,6 @@ error[E0038]: the trait `Bar` cannot be made into an object
|
||||
LL | t
|
||||
| ^ `Bar` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `bar` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/object-safety-mentions-Self.rs:11:22
|
||||
|
|
||||
@ -12,6 +11,7 @@ LL | trait Bar {
|
||||
| --- this trait cannot be made into an object...
|
||||
LL | fn bar(&self, x: &Self);
|
||||
| ^^^^^ ...because method `bar` references the `Self` type in this parameter
|
||||
= help: consider moving `bar` to another trait
|
||||
= note: required because of the requirements on the impl of `CoerceUnsized<&dyn Bar>` for `&T`
|
||||
= note: required by cast to type `&dyn Bar`
|
||||
|
||||
@ -21,7 +21,6 @@ error[E0038]: the trait `Baz` cannot be made into an object
|
||||
LL | t
|
||||
| ^ `Baz` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `baz` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/object-safety-mentions-Self.rs:15:22
|
||||
|
|
||||
@ -29,6 +28,7 @@ LL | trait Baz {
|
||||
| --- this trait cannot be made into an object...
|
||||
LL | fn baz(&self) -> Self;
|
||||
| ^^^^ ...because method `baz` references the `Self` type in its return type
|
||||
= help: consider moving `baz` to another trait
|
||||
= note: required because of the requirements on the impl of `CoerceUnsized<&dyn Baz>` for `&T`
|
||||
= note: required by cast to type `&dyn Baz`
|
||||
|
||||
|
@ -4,8 +4,6 @@ error[E0038]: the trait `Trait` cannot be made into an object
|
||||
LL | fn bar(x: &dyn Trait) {}
|
||||
| ^^^^^^^^^ `Trait` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `baz` to another trait
|
||||
= help: consider moving `bat` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/object-unsafe-trait-references-self.rs:2:22
|
||||
|
|
||||
@ -15,6 +13,8 @@ LL | fn baz(&self, _: Self) {}
|
||||
| ^^^^ ...because method `baz` references the `Self` type in this parameter
|
||||
LL | fn bat(&self) -> Self {}
|
||||
| ^^^^ ...because method `bat` references the `Self` type in its return type
|
||||
= help: consider moving `baz` to another trait
|
||||
= help: consider moving `bat` to another trait
|
||||
|
||||
error[E0038]: the trait `Other` cannot be made into an object
|
||||
--> $DIR/object-unsafe-trait-references-self.rs:10:12
|
||||
|
@ -127,9 +127,6 @@ error[E0038]: the trait `assoc_const::C` cannot be made into an object
|
||||
LL | <dyn C>::A;
|
||||
| ^^^^^ `assoc_const::C` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `C` to another trait
|
||||
= help: consider moving `B` to another trait
|
||||
= help: consider moving `A` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/item-privacy.rs:25:15
|
||||
|
|
||||
@ -143,6 +140,9 @@ LL | pub trait C: A + B {
|
||||
| - this trait cannot be made into an object...
|
||||
LL | const C: u8 = 0;
|
||||
| ^ ...because it contains this associated `const`
|
||||
= help: consider moving `C` to another trait
|
||||
= help: consider moving `A` to another trait
|
||||
= help: consider moving `B` to another trait
|
||||
|
||||
error[E0223]: ambiguous associated type
|
||||
--> $DIR/item-privacy.rs:115:12
|
||||
|
@ -32,8 +32,6 @@ error[E0038]: the trait `bar` cannot be made into an object
|
||||
LL | (box 10 as Box<dyn bar>).dup();
|
||||
| ^^^^^^^^^^^^ `bar` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `dup` to another trait
|
||||
= help: consider moving `blah` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/test-2.rs:4:30
|
||||
|
|
||||
@ -42,6 +40,8 @@ LL | trait bar { fn dup(&self) -> Self; fn blah<X>(&self); }
|
||||
| | |
|
||||
| | ...because method `dup` references the `Self` type in its return type
|
||||
| this trait cannot be made into an object...
|
||||
= help: consider moving `dup` to another trait
|
||||
= help: consider moving `blah` to another trait
|
||||
|
||||
error[E0038]: the trait `bar` cannot be made into an object
|
||||
--> $DIR/test-2.rs:13:6
|
||||
@ -49,8 +49,6 @@ error[E0038]: the trait `bar` cannot be made into an object
|
||||
LL | (box 10 as Box<dyn bar>).dup();
|
||||
| ^^^^^^ `bar` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `dup` to another trait
|
||||
= help: consider moving `blah` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/test-2.rs:4:30
|
||||
|
|
||||
@ -59,6 +57,8 @@ LL | trait bar { fn dup(&self) -> Self; fn blah<X>(&self); }
|
||||
| | |
|
||||
| | ...because method `dup` references the `Self` type in its return type
|
||||
| this trait cannot be made into an object...
|
||||
= help: consider moving `dup` to another trait
|
||||
= help: consider moving `blah` to another trait
|
||||
= note: required because of the requirements on the impl of `CoerceUnsized<Box<dyn bar>>` for `Box<{integer}>`
|
||||
= note: required by cast to type `Box<dyn bar>`
|
||||
|
||||
|
@ -16,7 +16,6 @@ error[E0038]: the trait `MyAdd` cannot be made into an object
|
||||
LL | let y = x as dyn MyAdd<i32>;
|
||||
| ^^^^^^^^^^^^^^ `MyAdd` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `add` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/type-parameter-defaults-referencing-Self-ppaux.rs:6:55
|
||||
|
|
||||
@ -24,6 +23,7 @@ LL | trait MyAdd<Rhs=Self> { fn add(&self, other: &Rhs) -> Self; }
|
||||
| ----- ^^^^ ...because method `add` references the `Self` type in its return type
|
||||
| |
|
||||
| this trait cannot be made into an object...
|
||||
= help: consider moving `add` to another trait
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
@ -4,7 +4,6 @@ error[E0038]: the trait `T` cannot be made into an object
|
||||
LL | const CONST: (bool, dyn T);
|
||||
| ^^^^^ `T` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `CONST` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/issue-87495.rs:4:11
|
||||
|
|
||||
@ -12,6 +11,7 @@ LL | trait T {
|
||||
| - this trait cannot be made into an object...
|
||||
LL | const CONST: (bool, dyn T);
|
||||
| ^^^^^ ...because it contains this associated `const`
|
||||
= help: consider moving `CONST` to another trait
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -4,7 +4,6 @@ error[E0038]: the trait `A` cannot be made into an object
|
||||
LL | let _x: &dyn A;
|
||||
| ^^^^^^ `A` cannot be made into an object
|
||||
|
|
||||
= help: consider moving `foo` to another trait
|
||||
note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety>
|
||||
--> $DIR/wf-object-safe.rs:5:23
|
||||
|
|
||||
@ -12,6 +11,7 @@ LL | trait A {
|
||||
| - this trait cannot be made into an object...
|
||||
LL | fn foo(&self, _x: &Self);
|
||||
| ^^^^^ ...because method `foo` references the `Self` type in this parameter
|
||||
= help: consider moving `foo` to another trait
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user