Skip to content

Commit 37d6b94

Browse files
committed
Auto merge of rust-lang#138020 - workingjubilee:rollup-eva637e, r=workingjubilee
Rollup of 33 pull requests Successful merges: - rust-lang#136581 (Retire the legacy `Makefile`-based `run-make` test infra) - rust-lang#136764 (Make `ptr_cast_add_auto_to_object` lint into hard error) - rust-lang#136798 (Added documentation for flushing per rust-lang#74348) - rust-lang#136865 (Perform deeper compiletest path normalization for `$TEST_BUILD_DIR` to account for compare-mode/debugger cases, and normalize long type file filename hashes) - rust-lang#136975 (Look for `python3` first on MacOS, not `py`) - rust-lang#137240 (Slightly reformat `std::fs::remove_dir_all` error docs) - rust-lang#137303 (Remove `MaybeForgetReturn` suggestion) - rust-lang#137327 (Undeprecate env::home_dir) - rust-lang#137502 (Don't include global asm in `mir_keys`, fix error body synthesis) - rust-lang#137534 ([rustdoc] hide item that is not marked as doc(inline) and whose src is doc(hidden)) - rust-lang#137565 (Try to point of macro expansion from resolver and method errors if it involves macro var) - rust-lang#137643 (Add DWARF test case for non-C-like `repr128` enums) - rust-lang#137758 (fix usage of ty decl macro fragments in attributes) - rust-lang#137764 (Ensure that negative auto impls are always applicable) - rust-lang#137772 (Fix char count in `Display` for `ByteStr`) - rust-lang#137798 (ci: use ubuntu 24 on arm large runner) - rust-lang#137805 (adjust Layout debug printing to match the internal field name) - rust-lang#137808 (Do not require that unsafe fields lack drop glue) - rust-lang#137820 (Clarify why InhabitedPredicate::instantiate_opt exists) - rust-lang#137825 (Provide more context on resolve error caused from incorrect RTN) - rust-lang#137829 (Stabilize [T]::split_off... methods) - rust-lang#137834 (rustc_fluent_macro: use CARGO_CRATE_NAME instead of CARGO_PKG_NAME) - rust-lang#137850 (Stabilize `box_uninit_write`) - rust-lang#137912 (Do not recover missing lifetime with random in-scope lifetime) - rust-lang#137913 (Allow struct field default values to reference struct's generics) - rust-lang#137923 (Simplify `<Postorder as Iterator>::size_hint`) - rust-lang#137949 (Update MSVC INSTALL.md instructions to recommend VS 2022 + recent Windows 10/11 SDK) - rust-lang#137963 (Add ``dyn`` keyword to `E0373` examples) - rust-lang#137975 (Remove unused `PpMode::needs_hir`) - rust-lang#137986 (Fix some typos) - rust-lang#137991 (Add `avr-none` to SUMMARY.md and platform-support.md) - rust-lang#137993 (Remove obsolete comment from DeduceReadOnly) - rust-lang#137996 (Revert "compiler/rustc_data_structures/src/sync/worker_local.rs: delete "unsafe impl Sync"") r? `@ghost` `@rustbot` modify labels: rollup
2 parents 08db600 + f7b31e9 commit 37d6b94

File tree

246 files changed

+1682
-1902
lines changed

Some content is hidden

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

246 files changed

+1682
-1902
lines changed

CONTRIBUTING.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ For submodules, changes need to be made against the repository corresponding the
1818
submodule, and not the main `rust-lang/rust` repository.
1919

2020
For subtrees, prefer sending a PR against the subtree's repository if it does
21-
not need to be made against the main `rust-lang/rust` repostory (e.g. a
21+
not need to be made against the main `rust-lang/rust` repository (e.g. a
2222
rustc-dev-guide change that does not accompany a compiler change).
2323

2424
## About the [rustc-dev-guide]

INSTALL.md

+7-3
Original file line numberDiff line numberDiff line change
@@ -210,9 +210,13 @@ itself back on after some time).
210210

211211
### MSVC
212212

213-
MSVC builds of Rust additionally require an installation of Visual Studio 2017
214-
(or later) so `rustc` can use its linker. The simplest way is to get
215-
[Visual Studio], check the "C++ build tools" and "Windows 10 SDK" workload.
213+
MSVC builds of Rust additionally requires an installation of:
214+
215+
- Visual Studio 2022 (or later) build tools so `rustc` can use its linker. Older
216+
Visual Studio versions such as 2019 *may* work but aren't actively tested.
217+
- A recent Windows 10 or 11 SDK.
218+
219+
The simplest way is to get [Visual Studio], check the "C++ build tools".
216220

217221
[Visual Studio]: https://visualstudio.microsoft.com/downloads/
218222

compiler/rustc_abi/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1812,7 +1812,7 @@ where
18121812
f.debug_struct("Layout")
18131813
.field("size", size)
18141814
.field("align", align)
1815-
.field("abi", backend_repr)
1815+
.field("backend_repr", backend_repr)
18161816
.field("fields", fields)
18171817
.field("largest_niche", largest_niche)
18181818
.field("uninhabited", uninhabited)

compiler/rustc_ast_lowering/src/lib.rs

-1
Original file line numberDiff line numberDiff line change
@@ -926,7 +926,6 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
926926
if let Some(first_char) = constraint.ident.as_str().chars().next()
927927
&& first_char.is_ascii_lowercase()
928928
{
929-
tracing::info!(?data, ?data.inputs);
930929
let err = match (&data.inputs[..], &data.output) {
931930
([_, ..], FnRetTy::Default(_)) => {
932931
errors::BadReturnTypeNotation::Inputs { span: data.inputs_span }

compiler/rustc_ast_lowering/src/path.rs

-1
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,6 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
268268
}
269269
GenericArgs::Parenthesized(data) => match generic_args_mode {
270270
GenericArgsMode::ReturnTypeNotation => {
271-
tracing::info!(?data, ?data.inputs);
272271
let err = match (&data.inputs[..], &data.output) {
273272
([_, ..], FnRetTy::Default(_)) => {
274273
BadReturnTypeNotation::Inputs { span: data.inputs_span }

compiler/rustc_attr_parsing/src/parser.rs

+9
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,15 @@ impl<'a> MetaItemListParserContext<'a> {
473473
{
474474
self.inside_delimiters.next();
475475
return Some(MetaItemOrLitParser::Lit(lit));
476+
} else if let Some(TokenTree::Delimited(.., Delimiter::Invisible(_), inner_tokens)) =
477+
self.inside_delimiters.peek()
478+
{
479+
self.inside_delimiters.next();
480+
return MetaItemListParserContext {
481+
inside_delimiters: inner_tokens.iter().peekable(),
482+
dcx: self.dcx,
483+
}
484+
.next();
476485
}
477486

478487
// or a path.

compiler/rustc_data_structures/src/marker.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use std::alloc::Allocator;
2+
13
#[rustc_on_unimplemented(message = "`{Self}` doesn't implement `DynSend`. \
24
Add it to `rustc_data_structures::marker` or use `IntoDynSyncSend` if it's already `Send`")]
35
// This is an auto trait for types which can be sent across threads if `sync::is_dyn_thread_safe()`
@@ -28,8 +30,8 @@ impls_dyn_send_neg!(
2830
[*const T where T: ?Sized]
2931
[*mut T where T: ?Sized]
3032
[std::ptr::NonNull<T> where T: ?Sized]
31-
[std::rc::Rc<T> where T: ?Sized]
32-
[std::rc::Weak<T> where T: ?Sized]
33+
[std::rc::Rc<T, A> where T: ?Sized, A: Allocator]
34+
[std::rc::Weak<T, A> where T: ?Sized, A: Allocator]
3335
[std::sync::MutexGuard<'_, T> where T: ?Sized]
3436
[std::sync::RwLockReadGuard<'_, T> where T: ?Sized]
3537
[std::sync::RwLockWriteGuard<'_, T> where T: ?Sized]
@@ -96,8 +98,8 @@ impls_dyn_sync_neg!(
9698
[std::cell::RefCell<T> where T: ?Sized]
9799
[std::cell::UnsafeCell<T> where T: ?Sized]
98100
[std::ptr::NonNull<T> where T: ?Sized]
99-
[std::rc::Rc<T> where T: ?Sized]
100-
[std::rc::Weak<T> where T: ?Sized]
101+
[std::rc::Rc<T, A> where T: ?Sized, A: Allocator]
102+
[std::rc::Weak<T, A> where T: ?Sized, A: Allocator]
101103
[std::cell::OnceCell<T> where T]
102104
[std::sync::mpsc::Receiver<T> where T]
103105
[std::sync::mpsc::Sender<T> where T]

compiler/rustc_data_structures/src/sync/worker_local.rs

+6-5
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,12 @@ pub struct WorkerLocal<T> {
106106
registry: Registry,
107107
}
108108

109+
// This is safe because the `deref` call will return a reference to a `T` unique to each thread
110+
// or it will panic for threads without an associated local. So there isn't a need for `T` to do
111+
// it's own synchronization. The `verify` method on `RegistryId` has an issue where the id
112+
// can be reused, but `WorkerLocal` has a reference to `Registry` which will prevent any reuse.
113+
unsafe impl<T: Send> Sync for WorkerLocal<T> {}
114+
109115
impl<T> WorkerLocal<T> {
110116
/// Creates a new worker local where the `initial` closure computes the
111117
/// value this worker local should take for each thread in the registry.
@@ -132,11 +138,6 @@ impl<T> Deref for WorkerLocal<T> {
132138
fn deref(&self) -> &T {
133139
// This is safe because `verify` will only return values less than
134140
// `self.registry.thread_limit` which is the size of the `self.locals` array.
135-
136-
// The `deref` call will return a reference to a `T` unique to each thread
137-
// or it will panic for threads without an associated local. So there isn't a need for `T` to do
138-
// it's own synchronization. The `verify` method on `RegistryId` has an issue where the id
139-
// can be reused, but `WorkerLocal` has a reference to `Registry` which will prevent any reuse.
140141
unsafe { &self.locals.get_unchecked(self.registry.id().verify()).0 }
141142
}
142143
}

compiler/rustc_error_codes/src/error_codes/E0373.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ A captured variable in a closure may not live long enough.
33
Erroneous code example:
44

55
```compile_fail,E0373
6-
fn foo() -> Box<Fn(u32) -> u32> {
6+
fn foo() -> Box<dyn Fn(u32) -> u32> {
77
let x = 0u32;
88
Box::new(|y| x + y)
99
}
@@ -42,7 +42,7 @@ This approach moves (or copies, where possible) data into the closure, rather
4242
than taking references to it. For example:
4343

4444
```
45-
fn foo() -> Box<Fn(u32) -> u32> {
45+
fn foo() -> Box<dyn Fn(u32) -> u32> {
4646
let x = 0u32;
4747
Box::new(move |y| x + y)
4848
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
An auto trait cannot be added to the bounds of a `dyn Trait` type via
2+
a pointer cast.
3+
4+
Erroneous code example:
5+
6+
```rust,edition2021,compile_fail,E0804
7+
let ptr: *const dyn core::any::Any = &();
8+
_ = ptr as *const (dyn core::any::Any + Send);
9+
```
10+
11+
Adding an auto trait can make the vtable invalid, potentially causing
12+
UB in safe code afterwards. For example:
13+
14+
```rust,edition2021,no_run
15+
use core::{mem::transmute, ptr::NonNull};
16+
17+
trait Trait {
18+
fn f(&self)
19+
where
20+
Self: Send;
21+
}
22+
23+
impl Trait for NonNull<()> {
24+
fn f(&self) {
25+
unreachable!()
26+
}
27+
}
28+
29+
fn main() {
30+
let unsend: &dyn Trait = &NonNull::dangling();
31+
let bad: &(dyn Trait + Send) = unsafe { transmute(unsend) };
32+
// This crashes, since the vtable for `NonNull as dyn Trait` does
33+
// not have an entry for `Trait::f`.
34+
bad.f();
35+
}
36+
```
37+
38+
To fix this error, you can use `transmute` rather than pointer casts,
39+
but you must ensure that the vtable is valid for the pointer's type
40+
before calling a method on the trait object or allowing other code to
41+
do so.

compiler/rustc_error_codes/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,7 @@ E0800: 0800,
547547
E0801: 0801,
548548
E0802: 0802,
549549
E0803: 0803,
550+
E0804: 0804,
550551
);
551552
)
552553
}

compiler/rustc_errors/src/lib.rs

-1
Original file line numberDiff line numberDiff line change
@@ -626,7 +626,6 @@ pub enum StashKey {
626626
MaybeFruTypo,
627627
CallAssocMethod,
628628
AssociatedTypeSuggestion,
629-
MaybeForgetReturn,
630629
/// Query cycle detected, stashing in favor of a better error.
631630
Cycle,
632631
UndeterminedMacroResolution,

compiler/rustc_fluent_macro/src/fluent.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ fn failed(crate_name: &Ident) -> proc_macro::TokenStream {
7878

7979
/// See [rustc_fluent_macro::fluent_messages].
8080
pub(crate) fn fluent_messages(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
81-
let crate_name = std::env::var("CARGO_PKG_NAME")
82-
// If `CARGO_PKG_NAME` is missing, then we're probably running in a test, so use
81+
let crate_name = std::env::var("CARGO_CRATE_NAME")
82+
// If `CARGO_CRATE_NAME` is missing, then we're probably running in a test, so use
8383
// `no_crate`.
8484
.unwrap_or_else(|_| "no_crate".to_string())
8585
.replace("rustc_", "");

compiler/rustc_hir_analysis/messages.ftl

+2-7
Original file line numberDiff line numberDiff line change
@@ -278,13 +278,6 @@ hir_analysis_invalid_union_field =
278278
hir_analysis_invalid_union_field_sugg =
279279
wrap the field type in `ManuallyDrop<...>`
280280
281-
hir_analysis_invalid_unsafe_field =
282-
field must implement `Copy` or be wrapped in `ManuallyDrop<...>` to be unsafe
283-
.note = unsafe fields must not have drop side-effects, which is currently enforced via either `Copy` or `ManuallyDrop<...>`
284-
285-
hir_analysis_invalid_unsafe_field_sugg =
286-
wrap the field type in `ManuallyDrop<...>`
287-
288281
hir_analysis_late_bound_const_in_apit = `impl Trait` can only mention const parameters from an fn or impl
289282
.label = const parameter declared here
290283
@@ -620,6 +613,8 @@ hir_analysis_variances_of = {$variances}
620613
hir_analysis_where_clause_on_main = `main` function is not allowed to have a `where` clause
621614
.label = `main` cannot have a `where` clause
622615
616+
hir_analysis_within_macro = due to this macro variable
617+
623618
hir_analysis_wrong_number_of_generic_arguments_to_intrinsic =
624619
intrinsic has wrong number of {$descr} parameters: found {$found}, expected {$expected}
625620
.label = expected {$expected} {$descr} {$expected ->

0 commit comments

Comments
 (0)