mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 08:44:35 +00:00
9479792cb4
Rustc of course already WF-checked the field types at the definition site, but for error tainting of consts to work properly, there needs to be an error emitted at the use site. Previously, with no use-site error, we proceeded with CTFE and ran into ICEs since we are running code with type errors. Emitting use-site errors also brings struct-like constructors more in line with fn-like constructors since they already emit use-site errors for WF issues.
74 lines
3.2 KiB
Plaintext
74 lines
3.2 KiB
Plaintext
error[E0038]: the trait `Qiz` cannot be made into an object
|
|
--> $DIR/issue-19380.rs:11:29
|
|
|
|
|
LL | foos: &'static [&'static (dyn Qiz + 'static)]
|
|
| ^^^^^^^^^^^^^^^^^ `Qiz` cannot be made into an object
|
|
|
|
|
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-19380.rs:2:6
|
|
|
|
|
LL | trait Qiz {
|
|
| --- this trait cannot be made into an object...
|
|
LL | fn qiz();
|
|
| ^^^ ...because associated function `qiz` has no `self` parameter
|
|
= help: only type `Foo` implements the trait, consider using it directly instead
|
|
help: consider turning `qiz` into a method by giving it a `&self` argument
|
|
|
|
|
LL | fn qiz(&self);
|
|
| +++++
|
|
help: alternatively, consider constraining `qiz` so it does not apply to trait objects
|
|
|
|
|
LL | fn qiz() where Self: Sized;
|
|
| +++++++++++++++++
|
|
|
|
error[E0038]: the trait `Qiz` cannot be made into an object
|
|
--> $DIR/issue-19380.rs:16:33
|
|
|
|
|
LL | const BAR : Bar = Bar { foos: &[&FOO]};
|
|
| ^^^^ `Qiz` cannot be made into an object
|
|
|
|
|
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-19380.rs:2:6
|
|
|
|
|
LL | trait Qiz {
|
|
| --- this trait cannot be made into an object...
|
|
LL | fn qiz();
|
|
| ^^^ ...because associated function `qiz` has no `self` parameter
|
|
= help: only type `Foo` implements the trait, consider using it directly instead
|
|
= note: required for the cast from `&Foo` to `&'static (dyn Qiz + 'static)`
|
|
help: consider turning `qiz` into a method by giving it a `&self` argument
|
|
|
|
|
LL | fn qiz(&self);
|
|
| +++++
|
|
help: alternatively, consider constraining `qiz` so it does not apply to trait objects
|
|
|
|
|
LL | fn qiz() where Self: Sized;
|
|
| +++++++++++++++++
|
|
|
|
error[E0038]: the trait `Qiz` cannot be made into an object
|
|
--> $DIR/issue-19380.rs:16:31
|
|
|
|
|
LL | const BAR : Bar = Bar { foos: &[&FOO]};
|
|
| ^^^^^^^ `Qiz` cannot be made into an object
|
|
|
|
|
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-19380.rs:2:6
|
|
|
|
|
LL | trait Qiz {
|
|
| --- this trait cannot be made into an object...
|
|
LL | fn qiz();
|
|
| ^^^ ...because associated function `qiz` has no `self` parameter
|
|
= help: only type `Foo` implements the trait, consider using it directly instead
|
|
help: consider turning `qiz` into a method by giving it a `&self` argument
|
|
|
|
|
LL | fn qiz(&self);
|
|
| +++++
|
|
help: alternatively, consider constraining `qiz` so it does not apply to trait objects
|
|
|
|
|
LL | fn qiz() where Self: Sized;
|
|
| +++++++++++++++++
|
|
|
|
error: aborting due to 3 previous errors
|
|
|
|
For more information about this error, try `rustc --explain E0038`.
|