Use predicate spans instead of whole item spans
This commit is contained in:
@@ -25,7 +25,7 @@ use rustc_middle::ty::{
|
|||||||
};
|
};
|
||||||
use rustc_middle::{bug, span_bug};
|
use rustc_middle::{bug, span_bug};
|
||||||
use rustc_session::parse::feature_err;
|
use rustc_session::parse::feature_err;
|
||||||
use rustc_span::{DUMMY_SP, Ident, Span, sym};
|
use rustc_span::{DUMMY_SP, Span, sym};
|
||||||
use rustc_trait_selection::error_reporting::InferCtxtErrorExt;
|
use rustc_trait_selection::error_reporting::InferCtxtErrorExt;
|
||||||
use rustc_trait_selection::regions::{InferCtxtRegionExt, OutlivesEnvironmentBuildExt};
|
use rustc_trait_selection::regions::{InferCtxtRegionExt, OutlivesEnvironmentBuildExt};
|
||||||
use rustc_trait_selection::traits::misc::{
|
use rustc_trait_selection::traits::misc::{
|
||||||
@@ -290,8 +290,8 @@ fn check_item<'tcx>(tcx: TyCtxt<'tcx>, item: &'tcx hir::Item<'tcx>) -> Result<()
|
|||||||
}
|
}
|
||||||
res
|
res
|
||||||
}
|
}
|
||||||
hir::ItemKind::Fn { ident, sig, .. } => check_item_fn(tcx, def_id, ident, sig.decl),
|
hir::ItemKind::Fn { sig, .. } => check_item_fn(tcx, def_id, sig.decl),
|
||||||
hir::ItemKind::Const(_, _, ty, _) => check_const_item(tcx, def_id, ty.span, item.span),
|
hir::ItemKind::Const(_, _, ty, _) => check_const_item(tcx, def_id, ty.span),
|
||||||
hir::ItemKind::Struct(..) => check_type_defn(tcx, item, false),
|
hir::ItemKind::Struct(..) => check_type_defn(tcx, item, false),
|
||||||
hir::ItemKind::Union(..) => check_type_defn(tcx, item, true),
|
hir::ItemKind::Union(..) => check_type_defn(tcx, item, true),
|
||||||
hir::ItemKind::Enum(..) => check_type_defn(tcx, item, true),
|
hir::ItemKind::Enum(..) => check_type_defn(tcx, item, true),
|
||||||
@@ -307,7 +307,7 @@ fn check_item<'tcx>(tcx: TyCtxt<'tcx>, item: &'tcx hir::Item<'tcx>) -> Result<()
|
|||||||
Some(WellFormedLoc::Ty(def_id)),
|
Some(WellFormedLoc::Ty(def_id)),
|
||||||
item_ty.into(),
|
item_ty.into(),
|
||||||
);
|
);
|
||||||
check_where_clauses(wfcx, item.span, def_id);
|
check_where_clauses(wfcx, def_id);
|
||||||
Ok(())
|
Ok(())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -327,7 +327,7 @@ fn check_foreign_item<'tcx>(
|
|||||||
);
|
);
|
||||||
|
|
||||||
match item.kind {
|
match item.kind {
|
||||||
hir::ForeignItemKind::Fn(sig, ..) => check_item_fn(tcx, def_id, item.ident, sig.decl),
|
hir::ForeignItemKind::Fn(sig, ..) => check_item_fn(tcx, def_id, sig.decl),
|
||||||
hir::ForeignItemKind::Static(..) | hir::ForeignItemKind::Type => Ok(()),
|
hir::ForeignItemKind::Static(..) | hir::ForeignItemKind::Type => Ok(()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1017,13 +1017,7 @@ fn check_associated_item(
|
|||||||
ty::AssocKind::Fn { .. } => {
|
ty::AssocKind::Fn { .. } => {
|
||||||
let sig = tcx.fn_sig(item.def_id).instantiate_identity();
|
let sig = tcx.fn_sig(item.def_id).instantiate_identity();
|
||||||
let hir_sig = sig_if_method.expect("bad signature for method");
|
let hir_sig = sig_if_method.expect("bad signature for method");
|
||||||
check_fn_or_method(
|
check_fn_or_method(wfcx, sig, hir_sig.decl, item.def_id.expect_local());
|
||||||
wfcx,
|
|
||||||
item.ident(tcx).span,
|
|
||||||
sig,
|
|
||||||
hir_sig.decl,
|
|
||||||
item.def_id.expect_local(),
|
|
||||||
);
|
|
||||||
check_method_receiver(wfcx, hir_sig, item, self_ty)
|
check_method_receiver(wfcx, hir_sig, item, self_ty)
|
||||||
}
|
}
|
||||||
ty::AssocKind::Type { .. } => {
|
ty::AssocKind::Type { .. } => {
|
||||||
@@ -1152,7 +1146,7 @@ fn check_type_defn<'tcx>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
check_where_clauses(wfcx, item.span, item.owner_id.def_id);
|
check_where_clauses(wfcx, item.owner_id.def_id);
|
||||||
Ok(())
|
Ok(())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -1183,7 +1177,7 @@ fn check_trait(tcx: TyCtxt<'_>, item: &hir::Item<'_>) -> Result<(), ErrorGuarant
|
|||||||
}
|
}
|
||||||
|
|
||||||
let res = enter_wf_checking_ctxt(tcx, def_id, |wfcx| {
|
let res = enter_wf_checking_ctxt(tcx, def_id, |wfcx| {
|
||||||
check_where_clauses(wfcx, item.span, def_id);
|
check_where_clauses(wfcx, def_id);
|
||||||
Ok(())
|
Ok(())
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1219,12 +1213,11 @@ fn check_associated_type_bounds(wfcx: &WfCheckingCtxt<'_, '_>, item: ty::AssocIt
|
|||||||
fn check_item_fn(
|
fn check_item_fn(
|
||||||
tcx: TyCtxt<'_>,
|
tcx: TyCtxt<'_>,
|
||||||
def_id: LocalDefId,
|
def_id: LocalDefId,
|
||||||
ident: Ident,
|
|
||||||
decl: &hir::FnDecl<'_>,
|
decl: &hir::FnDecl<'_>,
|
||||||
) -> Result<(), ErrorGuaranteed> {
|
) -> Result<(), ErrorGuaranteed> {
|
||||||
enter_wf_checking_ctxt(tcx, def_id, |wfcx| {
|
enter_wf_checking_ctxt(tcx, def_id, |wfcx| {
|
||||||
let sig = tcx.fn_sig(def_id).instantiate_identity();
|
let sig = tcx.fn_sig(def_id).instantiate_identity();
|
||||||
check_fn_or_method(wfcx, ident.span, sig, decl, def_id);
|
check_fn_or_method(wfcx, sig, decl, def_id);
|
||||||
Ok(())
|
Ok(())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -1287,7 +1280,6 @@ fn check_const_item(
|
|||||||
tcx: TyCtxt<'_>,
|
tcx: TyCtxt<'_>,
|
||||||
def_id: LocalDefId,
|
def_id: LocalDefId,
|
||||||
ty_span: Span,
|
ty_span: Span,
|
||||||
item_span: Span,
|
|
||||||
) -> Result<(), ErrorGuaranteed> {
|
) -> Result<(), ErrorGuaranteed> {
|
||||||
enter_wf_checking_ctxt(tcx, def_id, |wfcx| {
|
enter_wf_checking_ctxt(tcx, def_id, |wfcx| {
|
||||||
let ty = tcx.type_of(def_id).instantiate_identity();
|
let ty = tcx.type_of(def_id).instantiate_identity();
|
||||||
@@ -1305,7 +1297,7 @@ fn check_const_item(
|
|||||||
tcx.require_lang_item(LangItem::Sized, ty_span),
|
tcx.require_lang_item(LangItem::Sized, ty_span),
|
||||||
);
|
);
|
||||||
|
|
||||||
check_where_clauses(wfcx, item_span, def_id);
|
check_where_clauses(wfcx, def_id);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
})
|
})
|
||||||
@@ -1402,14 +1394,14 @@ fn check_impl<'tcx>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
check_where_clauses(wfcx, item.span, item.owner_id.def_id);
|
check_where_clauses(wfcx, item.owner_id.def_id);
|
||||||
Ok(())
|
Ok(())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Checks where-clauses and inline bounds that are declared on `def_id`.
|
/// Checks where-clauses and inline bounds that are declared on `def_id`.
|
||||||
#[instrument(level = "debug", skip(wfcx))]
|
#[instrument(level = "debug", skip(wfcx))]
|
||||||
fn check_where_clauses<'tcx>(wfcx: &WfCheckingCtxt<'_, 'tcx>, span: Span, def_id: LocalDefId) {
|
pub(super) fn check_where_clauses<'tcx>(wfcx: &WfCheckingCtxt<'_, 'tcx>, def_id: LocalDefId) {
|
||||||
let infcx = wfcx.infcx;
|
let infcx = wfcx.infcx;
|
||||||
let tcx = wfcx.tcx();
|
let tcx = wfcx.tcx();
|
||||||
|
|
||||||
@@ -1564,21 +1556,18 @@ fn check_where_clauses<'tcx>(wfcx: &WfCheckingCtxt<'_, 'tcx>, span: Span, def_id
|
|||||||
|
|
||||||
let predicates = predicates.instantiate_identity(tcx);
|
let predicates = predicates.instantiate_identity(tcx);
|
||||||
|
|
||||||
let predicates = wfcx.normalize(span, None, predicates);
|
|
||||||
|
|
||||||
debug!(?predicates.predicates);
|
|
||||||
assert_eq!(predicates.predicates.len(), predicates.spans.len());
|
assert_eq!(predicates.predicates.len(), predicates.spans.len());
|
||||||
let wf_obligations = predicates.into_iter().flat_map(|(p, sp)| {
|
let wf_obligations = predicates.into_iter().flat_map(|(p, sp)| {
|
||||||
|
let p = wfcx.normalize(sp, None, p);
|
||||||
traits::wf::clause_obligations(infcx, wfcx.param_env, wfcx.body_def_id, p, sp)
|
traits::wf::clause_obligations(infcx, wfcx.param_env, wfcx.body_def_id, p, sp)
|
||||||
});
|
});
|
||||||
let obligations: Vec<_> = wf_obligations.chain(default_obligations).collect();
|
let obligations: Vec<_> = wf_obligations.chain(default_obligations).collect();
|
||||||
wfcx.register_obligations(obligations);
|
wfcx.register_obligations(obligations);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[instrument(level = "debug", skip(wfcx, span, hir_decl))]
|
#[instrument(level = "debug", skip(wfcx, hir_decl))]
|
||||||
fn check_fn_or_method<'tcx>(
|
fn check_fn_or_method<'tcx>(
|
||||||
wfcx: &WfCheckingCtxt<'_, 'tcx>,
|
wfcx: &WfCheckingCtxt<'_, 'tcx>,
|
||||||
span: Span,
|
|
||||||
sig: ty::PolyFnSig<'tcx>,
|
sig: ty::PolyFnSig<'tcx>,
|
||||||
hir_decl: &hir::FnDecl<'_>,
|
hir_decl: &hir::FnDecl<'_>,
|
||||||
def_id: LocalDefId,
|
def_id: LocalDefId,
|
||||||
@@ -1616,7 +1605,7 @@ fn check_fn_or_method<'tcx>(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
check_where_clauses(wfcx, span, def_id);
|
check_where_clauses(wfcx, def_id);
|
||||||
|
|
||||||
if sig.abi == ExternAbi::RustCall {
|
if sig.abi == ExternAbi::RustCall {
|
||||||
let span = tcx.def_span(def_id);
|
let span = tcx.def_span(def_id);
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ fn take(
|
|||||||
K = { () }
|
K = { () }
|
||||||
>,
|
>,
|
||||||
) {}
|
) {}
|
||||||
//~^^^^^^ ERROR implementation of `Project` is not general enough
|
//~^^^^^ ERROR implementation of `Project` is not general enough
|
||||||
//~^^^^ ERROR higher-ranked subtype error
|
//~^^^^ ERROR higher-ranked subtype error
|
||||||
//~| ERROR higher-ranked subtype error
|
//~| ERROR higher-ranked subtype error
|
||||||
|
|
||||||
|
|||||||
@@ -13,10 +13,14 @@ LL | K = { () }
|
|||||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||||
|
|
||||||
error: implementation of `Project` is not general enough
|
error: implementation of `Project` is not general enough
|
||||||
--> $DIR/assoc-const-eq-bound-var-in-ty-not-wf.rs:9:4
|
--> $DIR/assoc-const-eq-bound-var-in-ty-not-wf.rs:10:13
|
||||||
|
|
|
|
||||||
LL | fn take(
|
LL | _: impl Trait<
|
||||||
| ^^^^ implementation of `Project` is not general enough
|
| _____________^
|
||||||
|
LL | | <<for<'a> fn(&'a str) -> &'a str as Project>::Out as Discard>::Out,
|
||||||
|
LL | | K = { () }
|
||||||
|
LL | | >,
|
||||||
|
| |_____^ implementation of `Project` is not general enough
|
||||||
|
|
|
|
||||||
= note: `Project` would have to be implemented for the type `for<'a> fn(&'a str) -> &'a str`
|
= note: `Project` would have to be implemented for the type `for<'a> fn(&'a str) -> &'a str`
|
||||||
= note: ...but `Project` is actually implemented for the type `fn(&'0 str) -> &'0 str`, for some specific lifetime `'0`
|
= note: ...but `Project` is actually implemented for the type `fn(&'0 str) -> &'0 str`, for some specific lifetime `'0`
|
||||||
|
|||||||
@@ -32,16 +32,16 @@ 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
|
//~| 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
|
|
||||||
//~| ERROR the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
|
||||||
pub enum ColumnInsertValue<Col, Expr> where
|
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
|
||||||
//~| ERROR the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
|
||||||
Col: Column,
|
Col: Column,
|
||||||
Expr: Expression<SqlType=<Col::SqlType as IntoNullable>::Nullable>,
|
Expr: Expression<SqlType=<Col::SqlType as IntoNullable>::Nullable>,
|
||||||
|
//~^ 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
|
||||||
|
//~| ERROR the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
||||||
{
|
{
|
||||||
Expression(Col, Expr),
|
Expression(Col, Expr),
|
||||||
Default(Col),
|
Default(Col),
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
error[E0277]: the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
error[E0277]: the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
||||||
--> $DIR/issue-38821.rs:40:1
|
--> $DIR/issue-38821.rs:35:1
|
||||||
|
|
|
|
||||||
LL | pub enum ColumnInsertValue<Col, Expr> where
|
LL | pub enum ColumnInsertValue<Col, Expr> where
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `NotNull` is not implemented for `<Col as Expression>::SqlType`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `NotNull` is not implemented for `<Col as Expression>::SqlType`
|
||||||
@@ -17,16 +17,10 @@ LL | Expr: Expression<SqlType=<Col::SqlType as IntoNullable>::Nullable>, <Co
|
|||||||
| +++++++++++++++++++++++++++++++++++++
|
| +++++++++++++++++++++++++++++++++++++
|
||||||
|
|
||||||
error[E0277]: the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
error[E0277]: the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
||||||
--> $DIR/issue-38821.rs:40:1
|
--> $DIR/issue-38821.rs:38:22
|
||||||
|
|
|
|
||||||
LL | / pub enum ColumnInsertValue<Col, Expr> where
|
LL | Expr: Expression<SqlType=<Col::SqlType as IntoNullable>::Nullable>,
|
||||||
LL | |
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `NotNull` is not implemented for `<Col as Expression>::SqlType`
|
||||||
LL | |
|
|
||||||
LL | | Col: Column,
|
|
||||||
... |
|
|
||||||
LL | | Default(Col),
|
|
||||||
LL | | }
|
|
||||||
| |_^ the trait `NotNull` is not implemented for `<Col as Expression>::SqlType`
|
|
||||||
|
|
|
|
||||||
note: required for `<Col as Expression>::SqlType` to implement `IntoNullable`
|
note: required for `<Col as Expression>::SqlType` to implement `IntoNullable`
|
||||||
--> $DIR/issue-38821.rs:9:18
|
--> $DIR/issue-38821.rs:9:18
|
||||||
@@ -88,29 +82,10 @@ LL | impl<T: NotNull> IntoNullable for T {
|
|||||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||||
|
|
||||||
error[E0277]: the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
error[E0277]: the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
||||||
--> $DIR/issue-38821.rs:23:10
|
--> $DIR/issue-38821.rs:38:22
|
||||||
|
|
|
|
||||||
LL | #[derive(Debug, Copy, Clone)]
|
LL | Expr: Expression<SqlType=<Col::SqlType as IntoNullable>::Nullable>,
|
||||||
| ^^^^^ the trait `NotNull` is not implemented for `<Col as Expression>::SqlType`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `NotNull` is not implemented for `<Col as Expression>::SqlType`
|
||||||
|
|
|
||||||
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`
|
|
||||||
help: consider further restricting the associated type
|
|
||||||
|
|
|
||||||
LL | Expr: Expression<SqlType=<Col::SqlType as IntoNullable>::Nullable>, <Col as Expression>::SqlType: NotNull,
|
|
||||||
| +++++++++++++++++++++++++++++++++++++++
|
|
||||||
|
|
||||||
error[E0277]: the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
|
||||||
--> $DIR/issue-38821.rs:23:17
|
|
||||||
|
|
|
||||||
LL | #[derive(Debug, Copy, Clone)]
|
|
||||||
| ^^^^ the trait `NotNull` is not implemented for `<Col as Expression>::SqlType`
|
|
||||||
|
|
|
|
||||||
note: required for `<Col as Expression>::SqlType` to implement `IntoNullable`
|
note: required for `<Col as Expression>::SqlType` to implement `IntoNullable`
|
||||||
--> $DIR/issue-38821.rs:9:18
|
--> $DIR/issue-38821.rs:9:18
|
||||||
@@ -137,7 +112,24 @@ LL | impl<T: NotNull> IntoNullable for T {
|
|||||||
| ------- ^^^^^^^^^^^^ ^
|
| ------- ^^^^^^^^^^^^ ^
|
||||||
| |
|
| |
|
||||||
| unsatisfied trait bound introduced here
|
| unsatisfied trait bound introduced here
|
||||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
help: consider further restricting the associated type
|
||||||
|
|
|
||||||
|
LL | Expr: Expression<SqlType=<Col::SqlType as IntoNullable>::Nullable>, <Col as Expression>::SqlType: NotNull,
|
||||||
|
| +++++++++++++++++++++++++++++++++++++++
|
||||||
|
|
||||||
|
error[E0277]: the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
||||||
|
--> $DIR/issue-38821.rs:38:22
|
||||||
|
|
|
||||||
|
LL | Expr: Expression<SqlType=<Col::SqlType as IntoNullable>::Nullable>,
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `NotNull` is not implemented for `<Col as Expression>::SqlType`
|
||||||
|
|
|
||||||
|
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
|
||||||
help: consider further restricting the associated type
|
help: consider further restricting the associated type
|
||||||
|
|
|
|
||||||
LL | Expr: Expression<SqlType=<Col::SqlType as IntoNullable>::Nullable>, <Col as Expression>::SqlType: NotNull,
|
LL | Expr: Expression<SqlType=<Col::SqlType as IntoNullable>::Nullable>, <Col as Expression>::SqlType: NotNull,
|
||||||
@@ -191,10 +183,10 @@ LL | impl<T: NotNull> IntoNullable for T {
|
|||||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||||
|
|
||||||
error[E0277]: the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
error[E0277]: the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
||||||
--> $DIR/issue-38821.rs:23:23
|
--> $DIR/issue-38821.rs:38:22
|
||||||
|
|
|
|
||||||
LL | #[derive(Debug, Copy, Clone)]
|
LL | Expr: Expression<SqlType=<Col::SqlType as IntoNullable>::Nullable>,
|
||||||
| ^^^^^ the trait `NotNull` is not implemented for `<Col as Expression>::SqlType`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `NotNull` is not implemented for `<Col as Expression>::SqlType`
|
||||||
|
|
|
|
||||||
note: required for `<Col as Expression>::SqlType` to implement `IntoNullable`
|
note: required for `<Col as Expression>::SqlType` to implement `IntoNullable`
|
||||||
--> $DIR/issue-38821.rs:9:18
|
--> $DIR/issue-38821.rs:9:18
|
||||||
@@ -203,7 +195,6 @@ LL | impl<T: NotNull> IntoNullable for T {
|
|||||||
| ------- ^^^^^^^^^^^^ ^
|
| ------- ^^^^^^^^^^^^ ^
|
||||||
| |
|
| |
|
||||||
| unsatisfied trait bound introduced here
|
| unsatisfied trait bound introduced here
|
||||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
|
||||||
help: consider further restricting the associated type
|
help: consider further restricting the associated type
|
||||||
|
|
|
|
||||||
LL | Expr: Expression<SqlType=<Col::SqlType as IntoNullable>::Nullable>, <Col as Expression>::SqlType: NotNull,
|
LL | Expr: Expression<SqlType=<Col::SqlType as IntoNullable>::Nullable>, <Col as Expression>::SqlType: NotNull,
|
||||||
@@ -225,10 +216,10 @@ LL | impl<T: NotNull> IntoNullable for T {
|
|||||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||||
|
|
||||||
error[E0277]: the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
error[E0277]: the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
||||||
--> $DIR/issue-38821.rs:23:10
|
--> $DIR/issue-38821.rs:38:22
|
||||||
|
|
|
|
||||||
LL | #[derive(Debug, Copy, Clone)]
|
LL | Expr: Expression<SqlType=<Col::SqlType as IntoNullable>::Nullable>,
|
||||||
| ^^^^^ the trait `NotNull` is not implemented for `<Col as Expression>::SqlType`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `NotNull` is not implemented for `<Col as Expression>::SqlType`
|
||||||
|
|
|
|
||||||
note: required for `<Col as Expression>::SqlType` to implement `IntoNullable`
|
note: required for `<Col as Expression>::SqlType` to implement `IntoNullable`
|
||||||
--> $DIR/issue-38821.rs:9:18
|
--> $DIR/issue-38821.rs:9:18
|
||||||
@@ -237,7 +228,6 @@ LL | impl<T: NotNull> IntoNullable for T {
|
|||||||
| ------- ^^^^^^^^^^^^ ^
|
| ------- ^^^^^^^^^^^^ ^
|
||||||
| |
|
| |
|
||||||
| unsatisfied trait bound introduced here
|
| unsatisfied trait bound introduced here
|
||||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
|
||||||
|
|
||||||
error[E0277]: the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
error[E0277]: the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
||||||
--> $DIR/issue-38821.rs:23:23
|
--> $DIR/issue-38821.rs:23:23
|
||||||
@@ -255,10 +245,10 @@ LL | impl<T: NotNull> IntoNullable for T {
|
|||||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||||
|
|
||||||
error[E0277]: the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
error[E0277]: the trait bound `<Col as Expression>::SqlType: NotNull` is not satisfied
|
||||||
--> $DIR/issue-38821.rs:23:23
|
--> $DIR/issue-38821.rs:38:22
|
||||||
|
|
|
|
||||||
LL | #[derive(Debug, Copy, Clone)]
|
LL | Expr: Expression<SqlType=<Col::SqlType as IntoNullable>::Nullable>,
|
||||||
| ^^^^^ the trait `NotNull` is not implemented for `<Col as Expression>::SqlType`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `NotNull` is not implemented for `<Col as Expression>::SqlType`
|
||||||
|
|
|
|
||||||
note: required for `<Col as Expression>::SqlType` to implement `IntoNullable`
|
note: required for `<Col as Expression>::SqlType` to implement `IntoNullable`
|
||||||
--> $DIR/issue-38821.rs:9:18
|
--> $DIR/issue-38821.rs:9:18
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ pub trait Service {
|
|||||||
|
|
||||||
pub trait ThriftService<Bug: NotFoo>:
|
pub trait ThriftService<Bug: NotFoo>:
|
||||||
//~^ ERROR the trait bound `Bug: Foo` is not satisfied
|
//~^ ERROR the trait bound `Bug: Foo` is not satisfied
|
||||||
//~| ERROR the trait bound `Bug: Foo` is not satisfied
|
|
||||||
Service<AssocType = <Bug as Foo>::OnlyFoo>
|
Service<AssocType = <Bug as Foo>::OnlyFoo>
|
||||||
|
//~^ ERROR the trait bound `Bug: Foo` is not satisfied
|
||||||
{
|
{
|
||||||
fn get_service(
|
fn get_service(
|
||||||
//~^ ERROR the trait bound `Bug: Foo` is not satisfied
|
//~^ ERROR the trait bound `Bug: Foo` is not satisfied
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ error[E0277]: the trait bound `Bug: Foo` is not satisfied
|
|||||||
--> $DIR/issue-59324.rs:11:1
|
--> $DIR/issue-59324.rs:11:1
|
||||||
|
|
|
|
||||||
LL | / pub trait ThriftService<Bug: NotFoo>:
|
LL | / pub trait ThriftService<Bug: NotFoo>:
|
||||||
... |
|
LL | |
|
||||||
LL | | Service<AssocType = <Bug as Foo>::OnlyFoo>
|
LL | | Service<AssocType = <Bug as Foo>::OnlyFoo>
|
||||||
| |______________________________________________^ the trait `Foo` is not implemented for `Bug`
|
| |______________________________________________^ the trait `Foo` is not implemented for `Bug`
|
||||||
|
|
|
|
||||||
@@ -12,15 +12,10 @@ LL | pub trait ThriftService<Bug: NotFoo + Foo>:
|
|||||||
| +++++
|
| +++++
|
||||||
|
|
||||||
error[E0277]: the trait bound `Bug: Foo` is not satisfied
|
error[E0277]: the trait bound `Bug: Foo` is not satisfied
|
||||||
--> $DIR/issue-59324.rs:11:1
|
--> $DIR/issue-59324.rs:13:13
|
||||||
|
|
|
|
||||||
LL | / pub trait ThriftService<Bug: NotFoo>:
|
LL | Service<AssocType = <Bug as Foo>::OnlyFoo>
|
||||||
LL | |
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Foo` is not implemented for `Bug`
|
||||||
LL | |
|
|
||||||
LL | | Service<AssocType = <Bug as Foo>::OnlyFoo>
|
|
||||||
... |
|
|
||||||
LL | | }
|
|
||||||
| |_^ the trait `Foo` is not implemented for `Bug`
|
|
||||||
|
|
|
|
||||||
help: consider further restricting type parameter `Bug` with trait `Foo`
|
help: consider further restricting type parameter `Bug` with trait `Foo`
|
||||||
|
|
|
|
||||||
|
|||||||
@@ -7,10 +7,12 @@ async fn wrapper<F>(f: F)
|
|||||||
//~^ ERROR: expected a `FnOnce(&'a mut i32)` closure, found `i32`
|
//~^ ERROR: expected a `FnOnce(&'a mut i32)` closure, found `i32`
|
||||||
//~| ERROR: expected a `FnOnce(&'a mut i32)` closure, found `i32`
|
//~| ERROR: expected a `FnOnce(&'a mut i32)` closure, found `i32`
|
||||||
//~| ERROR: expected a `FnOnce(&'a mut i32)` closure, found `i32`
|
//~| ERROR: expected a `FnOnce(&'a mut i32)` closure, found `i32`
|
||||||
//~| ERROR: expected a `FnOnce(&'a mut i32)` closure, found `i32`
|
|
||||||
where
|
where
|
||||||
F:,
|
F:,
|
||||||
for<'a> <i32 as FnOnce<(&'a mut i32,)>>::Output: Future<Output = ()> + 'a,
|
for<'a> <i32 as FnOnce<(&'a mut i32,)>>::Output: Future<Output = ()> + 'a,
|
||||||
|
//~^ ERROR: expected a `FnOnce(&'a mut i32)` closure, found `i32`
|
||||||
|
//~| ERROR: expected a `FnOnce(&'a mut i32)` closure, found `i32`
|
||||||
|
//~| ERROR: expected a `FnOnce(&'a mut i32)` closure, found `i32`
|
||||||
{
|
{
|
||||||
//~^ ERROR: expected a `FnOnce(&'a mut i32)` closure, found `i32`
|
//~^ ERROR: expected a `FnOnce(&'a mut i32)` closure, found `i32`
|
||||||
let mut i = 41;
|
let mut i = 41;
|
||||||
|
|||||||
@@ -10,10 +10,26 @@ LL | | for<'a> <i32 as FnOnce<(&'a mut i32,)>>::Output: Future<Output = ()> + 'a
|
|||||||
= help: the trait `for<'a> FnOnce(&'a mut i32)` is not implemented for `i32`
|
= help: the trait `for<'a> FnOnce(&'a mut i32)` is not implemented for `i32`
|
||||||
|
|
||||||
error[E0277]: expected a `FnOnce(&'a mut i32)` closure, found `i32`
|
error[E0277]: expected a `FnOnce(&'a mut i32)` closure, found `i32`
|
||||||
--> $DIR/issue-76168-hr-outlives-3.rs:6:10
|
--> $DIR/issue-76168-hr-outlives-3.rs:12:50
|
||||||
|
|
|
|
||||||
LL | async fn wrapper<F>(f: F)
|
LL | for<'a> <i32 as FnOnce<(&'a mut i32,)>>::Output: Future<Output = ()> + 'a,
|
||||||
| ^^^^^^^ expected an `FnOnce(&'a mut i32)` closure, found `i32`
|
| ^^^^^^^^^^^^^^^^^^^ expected an `FnOnce(&'a mut i32)` closure, found `i32`
|
||||||
|
|
|
||||||
|
= help: the trait `for<'a> FnOnce(&'a mut i32)` is not implemented for `i32`
|
||||||
|
|
||||||
|
error[E0277]: expected a `FnOnce(&'a mut i32)` closure, found `i32`
|
||||||
|
--> $DIR/issue-76168-hr-outlives-3.rs:12:57
|
||||||
|
|
|
||||||
|
LL | for<'a> <i32 as FnOnce<(&'a mut i32,)>>::Output: Future<Output = ()> + 'a,
|
||||||
|
| ^^^^^^^^^^^ expected an `FnOnce(&'a mut i32)` closure, found `i32`
|
||||||
|
|
|
||||||
|
= help: the trait `for<'a> FnOnce(&'a mut i32)` is not implemented for `i32`
|
||||||
|
|
||||||
|
error[E0277]: expected a `FnOnce(&'a mut i32)` closure, found `i32`
|
||||||
|
--> $DIR/issue-76168-hr-outlives-3.rs:12:72
|
||||||
|
|
|
||||||
|
LL | for<'a> <i32 as FnOnce<(&'a mut i32,)>>::Output: Future<Output = ()> + 'a,
|
||||||
|
| ^^ expected an `FnOnce(&'a mut i32)` closure, found `i32`
|
||||||
|
|
|
|
||||||
= help: the trait `for<'a> FnOnce(&'a mut i32)` is not implemented for `i32`
|
= help: the trait `for<'a> FnOnce(&'a mut i32)` is not implemented for `i32`
|
||||||
|
|
||||||
@@ -41,7 +57,7 @@ LL | | for<'a> <i32 as FnOnce<(&'a mut i32,)>>::Output: Future<Output = ()> + 'a
|
|||||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||||
|
|
||||||
error[E0277]: expected a `FnOnce(&'a mut i32)` closure, found `i32`
|
error[E0277]: expected a `FnOnce(&'a mut i32)` closure, found `i32`
|
||||||
--> $DIR/issue-76168-hr-outlives-3.rs:14:1
|
--> $DIR/issue-76168-hr-outlives-3.rs:16:1
|
||||||
|
|
|
|
||||||
LL | / {
|
LL | / {
|
||||||
LL | |
|
LL | |
|
||||||
@@ -52,6 +68,6 @@ LL | | }
|
|||||||
|
|
|
|
||||||
= help: the trait `for<'a> FnOnce(&'a mut i32)` is not implemented for `i32`
|
= help: the trait `for<'a> FnOnce(&'a mut i32)` is not implemented for `i32`
|
||||||
|
|
||||||
error: aborting due to 5 previous errors
|
error: aborting due to 7 previous errors
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0277`.
|
For more information about this error, try `rustc --explain E0277`.
|
||||||
|
|||||||
@@ -7,11 +7,10 @@ struct Wrapper;
|
|||||||
impl Wrapper {
|
impl Wrapper {
|
||||||
fn do_something_wrapper<O, F>(self, _: F)
|
fn do_something_wrapper<O, F>(self, _: F)
|
||||||
//~^ ERROR the trait bound `for<'a> F: Output<'a>` is not satisfied
|
//~^ ERROR the trait bound `for<'a> F: Output<'a>` is not satisfied
|
||||||
//~| ERROR the trait bound `for<'a> F: Output<'a>` is not satisfied
|
|
||||||
where
|
where
|
||||||
F: for<'a> FnOnce(<F as Output<'a>>::Type),
|
F: for<'a> FnOnce(<F as Output<'a>>::Type),
|
||||||
//~^ ERROR the trait bound `F: Output<'_>` is not satisfied
|
//~^ ERROR the trait bound `for<'a> F: Output<'a>` is not satisfied
|
||||||
//~| ERROR the trait bound `F: Output<'_>` is not satisfied
|
//~| ERROR the trait bound `for<'a> F: Output<'a>` is not satisfied
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ error[E0277]: the trait bound `for<'a> F: Output<'a>` is not satisfied
|
|||||||
|
|
|
|
||||||
LL | / fn do_something_wrapper<O, F>(self, _: F)
|
LL | / fn do_something_wrapper<O, F>(self, _: F)
|
||||||
LL | |
|
LL | |
|
||||||
LL | |
|
|
||||||
LL | | where
|
LL | | where
|
||||||
LL | | F: for<'a> FnOnce(<F as Output<'a>>::Type),
|
LL | | F: for<'a> FnOnce(<F as Output<'a>>::Type),
|
||||||
| |___________________________________________________^ the trait `for<'a> Output<'a>` is not implemented for `F`
|
| |___________________________________________________^ the trait `for<'a> Output<'a>` is not implemented for `F`
|
||||||
@@ -14,54 +13,43 @@ LL | F: for<'a> FnOnce(<F as Output<'a>>::Type) + for<'a> Output<'a>,
|
|||||||
| ++++++++++++++++++++
|
| ++++++++++++++++++++
|
||||||
|
|
||||||
error[E0277]: the trait bound `for<'a> F: Output<'a>` is not satisfied
|
error[E0277]: the trait bound `for<'a> F: Output<'a>` is not satisfied
|
||||||
--> $DIR/filter-relevant-fn-bounds.rs:8:8
|
--> $DIR/filter-relevant-fn-bounds.rs:11:12
|
||||||
|
|
|
|
||||||
LL | fn do_something_wrapper<O, F>(self, _: F)
|
LL | F: for<'a> FnOnce(<F as Output<'a>>::Type),
|
||||||
| ^^^^^^^^^^^^^^^^^^^^ the trait `for<'a> Output<'a>` is not implemented for `F`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `for<'a> Output<'a>` is not implemented for `F`
|
||||||
|
|
|
|
||||||
help: consider further restricting type parameter `F` with trait `Output`
|
help: consider further restricting type parameter `F` with trait `Output`
|
||||||
|
|
|
|
||||||
LL | F: for<'a> FnOnce(<F as Output<'a>>::Type) + for<'a> Output<'a>,
|
LL | F: for<'a> FnOnce(<F as Output<'a>>::Type) + for<'a> Output<'a>,
|
||||||
| ++++++++++++++++++++
|
| ++++++++++++++++++++
|
||||||
|
|
||||||
error[E0277]: the trait bound `F: Output<'_>` is not satisfied
|
error[E0277]: the trait bound `for<'a> F: Output<'a>` is not satisfied
|
||||||
--> $DIR/filter-relevant-fn-bounds.rs:12:12
|
--> $DIR/filter-relevant-fn-bounds.rs:11:20
|
||||||
|
|
|
|
||||||
LL | F: for<'a> FnOnce(<F as Output<'a>>::Type),
|
LL | F: for<'a> FnOnce(<F as Output<'a>>::Type),
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Output<'_>` is not implemented for `F`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `for<'a> Output<'a>` is not implemented for `F`
|
||||||
|
|
|
|
||||||
help: consider further restricting type parameter `F` with trait `Output`
|
help: consider further restricting type parameter `F` with trait `Output`
|
||||||
|
|
|
|
||||||
LL | F: for<'a> FnOnce(<F as Output<'a>>::Type) + Output<'_>,
|
LL | F: for<'a> FnOnce(<F as Output<'a>>::Type) + for<'a> Output<'a>,
|
||||||
| ++++++++++++
|
| ++++++++++++++++++++
|
||||||
|
|
||||||
error[E0277]: the trait bound `F: Output<'_>` is not satisfied
|
error[E0277]: expected a `FnOnce(<{closure@$DIR/filter-relevant-fn-bounds.rs:20:34: 20:41} as Output<'a>>::Type)` closure, found `{closure@$DIR/filter-relevant-fn-bounds.rs:20:34: 20:41}`
|
||||||
--> $DIR/filter-relevant-fn-bounds.rs:12:20
|
--> $DIR/filter-relevant-fn-bounds.rs:20:34
|
||||||
|
|
|
||||||
LL | F: for<'a> FnOnce(<F as Output<'a>>::Type),
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Output<'_>` is not implemented for `F`
|
|
||||||
|
|
|
||||||
help: consider further restricting type parameter `F` with trait `Output`
|
|
||||||
|
|
|
||||||
LL | F: for<'a> FnOnce(<F as Output<'a>>::Type) + Output<'_>,
|
|
||||||
| ++++++++++++
|
|
||||||
|
|
||||||
error[E0277]: expected a `FnOnce(<{closure@$DIR/filter-relevant-fn-bounds.rs:21:34: 21:41} as Output<'a>>::Type)` closure, found `{closure@$DIR/filter-relevant-fn-bounds.rs:21:34: 21:41}`
|
|
||||||
--> $DIR/filter-relevant-fn-bounds.rs:21:34
|
|
||||||
|
|
|
|
||||||
LL | wrapper.do_something_wrapper(|value| ());
|
LL | wrapper.do_something_wrapper(|value| ());
|
||||||
| -------------------- ^^^^^^^^^^ expected an `FnOnce(<{closure@$DIR/filter-relevant-fn-bounds.rs:21:34: 21:41} as Output<'a>>::Type)` closure, found `{closure@$DIR/filter-relevant-fn-bounds.rs:21:34: 21:41}`
|
| -------------------- ^^^^^^^^^^ expected an `FnOnce(<{closure@$DIR/filter-relevant-fn-bounds.rs:20:34: 20:41} as Output<'a>>::Type)` closure, found `{closure@$DIR/filter-relevant-fn-bounds.rs:20:34: 20:41}`
|
||||||
| |
|
| |
|
||||||
| required by a bound introduced by this call
|
| required by a bound introduced by this call
|
||||||
|
|
|
|
||||||
= help: the trait `for<'a> Output<'a>` is not implemented for closure `{closure@$DIR/filter-relevant-fn-bounds.rs:21:34: 21:41}`
|
= help: the trait `for<'a> Output<'a>` is not implemented for closure `{closure@$DIR/filter-relevant-fn-bounds.rs:20:34: 20:41}`
|
||||||
help: this trait has no implementations, consider adding one
|
help: this trait has no implementations, consider adding one
|
||||||
--> $DIR/filter-relevant-fn-bounds.rs:1:1
|
--> $DIR/filter-relevant-fn-bounds.rs:1:1
|
||||||
|
|
|
|
||||||
LL | trait Output<'a> {
|
LL | trait Output<'a> {
|
||||||
| ^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^
|
||||||
note: required by a bound in `Wrapper::do_something_wrapper`
|
note: required by a bound in `Wrapper::do_something_wrapper`
|
||||||
--> $DIR/filter-relevant-fn-bounds.rs:12:12
|
--> $DIR/filter-relevant-fn-bounds.rs:11:12
|
||||||
|
|
|
|
||||||
LL | fn do_something_wrapper<O, F>(self, _: F)
|
LL | fn do_something_wrapper<O, F>(self, _: F)
|
||||||
| -------------------- required by a bound in this associated function
|
| -------------------- required by a bound in this associated function
|
||||||
@@ -69,6 +57,6 @@ LL | fn do_something_wrapper<O, F>(self, _: F)
|
|||||||
LL | F: for<'a> FnOnce(<F as Output<'a>>::Type),
|
LL | F: for<'a> FnOnce(<F as Output<'a>>::Type),
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `Wrapper::do_something_wrapper`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `Wrapper::do_something_wrapper`
|
||||||
|
|
||||||
error: aborting due to 5 previous errors
|
error: aborting due to 4 previous errors
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0277`.
|
For more information about this error, try `rustc --explain E0277`.
|
||||||
|
|||||||
@@ -22,9 +22,9 @@ where
|
|||||||
|
|
||||||
// Here we get an error: we need `'a: 'b`.
|
// Here we get an error: we need `'a: 'b`.
|
||||||
fn bar<'a, 'b>()
|
fn bar<'a, 'b>()
|
||||||
//~^ ERROR cannot infer
|
|
||||||
where
|
where
|
||||||
<() as Project<'a, 'b>>::Item: Eq,
|
<() as Project<'a, 'b>>::Item: Eq,
|
||||||
|
//~^ ERROR cannot infer
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
error[E0803]: cannot infer an appropriate lifetime for lifetime parameter `'a` due to conflicting requirements
|
error[E0803]: cannot infer an appropriate lifetime for lifetime parameter `'a` due to conflicting requirements
|
||||||
--> $DIR/regions-normalize-in-where-clause-list.rs:24:4
|
--> $DIR/regions-normalize-in-where-clause-list.rs:26:36
|
||||||
|
|
|
|
||||||
LL | fn bar<'a, 'b>()
|
LL | <() as Project<'a, 'b>>::Item: Eq,
|
||||||
| ^^^
|
| ^^
|
||||||
|
|
|
|
||||||
note: first, the lifetime cannot outlive the lifetime `'a` as defined here...
|
note: first, the lifetime cannot outlive the lifetime `'a` as defined here...
|
||||||
--> $DIR/regions-normalize-in-where-clause-list.rs:24:8
|
--> $DIR/regions-normalize-in-where-clause-list.rs:24:8
|
||||||
@@ -15,10 +15,10 @@ note: ...but the lifetime must also be valid for the lifetime `'b` as defined he
|
|||||||
LL | fn bar<'a, 'b>()
|
LL | fn bar<'a, 'b>()
|
||||||
| ^^
|
| ^^
|
||||||
note: ...so that the types are compatible
|
note: ...so that the types are compatible
|
||||||
--> $DIR/regions-normalize-in-where-clause-list.rs:24:4
|
--> $DIR/regions-normalize-in-where-clause-list.rs:26:36
|
||||||
|
|
|
|
||||||
LL | fn bar<'a, 'b>()
|
LL | <() as Project<'a, 'b>>::Item: Eq,
|
||||||
| ^^^
|
| ^^
|
||||||
= note: expected `Project<'a, 'b>`
|
= note: expected `Project<'a, 'b>`
|
||||||
found `Project<'_, '_>`
|
found `Project<'_, '_>`
|
||||||
|
|
||||||
|
|||||||
@@ -8,9 +8,10 @@ trait Bar {
|
|||||||
}
|
}
|
||||||
impl<T> Bar for T
|
impl<T> Bar for T
|
||||||
//~^ ERROR the trait bound `T: Foo` is not satisfied
|
//~^ ERROR the trait bound `T: Foo` is not satisfied
|
||||||
//~| ERROR the trait bound `T: Foo` is not satisfied
|
|
||||||
where
|
where
|
||||||
<T as Foo>::Assoc: Sized,
|
<T as Foo>::Assoc: Sized,
|
||||||
|
//~^ ERROR the trait bound `T: Foo` is not satisfied
|
||||||
|
//~| ERROR the trait bound `T: Foo` is not satisfied
|
||||||
{
|
{
|
||||||
fn method() {}
|
fn method() {}
|
||||||
//~^ ERROR the trait bound `T: Foo` is not satisfied
|
//~^ ERROR the trait bound `T: Foo` is not satisfied
|
||||||
@@ -18,7 +19,6 @@ where
|
|||||||
//~| ERROR the trait bound `T: Foo` is not satisfied
|
//~| ERROR the trait bound `T: Foo` is not satisfied
|
||||||
//~| ERROR the trait bound `T: Foo` is not satisfied
|
//~| ERROR the trait bound `T: Foo` is not satisfied
|
||||||
//~| ERROR the trait bound `T: Foo` is not satisfied
|
//~| ERROR the trait bound `T: Foo` is not satisfied
|
||||||
//~| ERROR the trait bound `T: Foo` is not satisfied
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ error[E0277]: the trait bound `T: Foo` is not satisfied
|
|||||||
|
|
|
|
||||||
LL | / impl<T> Bar for T
|
LL | / impl<T> Bar for T
|
||||||
LL | |
|
LL | |
|
||||||
LL | |
|
|
||||||
LL | | where
|
LL | | where
|
||||||
LL | | <T as Foo>::Assoc: Sized,
|
LL | | <T as Foo>::Assoc: Sized,
|
||||||
| |_____________________________^ the trait `Foo` is not implemented for `T`
|
| |_____________________________^ the trait `Foo` is not implemented for `T`
|
||||||
@@ -14,7 +13,7 @@ LL | <T as Foo>::Assoc: Sized, T: Foo
|
|||||||
| ++++++
|
| ++++++
|
||||||
|
|
||||||
error[E0277]: the trait bound `T: Foo` is not satisfied
|
error[E0277]: the trait bound `T: Foo` is not satisfied
|
||||||
--> $DIR/deep-norm-pending.rs:15:5
|
--> $DIR/deep-norm-pending.rs:16:5
|
||||||
|
|
|
|
||||||
LL | fn method() {}
|
LL | fn method() {}
|
||||||
| ^^^^^^^^^^^ the trait `Foo` is not implemented for `T`
|
| ^^^^^^^^^^^ the trait `Foo` is not implemented for `T`
|
||||||
@@ -25,7 +24,7 @@ LL | <T as Foo>::Assoc: Sized, T: Foo
|
|||||||
| ++++++
|
| ++++++
|
||||||
|
|
||||||
error[E0277]: the trait bound `T: Foo` is not satisfied
|
error[E0277]: the trait bound `T: Foo` is not satisfied
|
||||||
--> $DIR/deep-norm-pending.rs:15:5
|
--> $DIR/deep-norm-pending.rs:16:5
|
||||||
|
|
|
|
||||||
LL | fn method() {}
|
LL | fn method() {}
|
||||||
| ^^^^^^^^^^^ the trait `Foo` is not implemented for `T`
|
| ^^^^^^^^^^^ the trait `Foo` is not implemented for `T`
|
||||||
@@ -37,7 +36,7 @@ LL | <T as Foo>::Assoc: Sized, T: Foo
|
|||||||
| ++++++
|
| ++++++
|
||||||
|
|
||||||
error[E0277]: the trait bound `T: Foo` is not satisfied
|
error[E0277]: the trait bound `T: Foo` is not satisfied
|
||||||
--> $DIR/deep-norm-pending.rs:15:5
|
--> $DIR/deep-norm-pending.rs:16:5
|
||||||
|
|
|
|
||||||
LL | fn method() {}
|
LL | fn method() {}
|
||||||
| ^^^^^^^^^^^ the trait `Foo` is not implemented for `T`
|
| ^^^^^^^^^^^ the trait `Foo` is not implemented for `T`
|
||||||
@@ -56,7 +55,7 @@ LL | <T as Foo>::Assoc: Sized, T: Foo
|
|||||||
| ++++++
|
| ++++++
|
||||||
|
|
||||||
error[E0277]: the trait bound `T: Foo` is not satisfied
|
error[E0277]: the trait bound `T: Foo` is not satisfied
|
||||||
--> $DIR/deep-norm-pending.rs:15:5
|
--> $DIR/deep-norm-pending.rs:16:5
|
||||||
|
|
|
|
||||||
LL | fn method() {}
|
LL | fn method() {}
|
||||||
| ^^^^^^^^^^^ the trait `Foo` is not implemented for `T`
|
| ^^^^^^^^^^^ the trait `Foo` is not implemented for `T`
|
||||||
@@ -87,15 +86,10 @@ LL | <T as Foo>::Assoc: Sized, T: Foo
|
|||||||
| ++++++
|
| ++++++
|
||||||
|
|
||||||
error[E0277]: the trait bound `T: Foo` is not satisfied
|
error[E0277]: the trait bound `T: Foo` is not satisfied
|
||||||
--> $DIR/deep-norm-pending.rs:9:1
|
--> $DIR/deep-norm-pending.rs:12:24
|
||||||
|
|
|
|
||||||
LL | / impl<T> Bar for T
|
LL | <T as Foo>::Assoc: Sized,
|
||||||
LL | |
|
| ^^^^^ the trait `Foo` is not implemented for `T`
|
||||||
LL | |
|
|
||||||
LL | | where
|
|
||||||
... |
|
|
||||||
LL | | }
|
|
||||||
| |_^ the trait `Foo` is not implemented for `T`
|
|
||||||
|
|
|
|
||||||
help: consider further restricting type parameter `T` with trait `Foo`
|
help: consider further restricting type parameter `T` with trait `Foo`
|
||||||
|
|
|
|
||||||
@@ -103,7 +97,7 @@ LL | <T as Foo>::Assoc: Sized, T: Foo
|
|||||||
| ++++++
|
| ++++++
|
||||||
|
|
||||||
error[E0277]: the trait bound `T: Foo` is not satisfied
|
error[E0277]: the trait bound `T: Foo` is not satisfied
|
||||||
--> $DIR/deep-norm-pending.rs:15:5
|
--> $DIR/deep-norm-pending.rs:16:5
|
||||||
|
|
|
|
||||||
LL | fn method() {}
|
LL | fn method() {}
|
||||||
| ^^^^^^^^^^^ the trait `Foo` is not implemented for `T`
|
| ^^^^^^^^^^^ the trait `Foo` is not implemented for `T`
|
||||||
@@ -115,11 +109,12 @@ LL | <T as Foo>::Assoc: Sized, T: Foo
|
|||||||
| ++++++
|
| ++++++
|
||||||
|
|
||||||
error[E0277]: the trait bound `T: Foo` is not satisfied
|
error[E0277]: the trait bound `T: Foo` is not satisfied
|
||||||
--> $DIR/deep-norm-pending.rs:15:8
|
--> $DIR/deep-norm-pending.rs:12:24
|
||||||
|
|
|
|
||||||
LL | fn method() {}
|
LL | <T as Foo>::Assoc: Sized,
|
||||||
| ^^^^^^ the trait `Foo` is not implemented for `T`
|
| ^^^^^ the trait `Foo` is not implemented for `T`
|
||||||
|
|
|
|
||||||
|
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
||||||
help: consider further restricting type parameter `T` with trait `Foo`
|
help: consider further restricting type parameter `T` with trait `Foo`
|
||||||
|
|
|
|
||||||
LL | <T as Foo>::Assoc: Sized, T: Foo
|
LL | <T as Foo>::Assoc: Sized, T: Foo
|
||||||
|
|||||||
Reference in New Issue
Block a user