Skip to content

Commit 672831a

Browse files
committed
Auto merge of rust-lang#101938 - Dylan-DPC:rollup-6vlohhs, r=Dylan-DPC
Rollup of 6 pull requests Successful merges: - rust-lang#93628 (Stabilize `let else`) - rust-lang#98441 (Implement simd_as for pointers) - rust-lang#101790 (Do not suggest a placeholder to const and static without a type) - rust-lang#101807 (Disallow defaults on type GATs) - rust-lang#101915 (doc: fix redirected link in `/index.html`) - rust-lang#101931 (doc: Fix a typo in `Rc::make_mut` docstring) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
2 parents b195f53 + 80cceb8 commit 672831a

File tree

125 files changed

+437
-236
lines changed

Some content is hidden

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

125 files changed

+437
-236
lines changed

Diff for: compiler/rustc_ast/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
#![feature(if_let_guard)]
1616
#![cfg_attr(bootstrap, feature(label_break_value))]
1717
#![feature(let_chains)]
18-
#![feature(let_else)]
18+
#![cfg_attr(bootstrap, feature(let_else))]
1919
#![feature(min_specialization)]
2020
#![feature(negative_impls)]
2121
#![feature(slice_internals)]

Diff for: compiler/rustc_ast_lowering/src/block.rs

-11
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
use crate::{ImplTraitContext, ImplTraitPosition, LoweringContext};
22
use rustc_ast::{Block, BlockCheckMode, Local, LocalKind, Stmt, StmtKind};
33
use rustc_hir as hir;
4-
use rustc_session::parse::feature_err;
5-
use rustc_span::sym;
64

75
use smallvec::SmallVec;
86

@@ -92,15 +90,6 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
9290
let hir_id = self.lower_node_id(l.id);
9391
let pat = self.lower_pat(&l.pat);
9492
let els = if let LocalKind::InitElse(_, els) = &l.kind {
95-
if !self.tcx.features().let_else {
96-
feature_err(
97-
&self.tcx.sess.parse_sess,
98-
sym::let_else,
99-
l.span,
100-
"`let...else` statements are unstable",
101-
)
102-
.emit();
103-
}
10493
Some(self.lower_block(els, false))
10594
} else {
10695
None

Diff for: compiler/rustc_ast_lowering/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
3333
#![feature(box_patterns)]
3434
#![feature(let_chains)]
35-
#![feature(let_else)]
35+
#![cfg_attr(bootstrap, feature(let_else))]
3636
#![feature(never_type)]
3737
#![recursion_limit = "256"]
3838
#![allow(rustc::potential_query_instability)]

Diff for: compiler/rustc_ast_passes/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#![feature(if_let_guard)]
1010
#![feature(iter_is_partitioned)]
1111
#![feature(let_chains)]
12-
#![feature(let_else)]
12+
#![cfg_attr(bootstrap, feature(let_else))]
1313
#![recursion_limit = "256"]
1414

1515
#[macro_use]

Diff for: compiler/rustc_attr/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
//! to this crate.
66
77
#![feature(let_chains)]
8-
#![feature(let_else)]
8+
#![cfg_attr(bootstrap, feature(let_else))]
99
#![deny(rustc::untranslatable_diagnostic)]
1010
#![deny(rustc::diagnostic_outside_of_impl)]
1111

Diff for: compiler/rustc_borrowck/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#![allow(rustc::potential_query_instability)]
44
#![feature(box_patterns)]
55
#![feature(let_chains)]
6-
#![feature(let_else)]
6+
#![cfg_attr(bootstrap, feature(let_else))]
77
#![feature(min_specialization)]
88
#![feature(never_type)]
99
#![feature(rustc_attrs)]

Diff for: compiler/rustc_builtin_macros/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#![feature(if_let_guard)]
1010
#![feature(is_sorted)]
1111
#![feature(let_chains)]
12-
#![feature(let_else)]
12+
#![cfg_attr(bootstrap, feature(let_else))]
1313
#![feature(proc_macro_internals)]
1414
#![feature(proc_macro_quote)]
1515
#![recursion_limit = "256"]

Diff for: compiler/rustc_codegen_llvm/src/intrinsic.rs

+91
Original file line numberDiff line numberDiff line change
@@ -1705,6 +1705,97 @@ unsupported {} from `{}` with element `{}` of size `{}` to `{}`"#,
17051705
bitwise_red!(simd_reduce_all: vector_reduce_and, true);
17061706
bitwise_red!(simd_reduce_any: vector_reduce_or, true);
17071707

1708+
if name == sym::simd_cast_ptr {
1709+
require_simd!(ret_ty, "return");
1710+
let (out_len, out_elem) = ret_ty.simd_size_and_type(bx.tcx());
1711+
require!(
1712+
in_len == out_len,
1713+
"expected return type with length {} (same as input type `{}`), \
1714+
found `{}` with length {}",
1715+
in_len,
1716+
in_ty,
1717+
ret_ty,
1718+
out_len
1719+
);
1720+
1721+
match in_elem.kind() {
1722+
ty::RawPtr(p) => {
1723+
let (metadata, check_sized) = p.ty.ptr_metadata_ty(bx.tcx, |ty| {
1724+
bx.tcx.normalize_erasing_regions(ty::ParamEnv::reveal_all(), ty)
1725+
});
1726+
assert!(!check_sized); // we are in codegen, so we shouldn't see these types
1727+
require!(metadata.is_unit(), "cannot cast fat pointer `{}`", in_elem)
1728+
}
1729+
_ => return_error!("expected pointer, got `{}`", in_elem),
1730+
}
1731+
match out_elem.kind() {
1732+
ty::RawPtr(p) => {
1733+
let (metadata, check_sized) = p.ty.ptr_metadata_ty(bx.tcx, |ty| {
1734+
bx.tcx.normalize_erasing_regions(ty::ParamEnv::reveal_all(), ty)
1735+
});
1736+
assert!(!check_sized); // we are in codegen, so we shouldn't see these types
1737+
require!(metadata.is_unit(), "cannot cast to fat pointer `{}`", out_elem)
1738+
}
1739+
_ => return_error!("expected pointer, got `{}`", out_elem),
1740+
}
1741+
1742+
if in_elem == out_elem {
1743+
return Ok(args[0].immediate());
1744+
} else {
1745+
return Ok(bx.pointercast(args[0].immediate(), llret_ty));
1746+
}
1747+
}
1748+
1749+
if name == sym::simd_expose_addr {
1750+
require_simd!(ret_ty, "return");
1751+
let (out_len, out_elem) = ret_ty.simd_size_and_type(bx.tcx());
1752+
require!(
1753+
in_len == out_len,
1754+
"expected return type with length {} (same as input type `{}`), \
1755+
found `{}` with length {}",
1756+
in_len,
1757+
in_ty,
1758+
ret_ty,
1759+
out_len
1760+
);
1761+
1762+
match in_elem.kind() {
1763+
ty::RawPtr(_) => {}
1764+
_ => return_error!("expected pointer, got `{}`", in_elem),
1765+
}
1766+
match out_elem.kind() {
1767+
ty::Uint(ty::UintTy::Usize) => {}
1768+
_ => return_error!("expected `usize`, got `{}`", out_elem),
1769+
}
1770+
1771+
return Ok(bx.ptrtoint(args[0].immediate(), llret_ty));
1772+
}
1773+
1774+
if name == sym::simd_from_exposed_addr {
1775+
require_simd!(ret_ty, "return");
1776+
let (out_len, out_elem) = ret_ty.simd_size_and_type(bx.tcx());
1777+
require!(
1778+
in_len == out_len,
1779+
"expected return type with length {} (same as input type `{}`), \
1780+
found `{}` with length {}",
1781+
in_len,
1782+
in_ty,
1783+
ret_ty,
1784+
out_len
1785+
);
1786+
1787+
match in_elem.kind() {
1788+
ty::Uint(ty::UintTy::Usize) => {}
1789+
_ => return_error!("expected `usize`, got `{}`", in_elem),
1790+
}
1791+
match out_elem.kind() {
1792+
ty::RawPtr(_) => {}
1793+
_ => return_error!("expected pointer, got `{}`", out_elem),
1794+
}
1795+
1796+
return Ok(bx.inttoptr(args[0].immediate(), llret_ty));
1797+
}
1798+
17081799
if name == sym::simd_cast || name == sym::simd_as {
17091800
require_simd!(ret_ty, "return");
17101801
let (out_len, out_elem) = ret_ty.simd_size_and_type(bx.tcx());

Diff for: compiler/rustc_codegen_llvm/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")]
88
#![feature(hash_raw_entry)]
99
#![feature(let_chains)]
10-
#![feature(let_else)]
10+
#![cfg_attr(bootstrap, feature(let_else))]
1111
#![feature(extern_types)]
1212
#![feature(once_cell)]
1313
#![feature(iter_intersperse)]

Diff for: compiler/rustc_codegen_ssa/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")]
22
#![feature(box_patterns)]
33
#![feature(try_blocks)]
4-
#![feature(let_else)]
4+
#![cfg_attr(bootstrap, feature(let_else))]
55
#![feature(once_cell)]
66
#![feature(associated_type_bounds)]
77
#![feature(strict_provenance)]

Diff for: compiler/rustc_const_eval/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Rust MIR: a lowered representation of Rust.
1010
#![feature(decl_macro)]
1111
#![feature(exact_size_is_empty)]
1212
#![feature(let_chains)]
13-
#![feature(let_else)]
13+
#![cfg_attr(bootstrap, feature(let_else))]
1414
#![feature(map_try_insert)]
1515
#![feature(min_specialization)]
1616
#![feature(slice_ptr_get)]

Diff for: compiler/rustc_data_structures/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
#![feature(cell_leak)]
1414
#![feature(control_flow_enum)]
1515
#![feature(extend_one)]
16-
#![feature(let_else)]
16+
#![cfg_attr(bootstrap, feature(let_else))]
1717
#![feature(hash_raw_entry)]
1818
#![feature(hasher_prefixfree_extras)]
1919
#![feature(maybe_uninit_uninit_array)]

Diff for: compiler/rustc_driver/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
//! This API is completely unstable and subject to change.
66
77
#![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")]
8-
#![feature(let_else)]
8+
#![cfg_attr(bootstrap, feature(let_else))]
99
#![feature(once_cell)]
1010
#![recursion_limit = "256"]
1111
#![allow(rustc::potential_query_instability)]

Diff for: compiler/rustc_errors/src/lib.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#![feature(if_let_guard)]
88
#![feature(adt_const_params)]
99
#![feature(let_chains)]
10-
#![feature(let_else)]
10+
#![cfg_attr(bootstrap, feature(let_else))]
1111
#![feature(never_type)]
1212
#![feature(result_option_inspect)]
1313
#![feature(rustc_attrs)]
@@ -635,6 +635,10 @@ impl Handler {
635635
inner.steal((span, key)).map(|diag| DiagnosticBuilder::new_diagnostic(self, diag))
636636
}
637637

638+
pub fn has_stashed_diagnostic(&self, span: Span, key: StashKey) -> bool {
639+
self.inner.borrow().stashed_diagnostics.get(&(span, key)).is_some()
640+
}
641+
638642
/// Emit all stashed diagnostics.
639643
pub fn emit_stashed_diagnostics(&self) -> Option<ErrorGuaranteed> {
640644
self.inner.borrow_mut().emit_stashed_diagnostics()

Diff for: compiler/rustc_expand/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#![feature(associated_type_defaults)]
44
#![feature(if_let_guard)]
55
#![feature(let_chains)]
6-
#![feature(let_else)]
6+
#![cfg_attr(bootstrap, feature(let_else))]
77
#![feature(macro_metavar_expr)]
88
#![feature(proc_macro_diagnostic)]
99
#![feature(proc_macro_internals)]

Diff for: compiler/rustc_feature/src/accepted.rs

+2
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,8 @@ declare_features! (
190190
(accepted, item_like_imports, "1.15.0", Some(35120), None),
191191
/// Allows `'a: { break 'a; }`.
192192
(accepted, label_break_value, "CURRENT_RUSTC_VERSION", Some(48594), None),
193+
/// Allows `let...else` statements.
194+
(accepted, let_else, "CURRENT_RUSTC_VERSION", Some(87335), None),
193195
/// Allows `break {expr}` with a value inside `loop`s.
194196
(accepted, loop_break_value, "1.19.0", Some(37339), None),
195197
/// Allows use of `?` as the Kleene "at most one" operator in macros.

Diff for: compiler/rustc_feature/src/active.rs

-2
Original file line numberDiff line numberDiff line change
@@ -430,8 +430,6 @@ declare_features! (
430430
(active, large_assignments, "1.52.0", Some(83518), None),
431431
/// Allows `if/while p && let q = r && ...` chains.
432432
(active, let_chains, "1.37.0", Some(53667), None),
433-
/// Allows `let...else` statements.
434-
(active, let_else, "1.56.0", Some(87335), None),
435433
/// Allows `#[link(..., cfg(..))]`.
436434
(active, link_cfg, "1.14.0", Some(37406), None),
437435
/// Allows using `reason` in lint attributes and the `#[expect(lint)]` lint check.

Diff for: compiler/rustc_hir/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#![feature(associated_type_defaults)]
66
#![feature(closure_track_caller)]
77
#![feature(const_btree_new)]
8-
#![feature(let_else)]
8+
#![cfg_attr(bootstrap, feature(let_else))]
99
#![feature(once_cell)]
1010
#![feature(min_specialization)]
1111
#![feature(never_type)]

Diff for: compiler/rustc_incremental/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
#![deny(missing_docs)]
44
#![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")]
5-
#![feature(let_else)]
5+
#![cfg_attr(bootstrap, feature(let_else))]
66
#![recursion_limit = "256"]
77
#![allow(rustc::potential_query_instability)]
88

Diff for: compiler/rustc_index/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#![feature(allow_internal_unstable)]
44
#![feature(bench_black_box)]
55
#![feature(extend_one)]
6-
#![feature(let_else)]
6+
#![cfg_attr(bootstrap, feature(let_else))]
77
#![feature(min_specialization)]
88
#![feature(new_uninit)]
99
#![feature(step_trait)]

Diff for: compiler/rustc_infer/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
#![feature(extend_one)]
2020
#![cfg_attr(bootstrap, feature(label_break_value))]
2121
#![feature(let_chains)]
22-
#![feature(let_else)]
22+
#![cfg_attr(bootstrap, feature(let_else))]
2323
#![feature(min_specialization)]
2424
#![feature(never_type)]
2525
#![feature(try_blocks)]

Diff for: compiler/rustc_interface/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#![feature(box_patterns)]
2-
#![feature(let_else)]
2+
#![cfg_attr(bootstrap, feature(let_else))]
33
#![feature(internal_output_capture)]
44
#![feature(thread_spawn_unchecked)]
55
#![feature(once_cell)]

Diff for: compiler/rustc_lint/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
#![feature(iter_intersperse)]
3535
#![feature(iter_order_by)]
3636
#![feature(let_chains)]
37-
#![feature(let_else)]
37+
#![cfg_attr(bootstrap, feature(let_else))]
3838
#![feature(min_specialization)]
3939
#![feature(never_type)]
4040
#![recursion_limit = "256"]

Diff for: compiler/rustc_macros/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#![feature(allow_internal_unstable)]
2-
#![feature(let_else)]
2+
#![cfg_attr(bootstrap, feature(let_else))]
33
#![feature(never_type)]
44
#![feature(proc_macro_diagnostic)]
55
#![feature(proc_macro_span)]

Diff for: compiler/rustc_metadata/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#![cfg_attr(bootstrap, feature(generic_associated_types))]
66
#![feature(iter_from_generator)]
77
#![feature(let_chains)]
8-
#![feature(let_else)]
8+
#![cfg_attr(bootstrap, feature(let_else))]
99
#![feature(once_cell)]
1010
#![feature(proc_macro_internals)]
1111
#![feature(macro_metavar_expr)]

Diff for: compiler/rustc_middle/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
#![feature(new_uninit)]
4141
#![feature(once_cell)]
4242
#![feature(let_chains)]
43-
#![feature(let_else)]
43+
#![cfg_attr(bootstrap, feature(let_else))]
4444
#![feature(min_specialization)]
4545
#![feature(trusted_len)]
4646
#![feature(type_alias_impl_trait)]

Diff for: compiler/rustc_mir_build/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#![feature(control_flow_enum)]
77
#![feature(if_let_guard)]
88
#![feature(let_chains)]
9-
#![feature(let_else)]
9+
#![cfg_attr(bootstrap, feature(let_else))]
1010
#![feature(min_specialization)]
1111
#![feature(once_cell)]
1212
#![recursion_limit = "256"]

Diff for: compiler/rustc_mir_build/src/thir/pattern/check_match.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -491,8 +491,8 @@ impl<'p, 'tcx> MatchVisitor<'_, 'p, 'tcx> {
491491
err.span_suggestion_verbose(
492492
semi_span.shrink_to_lo(),
493493
&format!(
494-
"alternatively, on nightly, you might want to use \
495-
`#![feature(let_else)]` to handle the variant{} that {} matched",
494+
"alternatively, you might want to use \
495+
let else to handle the variant{} that {} matched",
496496
pluralize!(witnesses.len()),
497497
match witnesses.len() {
498498
1 => "isn't",

Diff for: compiler/rustc_mir_dataflow/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#![feature(associated_type_defaults)]
22
#![feature(box_patterns)]
33
#![feature(exact_size_is_empty)]
4-
#![feature(let_else)]
4+
#![cfg_attr(bootstrap, feature(let_else))]
55
#![feature(min_specialization)]
66
#![feature(once_cell)]
77
#![feature(stmt_expr_attributes)]

Diff for: compiler/rustc_mir_transform/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#![allow(rustc::potential_query_instability)]
22
#![feature(box_patterns)]
33
#![feature(let_chains)]
4-
#![feature(let_else)]
4+
#![cfg_attr(bootstrap, feature(let_else))]
55
#![feature(map_try_insert)]
66
#![feature(min_specialization)]
77
#![feature(never_type)]

Diff for: compiler/rustc_monomorphize/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#![feature(array_windows)]
22
#![feature(control_flow_enum)]
3-
#![feature(let_else)]
3+
#![cfg_attr(bootstrap, feature(let_else))]
44
#![recursion_limit = "256"]
55
#![allow(rustc::potential_query_instability)]
66
#![deny(rustc::untranslatable_diagnostic)]

0 commit comments

Comments
 (0)