Delay bug when adjusting NeverToAny twice during diagnostic

This commit is contained in:
Preston From 2022-04-24 02:00:12 -06:00
parent 1f631e8e93
commit 5165295452
3 changed files with 52 additions and 4 deletions

View File

@ -78,10 +78,18 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
// While we don't allow *arbitrary* coercions here, we *do* allow
// coercions from ! to `expected`.
if ty.is_never() {
assert!(
!self.typeck_results.borrow().adjustments().contains_key(expr.hir_id),
"expression with never type wound up being adjusted"
);
if let Some(adjustments) = self.typeck_results.borrow().adjustments().get(expr.hir_id) {
self.tcx().sess.delay_span_bug(
expr.span,
"expression with never type wound up being adjusted",
);
return if let [Adjustment { kind: Adjust::NeverToAny, target }] = &adjustments[..] {
target.to_owned()
} else {
self.tcx().ty_error()
};
}
let adj_ty = self.next_ty_var(TypeVariableOrigin {
kind: TypeVariableOriginKind::AdjustmentType,
span: expr.span,

View File

@ -0,0 +1,5 @@
fn main() {
0.....{loop{}1};
//~^ ERROR unexpected token
//~| ERROR mismatched types
}

View File

@ -0,0 +1,35 @@
error: unexpected token: `...`
--> $DIR/issue-96335.rs:2:6
|
LL | 0.....{loop{}1};
| ^^^
|
help: use `..` for an exclusive range
|
LL | 0....{loop{}1};
| ~~
help: or `..=` for an inclusive range
|
LL | 0..=..{loop{}1};
| ~~~
error[E0308]: mismatched types
--> $DIR/issue-96335.rs:2:9
|
LL | 0.....{loop{}1};
| ----^^^^^^^^^^^
| | |
| | expected integer, found struct `RangeTo`
| arguments to this function are incorrect
|
= note: expected type `{integer}`
found struct `RangeTo<{integer}>`
note: associated function defined here
--> $SRC_DIR/core/src/ops/range.rs:LL:COL
|
LL | pub const fn new(start: Idx, end: Idx) -> Self {
| ^^^
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0308`.