about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthias Krüger <476013+matthiaskrgr@users.noreply.github.com>2025-05-17 10:33:11 +0200
committerGitHub <noreply@github.com>2025-05-17 10:33:11 +0200
commit59ad0cbd04597067cfb15aed6df2f7e20eeeab77 (patch)
treec8326bc57c8de9f85ca7ac2e9946625a2b84b012
parent4c52b5d17a136c292289bf587c024d9738c1c100 (diff)
parentcf878d8f260e535fab7e6f6401fc61e5d846ac4d (diff)
downloadrust-59ad0cbd04597067cfb15aed6df2f7e20eeeab77.tar.gz
rust-59ad0cbd04597067cfb15aed6df2f7e20eeeab77.zip
Rollup merge of #141059 - samueltardieu:push-trvpulpskwwp, r=compiler-errors
HIR: explain in comment why `ExprKind::If` "then" is an `Expr`

One could be tempted to replace the "then" `hir::Expr` with kind `hir::ExprKind::Block` by a `hir::Block`. Explain why this would not be a good idea.

I've been there.

r? ``@compiler-errors``
-rw-r--r--compiler/rustc_hir/src/hir.rs2
1 files changed, 2 insertions, 0 deletions
diff --git a/compiler/rustc_hir/src/hir.rs b/compiler/rustc_hir/src/hir.rs
index 107aea4e5a4..fa1d1ec0a86 100644
--- a/compiler/rustc_hir/src/hir.rs
+++ b/compiler/rustc_hir/src/hir.rs
@@ -2744,6 +2744,8 @@ pub enum ExprKind<'hir> {
     ///
     /// The "then" expr is always `ExprKind::Block`. If present, the "else" expr is always
     /// `ExprKind::Block` (for `else`) or `ExprKind::If` (for `else if`).
+    /// Note that using an `Expr` instead of a `Block` for the "then" part is intentional,
+    /// as it simplifies the type coercion machinery.
     If(&'hir Expr<'hir>, &'hir Expr<'hir>, Option<&'hir Expr<'hir>>),
     /// A conditionless loop (can be exited with `break`, `continue`, or `return`).
     ///