Rollup merge of #66391 - estebank:if-else-async-ice, r=Centril
Do not ICE in `if` without `else` in `async fn` Fix #66387.
This commit is contained in:
commit
c5b6dceb68
3 changed files with 34 additions and 2 deletions
|
@ -244,7 +244,13 @@ impl<'a, 'tcx> Visitor<'tcx> for InteriorVisitor<'a, 'tcx> {
|
|||
// can be reborrowed without needing to spill to a temporary.
|
||||
// If this were not the case, then we could conceivably have
|
||||
// to create intermediate temporaries.)
|
||||
let ty = self.fcx.tables.borrow().expr_ty(expr);
|
||||
self.record(ty, scope, Some(expr), expr.span);
|
||||
//
|
||||
// The type table might not have information for this expression
|
||||
// if it is in a malformed scope. (#66387)
|
||||
if let Some(ty) = self.fcx.tables.borrow().expr_ty_opt(expr) {
|
||||
self.record(ty, scope, Some(expr), expr.span);
|
||||
} else {
|
||||
self.fcx.tcx.sess.delay_span_bug(expr.span, "no type for node");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
10
src/test/ui/async-await/issue-66387-if-without-else.rs
Normal file
10
src/test/ui/async-await/issue-66387-if-without-else.rs
Normal file
|
@ -0,0 +1,10 @@
|
|||
// edition:2018
|
||||
async fn f() -> i32 {
|
||||
if true { //~ ERROR if may be missing an else clause
|
||||
return 0;
|
||||
}
|
||||
// An `if` block without `else` causes the type table not to have a type for this expr.
|
||||
// Check that we do not unconditionally access the type table and we don't ICE.
|
||||
}
|
||||
|
||||
fn main() {}
|
16
src/test/ui/async-await/issue-66387-if-without-else.stderr
Normal file
16
src/test/ui/async-await/issue-66387-if-without-else.stderr
Normal file
|
@ -0,0 +1,16 @@
|
|||
error[E0317]: if may be missing an else clause
|
||||
--> $DIR/issue-66387-if-without-else.rs:3:5
|
||||
|
|
||||
LL | / if true {
|
||||
LL | | return 0;
|
||||
LL | | }
|
||||
| |_____^ expected (), found i32
|
||||
|
|
||||
= note: expected type `()`
|
||||
found type `i32`
|
||||
= note: `if` expressions without `else` evaluate to `()`
|
||||
= help: consider adding an `else` block that evaluates to the expected type
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0317`.
|
Loading…
Add table
Reference in a new issue