Skip to content

Commit

Permalink
Add let_else feature gate
Browse files Browse the repository at this point in the history
  • Loading branch information
camsteffen committed Aug 31, 2021
1 parent ae32e88 commit 960ea09
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 0 deletions.
10 changes: 10 additions & 0 deletions compiler/rustc_ast_lowering/src/block.rs
@@ -1,6 +1,7 @@
use crate::{ImplTraitContext, ImplTraitPosition, LoweringContext};
use rustc_ast::{AttrVec, Block, BlockCheckMode, Expr, Local, LocalKind, Stmt, StmtKind};
use rustc_hir as hir;
use rustc_session::parse::feature_err;
use rustc_span::symbol::Ident;
use rustc_span::{sym, DesugaringKind};

Expand Down Expand Up @@ -170,6 +171,15 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
span,
kind: hir::ExprKind::If(let_expr, then_expr, Some(else_expr)),
});
if !self.sess.features_untracked().let_else {
feature_err(
&self.sess.parse_sess,
sym::let_else,
local.span,
"`let...else` statements are unstable",
)
.emit();
}
(stmt, if_expr)
}
}
3 changes: 3 additions & 0 deletions compiler/rustc_feature/src/active.rs
Expand Up @@ -676,6 +676,9 @@ declare_features! (
/// Allows additional const parameter types, such as `&'static str` or user defined types
(incomplete, adt_const_params, "1.56.0", Some(44580), None),

/// Allows `let...else` statements.
(active, let_else, "1.56.0", Some(87335), None),

// -------------------------------------------------------------------------
// feature-group-end: actual feature gates
// -------------------------------------------------------------------------
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_span/src/symbol.rs
Expand Up @@ -744,6 +744,7 @@ symbols! {
le,
len,
let_chains,
let_else,
lhs,
lib,
libc,
Expand Down
5 changes: 5 additions & 0 deletions src/test/ui/feature-gates/feature-gate-let_else.rs
@@ -0,0 +1,5 @@
fn main() {
let Some(x) = Some(1) else { //~ ERROR `let...else` statements are unstable
return;
};
}
14 changes: 14 additions & 0 deletions src/test/ui/feature-gates/feature-gate-let_else.stderr
@@ -0,0 +1,14 @@
error[E0658]: `let...else` statements are unstable
--> $DIR/feature-gate-let_else.rs:2:5
|
LL | / let Some(x) = Some(1) else {
LL | | return;
LL | | };
| |______^
|
= note: see issue #87335 <https://github.com/rust-lang/rust/issues/87335> for more information
= help: add `#![feature(let_else)]` to the crate attributes to enable

error: aborting due to previous error

For more information about this error, try `rustc --explain E0658`.

0 comments on commit 960ea09

Please sign in to comment.