mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
Continue compilation after check_mod_type_wf errors
This commit is contained in:
parent
bb89df6903
commit
5f6390f947
@ -187,8 +187,10 @@ pub fn check_crate(tcx: TyCtxt<'_>) -> Result<(), ErrorGuaranteed> {
|
||||
}
|
||||
|
||||
tcx.sess.time("wf_checking", || {
|
||||
tcx.hir().try_par_for_each_module(|module| tcx.ensure().check_mod_type_wf(module))
|
||||
})?;
|
||||
tcx.hir().par_for_each_module(|module| {
|
||||
let _ = tcx.ensure().check_mod_type_wf(module);
|
||||
})
|
||||
});
|
||||
|
||||
if tcx.features().rustc_attrs {
|
||||
collect::test_opaque_hidden_types(tcx)?;
|
||||
|
@ -518,12 +518,9 @@ impl<'a, 'tcx> ConfirmContext<'a, 'tcx> {
|
||||
.report_mismatched_types(&cause, method_self_ty, self_ty, terr)
|
||||
.emit();
|
||||
} else {
|
||||
span_bug!(
|
||||
self.span,
|
||||
"{} was a subtype of {} but now is not?",
|
||||
self_ty,
|
||||
method_self_ty
|
||||
);
|
||||
error!("{self_ty} was a subtype of {method_self_ty} but now is not?");
|
||||
// This must already have errored elsewhere.
|
||||
self.dcx().has_errors().unwrap();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ use crate::thir::cx::region::Scope;
|
||||
use crate::thir::cx::Cx;
|
||||
use crate::thir::util::UserAnnotatedTyHelpers;
|
||||
use itertools::Itertools;
|
||||
use rustc_ast::LitKind;
|
||||
use rustc_data_structures::stack::ensure_sufficient_stack;
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::def::{CtorKind, CtorOf, DefKind, Res};
|
||||
@ -20,7 +21,8 @@ use rustc_middle::ty::GenericArgs;
|
||||
use rustc_middle::ty::{
|
||||
self, AdtKind, InlineConstArgs, InlineConstArgsParts, ScalarInt, Ty, UpvarArgs, UserType,
|
||||
};
|
||||
use rustc_span::{sym, Span};
|
||||
use rustc_span::source_map::Spanned;
|
||||
use rustc_span::{sym, Span, DUMMY_SP};
|
||||
use rustc_target::abi::{FieldIdx, FIRST_VARIANT};
|
||||
|
||||
impl<'tcx> Cx<'tcx> {
|
||||
@ -894,7 +896,14 @@ impl<'tcx> Cx<'tcx> {
|
||||
Res::Def(DefKind::ConstParam, def_id) => {
|
||||
let hir_id = self.tcx.local_def_id_to_hir_id(def_id.expect_local());
|
||||
let generics = self.tcx.generics_of(hir_id.owner);
|
||||
let index = generics.param_def_id_to_index[&def_id];
|
||||
let Some(&index) = generics.param_def_id_to_index.get(&def_id) else {
|
||||
self.tcx.dcx().has_errors().unwrap();
|
||||
// We already errored about a late bound const
|
||||
return ExprKind::Literal {
|
||||
lit: &Spanned { span: DUMMY_SP, node: LitKind::Err },
|
||||
neg: false,
|
||||
};
|
||||
};
|
||||
let name = self.tcx.hir().name(hir_id);
|
||||
let param = ty::ParamConst::new(index, name);
|
||||
|
||||
|
@ -3112,10 +3112,11 @@ impl<'tcx> InferCtxtPrivExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
||||
obligation.param_env,
|
||||
trait_ref.args.const_at(3),
|
||||
) else {
|
||||
span_bug!(
|
||||
self.dcx().span_delayed_bug(
|
||||
span,
|
||||
"Unable to construct rustc_transmute::Assume where it was previously possible"
|
||||
"Unable to construct rustc_transmute::Assume where it was previously possible",
|
||||
);
|
||||
return GetSafeTransmuteErrorAndReason::Silent;
|
||||
};
|
||||
|
||||
match rustc_transmute::TransmuteTypeEnv::new(self.infcx).is_transmutable(
|
||||
|
@ -25,7 +25,11 @@ impl Tr for Foo {
|
||||
|
||||
fn main() {
|
||||
b(10);
|
||||
//~^ ERROR functions with the "rust-call" ABI must take a single non-self tuple argument
|
||||
Foo::bar();
|
||||
//~^ ERROR functions with the "rust-call" ABI must take a single non-self tuple argument
|
||||
<Foo as Tr>::a();
|
||||
//~^ ERROR functions with the "rust-call" ABI must take a single non-self tuple argument
|
||||
<Foo as Tr>::b();
|
||||
//~^ ERROR functions with the "rust-call" ABI must take a single non-self tuple argument
|
||||
}
|
||||
|
@ -28,6 +28,30 @@ error: functions with the "rust-call" ABI must take a single non-self tuple argu
|
||||
LL | extern "rust-call" fn b() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
error[E0277]: functions with the "rust-call" ABI must take a single non-self tuple argument
|
||||
--> $DIR/issue-22565-rust-call.rs:27:7
|
||||
|
|
||||
LL | b(10);
|
||||
| ^^ the trait `Tuple` is not implemented for `i32`
|
||||
|
||||
error: functions with the "rust-call" ABI must take a single non-self tuple argument
|
||||
--> $DIR/issue-22565-rust-call.rs:29:5
|
||||
|
|
||||
LL | Foo::bar();
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: functions with the "rust-call" ABI must take a single non-self tuple argument
|
||||
--> $DIR/issue-22565-rust-call.rs:31:5
|
||||
|
|
||||
LL | <Foo as Tr>::a();
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: functions with the "rust-call" ABI must take a single non-self tuple argument
|
||||
--> $DIR/issue-22565-rust-call.rs:33:5
|
||||
|
|
||||
LL | <Foo as Tr>::b();
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 9 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
@ -7,6 +7,7 @@ trait Trait {
|
||||
impl dyn Trait {
|
||||
//~^ ERROR the trait `Trait` cannot be made into an object [E0038]
|
||||
const fn n() -> usize { Self::N }
|
||||
//~^ ERROR the trait `Trait` cannot be made into an object [E0038]
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
@ -13,6 +13,21 @@ LL | const N: usize;
|
||||
| ^ ...because it contains this associated `const`
|
||||
= help: consider moving `N` to another trait
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0038]: the trait `Trait` cannot be made into an object
|
||||
--> $DIR/associated-const-in-trait.rs:9:29
|
||||
|
|
||||
LL | const fn n() -> usize { Self::N }
|
||||
| ^^^^ `Trait` 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/associated-const-in-trait.rs:4:11
|
||||
|
|
||||
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 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0038`.
|
||||
|
@ -10,10 +10,15 @@ impl TraitWAssocConst for impl Demo { //~ ERROR E0404
|
||||
|
||||
fn foo<A: TraitWAssocConst<A=32>>() { //~ ERROR E0658
|
||||
foo::<Demo>()();
|
||||
//~^ ERROR is not satisfied
|
||||
//~| ERROR type mismatch
|
||||
//~| ERROR expected function, found `()`
|
||||
}
|
||||
|
||||
fn main<A: TraitWAssocConst<A=32>>() {
|
||||
//~^ ERROR E0658
|
||||
//~| ERROR E0131
|
||||
foo::<Demo>();
|
||||
//~^ ERROR type mismatch
|
||||
//~| ERROR is not satisfied
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ LL | fn foo<A: TraitWAssocConst<A=32>>() {
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error[E0658]: associated const equality is incomplete
|
||||
--> $DIR/issue-105330.rs:15:29
|
||||
--> $DIR/issue-105330.rs:18:29
|
||||
|
|
||||
LL | fn main<A: TraitWAssocConst<A=32>>() {
|
||||
| ^^^^
|
||||
@ -44,12 +44,76 @@ LL | impl TraitWAssocConst for impl Demo {
|
||||
= note: `impl Trait` is only allowed in arguments and return types of functions and methods
|
||||
|
||||
error[E0131]: `main` function is not allowed to have generic parameters
|
||||
--> $DIR/issue-105330.rs:15:8
|
||||
--> $DIR/issue-105330.rs:18:8
|
||||
|
|
||||
LL | fn main<A: TraitWAssocConst<A=32>>() {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ `main` cannot have generic parameters
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
error[E0277]: the trait bound `Demo: TraitWAssocConst` is not satisfied
|
||||
--> $DIR/issue-105330.rs:12:11
|
||||
|
|
||||
LL | foo::<Demo>()();
|
||||
| ^^^^ the trait `TraitWAssocConst` is not implemented for `Demo`
|
||||
|
|
||||
= help: the trait `TraitWAssocConst` is implemented for `{type error}`
|
||||
note: required by a bound in `foo`
|
||||
--> $DIR/issue-105330.rs:11:11
|
||||
|
|
||||
LL | fn foo<A: TraitWAssocConst<A=32>>() {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `foo`
|
||||
|
||||
Some errors have detailed explanations: E0131, E0404, E0562, E0658.
|
||||
error[E0271]: type mismatch resolving `<Demo as TraitWAssocConst>::A == 32`
|
||||
--> $DIR/issue-105330.rs:12:11
|
||||
|
|
||||
LL | foo::<Demo>()();
|
||||
| ^^^^ expected `32`, found `<Demo as TraitWAssocConst>::A`
|
||||
|
|
||||
= note: expected constant `32`
|
||||
found constant `<Demo as TraitWAssocConst>::A`
|
||||
note: required by a bound in `foo`
|
||||
--> $DIR/issue-105330.rs:11:28
|
||||
|
|
||||
LL | fn foo<A: TraitWAssocConst<A=32>>() {
|
||||
| ^^^^ required by this bound in `foo`
|
||||
|
||||
error[E0618]: expected function, found `()`
|
||||
--> $DIR/issue-105330.rs:12:5
|
||||
|
|
||||
LL | fn foo<A: TraitWAssocConst<A=32>>() {
|
||||
| ----------------------------------- `foo::<Demo>` defined here returns `()`
|
||||
LL | foo::<Demo>()();
|
||||
| ^^^^^^^^^^^^^--
|
||||
| |
|
||||
| call expression requires function
|
||||
|
||||
error[E0277]: the trait bound `Demo: TraitWAssocConst` is not satisfied
|
||||
--> $DIR/issue-105330.rs:21:11
|
||||
|
|
||||
LL | foo::<Demo>();
|
||||
| ^^^^ the trait `TraitWAssocConst` is not implemented for `Demo`
|
||||
|
|
||||
= help: the trait `TraitWAssocConst` is implemented for `{type error}`
|
||||
note: required by a bound in `foo`
|
||||
--> $DIR/issue-105330.rs:11:11
|
||||
|
|
||||
LL | fn foo<A: TraitWAssocConst<A=32>>() {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `foo`
|
||||
|
||||
error[E0271]: type mismatch resolving `<Demo as TraitWAssocConst>::A == 32`
|
||||
--> $DIR/issue-105330.rs:21:11
|
||||
|
|
||||
LL | foo::<Demo>();
|
||||
| ^^^^ expected `32`, found `<Demo as TraitWAssocConst>::A`
|
||||
|
|
||||
= note: expected constant `32`
|
||||
found constant `<Demo as TraitWAssocConst>::A`
|
||||
note: required by a bound in `foo`
|
||||
--> $DIR/issue-105330.rs:11:28
|
||||
|
|
||||
LL | fn foo<A: TraitWAssocConst<A=32>>() {
|
||||
| ^^^^ required by this bound in `foo`
|
||||
|
||||
error: aborting due to 11 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0131, E0271, E0277, E0404, E0562, E0618, E0658.
|
||||
For more information about an error, try `rustc --explain E0131`.
|
||||
|
@ -8,5 +8,6 @@ impl Lexer<'d> { //~ ERROR use of undeclared lifetime name `'d`
|
||||
}
|
||||
|
||||
fn test(_: Lexer::Cursor) {}
|
||||
//~^ ERROR: lifetime may not live long enough
|
||||
|
||||
fn main() {}
|
||||
|
@ -6,6 +6,15 @@ LL | impl Lexer<'d> {
|
||||
| |
|
||||
| help: consider introducing lifetime `'d` here: `<'d>`
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/issue-109299.rs:10:1
|
||||
|
|
||||
LL | fn test(_: Lexer::Cursor) {}
|
||||
| ^^^^^^^^-^^^^^^^^^^^^^^^^
|
||||
| | |
|
||||
| | has type `Lexer<'1>::Cursor`
|
||||
| requires that `'1` must outlive `'static`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0261`.
|
||||
|
@ -18,5 +18,7 @@ impl Other for u32 {}
|
||||
fn bar(_: Foo<for<'a> fn(&'a ())>::Assoc) {}
|
||||
//~^ ERROR mismatched types
|
||||
//~| ERROR mismatched types
|
||||
//~| ERROR higher-ranked subtype error
|
||||
//~| ERROR higher-ranked subtype error
|
||||
|
||||
fn main() {}
|
||||
|
@ -17,6 +17,20 @@ LL | fn bar(_: Foo<for<'a> fn(&'a ())>::Assoc) {}
|
||||
found struct `Foo<for<'a> fn(&'a ())>`
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error: higher-ranked subtype error
|
||||
--> $DIR/issue-109789.rs:18:1
|
||||
|
|
||||
LL | fn bar(_: Foo<for<'a> fn(&'a ())>::Assoc) {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: higher-ranked subtype error
|
||||
--> $DIR/issue-109789.rs:18:1
|
||||
|
|
||||
LL | fn bar(_: Foo<for<'a> fn(&'a ())>::Assoc) {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0308`.
|
||||
|
@ -10,5 +10,6 @@ impl Lexer<'static> {
|
||||
}
|
||||
|
||||
fn test(_: Lexer::Cursor) {} //~ ERROR mismatched types
|
||||
//~^ ERROR: lifetime may not live long enough
|
||||
|
||||
fn main() {}
|
||||
|
@ -13,6 +13,15 @@ LL | fn test(_: Lexer::Cursor) {}
|
||||
| ^^^^^
|
||||
= note: ...does not necessarily outlive the static lifetime
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/regionck-2.rs:12:1
|
||||
|
|
||||
LL | fn test(_: Lexer::Cursor) {}
|
||||
| ^^^^^^^^-^^^^^^^^^^^^^^^^
|
||||
| | |
|
||||
| | has type `Lexer<'1>::Cursor`
|
||||
| requires that `'1` must outlive `'static`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0308`.
|
||||
|
@ -8,9 +8,9 @@ trait Get {
|
||||
}
|
||||
|
||||
trait Other {
|
||||
fn uhoh<U:Get>(&self, foo: U, bar: <Self as Get>::Value) where Self: Get {}
|
||||
fn uhoh<U: Get>(&self, foo: U, bar: <Self as Get>::Value) where Self: Sized, Self: Get, Self: Get {}
|
||||
//~^ ERROR the trait bound `Self: Get` is not satisfied
|
||||
//~| ERROR the trait bound `Self: Get` is not satisfied
|
||||
}
|
||||
|
||||
fn main() {
|
||||
}
|
||||
fn main() {}
|
||||
|
@ -8,9 +8,9 @@ trait Get {
|
||||
}
|
||||
|
||||
trait Other {
|
||||
fn uhoh<U:Get>(&self, foo: U, bar: <Self as Get>::Value) {}
|
||||
fn uhoh<U: Get>(&self, foo: U, bar: <Self as Get>::Value) where Self: Sized {}
|
||||
//~^ ERROR the trait bound `Self: Get` is not satisfied
|
||||
//~| ERROR the trait bound `Self: Get` is not satisfied
|
||||
}
|
||||
|
||||
fn main() {
|
||||
}
|
||||
fn main() {}
|
||||
|
@ -1,14 +1,25 @@
|
||||
error[E0277]: the trait bound `Self: Get` is not satisfied
|
||||
--> $DIR/associated-types-for-unimpl-trait.rs:11:40
|
||||
--> $DIR/associated-types-for-unimpl-trait.rs:11:41
|
||||
|
|
||||
LL | fn uhoh<U:Get>(&self, foo: U, bar: <Self as Get>::Value) {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^ the trait `Get` is not implemented for `Self`
|
||||
LL | fn uhoh<U: Get>(&self, foo: U, bar: <Self as Get>::Value) where Self: Sized {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^ the trait `Get` is not implemented for `Self`
|
||||
|
|
||||
help: consider further restricting `Self`
|
||||
|
|
||||
LL | fn uhoh<U:Get>(&self, foo: U, bar: <Self as Get>::Value) where Self: Get {}
|
||||
| +++++++++++++++
|
||||
LL | fn uhoh<U: Get>(&self, foo: U, bar: <Self as Get>::Value) where Self: Sized, Self: Get {}
|
||||
| +++++++++++
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0277]: the trait bound `Self: Get` is not satisfied
|
||||
--> $DIR/associated-types-for-unimpl-trait.rs:11:81
|
||||
|
|
||||
LL | fn uhoh<U: Get>(&self, foo: U, bar: <Self as Get>::Value) where Self: Sized {}
|
||||
| ^^ the trait `Get` is not implemented for `Self`
|
||||
|
|
||||
help: consider further restricting `Self`
|
||||
|
|
||||
LL | fn uhoh<U: Get>(&self, foo: U, bar: <Self as Get>::Value) where Self: Sized, Self: Get {}
|
||||
| +++++++++++
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
@ -10,7 +10,7 @@ struct Struct {
|
||||
impl Struct {
|
||||
fn uhoh<T>(foo: <T as Get>::Value) {}
|
||||
//~^ ERROR the trait bound `T: Get` is not satisfied
|
||||
//~| ERROR the trait bound `T: Get` is not satisfied
|
||||
}
|
||||
|
||||
fn main() {
|
||||
}
|
||||
fn main() {}
|
||||
|
@ -9,6 +9,17 @@ help: consider restricting type parameter `T`
|
||||
LL | fn uhoh<T: Get>(foo: <T as Get>::Value) {}
|
||||
| +++++
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0277]: the trait bound `T: Get` is not satisfied
|
||||
--> $DIR/associated-types-no-suitable-bound.rs:11:40
|
||||
|
|
||||
LL | fn uhoh<T>(foo: <T as Get>::Value) {}
|
||||
| ^^ the trait `Get` is not implemented for `T`
|
||||
|
|
||||
help: consider restricting type parameter `T`
|
||||
|
|
||||
LL | fn uhoh<T: Get>(foo: <T as Get>::Value) {}
|
||||
| +++++
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
@ -16,6 +16,7 @@ trait Get {
|
||||
trait Other {
|
||||
fn uhoh<U:Get>(&self, foo: U, bar: <Self as Get>::Value) {}
|
||||
//~^ ERROR the trait bound `Self: Get` is not satisfied
|
||||
//~| ERROR the trait bound `Self: Get` is not satisfied
|
||||
}
|
||||
|
||||
fn main() { }
|
||||
|
@ -9,6 +9,17 @@ help: consider further restricting `Self`
|
||||
LL | fn uhoh<U:Get>(&self, foo: U, bar: <Self as Get>::Value) where Self: Get {}
|
||||
| +++++++++++++++
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0277]: the trait bound `Self: Get` is not satisfied
|
||||
--> $DIR/associated-types-no-suitable-supertrait-2.rs:17:62
|
||||
|
|
||||
LL | fn uhoh<U:Get>(&self, foo: U, bar: <Self as Get>::Value) {}
|
||||
| ^^ the trait `Get` is not implemented for `Self`
|
||||
|
|
||||
help: consider further restricting `Self`
|
||||
|
|
||||
LL | fn uhoh<U:Get>(&self, foo: U, bar: <Self as Get>::Value) where Self: Get {}
|
||||
| +++++++++++++++
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
@ -16,12 +16,14 @@ trait Get {
|
||||
trait Other {
|
||||
fn uhoh<U:Get>(&self, foo: U, bar: <Self as Get>::Value) {}
|
||||
//~^ ERROR the trait bound `Self: Get` is not satisfied
|
||||
//~| ERROR the trait bound `Self: Get` is not satisfied
|
||||
}
|
||||
|
||||
impl<T:Get> Other for T {
|
||||
fn uhoh<U:Get>(&self, foo: U, bar: <(T, U) as Get>::Value) {}
|
||||
//~^ ERROR the trait bound `(T, U): Get` is not satisfied
|
||||
//~| ERROR the trait bound `(T, U): Get` is not satisfied
|
||||
//~| ERROR the trait bound `(T, U): Get` is not satisfied
|
||||
}
|
||||
|
||||
fn main() { }
|
||||
|
@ -1,5 +1,5 @@
|
||||
error[E0277]: the trait bound `(T, U): Get` is not satisfied
|
||||
--> $DIR/associated-types-no-suitable-supertrait.rs:22:5
|
||||
--> $DIR/associated-types-no-suitable-supertrait.rs:23:5
|
||||
|
|
||||
LL | fn uhoh<U:Get>(&self, foo: U, bar: <(T, U) as Get>::Value) {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Get` is not implemented for `(T, U)`
|
||||
@ -11,7 +11,7 @@ LL | trait Get {
|
||||
| ^^^^^^^^^
|
||||
|
||||
error[E0277]: the trait bound `(T, U): Get` is not satisfied
|
||||
--> $DIR/associated-types-no-suitable-supertrait.rs:22:40
|
||||
--> $DIR/associated-types-no-suitable-supertrait.rs:23:40
|
||||
|
|
||||
LL | fn uhoh<U:Get>(&self, foo: U, bar: <(T, U) as Get>::Value) {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ the trait `Get` is not implemented for `(T, U)`
|
||||
@ -33,6 +33,29 @@ help: consider further restricting `Self`
|
||||
LL | fn uhoh<U:Get>(&self, foo: U, bar: <Self as Get>::Value) where Self: Get {}
|
||||
| +++++++++++++++
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
error[E0277]: the trait bound `Self: Get` is not satisfied
|
||||
--> $DIR/associated-types-no-suitable-supertrait.rs:17:62
|
||||
|
|
||||
LL | fn uhoh<U:Get>(&self, foo: U, bar: <Self as Get>::Value) {}
|
||||
| ^^ the trait `Get` is not implemented for `Self`
|
||||
|
|
||||
help: consider further restricting `Self`
|
||||
|
|
||||
LL | fn uhoh<U:Get>(&self, foo: U, bar: <Self as Get>::Value) where Self: Get {}
|
||||
| +++++++++++++++
|
||||
|
||||
error[E0277]: the trait bound `(T, U): Get` is not satisfied
|
||||
--> $DIR/associated-types-no-suitable-supertrait.rs:23:64
|
||||
|
|
||||
LL | fn uhoh<U:Get>(&self, foo: U, bar: <(T, U) as Get>::Value) {}
|
||||
| ^^ the trait `Get` is not implemented for `(T, U)`
|
||||
|
|
||||
help: this trait has no implementations, consider adding one
|
||||
--> $DIR/associated-types-no-suitable-supertrait.rs:12:1
|
||||
|
|
||||
LL | trait Get {
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
@ -15,4 +15,5 @@ impl X<'_> for i32 {
|
||||
|
||||
fn main() {
|
||||
1i32.f("abc");
|
||||
//~^ ERROR the trait bound `str: Clone`
|
||||
}
|
||||
|
@ -14,6 +14,22 @@ LL | where
|
||||
LL | for<'b> <Self as X<'b>>::U: Clone,
|
||||
| ^^^^^ required by this bound in `X`
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0277]: the trait bound `str: Clone` is not satisfied
|
||||
--> $DIR/hr-associated-type-bound-1.rs:17:10
|
||||
|
|
||||
LL | 1i32.f("abc");
|
||||
| ^ the trait `Clone` is not implemented for `str`
|
||||
|
|
||||
= help: the trait `Clone` is implemented for `String`
|
||||
note: required by a bound in `X::f`
|
||||
--> $DIR/hr-associated-type-bound-1.rs:3:33
|
||||
|
|
||||
LL | for<'b> <Self as X<'b>>::U: Clone,
|
||||
| ^^^^^ required by this bound in `X::f`
|
||||
...
|
||||
LL | fn f(&self, x: &Self::U) {
|
||||
| - required by a bound in this associated function
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
@ -7,6 +7,9 @@ where
|
||||
fn f<'a, T: X<'a> + ?Sized>(x: &<T as X<'a>>::U) {
|
||||
//~^ ERROR the trait bound `for<'b> <T as X<'b>>::U: Clone` is not satisfied
|
||||
<<T as X<'_>>::U>::clone(x);
|
||||
//~^ ERROR the trait bound `for<'b> <T as X<'b>>::U: Clone` is not satisfied
|
||||
//~| ERROR the trait bound `for<'b> <T as X<'b>>::U: Clone` is not satisfied
|
||||
//~| ERROR the trait bound `<T as X<'_>>::U: Clone` is not satisfied
|
||||
}
|
||||
|
||||
pub fn main() {
|
||||
|
@ -17,6 +17,55 @@ help: consider further restricting the associated type
|
||||
LL | fn f<'a, T: X<'a> + ?Sized>(x: &<T as X<'a>>::U) where for<'b> <T as X<'b>>::U: Clone {
|
||||
| ++++++++++++++++++++++++++++++++++++
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0277]: the trait bound `for<'b> <T as X<'b>>::U: Clone` is not satisfied
|
||||
--> $DIR/hr-associated-type-bound-object.rs:9:7
|
||||
|
|
||||
LL | <<T as X<'_>>::U>::clone(x);
|
||||
| ^ the trait `for<'b> Clone` is not implemented for `<T as X<'b>>::U`
|
||||
|
|
||||
note: required by a bound in `X::U`
|
||||
--> $DIR/hr-associated-type-bound-object.rs:3:33
|
||||
|
|
||||
LL | for<'b> <Self as X<'b>>::U: Clone,
|
||||
| ^^^^^ required by this bound in `X::U`
|
||||
LL | {
|
||||
LL | type U: ?Sized;
|
||||
| - required by a bound in this associated type
|
||||
help: consider further restricting the associated type
|
||||
|
|
||||
LL | fn f<'a, T: X<'a> + ?Sized>(x: &<T as X<'a>>::U) where for<'b> <T as X<'b>>::U: Clone {
|
||||
| ++++++++++++++++++++++++++++++++++++
|
||||
|
||||
error[E0277]: the trait bound `<T as X<'_>>::U: Clone` is not satisfied
|
||||
--> $DIR/hr-associated-type-bound-object.rs:9:6
|
||||
|
|
||||
LL | <<T as X<'_>>::U>::clone(x);
|
||||
| ^^^^^^^^^^^^^^^ the trait `Clone` is not implemented for `<T as X<'_>>::U`
|
||||
|
|
||||
help: consider further restricting the associated type
|
||||
|
|
||||
LL | fn f<'a, T: X<'a> + ?Sized>(x: &<T as X<'a>>::U) where <T as X<'_>>::U: Clone {
|
||||
| ++++++++++++++++++++++++++++
|
||||
|
||||
error[E0277]: the trait bound `for<'b> <T as X<'b>>::U: Clone` is not satisfied
|
||||
--> $DIR/hr-associated-type-bound-object.rs:9:5
|
||||
|
|
||||
LL | <<T as X<'_>>::U>::clone(x);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `for<'b> Clone` is not implemented for `<T as X<'b>>::U`
|
||||
|
|
||||
note: required by a bound in `X`
|
||||
--> $DIR/hr-associated-type-bound-object.rs:3:33
|
||||
|
|
||||
LL | trait X<'a>
|
||||
| - required by a bound in this trait
|
||||
LL | where
|
||||
LL | for<'b> <Self as X<'b>>::U: Clone,
|
||||
| ^^^^^ required by this bound in `X`
|
||||
help: consider further restricting the associated type
|
||||
|
|
||||
LL | fn f<'a, T: X<'a> + ?Sized>(x: &<T as X<'a>>::U) where for<'b> <T as X<'b>>::U: Clone {
|
||||
| ++++++++++++++++++++++++++++++++++++
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
@ -17,4 +17,5 @@ impl<'a> Y<'a, u8> for u8 {
|
||||
|
||||
fn main() {
|
||||
1u8.g("abc");
|
||||
//~^ ERROR the trait bound `str: Clone` is not satisfied
|
||||
}
|
||||
|
@ -14,6 +14,22 @@ LL | trait Y<'a, T: ?Sized>
|
||||
LL | for<'b> <Self as Y<'b, T>>::V: Clone,
|
||||
| ^^^^^ required by this bound in `Y`
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0277]: the trait bound `str: Clone` is not satisfied
|
||||
--> $DIR/hr-associated-type-bound-param-1.rs:19:9
|
||||
|
|
||||
LL | 1u8.g("abc");
|
||||
| ^ the trait `Clone` is not implemented for `str`
|
||||
|
|
||||
= help: the trait `Clone` is implemented for `String`
|
||||
note: required by a bound in `Y::g`
|
||||
--> $DIR/hr-associated-type-bound-param-1.rs:4:36
|
||||
|
|
||||
LL | for<'b> <Self as Y<'b, T>>::V: Clone,
|
||||
| ^^^^^ required by this bound in `Y::g`
|
||||
...
|
||||
LL | fn g(&self, x: &Self::V) {
|
||||
| - required by a bound in this associated function
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
@ -8,6 +8,8 @@ where
|
||||
type W: ?Sized;
|
||||
fn h(&self, x: &T::W) {
|
||||
<T::W>::clone(x);
|
||||
//~^ the trait bound `str: Clone` is not satisfied
|
||||
//~| the trait bound `str: Clone` is not satisfied
|
||||
}
|
||||
}
|
||||
|
||||
@ -18,4 +20,5 @@ impl<'a> Z<'a, u16> for u16 {
|
||||
|
||||
fn main() {
|
||||
1u16.h("abc");
|
||||
//~^ ERROR Clone` is not satisfied
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ LL | for<'b> <T as Z<'b, u16>>::W: Clone,
|
||||
| ^^^^^ required by this bound in `Z`
|
||||
|
||||
error[E0277]: the trait bound `str: Clone` is not satisfied
|
||||
--> $DIR/hr-associated-type-bound-param-2.rs:15:14
|
||||
--> $DIR/hr-associated-type-bound-param-2.rs:17:14
|
||||
|
|
||||
LL | type W = str;
|
||||
| ^^^ the trait `Clone` is not implemented for `str`, which is required by `for<'b> <u16 as Z<'b, u16>>::W: Clone`
|
||||
@ -47,6 +47,54 @@ LL | for<'b> <T as Z<'b, u16>>::W: Clone,
|
||||
| ^^^^^ required by this bound in `Z`
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
error[E0277]: the trait bound `str: Clone` is not satisfied
|
||||
--> $DIR/hr-associated-type-bound-param-2.rs:10:10
|
||||
|
|
||||
LL | <T::W>::clone(x);
|
||||
| ^^^^ the trait `Clone` is not implemented for `str`
|
||||
|
|
||||
= help: the trait `Clone` is implemented for `String`
|
||||
note: required by a bound in `Z::W`
|
||||
--> $DIR/hr-associated-type-bound-param-2.rs:6:35
|
||||
|
|
||||
LL | for<'b> <T as Z<'b, u16>>::W: Clone,
|
||||
| ^^^^^ required by this bound in `Z::W`
|
||||
LL | {
|
||||
LL | type W: ?Sized;
|
||||
| - required by a bound in this associated type
|
||||
|
||||
error[E0277]: the trait bound `str: Clone` is not satisfied
|
||||
--> $DIR/hr-associated-type-bound-param-2.rs:10:9
|
||||
|
|
||||
LL | <T::W>::clone(x);
|
||||
| ^^^^^^^^^^^^^^^^ the trait `Clone` is not implemented for `str`
|
||||
|
|
||||
= help: the trait `Clone` is implemented for `String`
|
||||
note: required by a bound in `Z`
|
||||
--> $DIR/hr-associated-type-bound-param-2.rs:6:35
|
||||
|
|
||||
LL | trait Z<'a, T: ?Sized>
|
||||
| - required by a bound in this trait
|
||||
...
|
||||
LL | for<'b> <T as Z<'b, u16>>::W: Clone,
|
||||
| ^^^^^ required by this bound in `Z`
|
||||
|
||||
error[E0277]: the trait bound `str: Clone` is not satisfied
|
||||
--> $DIR/hr-associated-type-bound-param-2.rs:22:10
|
||||
|
|
||||
LL | 1u16.h("abc");
|
||||
| ^ the trait `Clone` is not implemented for `str`
|
||||
|
|
||||
= help: the trait `Clone` is implemented for `String`
|
||||
note: required by a bound in `Z::h`
|
||||
--> $DIR/hr-associated-type-bound-param-2.rs:6:35
|
||||
|
|
||||
LL | for<'b> <T as Z<'b, u16>>::W: Clone,
|
||||
| ^^^^^ required by this bound in `Z::h`
|
||||
...
|
||||
LL | fn h(&self, x: &T::W) {
|
||||
| - required by a bound in this associated function
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
@ -16,4 +16,5 @@ impl<S, T> X<'_, (T,)> for (S,) {
|
||||
|
||||
pub fn main() {
|
||||
<(i32,) as X<(i32,)>>::f("abc");
|
||||
//~^ ERROR the trait bound `str: Clone` is not satisfied
|
||||
}
|
||||
|
@ -14,6 +14,22 @@ LL | trait X<'a, T>
|
||||
LL | for<'b> <T as X<'b, T>>::U: Clone,
|
||||
| ^^^^^ required by this bound in `X`
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0277]: the trait bound `str: Clone` is not satisfied
|
||||
--> $DIR/hr-associated-type-bound-param-3.rs:18:5
|
||||
|
|
||||
LL | <(i32,) as X<(i32,)>>::f("abc");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Clone` is not implemented for `str`
|
||||
|
|
||||
= help: the trait `Clone` is implemented for `String`
|
||||
note: required by a bound in `X::f`
|
||||
--> $DIR/hr-associated-type-bound-param-3.rs:4:33
|
||||
|
|
||||
LL | for<'b> <T as X<'b, T>>::U: Clone,
|
||||
| ^^^^^ required by this bound in `X::f`
|
||||
...
|
||||
LL | fn f(x: &<T as X<'_, T>>::U) {
|
||||
| - required by a bound in this associated function
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
@ -16,4 +16,5 @@ impl<S, T> X<'_, T> for (S,) {
|
||||
|
||||
pub fn main() {
|
||||
<(i32,) as X<i32>>::f("abc");
|
||||
//~^ ERROR the trait bound `str: Clone` is not satisfied
|
||||
}
|
||||
|
@ -14,6 +14,22 @@ LL | trait X<'a, T>
|
||||
LL | for<'b> <(T,) as X<'b, T>>::U: Clone,
|
||||
| ^^^^^ required by this bound in `X`
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0277]: the trait bound `str: Clone` is not satisfied
|
||||
--> $DIR/hr-associated-type-bound-param-4.rs:18:5
|
||||
|
|
||||
LL | <(i32,) as X<i32>>::f("abc");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Clone` is not implemented for `str`
|
||||
|
|
||||
= help: the trait `Clone` is implemented for `String`
|
||||
note: required by a bound in `X::f`
|
||||
--> $DIR/hr-associated-type-bound-param-4.rs:4:36
|
||||
|
|
||||
LL | for<'b> <(T,) as X<'b, T>>::U: Clone,
|
||||
| ^^^^^ required by this bound in `X::f`
|
||||
...
|
||||
LL | fn f(x: &<(T,) as X<'_, T>>::U) {
|
||||
| - required by a bound in this associated function
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
@ -34,4 +34,5 @@ impl<S, T> X<'_, Box<T>> for S {
|
||||
|
||||
pub fn main() {
|
||||
<i32 as X<Box<i32>>>::f("abc");
|
||||
//~^ ERROR the trait bound `str: Clone` is not satisfied
|
||||
}
|
||||
|
@ -30,6 +30,22 @@ LL | trait X<'a, T: Cycle + for<'b> X<'b, T>>
|
||||
LL | for<'b> <T::Next as X<'b, T::Next>>::U: Clone,
|
||||
| ^^^^^ required by this bound in `X`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error[E0277]: the trait bound `str: Clone` is not satisfied
|
||||
--> $DIR/hr-associated-type-bound-param-5.rs:36:5
|
||||
|
|
||||
LL | <i32 as X<Box<i32>>>::f("abc");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Clone` is not implemented for `str`
|
||||
|
|
||||
= help: the trait `Clone` is implemented for `String`
|
||||
note: required by a bound in `X::f`
|
||||
--> $DIR/hr-associated-type-bound-param-5.rs:15:33
|
||||
|
|
||||
LL | for<'b> <T as X<'b, T>>::U: Clone,
|
||||
| ^^^^^ required by this bound in `X::f`
|
||||
...
|
||||
LL | fn f(x: &<T as X<'_, T>>::U) {
|
||||
| - required by a bound in this associated function
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
@ -16,4 +16,6 @@ impl<S, T> X<'_, T> for (S,) {
|
||||
|
||||
pub fn main() {
|
||||
<(i32,) as X<i32>>::f("abc");
|
||||
//~^ ERROR the trait bound `for<'b> i32: X<'b, i32>` is not satisfied
|
||||
//~| ERROR the trait bound `i32: X<'_, i32>` is not satisfied
|
||||
}
|
||||
|
@ -9,6 +9,22 @@ help: consider restricting type parameter `T`
|
||||
LL | impl<S, T: for<'b> X<'b, T>> X<'_, T> for (S,) {
|
||||
| ++++++++++++++++++
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0277]: the trait bound `for<'b> i32: X<'b, i32>` is not satisfied
|
||||
--> $DIR/hr-associated-type-bound-param-6.rs:18:5
|
||||
|
|
||||
LL | <(i32,) as X<i32>>::f("abc");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `for<'b> X<'b, i32>` is not implemented for `i32`
|
||||
|
|
||||
= help: the trait `X<'_, T>` is implemented for `(S,)`
|
||||
|
||||
error[E0277]: the trait bound `i32: X<'_, i32>` is not satisfied
|
||||
--> $DIR/hr-associated-type-bound-param-6.rs:18:27
|
||||
|
|
||||
LL | <(i32,) as X<i32>>::f("abc");
|
||||
| ^^^^^ the trait `X<'_, i32>` is not implemented for `i32`
|
||||
|
|
||||
= help: the trait `X<'_, T>` is implemented for `(S,)`
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
@ -17,4 +17,5 @@ impl<T: Copy + std::ops::Deref> UnsafeCopy<'_, T> for T {
|
||||
|
||||
pub fn main() {
|
||||
<&'static str>::bug(&"");
|
||||
//~^ type mismatch resolving `<&str as Deref>::Target == &str`
|
||||
}
|
||||
|
@ -21,6 +21,21 @@ help: consider further restricting this bound
|
||||
LL | impl<T: Copy + std::ops::Deref<Target = T>> UnsafeCopy<'_, T> for T {
|
||||
| ++++++++++++
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0271]: type mismatch resolving `<&str as Deref>::Target == &str`
|
||||
--> $DIR/hr-associated-type-projection-1.rs:19:6
|
||||
|
|
||||
LL | <&'static str>::bug(&"");
|
||||
| ^^^^^^^^^^^^ expected `&str`, found `str`
|
||||
|
|
||||
note: required by a bound in `UnsafeCopy::bug`
|
||||
--> $DIR/hr-associated-type-projection-1.rs:3:64
|
||||
|
|
||||
LL | for<'b> <Self as UnsafeCopy<'b, T>>::Item: std::ops::Deref<Target = T>,
|
||||
| ^^^^^^^^^^ required by this bound in `UnsafeCopy::bug`
|
||||
...
|
||||
LL | fn bug(item: &Self::Item) -> () {
|
||||
| --- required by a bound in this associated function
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0271`.
|
||||
|
@ -6,9 +6,9 @@ trait From<Src> {
|
||||
|
||||
trait To {
|
||||
fn to<Dst>(
|
||||
self
|
||||
self //~ ERROR the size for values of type
|
||||
) -> <Dst as From<Self>>::Result where Dst: From<Self> { //~ ERROR the size for values of type
|
||||
From::from(self)
|
||||
From::from(self) //~ ERROR the size for values of type
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -18,6 +18,42 @@ help: consider relaxing the implicit `Sized` restriction
|
||||
LL | trait From<Src: ?Sized> {
|
||||
| ++++++++
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0277]: the size for values of type `Self` cannot be known at compilation time
|
||||
--> $DIR/issue-20005.rs:9:9
|
||||
|
|
||||
LL | self
|
||||
| ^^^^ doesn't have a size known at compile-time
|
||||
|
|
||||
= help: unsized fn params are gated as an unstable feature
|
||||
help: consider further restricting `Self`
|
||||
|
|
||||
LL | ) -> <Dst as From<Self>>::Result where Dst: From<Self>, Self: Sized {
|
||||
| +++++++++++++
|
||||
help: function arguments must have a statically known size, borrowed types always have a known size
|
||||
|
|
||||
LL | &self
|
||||
| +
|
||||
|
||||
error[E0277]: the size for values of type `Self` cannot be known at compilation time
|
||||
--> $DIR/issue-20005.rs:11:9
|
||||
|
|
||||
LL | From::from(self)
|
||||
| ^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
||||
|
|
||||
note: required by an implicit `Sized` bound in `From`
|
||||
--> $DIR/issue-20005.rs:1:12
|
||||
|
|
||||
LL | trait From<Src> {
|
||||
| ^^^ required by the implicit `Sized` requirement on this type parameter in `From`
|
||||
help: consider further restricting `Self`
|
||||
|
|
||||
LL | ) -> <Dst as From<Self>>::Result where Dst: From<Self>, Self: Sized {
|
||||
| +++++++++++++
|
||||
help: consider relaxing the implicit `Sized` restriction
|
||||
|
|
||||
LL | trait From<Src: ?Sized> {
|
||||
| ++++++++
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
@ -35,6 +35,8 @@ pub trait Column: Expression {}
|
||||
//~| ERROR the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
||||
//~| ERROR the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
||||
//~| ERROR the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
||||
//~| ERROR the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
||||
//~| ERROR the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
||||
pub enum ColumnInsertValue<Col, Expr> where
|
||||
//~^ ERROR the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
||||
//~| ERROR the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
||||
|
@ -18,7 +18,7 @@ LL | Expr: Expression<SqlType=<Col::SqlType as IntoNullable>::Nullable>, <Co
|
||||
| +++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
error[E0277]: the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
||||
--> $DIR/issue-38821.rs:38:1
|
||||
--> $DIR/issue-38821.rs:40:1
|
||||
|
|
||||
LL | pub enum ColumnInsertValue<Col, Expr> where
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `NotNull` is not implemented for `<Col as Expression>::SqlType`, which is required by `<Col as Expression>::SqlType: IntoNullable`
|
||||
@ -36,7 +36,7 @@ LL | Expr: Expression<SqlType=<Col::SqlType as IntoNullable>::Nullable>, <Co
|
||||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
error[E0277]: the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
||||
--> $DIR/issue-38821.rs:38:1
|
||||
--> $DIR/issue-38821.rs:40:1
|
||||
|
|
||||
LL | / pub enum ColumnInsertValue<Col, Expr> where
|
||||
LL | |
|
||||
@ -283,6 +283,38 @@ LL | impl<T: NotNull> IntoNullable for T {
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
= note: this error originates in the derive macro `Clone` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 16 previous errors
|
||||
error[E0277]: the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
||||
--> $DIR/issue-38821.rs:23:10
|
||||
|
|
||||
LL | #[derive(Debug, Copy, Clone)]
|
||||
| ^^^^^ the trait `NotNull` is not implemented for `<Col as Expression>::SqlType`, which is required by `<Col as Expression>::SqlType: IntoNullable`
|
||||
|
|
||||
note: required for `<Col as Expression>::SqlType` to implement `IntoNullable`
|
||||
--> $DIR/issue-38821.rs:9:18
|
||||
|
|
||||
LL | impl<T: NotNull> IntoNullable for T {
|
||||
| ------- ^^^^^^^^^^^^ ^
|
||||
| |
|
||||
| unsatisfied trait bound introduced here
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
= note: this error originates in the derive macro `Debug` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0277]: the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
||||
--> $DIR/issue-38821.rs:23:23
|
||||
|
|
||||
LL | #[derive(Debug, Copy, Clone)]
|
||||
| ^^^^^ the trait `NotNull` is not implemented for `<Col as Expression>::SqlType`, which is required by `<Col as Expression>::SqlType: IntoNullable`
|
||||
|
|
||||
note: required for `<Col as Expression>::SqlType` to implement `IntoNullable`
|
||||
--> $DIR/issue-38821.rs:9:18
|
||||
|
|
||||
LL | impl<T: NotNull> IntoNullable for T {
|
||||
| ------- ^^^^^^^^^^^^ ^
|
||||
| |
|
||||
| unsatisfied trait bound introduced here
|
||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||
= note: this error originates in the derive macro `Clone` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 18 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
@ -22,5 +22,7 @@ pub trait ThriftService<Bug: NotFoo>:
|
||||
|
||||
fn with_factory<H>(factory: dyn ThriftService<()>) {}
|
||||
//~^ ERROR the trait bound `(): Foo` is not satisfied
|
||||
//~| ERROR the trait bound `(): Foo` is not satisfied
|
||||
//~| ERROR cannot be known at compilation time
|
||||
|
||||
fn main() {}
|
||||
|
@ -66,6 +66,35 @@ help: consider further restricting this bound
|
||||
LL | pub trait ThriftService<Bug: NotFoo + Foo>:
|
||||
| +++++
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
error[E0277]: the trait bound `(): Foo` is not satisfied
|
||||
--> $DIR/issue-59324.rs:23:52
|
||||
|
|
||||
LL | fn with_factory<H>(factory: dyn ThriftService<()>) {}
|
||||
| ^^ the trait `Foo` is not implemented for `()`
|
||||
|
|
||||
help: this trait has no implementations, consider adding one
|
||||
--> $DIR/issue-59324.rs:3:1
|
||||
|
|
||||
LL | pub trait Foo: NotFoo {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0277]: the size for values of type `(dyn ThriftService<(), AssocType = _> + 'static)` cannot be known at compilation time
|
||||
--> $DIR/issue-59324.rs:23:20
|
||||
|
|
||||
LL | fn with_factory<H>(factory: dyn ThriftService<()>) {}
|
||||
| ^^^^^^^ doesn't have a size known at compile-time
|
||||
|
|
||||
= help: the trait `Sized` is not implemented for `(dyn ThriftService<(), AssocType = _> + 'static)`
|
||||
= help: unsized fn params are gated as an unstable feature
|
||||
help: you can use `impl Trait` as the argument type
|
||||
|
|
||||
LL | fn with_factory<H>(factory: impl ThriftService<()>) {}
|
||||
| ~~~~
|
||||
help: function arguments must have a statically known size, borrowed types always have a known size
|
||||
|
|
||||
LL | fn with_factory<H>(factory: &dyn ThriftService<()>) {}
|
||||
| +
|
||||
|
||||
error: aborting due to 7 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
@ -21,7 +21,9 @@ impl WithAssoc for Foo<u32, ()> {
|
||||
|
||||
fn generic<T, U>(v: Foo<T, U>, f: fn(<Foo<T, U> as WithAssoc>::Output) -> i32) {
|
||||
//~^ ERROR `Foo<T, U>` cannot be sent between threads safely
|
||||
//~| ERROR `Foo<T, U>` cannot be sent between threads safely
|
||||
f(foo(v));
|
||||
//~^ ERROR `Foo<T, U>` cannot be sent between threads safely
|
||||
}
|
||||
|
||||
fn foo<T: Send>(x: T) -> <T as WithAssoc>::Output {
|
||||
|
@ -17,6 +17,50 @@ help: consider introducing a `where` clause, but there might be an alternative b
|
||||
LL | fn generic<T, U>(v: Foo<T, U>, f: fn(<Foo<T, U> as WithAssoc>::Output) -> i32) where Foo<T, U>: Send {
|
||||
| +++++++++++++++++++++
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0277]: `Foo<T, U>` cannot be sent between threads safely
|
||||
--> $DIR/issue-83857-ub.rs:22:80
|
||||
|
|
||||
LL | fn generic<T, U>(v: Foo<T, U>, f: fn(<Foo<T, U> as WithAssoc>::Output) -> i32) {
|
||||
| ________________________________________________________________________________^
|
||||
LL | |
|
||||
LL | |
|
||||
LL | | f(foo(v));
|
||||
LL | |
|
||||
LL | | }
|
||||
| |_^ `Foo<T, U>` cannot be sent between threads safely
|
||||
|
|
||||
= help: the trait `Send` is not implemented for `Foo<T, U>`, which is required by `Foo<T, U>: WithAssoc`
|
||||
note: required for `Foo<T, U>` to implement `WithAssoc`
|
||||
--> $DIR/issue-83857-ub.rs:15:15
|
||||
|
|
||||
LL | impl<T: Send> WithAssoc for T {
|
||||
| ---- ^^^^^^^^^ ^
|
||||
| |
|
||||
| unsatisfied trait bound introduced here
|
||||
help: consider introducing a `where` clause, but there might be an alternative better way to express this requirement
|
||||
|
|
||||
LL | fn generic<T, U>(v: Foo<T, U>, f: fn(<Foo<T, U> as WithAssoc>::Output) -> i32) where Foo<T, U>: Send {
|
||||
| +++++++++++++++++++++
|
||||
|
||||
error[E0277]: `Foo<T, U>` cannot be sent between threads safely
|
||||
--> $DIR/issue-83857-ub.rs:25:11
|
||||
|
|
||||
LL | f(foo(v));
|
||||
| --- ^ `Foo<T, U>` cannot be sent between threads safely
|
||||
| |
|
||||
| required by a bound introduced by this call
|
||||
|
|
||||
= help: the trait `Send` is not implemented for `Foo<T, U>`
|
||||
note: required by a bound in `foo`
|
||||
--> $DIR/issue-83857-ub.rs:29:11
|
||||
|
|
||||
LL | fn foo<T: Send>(x: T) -> <T as WithAssoc>::Output {
|
||||
| ^^^^ required by this bound in `foo`
|
||||
help: consider introducing a `where` clause, but there might be an alternative better way to express this requirement
|
||||
|
|
||||
LL | fn generic<T, U>(v: Foo<T, U>, f: fn(<Foo<T, U> as WithAssoc>::Output) -> i32) where Foo<T, U>: Send {
|
||||
| +++++++++++++++++++++
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
@ -14,4 +14,5 @@ fn main() {
|
||||
let (tx, rx) = channel();
|
||||
1193182.foo(tx);
|
||||
assert_eq!(rx.recv(), 1193182);
|
||||
//~^ ERROR: mismatched types
|
||||
}
|
||||
|
@ -17,6 +17,20 @@ help: consider adding an explicit lifetime bound
|
||||
LL | impl <T: Sync + 'static> Foo for T { }
|
||||
| +++++++++
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/builtin-superkinds-self-type.rs:16:27
|
||||
|
|
||||
LL | assert_eq!(rx.recv(), 1193182);
|
||||
| ^^^^^^^ expected `Result<{integer}, RecvError>`, found integer
|
||||
|
|
||||
= note: expected enum `Result<{integer}, RecvError>`
|
||||
found type `{integer}`
|
||||
help: try wrapping the expression in `Ok`
|
||||
|
|
||||
LL | assert_eq!(rx.recv(), Ok(1193182));
|
||||
| +++ +
|
||||
|
||||
For more information about this error, try `rustc --explain E0310`.
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0308, E0310.
|
||||
For more information about an error, try `rustc --explain E0308`.
|
||||
|
@ -5,6 +5,7 @@ struct X<F> where F: FnOnce() + 'static + Send {
|
||||
fn foo<F>(blk: F) -> X<F> where F: FnOnce() + 'static {
|
||||
//~^ ERROR `F` cannot be sent between threads safely
|
||||
return X { field: blk };
|
||||
//~^ ERROR `F` cannot be sent between threads safely
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
@ -14,6 +14,22 @@ help: consider further restricting this bound
|
||||
LL | fn foo<F>(blk: F) -> X<F> where F: FnOnce() + 'static + std::marker::Send {
|
||||
| +++++++++++++++++++
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0277]: `F` cannot be sent between threads safely
|
||||
--> $DIR/closure-bounds-cant-promote-superkind-in-struct.rs:7:23
|
||||
|
|
||||
LL | return X { field: blk };
|
||||
| ^^^ `F` cannot be sent between threads safely
|
||||
|
|
||||
note: required by a bound in `X`
|
||||
--> $DIR/closure-bounds-cant-promote-superkind-in-struct.rs:1:43
|
||||
|
|
||||
LL | struct X<F> where F: FnOnce() + 'static + Send {
|
||||
| ^^^^ required by this bound in `X`
|
||||
help: consider further restricting this bound
|
||||
|
|
||||
LL | fn foo<F>(blk: F) -> X<F> where F: FnOnce() + 'static + std::marker::Send {
|
||||
| +++++++++++++++++++
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
@ -23,6 +23,7 @@ impl MyTrait<MyType> for MyType {
|
||||
//~^ ERROR E0119
|
||||
fn get(&self) -> usize { (*self).clone() }
|
||||
//~^ ERROR incompatible type
|
||||
//~| ERROR mismatched types
|
||||
}
|
||||
|
||||
fn main() { }
|
||||
|
@ -24,7 +24,15 @@ LL | fn get(&self) -> T;
|
||||
= note: expected signature `fn(&MyType) -> MyType`
|
||||
found signature `fn(&MyType) -> usize`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/coherence-blanket-conflicts-with-specific-multidispatch.rs:24:30
|
||||
|
|
||||
LL | fn get(&self) -> usize { (*self).clone() }
|
||||
| ----- ^^^^^^^^^^^^^^^ expected `usize`, found `MyType`
|
||||
| |
|
||||
| expected `usize` because of return type
|
||||
|
||||
Some errors have detailed explanations: E0053, E0119.
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0053, E0119, E0308.
|
||||
For more information about an error, try `rustc --explain E0053`.
|
||||
|
@ -15,6 +15,7 @@ impl<T> MyTrait for (T,T) {
|
||||
impl<A,B> MyTrait for (A,B) {
|
||||
//~^ ERROR E0119
|
||||
fn get(&self) -> usize { self.dummy }
|
||||
//~^ ERROR: no field `dummy`
|
||||
}
|
||||
|
||||
fn main() { }
|
||||
|
@ -7,6 +7,13 @@ LL | impl<T> MyTrait for (T,T) {
|
||||
LL | impl<A,B> MyTrait for (A,B) {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(_, _)`
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0609]: no field `dummy` on type `&(A, B)`
|
||||
--> $DIR/coherence-tuple-conflict.rs:17:35
|
||||
|
|
||||
LL | fn get(&self) -> usize { self.dummy }
|
||||
| ^^^^^ unknown field
|
||||
|
||||
For more information about this error, try `rustc --explain E0119`.
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0119, E0609.
|
||||
For more information about an error, try `rustc --explain E0119`.
|
||||
|
@ -20,6 +20,13 @@ LL | | for<'a> *const T: ToUnit<'a>,
|
||||
|
|
||||
= note: this behavior recently changed as a result of a bug fix; see rust-lang/rust#56105 for details
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0284]: type annotations needed: cannot satisfy `<for<'a> fn(&'a (), ()) as Overlap<for<'a> fn(&'a (), ())>>::Assoc == usize`
|
||||
--> $DIR/associated-type.rs:44:59
|
||||
|
|
||||
LL | foo::<for<'a> fn(&'a (), ()), for<'a> fn(&'a (), ())>(3usize);
|
||||
| ^^^^^^ cannot satisfy `<for<'a> fn(&'a (), ()) as Overlap<for<'a> fn(&'a (), ())>>::Assoc == usize`
|
||||
|
||||
For more information about this error, try `rustc --explain E0119`.
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0119, E0284.
|
||||
For more information about an error, try `rustc --explain E0119`.
|
||||
|
@ -42,4 +42,5 @@ fn foo<T: Overlap<U>, U>(x: T::Assoc) -> T::Assoc {
|
||||
|
||||
fn main() {
|
||||
foo::<for<'a> fn(&'a (), ()), for<'a> fn(&'a (), ())>(3usize);
|
||||
//[next]~^ ERROR: cannot satisfy
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
error: unconstrained generic constant
|
||||
--> $DIR/const-argument-if-length.rs:17:10
|
||||
--> $DIR/const-argument-if-length.rs:18:10
|
||||
|
|
||||
LL | pad: [u8; is_zst::<T>()],
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
@ -7,7 +7,7 @@ LL | pad: [u8; is_zst::<T>()],
|
||||
= help: try adding a `where` bound using this expression: `where [(); is_zst::<T>()]:`
|
||||
|
||||
error[E0277]: the size for values of type `T` cannot be known at compilation time
|
||||
--> $DIR/const-argument-if-length.rs:15:12
|
||||
--> $DIR/const-argument-if-length.rs:16:12
|
||||
|
|
||||
LL | pub struct AtLeastByte<T: ?Sized> {
|
||||
| - this type parameter needs to be `Sized`
|
||||
@ -30,6 +30,22 @@ help: the `Box` type always has a statically known size and allocates its conten
|
||||
LL | value: Box<T>,
|
||||
| ++++ +
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error[E0277]: the size for values of type `T` cannot be known at compilation time
|
||||
--> $DIR/const-argument-if-length.rs:7:28
|
||||
|
|
||||
LL | pub const fn is_zst<T: ?Sized>() -> usize {
|
||||
| - this type parameter needs to be `Sized`
|
||||
LL | if std::mem::size_of::<T>() == 0 {
|
||||
| ^ doesn't have a size known at compile-time
|
||||
|
|
||||
note: required by an implicit `Sized` bound in `std::mem::size_of`
|
||||
--> $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
help: consider removing the `?Sized` bound to make the type parameter `Sized`
|
||||
|
|
||||
LL - pub const fn is_zst<T: ?Sized>() -> usize {
|
||||
LL + pub const fn is_zst<T>() -> usize {
|
||||
|
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
@ -1,5 +1,5 @@
|
||||
error: generic parameters may not be used in const operations
|
||||
--> $DIR/const-argument-if-length.rs:17:24
|
||||
--> $DIR/const-argument-if-length.rs:18:24
|
||||
|
|
||||
LL | pad: [u8; is_zst::<T>()],
|
||||
| ^ cannot perform const operation using `T`
|
||||
@ -8,7 +8,7 @@ LL | pad: [u8; is_zst::<T>()],
|
||||
= help: add `#![feature(generic_const_exprs)]` to allow generic const expressions
|
||||
|
||||
error[E0277]: the size for values of type `T` cannot be known at compilation time
|
||||
--> $DIR/const-argument-if-length.rs:15:12
|
||||
--> $DIR/const-argument-if-length.rs:16:12
|
||||
|
|
||||
LL | pub struct AtLeastByte<T: ?Sized> {
|
||||
| - this type parameter needs to be `Sized`
|
||||
@ -31,6 +31,22 @@ help: the `Box` type always has a statically known size and allocates its conten
|
||||
LL | value: Box<T>,
|
||||
| ++++ +
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error[E0277]: the size for values of type `T` cannot be known at compilation time
|
||||
--> $DIR/const-argument-if-length.rs:7:28
|
||||
|
|
||||
LL | pub const fn is_zst<T: ?Sized>() -> usize {
|
||||
| - this type parameter needs to be `Sized`
|
||||
LL | if std::mem::size_of::<T>() == 0 {
|
||||
| ^ doesn't have a size known at compile-time
|
||||
|
|
||||
note: required by an implicit `Sized` bound in `std::mem::size_of`
|
||||
--> $SRC_DIR/core/src/mem/mod.rs:LL:COL
|
||||
help: consider removing the `?Sized` bound to make the type parameter `Sized`
|
||||
|
|
||||
LL - pub const fn is_zst<T: ?Sized>() -> usize {
|
||||
LL + pub const fn is_zst<T>() -> usize {
|
||||
|
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
@ -5,6 +5,7 @@
|
||||
|
||||
pub const fn is_zst<T: ?Sized>() -> usize {
|
||||
if std::mem::size_of::<T>() == 0 {
|
||||
//~^ ERROR the size for values of type `T` cannot be known at compilation time
|
||||
1
|
||||
} else {
|
||||
0
|
||||
|
@ -4,6 +4,27 @@ error[E0741]: using function pointers as const generic parameters is forbidden
|
||||
LL | struct Checked<const F: fn(usize) -> bool>;
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/fn-const-param-infer.rs:23:24
|
||||
|
|
||||
LL | let _ = Checked::<{generic_arg::<u32>}>;
|
||||
| ^^^^^^^^^^^^^^^^^^ expected fn pointer, found fn item
|
||||
|
|
||||
= note: expected fn pointer `fn(usize) -> _`
|
||||
found fn item `fn(u32) -> _ {generic_arg::<u32>}`
|
||||
|
||||
For more information about this error, try `rustc --explain E0741`.
|
||||
error[E0282]: type annotations needed
|
||||
--> $DIR/fn-const-param-infer.rs:25:23
|
||||
|
|
||||
LL | let _ = Checked::<generic>;
|
||||
| ^^^^^^^ cannot infer type of the type parameter `T` declared on the function `generic`
|
||||
|
|
||||
help: consider specifying the generic argument
|
||||
|
|
||||
LL | let _ = Checked::<generic::<T>>;
|
||||
| +++++
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0282, E0308, E0741.
|
||||
For more information about an error, try `rustc --explain E0282`.
|
||||
|
@ -6,5 +6,27 @@ LL | struct Checked<const F: fn(usize) -> bool>;
|
||||
|
|
||||
= note: the only supported types are integers, `bool` and `char`
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/fn-const-param-infer.rs:23:24
|
||||
|
|
||||
LL | let _ = Checked::<{generic_arg::<u32>}>;
|
||||
| ^^^^^^^^^^^^^^^^^^ expected fn pointer, found fn item
|
||||
|
|
||||
= note: expected fn pointer `fn(usize) -> _`
|
||||
found fn item `fn(u32) -> _ {generic_arg::<u32>}`
|
||||
|
||||
error[E0282]: type annotations needed
|
||||
--> $DIR/fn-const-param-infer.rs:25:23
|
||||
|
|
||||
LL | let _ = Checked::<generic>;
|
||||
| ^^^^^^^ cannot infer type of the type parameter `T` declared on the function `generic`
|
||||
|
|
||||
help: consider specifying the generic argument
|
||||
|
|
||||
LL | let _ = Checked::<generic::<T>>;
|
||||
| +++++
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0282, E0308.
|
||||
For more information about an error, try `rustc --explain E0282`.
|
||||
|
@ -20,9 +20,9 @@ fn main() {
|
||||
|
||||
let _ = Checked::<generic_arg>;
|
||||
let _ = Checked::<{generic_arg::<usize>}>;
|
||||
let _ = Checked::<{generic_arg::<u32>}>;
|
||||
let _ = Checked::<{generic_arg::<u32>}>; //~ ERROR: mismatched types
|
||||
|
||||
let _ = Checked::<generic>;
|
||||
let _ = Checked::<generic>; //~ ERROR: type annotations needed
|
||||
let _ = Checked::<{generic::<u16>}>;
|
||||
let _: Checked<{generic::<u16>}> = Checked::<{generic::<u16>}>;
|
||||
let _: Checked<{generic::<u32>}> = Checked::<{generic::<u16>}>;
|
||||
|
@ -16,6 +16,7 @@ impl<const N: usize> Example<N> {
|
||||
Self {
|
||||
a: [0.; N],
|
||||
b: [0.; complex_maths(N)],
|
||||
//~^ ERROR: unconstrained generic constant
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -6,5 +6,13 @@ LL | b: [f32; complex_maths(N)],
|
||||
|
|
||||
= help: try adding a `where` bound using this expression: `where [(); complex_maths(N)]:`
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error: unconstrained generic constant
|
||||
--> $DIR/no_where_clause.rs:18:15
|
||||
|
|
||||
LL | b: [0.; complex_maths(N)],
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= help: try adding a `where` bound using this expression: `where [(); complex_maths(N)]:`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
@ -15,7 +15,7 @@ impl Foo for () {
|
||||
}
|
||||
|
||||
fn use_dyn(v: &dyn Foo) { //~ERROR the trait `Foo` cannot be made into an object
|
||||
v.test();
|
||||
v.test(); //~ERROR the trait `Foo` cannot be made into an object
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
@ -16,6 +16,24 @@ LL | fn test(&self) -> [u8; bar::<Self>()];
|
||||
= help: consider moving `test` to another trait
|
||||
= help: only type `()` implements the trait, consider using it directly instead
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0038]: the trait `Foo` cannot be made into an object
|
||||
--> $DIR/object-safety-err-ret.rs:18:5
|
||||
|
|
||||
LL | v.test();
|
||||
| ^^^^^^^^ `Foo` 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/object-safety-err-ret.rs:8:8
|
||||
|
|
||||
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
|
||||
| |
|
||||
| ...because method `test` references the `Self` type in its `where` clause
|
||||
= help: consider moving `test` to another trait
|
||||
= help: only type `()` implements the trait, consider using it directly instead
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0038`.
|
||||
|
@ -34,6 +34,47 @@ LL + #[derive(ConstParamTy)]
|
||||
LL | struct Foo(u8);
|
||||
|
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
error: unconstrained generic constant
|
||||
--> $DIR/unify-op-with-fn-call.rs:30:12
|
||||
|
|
||||
LL | bar2::<{ std::ops::Add::add(N, N) }>();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= help: try adding a `where` bound using this expression: `where [(); { std::ops::Add::add(N, N) }]:`
|
||||
|
||||
For more information about this error, try `rustc --explain E0741`.
|
||||
error[E0015]: cannot call non-const operator in constants
|
||||
--> $DIR/unify-op-with-fn-call.rs:20:39
|
||||
|
|
||||
LL | fn foo<const N: Foo>(a: Evaluatable<{ N + N }>) {
|
||||
| ^^^^^
|
||||
|
|
||||
note: impl defined here, but it is not `const`
|
||||
--> $DIR/unify-op-with-fn-call.rs:10:1
|
||||
|
|
||||
LL | impl const std::ops::Add for Foo {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
= help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
||||
error[E0015]: cannot call non-const fn `<Foo as Add>::add` in constants
|
||||
--> $DIR/unify-op-with-fn-call.rs:21:13
|
||||
|
|
||||
LL | bar::<{ std::ops::Add::add(N, N) }>();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
= help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
||||
error[E0015]: cannot call non-const fn `<usize as Add>::add` in constants
|
||||
--> $DIR/unify-op-with-fn-call.rs:30:14
|
||||
|
|
||||
LL | bar2::<{ std::ops::Add::add(N, N) }>();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: calls in constants are limited to constant functions, tuple structs and tuple variants
|
||||
= help: add `#![feature(effects)]` to the crate attributes to enable
|
||||
|
||||
error: aborting due to 7 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0015, E0741.
|
||||
For more information about an error, try `rustc --explain E0015`.
|
||||
|
@ -15,6 +15,16 @@ LL | fn foo<const N: usize, const A: [u8; N]>() {}
|
||||
= note: the only supported types are integers, `bool` and `char`
|
||||
= help: add `#![feature(adt_const_params)]` to the crate attributes to enable more complex and user defined types
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error[E0747]: type provided when a constant was expected
|
||||
--> $DIR/issue-62878.rs:10:11
|
||||
|
|
||||
LL | foo::<_, { [1] }>();
|
||||
| ^
|
||||
|
|
||||
= help: const arguments cannot yet be inferred with `_`
|
||||
= help: add `#![feature(generic_arg_infer)]` to the crate attributes to enable
|
||||
|
||||
For more information about this error, try `rustc --explain E0770`.
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0747, E0770.
|
||||
For more information about an error, try `rustc --explain E0747`.
|
||||
|
@ -8,4 +8,5 @@ fn foo<const N: usize, const A: [u8; N]>() {}
|
||||
|
||||
fn main() {
|
||||
foo::<_, { [1] }>();
|
||||
//[min]~^ ERROR: type provided when a constant was expected
|
||||
}
|
||||
|
@ -4,6 +4,18 @@ error[E0741]: using raw pointers as const generic parameters is forbidden
|
||||
LL | struct Const<const P: *const u32>;
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/raw-ptr-const-param.rs:9:40
|
||||
|
|
||||
LL | let _: Const<{ 15 as *const _ }> = Const::<{ 10 as *const _ }>;
|
||||
| ------------------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `{0xf as *const u32}`, found `{0xa as *const u32}`
|
||||
| |
|
||||
| expected due to this
|
||||
|
|
||||
= note: expected struct `Const<{0xf as *const u32}>`
|
||||
found struct `Const<{0xa as *const u32}>`
|
||||
|
||||
For more information about this error, try `rustc --explain E0741`.
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0308, E0741.
|
||||
For more information about an error, try `rustc --explain E0308`.
|
||||
|
@ -6,5 +6,17 @@ LL | struct Const<const P: *const u32>;
|
||||
|
|
||||
= note: the only supported types are integers, `bool` and `char`
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/raw-ptr-const-param.rs:9:40
|
||||
|
|
||||
LL | let _: Const<{ 15 as *const _ }> = Const::<{ 10 as *const _ }>;
|
||||
| ------------------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `{0xf as *const u32}`, found `{0xa as *const u32}`
|
||||
| |
|
||||
| expected due to this
|
||||
|
|
||||
= note: expected struct `Const<{0xf as *const u32}>`
|
||||
found struct `Const<{0xa as *const u32}>`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0308`.
|
||||
|
@ -7,5 +7,6 @@ struct Const<const P: *const u32>; //~ ERROR: using raw pointers as const generi
|
||||
|
||||
fn main() {
|
||||
let _: Const<{ 15 as *const _ }> = Const::<{ 10 as *const _ }>;
|
||||
//~^ ERROR: mismatched types
|
||||
let _: Const<{ 10 as *const _ }> = Const::<{ 10 as *const _ }>;
|
||||
}
|
||||
|
@ -16,5 +16,39 @@ LL | struct ConstBytes<const T: &'static [u8]>;
|
||||
= note: the only supported types are integers, `bool` and `char`
|
||||
= help: add `#![feature(adt_const_params)]` to the crate attributes to enable more complex and user defined types
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/slice-const-param-mismatch.rs:14:35
|
||||
|
|
||||
LL | let _: ConstString<"Hello"> = ConstString::<"World">;
|
||||
| -------------------- ^^^^^^^^^^^^^^^^^^^^^^ expected `"Hello"`, found `"World"`
|
||||
| |
|
||||
| expected due to this
|
||||
|
|
||||
= note: expected struct `ConstString<"Hello">`
|
||||
found struct `ConstString<"World">`
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/slice-const-param-mismatch.rs:16:33
|
||||
|
|
||||
LL | let _: ConstString<"ℇ㇈↦"> = ConstString::<"ℇ㇈↥">;
|
||||
| ------------------- ^^^^^^^^^^^^^^^^^^^^^ expected `"ℇ㇈↦"`, found `"ℇ㇈↥"`
|
||||
| |
|
||||
| expected due to this
|
||||
|
|
||||
= note: expected struct `ConstString<"ℇ㇈↦">`
|
||||
found struct `ConstString<"ℇ㇈↥">`
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/slice-const-param-mismatch.rs:18:33
|
||||
|
|
||||
LL | let _: ConstBytes<b"AAA"> = ConstBytes::<b"BBB">;
|
||||
| ------------------ ^^^^^^^^^^^^^^^^^^^^ expected `b"AAA"`, found `b"BBB"`
|
||||
| |
|
||||
| expected due to this
|
||||
|
|
||||
= note: expected struct `ConstBytes<b"AAA">`
|
||||
found struct `ConstBytes<b"BBB">`
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0308`.
|
||||
|
@ -11,9 +11,9 @@ struct ConstBytes<const T: &'static [u8]>;
|
||||
|
||||
pub fn main() {
|
||||
let _: ConstString<"Hello"> = ConstString::<"Hello">;
|
||||
let _: ConstString<"Hello"> = ConstString::<"World">; //[full]~ ERROR mismatched types
|
||||
let _: ConstString<"Hello"> = ConstString::<"World">; //~ ERROR mismatched types
|
||||
let _: ConstString<"ℇ㇈↦"> = ConstString::<"ℇ㇈↦">;
|
||||
let _: ConstString<"ℇ㇈↦"> = ConstString::<"ℇ㇈↥">; //[full]~ ERROR mismatched types
|
||||
let _: ConstString<"ℇ㇈↦"> = ConstString::<"ℇ㇈↥">; //~ ERROR mismatched types
|
||||
let _: ConstBytes<b"AAA"> = ConstBytes::<{&[0x41, 0x41, 0x41]}>;
|
||||
let _: ConstBytes<b"AAA"> = ConstBytes::<b"BBB">; //[full]~ ERROR mismatched types
|
||||
let _: ConstBytes<b"AAA"> = ConstBytes::<b"BBB">; //~ ERROR mismatched types
|
||||
}
|
||||
|
@ -18,4 +18,6 @@ static STATIC_BAR: str = *"bar";
|
||||
|
||||
fn main() {
|
||||
println!("{:?} {:?} {:?} {:?}", &CONST_0, &CONST_FOO, &STATIC_1, &STATIC_BAR);
|
||||
//~^ ERROR: cannot move a value of type `str`
|
||||
//~| ERROR: cannot move a value of type `dyn Debug + Sync`
|
||||
}
|
||||
|
@ -66,6 +66,19 @@ LL | static STATIC_BAR: str = *"bar";
|
||||
= help: the trait `Sized` is not implemented for `str`
|
||||
= note: constant expressions must have a statically known size
|
||||
|
||||
error: aborting due to 8 previous errors
|
||||
error[E0161]: cannot move a value of type `str`
|
||||
--> $DIR/const-unsized.rs:20:48
|
||||
|
|
||||
LL | println!("{:?} {:?} {:?} {:?}", &CONST_0, &CONST_FOO, &STATIC_1, &STATIC_BAR);
|
||||
| ^^^^^^^^^ the size of `str` cannot be statically determined
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
error[E0161]: cannot move a value of type `dyn Debug + Sync`
|
||||
--> $DIR/const-unsized.rs:20:38
|
||||
|
|
||||
LL | println!("{:?} {:?} {:?} {:?}", &CONST_0, &CONST_FOO, &STATIC_1, &STATIC_BAR);
|
||||
| ^^^^^^^ the size of `dyn Debug + Sync` cannot be statically determined
|
||||
|
||||
error: aborting due to 10 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0161, E0277.
|
||||
For more information about an error, try `rustc --explain E0161`.
|
||||
|
@ -28,4 +28,5 @@ fn require<A,B>()
|
||||
|
||||
fn main() {
|
||||
require::<i32, u32>();
|
||||
//~^ ERROR `i32: Bar<u32>` is not satisfied
|
||||
}
|
||||
|
@ -12,6 +12,25 @@ LL | trait Bar<X> { }
|
||||
= help: see issue #48214
|
||||
= help: add `#![feature(trivial_bounds)]` to the crate attributes to enable
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0277]: the trait bound `i32: Bar<u32>` is not satisfied
|
||||
--> $DIR/cross-fn-cache-hole.rs:30:15
|
||||
|
|
||||
LL | require::<i32, u32>();
|
||||
| ^^^ the trait `Bar<u32>` is not implemented for `i32`
|
||||
|
|
||||
help: this trait has no implementations, consider adding one
|
||||
--> $DIR/cross-fn-cache-hole.rs:11:1
|
||||
|
|
||||
LL | trait Bar<X> { }
|
||||
| ^^^^^^^^^^^^
|
||||
note: required by a bound in `require`
|
||||
--> $DIR/cross-fn-cache-hole.rs:25:14
|
||||
|
|
||||
LL | fn require<A,B>()
|
||||
| ------- required by a bound in this function
|
||||
LL | where A: Bar<B>
|
||||
| ^^^^^^ required by this bound in `require`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
|
@ -5,6 +5,8 @@ trait Trait {
|
||||
fn call_foo(x: Box<dyn Trait>) {
|
||||
//~^ ERROR E0038
|
||||
let y = x.foo();
|
||||
//~^ ERROR E0038
|
||||
//~| ERROR E0277
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
@ -13,6 +13,32 @@ 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 1 previous error
|
||||
error[E0038]: the trait `Trait` cannot be made into an object
|
||||
--> $DIR/E0038.rs:7:13
|
||||
|
|
||||
LL | let y = x.foo();
|
||||
| ^^^^^^^ `Trait` 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/E0038.rs:2:22
|
||||
|
|
||||
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
|
||||
|
||||
For more information about this error, try `rustc --explain E0038`.
|
||||
error[E0277]: the size for values of type `dyn Trait` cannot be known at compilation time
|
||||
--> $DIR/E0038.rs:7:9
|
||||
|
|
||||
LL | let y = x.foo();
|
||||
| ^ doesn't have a size known at compile-time
|
||||
|
|
||||
= help: the trait `Sized` is not implemented for `dyn Trait`
|
||||
= note: all local variables must have a statically known size
|
||||
= help: unsized locals are gated as an unstable feature
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0038, E0277.
|
||||
For more information about an error, try `rustc --explain E0038`.
|
||||
|
@ -1,6 +1,8 @@
|
||||
#![feature(unboxed_closures)]
|
||||
|
||||
fn foo<F: Fn<i32>>(f: F) -> F::Output { f(3) } //~ ERROR E0059
|
||||
//~^ ERROR `i32` is not a tuple
|
||||
//~| ERROR cannot use call notation
|
||||
|
||||
fn main() {
|
||||
}
|
||||
|
@ -7,6 +7,19 @@ LL | fn foo<F: Fn<i32>>(f: F) -> F::Output { f(3) }
|
||||
note: required by a bound in `Fn`
|
||||
--> $SRC_DIR/core/src/ops/function.rs:LL:COL
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0277]: `i32` is not a tuple
|
||||
--> $DIR/E0059.rs:3:41
|
||||
|
|
||||
LL | fn foo<F: Fn<i32>>(f: F) -> F::Output { f(3) }
|
||||
| ^^^^ the trait `Tuple` is not implemented for `i32`
|
||||
|
||||
For more information about this error, try `rustc --explain E0059`.
|
||||
error[E0059]: cannot use call notation; the first type parameter for the function trait is neither a tuple nor unit
|
||||
--> $DIR/E0059.rs:3:41
|
||||
|
|
||||
LL | fn foo<F: Fn<i32>>(f: F) -> F::Output { f(3) }
|
||||
| ^^^^
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0059, E0277.
|
||||
For more information about an error, try `rustc --explain E0059`.
|
||||
|
@ -15,6 +15,7 @@ fn baz<I>(x: &<I as Foo<A=Bar>>::A) {}
|
||||
//~| ERROR associated type bindings are not allowed here [E0229]
|
||||
//~| ERROR associated type bindings are not allowed here [E0229]
|
||||
//~| ERROR the trait bound `I: Foo` is not satisfied
|
||||
//~| ERROR the trait bound `I: Foo` is not satisfied
|
||||
|
||||
fn main() {
|
||||
}
|
||||
|
@ -31,7 +31,18 @@ help: consider restricting type parameter `I`
|
||||
LL | fn baz<I: Foo>(x: &<I as Foo<A=Bar>>::A) {}
|
||||
| +++++
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
error[E0277]: the trait bound `I: Foo` is not satisfied
|
||||
--> $DIR/E0229.rs:13:37
|
||||
|
|
||||
LL | fn baz<I>(x: &<I as Foo<A=Bar>>::A) {}
|
||||
| ^^ the trait `Foo` is not implemented for `I`
|
||||
|
|
||||
help: consider restricting type parameter `I`
|
||||
|
|
||||
LL | fn baz<I: Foo>(x: &<I as Foo<A=Bar>>::A) {}
|
||||
| +++++
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0229, E0277.
|
||||
For more information about an error, try `rustc --explain E0229`.
|
||||
|
@ -3,4 +3,5 @@ fn main() {
|
||||
static symbol: [usize]; //~ ERROR: the size for values of type
|
||||
}
|
||||
println!("{}", symbol[0]);
|
||||
//~^ ERROR: extern static is unsafe
|
||||
}
|
||||
|
@ -6,6 +6,15 @@ LL | static symbol: [usize];
|
||||
|
|
||||
= help: the trait `Sized` is not implemented for `[usize]`
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
||||
--> $DIR/issue-36122-accessing-externed-dst.rs:5:20
|
||||
|
|
||||
LL | println!("{}", symbol[0]);
|
||||
| ^^^^^^ use of extern static
|
||||
|
|
||||
= note: extern statics are not controlled by the Rust type system: invalid data, aliasing violations or data races will cause undefined behavior
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0133, E0277.
|
||||
For more information about an error, try `rustc --explain E0133`.
|
||||
|
@ -18,6 +18,6 @@ where
|
||||
fn main() {
|
||||
let x = String::from("Hello World!");
|
||||
let y = f(&x, ());
|
||||
drop(x);
|
||||
drop(x); //~ ERROR cannot move out of `x`
|
||||
println!("{}", y);
|
||||
}
|
||||
|
@ -16,6 +16,19 @@ help: consider adding an explicit lifetime bound
|
||||
LL | impl<'a, T: 'a> Trait<'a> for T {
|
||||
| ++++
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0505]: cannot move out of `x` because it is borrowed
|
||||
--> $DIR/implied-bounds-unnorm-associated-type-5.rs:21:10
|
||||
|
|
||||
LL | let x = String::from("Hello World!");
|
||||
| - binding `x` declared here
|
||||
LL | let y = f(&x, ());
|
||||
| -- borrow of `x` occurs here
|
||||
LL | drop(x);
|
||||
| ^ move out of `x` occurs here
|
||||
LL | println!("{}", y);
|
||||
| - borrow later used here
|
||||
|
||||
For more information about this error, try `rustc --explain E0309`.
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0309, E0505.
|
||||
For more information about an error, try `rustc --explain E0309`.
|
||||
|
@ -16,6 +16,43 @@ LL | type A<'a> where Self: 'a;
|
||||
Fooer<T>
|
||||
Fooy
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
error[E0038]: the trait `Foo` cannot be made into an object
|
||||
--> $DIR/gat-in-trait-path.rs:32:5
|
||||
|
|
||||
LL | f(Box::new(foo));
|
||||
| ^^^^^^^^^^^^^ `Foo` 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/gat-in-trait-path.rs:10:10
|
||||
|
|
||||
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
|
||||
= help: the following types implement the trait, consider defining an enum where each variant holds one of these types, implementing `Foo` for this new enum and using it instead:
|
||||
Fooer<T>
|
||||
Fooy
|
||||
|
||||
error[E0038]: the trait `Foo` cannot be made into an object
|
||||
--> $DIR/gat-in-trait-path.rs:32:5
|
||||
|
|
||||
LL | f(Box::new(foo));
|
||||
| ^^^^^^^^^^^^^ `Foo` 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/gat-in-trait-path.rs:10:10
|
||||
|
|
||||
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
|
||||
= help: the following types implement the trait, consider defining an enum where each variant holds one of these types, implementing `Foo` for this new enum and using it instead:
|
||||
Fooer<T>
|
||||
Fooy
|
||||
= note: required for the cast from `Box<Fooer<{integer}>>` to `Box<(dyn Foo<A = &'a ()> + 'static)>`
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0038`.
|
||||
|
@ -30,4 +30,6 @@ fn f(_arg : Box<dyn for<'a> Foo<A<'a> = &'a ()>>) {}
|
||||
fn main() {
|
||||
let foo = Fooer(5);
|
||||
f(Box::new(foo));
|
||||
//[base]~^ the trait `Foo` cannot be made into an object
|
||||
//[base]~| the trait `Foo` cannot be made into an object
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ impl<T> X for T { //~ ERROR: not all trait items implemented
|
||||
//~^ ERROR missing generics for associated type
|
||||
//~^^ ERROR missing generics for associated type
|
||||
//~| ERROR method `foo` has 1 type parameter but its trait declaration has 0 type parameters
|
||||
//~| ERROR may not live long enough
|
||||
t
|
||||
}
|
||||
}
|
||||
|
@ -51,7 +51,16 @@ LL | type Y<'a>;
|
||||
LL | impl<T> X for T {
|
||||
| ^^^^^^^^^^^^^^^ missing `Y` in implementation
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
error: lifetime may not live long enough
|
||||
--> $DIR/gat-trait-path-missing-lifetime.rs:8:3
|
||||
|
|
||||
LL | fn foo<'a, T1: X<Y = T1>>(t : T1) -> T1::Y<'a> {
|
||||
| ^^^^^^^--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| | |
|
||||
| | lifetime `'a` defined here
|
||||
| requires that `'a` must outlive `'static`
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0046, E0049, E0107.
|
||||
For more information about an error, try `rustc --explain E0046`.
|
||||
|
@ -13,6 +13,36 @@ 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 1 previous error
|
||||
error[E0038]: the trait `StreamingIterator` cannot be made into an object
|
||||
--> $DIR/trait-objects.rs:15:7
|
||||
|
|
||||
LL | x.size_hint().0
|
||||
| ^^^^^^^^^ `StreamingIterator` 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/trait-objects.rs:7:10
|
||||
|
|
||||
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[E0038]: the trait `StreamingIterator` cannot be made into an object
|
||||
--> $DIR/trait-objects.rs:15:5
|
||||
|
|
||||
LL | x.size_hint().0
|
||||
| ^^^^^^^^^^^^^ `StreamingIterator` 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/trait-objects.rs:7:10
|
||||
|
|
||||
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 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0038`.
|
||||
|
@ -14,6 +14,8 @@ fn min_size(x: &mut dyn for<'a> StreamingIterator<Item<'a> = &'a i32>) -> usize
|
||||
//[base]~^ the trait `StreamingIterator` cannot be made into an object
|
||||
x.size_hint().0
|
||||
//[extended]~^ borrowed data escapes
|
||||
//[base]~^^ the trait `StreamingIterator` cannot be made into an object
|
||||
//[base]~| the trait `StreamingIterator` cannot be made into an object
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
@ -19,6 +19,7 @@ impl NotObjectSafe for B {
|
||||
}
|
||||
|
||||
fn car() -> dyn NotObjectSafe { //~ ERROR the trait `NotObjectSafe` cannot be made into an object
|
||||
//~^ ERROR return type cannot have an unboxed trait object
|
||||
if true {
|
||||
return A;
|
||||
}
|
||||
@ -27,9 +28,9 @@ fn car() -> dyn NotObjectSafe { //~ ERROR the trait `NotObjectSafe` cannot be ma
|
||||
|
||||
fn cat() -> Box<dyn NotObjectSafe> { //~ ERROR the trait `NotObjectSafe` cannot be made into an
|
||||
if true {
|
||||
return Box::new(A);
|
||||
return Box::new(A); //~ ERROR cannot be made into an object
|
||||
}
|
||||
Box::new(B)
|
||||
Box::new(B) //~ ERROR cannot be made into an object
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user