rust/tests/ui/statics/unsizing-wfcheck-issue-127299.stderr
Noah Lev 9479792cb4 WF-check struct field types at construction site
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.
2024-08-05 17:37:12 -07:00

88 lines
4.0 KiB
Plaintext

error[E0038]: the trait `Qux` cannot be made into an object
--> $DIR/unsizing-wfcheck-issue-127299.rs:8:24
|
LL | pub desc: &'static dyn Qux,
| ^^^^^^^ `Qux` 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/unsizing-wfcheck-issue-127299.rs:4:8
|
LL | trait Qux {
| --- this trait cannot be made into an object...
LL | fn bar() -> i32;
| ^^^ ...because associated function `bar` has no `self` parameter
help: consider turning `bar` into a method by giving it a `&self` argument
|
LL | fn bar(&self) -> i32;
| +++++
help: alternatively, consider constraining `bar` so it does not apply to trait objects
|
LL | fn bar() -> i32 where Self: Sized;
| +++++++++++++++++
error[E0277]: `(dyn Qux + 'static)` cannot be shared between threads safely
--> $DIR/unsizing-wfcheck-issue-127299.rs:12:13
|
LL | static FOO: &Lint = &Lint { desc: "desc" };
| ^^^^^ `(dyn Qux + 'static)` cannot be shared between threads safely
|
= help: within `&'static Lint`, the trait `Sync` is not implemented for `(dyn Qux + 'static)`, which is required by `&'static Lint: Sync`
= note: required because it appears within the type `&'static (dyn Qux + 'static)`
note: required because it appears within the type `Lint`
--> $DIR/unsizing-wfcheck-issue-127299.rs:7:12
|
LL | pub struct Lint {
| ^^^^
= note: required because it appears within the type `&'static Lint`
= note: shared static variables must have a type that implements `Sync`
error[E0038]: the trait `Qux` cannot be made into an object
--> $DIR/unsizing-wfcheck-issue-127299.rs:12:35
|
LL | static FOO: &Lint = &Lint { desc: "desc" };
| ^^^^^^ `Qux` 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/unsizing-wfcheck-issue-127299.rs:4:8
|
LL | trait Qux {
| --- this trait cannot be made into an object...
LL | fn bar() -> i32;
| ^^^ ...because associated function `bar` has no `self` parameter
= note: required for the cast from `&'static str` to `&'static (dyn Qux + 'static)`
help: consider turning `bar` into a method by giving it a `&self` argument
|
LL | fn bar(&self) -> i32;
| +++++
help: alternatively, consider constraining `bar` so it does not apply to trait objects
|
LL | fn bar() -> i32 where Self: Sized;
| +++++++++++++++++
error[E0038]: the trait `Qux` cannot be made into an object
--> $DIR/unsizing-wfcheck-issue-127299.rs:12:35
|
LL | static FOO: &Lint = &Lint { desc: "desc" };
| ^^^^^^ `Qux` 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/unsizing-wfcheck-issue-127299.rs:4:8
|
LL | trait Qux {
| --- this trait cannot be made into an object...
LL | fn bar() -> i32;
| ^^^ ...because associated function `bar` has no `self` parameter
help: consider turning `bar` into a method by giving it a `&self` argument
|
LL | fn bar(&self) -> i32;
| +++++
help: alternatively, consider constraining `bar` so it does not apply to trait objects
|
LL | fn bar() -> i32 where Self: Sized;
| +++++++++++++++++
error: aborting due to 4 previous errors
Some errors have detailed explanations: E0038, E0277.
For more information about an error, try `rustc --explain E0038`.