parent
d4ad1cfc63
commit
f93cbedade
3 changed files with 49 additions and 3 deletions
|
@ -245,9 +245,10 @@ impl<'a, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'a, 'tcx> {
|
|||
if let ObligationCauseCode::WellFormed(Some(wf_loc)) =
|
||||
root_obligation.cause.code.peel_derives()
|
||||
{
|
||||
if let Some(cause) =
|
||||
self.tcx.diagnostic_hir_wf_check((obligation.predicate, wf_loc.clone()))
|
||||
{
|
||||
if let Some(cause) = self.tcx.diagnostic_hir_wf_check((
|
||||
tcx.erase_regions(obligation.predicate),
|
||||
wf_loc.clone(),
|
||||
)) {
|
||||
obligation.cause = cause;
|
||||
span = obligation.cause.span;
|
||||
}
|
||||
|
|
14
src/test/ui/wf/hir-wf-check-erase-regions.rs
Normal file
14
src/test/ui/wf/hir-wf-check-erase-regions.rs
Normal file
|
@ -0,0 +1,14 @@
|
|||
// Regression test for #87549.
|
||||
// compile-flags: -C incremental=tmp/wf/hir-wf-check-erase-regions
|
||||
|
||||
pub struct Table<T, const N: usize>([Option<T>; N]);
|
||||
|
||||
impl<'a, T, const N: usize> IntoIterator for &'a Table<T, N> {
|
||||
type IntoIter = std::iter::Flatten<std::slice::Iter<'a, T>>; //~ ERROR `&T` is not an iterator
|
||||
type Item = &'a T;
|
||||
|
||||
fn into_iter(self) -> Self::IntoIter { //~ ERROR `&T` is not an iterator
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
||||
fn main() {}
|
31
src/test/ui/wf/hir-wf-check-erase-regions.stderr
Normal file
31
src/test/ui/wf/hir-wf-check-erase-regions.stderr
Normal file
|
@ -0,0 +1,31 @@
|
|||
error[E0277]: `&T` is not an iterator
|
||||
--> $DIR/hir-wf-check-erase-regions.rs:7:5
|
||||
|
|
||||
LL | type IntoIter = std::iter::Flatten<std::slice::Iter<'a, T>>;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `&T` is not an iterator
|
||||
|
|
||||
::: $SRC_DIR/core/src/iter/adapters/flatten.rs:LL:COL
|
||||
|
|
||||
LL | pub struct Flatten<I: Iterator<Item: IntoIterator>> {
|
||||
| ------------ required by this bound in `Flatten`
|
||||
|
|
||||
= help: the trait `Iterator` is not implemented for `&T`
|
||||
= note: required because of the requirements on the impl of `IntoIterator` for `&T`
|
||||
|
||||
error[E0277]: `&T` is not an iterator
|
||||
--> $DIR/hir-wf-check-erase-regions.rs:10:27
|
||||
|
|
||||
LL | fn into_iter(self) -> Self::IntoIter {
|
||||
| ^^^^^^^^^^^^^^ `&T` is not an iterator
|
||||
|
|
||||
::: $SRC_DIR/core/src/iter/adapters/flatten.rs:LL:COL
|
||||
|
|
||||
LL | pub struct Flatten<I: Iterator<Item: IntoIterator>> {
|
||||
| ------------ required by this bound in `Flatten`
|
||||
|
|
||||
= help: the trait `Iterator` is not implemented for `&T`
|
||||
= note: required because of the requirements on the impl of `IntoIterator` for `&T`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
Loading…
Add table
Reference in a new issue