Skip to content

Commit 5d04957

Browse files
committed
Auto merge of #79278 - mark-i-m:stabilize-or-pattern, r=nikomatsakis
Stabilize or_patterns (RFC 2535, 2530, 2175) closes #54883 This PR stabilizes the or_patterns feature in Rust 1.53. This is blocked on the following (in order): - [x] The crater run in #78935 (comment) - [x] The resolution of the unresolved questions and a second crater run (#78935 (comment)) - It looks like we will need to pursue some sort of edition-based transition for `:pat`. - [x] Nomination and discussion by T-lang - [x] Implement new behavior for `:pat` based on consensus (#80100). - [ ] An FCP on stabilization EDIT: Stabilization report is in #79278 (comment)
2 parents 2287a88 + b9ecba3 commit 5d04957

File tree

128 files changed

+416
-839
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

128 files changed

+416
-839
lines changed

compiler/rustc_apfloat/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
#![no_std]
3535
#![forbid(unsafe_code)]
3636
#![feature(nll)]
37-
#![feature(or_patterns)]
37+
#![cfg_attr(bootstrap, feature(or_patterns))]
3838

3939
#[macro_use]
4040
extern crate alloc;

compiler/rustc_ast/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
#![feature(crate_visibility_modifier)]
1717
#![feature(label_break_value)]
1818
#![feature(nll)]
19-
#![feature(or_patterns)]
19+
#![cfg_attr(bootstrap, feature(or_patterns))]
2020
#![recursion_limit = "256"]
2121

2222
#[macro_use]

compiler/rustc_ast_lowering/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
//! in the HIR, especially for multiple identifiers.
3232
3333
#![feature(crate_visibility_modifier)]
34-
#![feature(or_patterns)]
34+
#![cfg_attr(bootstrap, feature(or_patterns))]
3535
#![feature(box_patterns)]
3636
#![recursion_limit = "256"]
3737

compiler/rustc_ast_passes/src/feature_gate.rs

-1
Original file line numberDiff line numberDiff line change
@@ -686,7 +686,6 @@ pub fn check_crate(krate: &ast::Crate, sess: &Session) {
686686
"to use an async block, remove the `||`: `async {`"
687687
);
688688
gate_all!(generators, "yield syntax is experimental");
689-
gate_all!(or_patterns, "or-patterns syntax is experimental");
690689
gate_all!(raw_ref_op, "raw address of syntax is experimental");
691690
gate_all!(const_trait_bound_opt_out, "`?const` on trait bounds is experimental");
692691
gate_all!(const_trait_impl, "const trait impls are experimental");

compiler/rustc_ast_pretty/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#![feature(bool_to_option)]
22
#![feature(crate_visibility_modifier)]
3-
#![feature(or_patterns)]
3+
#![cfg_attr(bootstrap, feature(or_patterns))]
44
#![feature(box_patterns)]
55
#![recursion_limit = "256"]
66

compiler/rustc_attr/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
//! The goal is to move the definition of `MetaItem` and things that don't need to be in `syntax`
55
//! to this crate.
66
7-
#![feature(or_patterns)]
7+
#![cfg_attr(bootstrap, feature(or_patterns))]
88

99
#[macro_use]
1010
extern crate rustc_macros;

compiler/rustc_builtin_macros/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#![feature(crate_visibility_modifier)]
99
#![feature(decl_macro)]
1010
#![feature(nll)]
11-
#![feature(or_patterns)]
11+
#![cfg_attr(bootstrap, feature(or_patterns))]
1212
#![feature(proc_macro_internals)]
1313
#![feature(proc_macro_quote)]
1414
#![recursion_limit = "256"]

compiler/rustc_codegen_llvm/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
#![feature(extern_types)]
1313
#![feature(in_band_lifetimes)]
1414
#![feature(nll)]
15-
#![feature(or_patterns)]
15+
#![cfg_attr(bootstrap, feature(or_patterns))]
1616
#![recursion_limit = "256"]
1717

1818
use back::write::{create_informational_target_machine, create_target_machine};

compiler/rustc_codegen_ssa/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#![feature(try_blocks)]
77
#![feature(in_band_lifetimes)]
88
#![feature(nll)]
9-
#![feature(or_patterns)]
9+
#![cfg_attr(bootstrap, feature(or_patterns))]
1010
#![feature(associated_type_bounds)]
1111
#![recursion_limit = "256"]
1212
#![feature(box_syntax)]

compiler/rustc_expand/src/expand.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use rustc_data_structures::stack::ensure_sufficient_stack;
2222
use rustc_data_structures::sync::Lrc;
2323
use rustc_errors::{Applicability, PResult};
2424
use rustc_feature::Features;
25-
use rustc_parse::parser::{AttemptLocalParseRecovery, ForceCollect, GateOr, Parser, RecoverComma};
25+
use rustc_parse::parser::{AttemptLocalParseRecovery, ForceCollect, Parser, RecoverComma};
2626
use rustc_parse::validate_attr;
2727
use rustc_session::lint::builtin::UNUSED_DOC_COMMENTS;
2828
use rustc_session::lint::BuiltinLintDiagnostics;
@@ -917,7 +917,7 @@ pub fn parse_ast_fragment<'a>(
917917
}
918918
AstFragmentKind::Ty => AstFragment::Ty(this.parse_ty()?),
919919
AstFragmentKind::Pat => {
920-
AstFragment::Pat(this.parse_pat_allow_top_alt(None, GateOr::Yes, RecoverComma::No)?)
920+
AstFragment::Pat(this.parse_pat_allow_top_alt(None, RecoverComma::No)?)
921921
}
922922
AstFragmentKind::Arms
923923
| AstFragmentKind::Fields

compiler/rustc_expand/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#![feature(crate_visibility_modifier)]
33
#![feature(decl_macro)]
44
#![feature(destructuring_assignment)]
5-
#![feature(or_patterns)]
5+
#![cfg_attr(bootstrap, feature(or_patterns))]
66
#![feature(proc_macro_diagnostic)]
77
#![feature(proc_macro_internals)]
88
#![feature(proc_macro_span)]

compiler/rustc_feature/src/accepted.rs

+2
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,8 @@ declare_features! (
277277
(accepted, min_const_generics, "1.51.0", Some(74878), None),
278278
/// The `unsafe_op_in_unsafe_fn` lint (allowed by default): no longer treat an unsafe function as an unsafe block.
279279
(accepted, unsafe_block_in_unsafe_fn, "1.51.0", Some(71668), None),
280+
/// Allows the use of or-patterns (e.g., `0 | 1`).
281+
(accepted, or_patterns, "1.53.0", Some(54883), None),
280282

281283
// -------------------------------------------------------------------------
282284
// feature-group-end: accepted features

compiler/rustc_feature/src/active.rs

-3
Original file line numberDiff line numberDiff line change
@@ -488,9 +488,6 @@ declare_features! (
488488
/// Allows `impl Trait` to be used inside type aliases (RFC 2515).
489489
(active, type_alias_impl_trait, "1.38.0", Some(63063), None),
490490

491-
/// Allows the use of or-patterns (e.g., `0 | 1`).
492-
(active, or_patterns, "1.38.0", Some(54883), None),
493-
494491
/// Allows the definition of `const extern fn` and `const unsafe extern fn`.
495492
(active, const_extern_fn, "1.40.0", Some(64926), None),
496493

compiler/rustc_hir/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#![feature(extended_key_value_attributes)]
99
#![feature(in_band_lifetimes)]
1010
#![feature(once_cell)]
11-
#![feature(or_patterns)]
11+
#![cfg_attr(bootstrap, feature(or_patterns))]
1212
#![recursion_limit = "256"]
1313

1414
#[macro_use]

compiler/rustc_hir_pretty/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#![feature(or_patterns)]
1+
#![cfg_attr(bootstrap, feature(or_patterns))]
22
#![recursion_limit = "256"]
33

44
use rustc_ast as ast;

compiler/rustc_infer/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
#![feature(const_panic)]
2121
#![feature(extend_one)]
2222
#![feature(never_type)]
23-
#![feature(or_patterns)]
23+
#![cfg_attr(bootstrap, feature(or_patterns))]
2424
#![feature(in_band_lifetimes)]
2525
#![feature(control_flow_enum)]
2626
#![recursion_limit = "512"] // For rustdoc

compiler/rustc_lint/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
#![feature(iter_order_by)]
3636
#![feature(never_type)]
3737
#![feature(nll)]
38-
#![feature(or_patterns)]
38+
#![cfg_attr(bootstrap, feature(or_patterns))]
3939
#![feature(half_open_range_patterns)]
4040
#![feature(exclusive_range_pattern)]
4141
#![feature(control_flow_enum)]

compiler/rustc_metadata/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#![feature(in_band_lifetimes)]
66
#![feature(nll)]
77
#![feature(once_cell)]
8-
#![feature(or_patterns)]
8+
#![cfg_attr(bootstrap, feature(or_patterns))]
99
#![feature(proc_macro_internals)]
1010
#![feature(min_specialization)]
1111
#![feature(stmt_expr_attributes)]

compiler/rustc_middle/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
#![feature(extern_types)]
3939
#![feature(nll)]
4040
#![feature(once_cell)]
41-
#![feature(or_patterns)]
41+
#![cfg_attr(bootstrap, feature(or_patterns))]
4242
#![feature(min_specialization)]
4343
#![feature(trusted_len)]
4444
#![feature(test)]

compiler/rustc_mir/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ Rust MIR: a lowered representation of Rust.
2727
#![feature(stmt_expr_attributes)]
2828
#![feature(trait_alias)]
2929
#![feature(option_get_or_insert_default)]
30-
#![feature(or_patterns)]
30+
#![cfg_attr(bootstrap, feature(or_patterns))]
3131
#![feature(once_cell)]
3232
#![feature(control_flow_enum)]
3333
#![recursion_limit = "256"]

compiler/rustc_mir_build/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#![feature(crate_visibility_modifier)]
1111
#![feature(bool_to_option)]
1212
#![feature(once_cell)]
13-
#![feature(or_patterns)]
13+
#![cfg_attr(bootstrap, feature(or_patterns))]
1414
#![recursion_limit = "256"]
1515

1616
#[macro_use]

compiler/rustc_parse/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#![feature(crate_visibility_modifier)]
44
#![feature(bindings_after_at)]
55
#![feature(iter_order_by)]
6-
#![feature(or_patterns)]
6+
#![cfg_attr(bootstrap, feature(or_patterns))]
77
#![feature(box_syntax)]
88
#![feature(box_patterns)]
99
#![recursion_limit = "256"]

compiler/rustc_parse/src/parser/expr.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use super::pat::{GateOr, RecoverComma, PARAM_EXPECTED};
1+
use super::pat::{RecoverComma, PARAM_EXPECTED};
22
use super::ty::{AllowPlus, RecoverQPath, RecoverReturnSign};
33
use super::{AttrWrapper, BlockMode, ForceCollect, Parser, PathStyle, Restrictions, TokenType};
44
use super::{SemiColonMode, SeqSep, TokenExpectType, TrailingToken};
@@ -1803,7 +1803,7 @@ impl<'a> Parser<'a> {
18031803
/// The `let` token has already been eaten.
18041804
fn parse_let_expr(&mut self, attrs: AttrVec) -> PResult<'a, P<Expr>> {
18051805
let lo = self.prev_token.span;
1806-
let pat = self.parse_pat_allow_top_alt(None, GateOr::No, RecoverComma::Yes)?;
1806+
let pat = self.parse_pat_allow_top_alt(None, RecoverComma::Yes)?;
18071807
self.expect(&token::Eq)?;
18081808
let expr = self.with_res(self.restrictions | Restrictions::NO_STRUCT_LITERAL, |this| {
18091809
this.parse_assoc_expr_with(1 + prec_let_scrutinee_needs_par(), None.into())
@@ -1866,7 +1866,7 @@ impl<'a> Parser<'a> {
18661866
_ => None,
18671867
};
18681868

1869-
let pat = self.parse_pat_allow_top_alt(None, GateOr::Yes, RecoverComma::Yes)?;
1869+
let pat = self.parse_pat_allow_top_alt(None, RecoverComma::Yes)?;
18701870
if !self.eat_keyword(kw::In) {
18711871
self.error_missing_in_for_loop();
18721872
}
@@ -2073,7 +2073,7 @@ impl<'a> Parser<'a> {
20732073
let attrs = self.parse_outer_attributes()?;
20742074
self.collect_tokens_trailing_token(attrs, ForceCollect::No, |this, attrs| {
20752075
let lo = this.token.span;
2076-
let pat = this.parse_pat_allow_top_alt(None, GateOr::No, RecoverComma::Yes)?;
2076+
let pat = this.parse_pat_allow_top_alt(None, RecoverComma::Yes)?;
20772077
let guard = if this.eat_keyword(kw::If) {
20782078
let if_span = this.prev_token.span;
20792079
let cond = this.parse_expr()?;

compiler/rustc_parse/src/parser/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use crate::lexer::UnmatchedBrace;
1414
pub use attr_wrapper::AttrWrapper;
1515
pub use diagnostics::AttemptLocalParseRecovery;
1616
use diagnostics::Error;
17-
pub use pat::{GateOr, RecoverComma};
17+
pub use pat::RecoverComma;
1818
pub use path::PathStyle;
1919

2020
use rustc_ast::ptr::P;

compiler/rustc_parse/src/parser/nonterminal.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use rustc_ast_pretty::pprust;
44
use rustc_errors::PResult;
55
use rustc_span::symbol::{kw, Ident};
66

7-
use crate::parser::pat::{GateOr, RecoverComma};
7+
use crate::parser::pat::RecoverComma;
88
use crate::parser::{FollowedByType, ForceCollect, Parser, PathStyle};
99

1010
impl<'a> Parser<'a> {
@@ -122,7 +122,7 @@ impl<'a> Parser<'a> {
122122
token::NtPat(self.collect_tokens_no_attrs(|this| match kind {
123123
NonterminalKind::Pat2018 { .. } => this.parse_pat_no_top_alt(None),
124124
NonterminalKind::Pat2021 { .. } => {
125-
this.parse_pat_allow_top_alt(None, GateOr::Yes, RecoverComma::No)
125+
this.parse_pat_allow_top_alt(None, RecoverComma::No)
126126
}
127127
_ => unreachable!(),
128128
})?)

0 commit comments

Comments
 (0)