about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDylan DPC <dylan.dpc@gmail.com>2021-02-23 16:10:27 +0100
committerGitHub <noreply@github.com>2021-02-23 16:10:27 +0100
commit269f39922bd8ac6abd8dee9ca8211fbb354b554b (patch)
tree841ba7acee6cd868e00b3983af495eac61020150
parent8e67fe501118ec161181a4efa1a6b002bb0f5605 (diff)
parentf0637e4e185e8c3dda694004d1dfd31126ed1fbd (diff)
downloadrust-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.rs3
-rw-r--r--src/test/ui/pattern/issue-82290.rs7
-rw-r--r--src/test/ui/pattern/issue-82290.stderr20
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
+