Rollup merge of #113426 - compiler-errors:rtn-in-impl-header, r=fee1-dead
Don't ICE in `resolve_bound_vars` when associated return-type bounds are in bad positions I couldn't find a better way to avoid hitting this ICE, so let's just delay it. The problem is that we really shouldn't even be *trying* to visit associated type bounds in `resolve_bound_vars` when they show up in impl headers, but we don't have enough context to do this. Fixes #113423
This commit is contained in:
commit
a13b57e636
@ -22,7 +22,7 @@
|
||||
use rustc_session::lint;
|
||||
use rustc_span::def_id::DefId;
|
||||
use rustc_span::symbol::{sym, Ident};
|
||||
use rustc_span::Span;
|
||||
use rustc_span::{Span, DUMMY_SP};
|
||||
use std::fmt;
|
||||
|
||||
use crate::errors;
|
||||
@ -338,7 +338,17 @@ fn poly_trait_ref_binder_info(&mut self) -> (Vec<ty::BoundVariableKind>, BinderS
|
||||
|
||||
Scope::TraitRefBoundary { .. } => {
|
||||
// We should only see super trait lifetimes if there is a `Binder` above
|
||||
assert!(supertrait_bound_vars.is_empty());
|
||||
// though this may happen when we call `poly_trait_ref_binder_info` with
|
||||
// an (erroneous, #113423) associated return type bound in an impl header.
|
||||
if !supertrait_bound_vars.is_empty() {
|
||||
self.tcx.sess.delay_span_bug(
|
||||
DUMMY_SP,
|
||||
format!(
|
||||
"found supertrait lifetimes without a binder to append \
|
||||
them to: {supertrait_bound_vars:?}"
|
||||
),
|
||||
);
|
||||
}
|
||||
break (vec![], BinderScopeType::Normal);
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,13 @@
|
||||
#![feature(return_type_notation)]
|
||||
//~^ WARN the feature `return_type_notation` is incomplete
|
||||
|
||||
// Shouldn't ICE when we have a (bad) RTN in an impl header
|
||||
|
||||
trait Super1<'a> {
|
||||
fn bar<'b>() -> bool;
|
||||
}
|
||||
|
||||
impl Super1<'_, bar(): Send> for () {}
|
||||
//~^ ERROR associated type bindings are not allowed here
|
||||
|
||||
fn main() {}
|
@ -0,0 +1,18 @@
|
||||
warning: the feature `return_type_notation` is incomplete and may not be safe to use and/or cause compiler crashes
|
||||
--> $DIR/rtn-in-impl-signature.rs:1:12
|
||||
|
|
||||
LL | #![feature(return_type_notation)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #109417 <https://github.com/rust-lang/rust/issues/109417> for more information
|
||||
= note: `#[warn(incomplete_features)]` on by default
|
||||
|
||||
error[E0229]: associated type bindings are not allowed here
|
||||
--> $DIR/rtn-in-impl-signature.rs:10:17
|
||||
|
|
||||
LL | impl Super1<'_, bar(): Send> for () {}
|
||||
| ^^^^^^^^^^^ associated type not allowed here
|
||||
|
||||
error: aborting due to previous error; 1 warning emitted
|
||||
|
||||
For more information about this error, try `rustc --explain E0229`.
|
Loading…
Reference in New Issue
Block a user