You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Rollup merge of rust-lang#78365 - lcnr:const-eval-obj-safety, r=oli-obk
check object safety of generic constants
As `Self` can only be effectively used in constants with `const_evaluatable_checked` this should not matter outside of it.
Implements the first item of rust-lang#72219
> Object safety interactions with constants
r? @oli-obk for now cc @nikomatsakis
error[E0038]: the trait `Foo` cannot be made into an object
2
+
--> $DIR/object-safety-err-ret.rs:17:15
3
+
|
4
+
LL | fn use_dyn(v: &dyn Foo) {
5
+
| ^^^^^^^^ `Foo` cannot be made into an object
6
+
|
7
+
= help: consider moving `test` to another trait
8
+
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>
9
+
--> $DIR/object-safety-err-ret.rs:8:23
10
+
|
11
+
LL | trait Foo {
12
+
| --- this trait cannot be made into an object...
13
+
LL | fn test(&self) -> [u8; bar::<Self>()];
14
+
| ^^^^^^^^^^^^^^^^^^^ ...because method `test` references the `Self` type in its return type
15
+
16
+
error: aborting due to previous error
17
+
18
+
For more information about this error, try `rustc --explain E0038`.
error: the trait `Foo` cannot be made into an object
2
+
--> $DIR/object-safety-err-where-bounds.rs:9:8
3
+
|
4
+
LL | fn test(&self) where [u8; bar::<Self>()]: Sized;
5
+
| ^^^^
6
+
|
7
+
note: the lint level is defined here
8
+
--> $DIR/object-safety-err-where-bounds.rs:3:9
9
+
|
10
+
LL | #![deny(where_clauses_object_safety)]
11
+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
12
+
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
13
+
= note: for more information, see issue #51443 <https://github.com/rust-lang/rust/issues/51443>
14
+
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>
15
+
--> $DIR/object-safety-err-where-bounds.rs:9:8
16
+
|
17
+
LL | trait Foo {
18
+
| --- this trait cannot be made into an object...
19
+
LL | fn test(&self) where [u8; bar::<Self>()]: Sized;
20
+
| ^^^^ ...because method `test` references the `Self` type in its `where` clause
0 commit comments