diff options
| author | Dylan DPC <dylan.dpc@gmail.com> | 2021-02-23 16:10:27 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-02-23 16:10:27 +0100 |
| commit | 269f39922bd8ac6abd8dee9ca8211fbb354b554b (patch) | |
| tree | 841ba7acee6cd868e00b3983af495eac61020150 | |
| parent | 8e67fe501118ec161181a4efa1a6b002bb0f5605 (diff) | |
| parent | f0637e4e185e8c3dda694004d1dfd31126ed1fbd (diff) | |
| download | rust-269f39922bd8ac6abd8dee9ca8211fbb354b554b.tar.gz rust-269f39922bd8ac6abd8dee9ca8211fbb354b554b.zip | |
Rollup merge of #82308 - estebank:issue-82290, r=lcnr
Lower condition of `if` expression before it's "then" block Fix #82290, fix #82250.
| -rw-r--r-- | compiler/rustc_ast_lowering/src/expr.rs | 3 | ||||
| -rw-r--r-- | src/test/ui/pattern/issue-82290.rs | 7 | ||||
| -rw-r--r-- | src/test/ui/pattern/issue-82290.stderr | 20 |
3 files changed, 29 insertions, 1 deletions
diff --git a/compiler/rustc_ast_lowering/src/expr.rs b/compiler/rustc_ast_lowering/src/expr.rs index b118c0eaed4..6d44feec2c4 100644 --- a/compiler/rustc_ast_lowering/src/expr.rs +++ b/compiler/rustc_ast_lowering/src/expr.rs @@ -347,8 +347,9 @@ impl<'hir> LoweringContext<'_, 'hir> { ) -> hir::ExprKind<'hir> { macro_rules! make_if { ($opt:expr) => {{ + let cond = self.lower_expr(cond); let then_expr = self.lower_block_expr(then); - hir::ExprKind::If(self.lower_expr(cond), self.arena.alloc(then_expr), $opt) + hir::ExprKind::If(cond, self.arena.alloc(then_expr), $opt) }}; } if let Some(rslt) = else_opt { diff --git a/src/test/ui/pattern/issue-82290.rs b/src/test/ui/pattern/issue-82290.rs new file mode 100644 index 00000000000..67f0274fe74 --- /dev/null +++ b/src/test/ui/pattern/issue-82290.rs @@ -0,0 +1,7 @@ +#![feature(let_chains)] //~ WARN the feature `let_chains` is incomplete + +fn main() { + if true && let x = 1 { //~ ERROR `let` expressions are not supported here + let _ = x; + } +} diff --git a/src/test/ui/pattern/issue-82290.stderr b/src/test/ui/pattern/issue-82290.stderr new file mode 100644 index 00000000000..65ef018dc97 --- /dev/null +++ b/src/test/ui/pattern/issue-82290.stderr @@ -0,0 +1,20 @@ +error: `let` expressions are not supported here + --> $DIR/issue-82290.rs:4:16 + | +LL | if true && let x = 1 { + | ^^^^^^^^^ + | + = note: only supported directly in conditions of `if`- and `while`-expressions + = note: as well as when nested within `&&` and parenthesis in those conditions + +warning: the feature `let_chains` is incomplete and may not be safe to use and/or cause compiler crashes + --> $DIR/issue-82290.rs:1:12 + | +LL | #![feature(let_chains)] + | ^^^^^^^^^^ + | + = note: `#[warn(incomplete_features)]` on by default + = note: see issue #53667 <https://github.com/rust-lang/rust/issues/53667> for more information + +error: aborting due to previous error; 1 warning emitted + |
