Skip to content

Commit 451035f

Browse files
committed
Auto merge of rust-lang#3751 - rust-lang:rustup-2024-07-16, r=RalfJung
Automatic Rustup
2 parents e90f047 + 547ade5 commit 451035f

File tree

1,578 files changed

+24908
-16514
lines changed

Some content is hidden

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

1,578 files changed

+24908
-16514
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ jobs:
6565
defaults:
6666
run:
6767
shell: ${{ contains(matrix.os, 'windows') && 'msys2 {0}' || 'bash' }}
68-
timeout-minutes: 600
68+
timeout-minutes: 240
6969
env:
7070
CI_JOB_NAME: ${{ matrix.image }}
7171
CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ build/
5050
/target
5151
/src/bootstrap/target
5252
/src/tools/x/target
53+
/inc-fat/
5354
# Created by default with `src/ci/docker/run.sh`
5455
/obj/
5556
/rustc-ice*

Cargo.lock

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3420,6 +3420,7 @@ version = "0.2.0"
34203420
dependencies = [
34213421
"ar",
34223422
"bstr",
3423+
"build_helper",
34233424
"gimli 0.28.1",
34243425
"object 0.34.0",
34253426
"regex",
@@ -3514,6 +3515,12 @@ version = "1.1.0"
35143515
source = "registry+https://github.com/rust-lang/crates.io-index"
35153516
checksum = "5be1bdc7edf596692617627bbfeaba522131b18e06ca4df2b6b689e3c5d5ce84"
35163517

3518+
[[package]]
3519+
name = "rustc-stable-hash"
3520+
version = "0.1.0"
3521+
source = "registry+https://github.com/rust-lang/crates.io-index"
3522+
checksum = "e5c9f15eec8235d7cb775ee6f81891db79b98fd54ba1ad8fae565b88ef1ae4e2"
3523+
35173524
[[package]]
35183525
name = "rustc-std-workspace-alloc"
35193526
version = "1.99.0"
@@ -3852,6 +3859,7 @@ dependencies = [
38523859
"portable-atomic",
38533860
"rustc-hash",
38543861
"rustc-rayon",
3862+
"rustc-stable-hash",
38553863
"rustc_arena",
38563864
"rustc_graphviz",
38573865
"rustc_index",

INSTALL.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ If building LLVM from source, you'll need additional tools:
4848
[LLVM's documentation](https://llvm.org/docs/GettingStarted.html#host-c-toolchain-both-compiler-and-standard-library)
4949
* `ninja`, or GNU `make` 3.81 or later (Ninja is recommended, especially on
5050
Windows)
51-
* `cmake` 3.13.4 or later
51+
* `cmake` version listed on [LLVM's documentation](https://llvm.org/docs/GettingStarted.html#software)
5252
* `libstdc++-static` may be required on some Linux distributions such as Fedora
5353
and Ubuntu
5454

@@ -215,7 +215,7 @@ python x.py build
215215

216216
Right now, building Rust only works with some known versions of Visual Studio.
217217
If you have a more recent version installed and the build system doesn't
218-
understand, you may need to force rustbuild to use an older version.
218+
understand, you may need to force bootstrap to use an older version.
219219
This can be done by manually calling the appropriate vcvars file before running
220220
the bootstrap.
221221

RELEASES.md

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,161 @@
1+
Version 1.80 (2024-07-25)
2+
==========================
3+
4+
<a id="1.80-Language"></a>
5+
6+
Language
7+
--------
8+
- [Document maximum allocation size](https://github.com/rust-lang/rust/pull/116675/)
9+
- [Allow zero-byte offsets and ZST read/writes on arbitrary pointers](https://github.com/rust-lang/rust/pull/117329/)
10+
- [Support C23's variadics without a named parameter](https://github.com/rust-lang/rust/pull/124048/)
11+
- [Stabilize `exclusive_range_pattern` feature](https://github.com/rust-lang/rust/pull/124459/)
12+
- [Guarantee layout and ABI of `Result` in some scenarios](https://github.com/rust-lang/rust/pull/124870)
13+
14+
<a id="1.80-Compiler"></a>
15+
16+
Compiler
17+
--------
18+
- [Update cc crate to v1.0.97 allowing additional spectre mitigations on MSVC targets](https://github.com/rust-lang/rust/pull/124892/)
19+
- [Allow field reordering on types marked `repr(packed(1))`](https://github.com/rust-lang/rust/pull/125360/)
20+
- [Add a lint against never type fallback affecting unsafe code](https://github.com/rust-lang/rust/pull/123939/)
21+
- [Disallow cast with trailing braced macro in let-else](https://github.com/rust-lang/rust/pull/125049/)
22+
- [Expand `for_loops_over_fallibles` lint to lint on fallibles behind references.](https://github.com/rust-lang/rust/pull/125156/)
23+
- [self-contained linker: retry linking without `-fuse-ld=lld` on CCs that don't support it](https://github.com/rust-lang/rust/pull/125417/)
24+
- [Do not parse CVarArgs (`...`) as a type in trait bounds](https://github.com/rust-lang/rust/pull/125863/)
25+
- Improvements to LLDB formatting [#124458](https://github.com/rust-lang/rust/pull/124458) [#124500](https://github.com/rust-lang/rust/pull/124500)
26+
- [For the wasm32-wasip2 target default to PIC and do not use `-fuse-ld=lld`](https://github.com/rust-lang/rust/pull/124858/)
27+
- [Add x86_64-unknown-linux-none as a tier 3 target](https://github.com/rust-lang/rust/pull/125023/)
28+
- [Lint on `foo.into_iter()` resolving to `&Box<[T]>: IntoIterator`](https://github.com/rust-lang/rust/pull/124097/)
29+
30+
<a id="1.80-Libraries"></a>
31+
32+
Libraries
33+
---------
34+
- [Add `size_of` and `size_of_val` and `align_of` and `align_of_val` to the prelude](https://github.com/rust-lang/rust/pull/123168/)
35+
- [Abort a process when FD ownership is violated](https://github.com/rust-lang/rust/pull/124210/)
36+
- [io::Write::write_fmt: panic if the formatter fails when the stream does not fail](https://github.com/rust-lang/rust/pull/125012/)
37+
- [Panic if `PathBuf::set_extension` would add a path separator](https://github.com/rust-lang/rust/pull/125070/)
38+
- [Add assert_unsafe_precondition to unchecked_{add,sub,neg,mul,shl,shr} methods](https://github.com/rust-lang/rust/pull/121571/)
39+
- [Update `c_char` on AIX to use the correct type](https://github.com/rust-lang/rust/pull/122986/)
40+
- [`offset_of!` no longer returns a temporary](https://github.com/rust-lang/rust/pull/124484/)
41+
- [Handle sigma in `str.to_lowercase` correctly](https://github.com/rust-lang/rust/pull/124773/)
42+
- [Raise `DEFAULT_MIN_STACK_SIZE` to at least 64KiB](https://github.com/rust-lang/rust/pull/126059/)
43+
44+
<a id="1.80-Stabilized-APIs"></a>
45+
46+
Stabilized APIs
47+
---------------
48+
- [`impl Default for Rc<CStr>`](https://doc.rust-lang.org/beta/alloc/rc/struct.Rc.html#impl-Default-for-Rc%3CCStr%3E)
49+
- [`impl Default for Rc<str>`](https://doc.rust-lang.org/beta/alloc/rc/struct.Rc.html#impl-Default-for-Rc%3Cstr%3E)
50+
- [`impl Default for Rc<[T]>`](https://doc.rust-lang.org/beta/alloc/rc/struct.Rc.html#impl-Default-for-Rc%3C%5BT%5D%3E)
51+
- [`impl Default for Arc<str>`](https://doc.rust-lang.org/beta/alloc/sync/struct.Arc.html#impl-Default-for-Arc%3Cstr%3E)
52+
- [`impl Default for Arc<CStr>`](https://doc.rust-lang.org/beta/alloc/sync/struct.Arc.html#impl-Default-for-Arc%3CCStr%3E)
53+
- [`impl Default for Arc<[T]>`](https://doc.rust-lang.org/beta/alloc/sync/struct.Arc.html#impl-Default-for-Arc%3C%5BT%5D%3E)
54+
- [`impl IntoIterator for Box<[T]>`](https://doc.rust-lang.org/beta/alloc/boxed/struct.Box.html#impl-IntoIterator-for-Box%3C%5BI%5D,+A%3E)
55+
- [`impl FromIterator<String> for Box<str>`](https://doc.rust-lang.org/beta/alloc/boxed/struct.Box.html#impl-FromIterator%3CString%3E-for-Box%3Cstr%3E)
56+
- [`impl FromIterator<char> for Box<str>`](https://doc.rust-lang.org/beta/alloc/boxed/struct.Box.html#impl-FromIterator%3Cchar%3E-for-Box%3Cstr%3E)
57+
- [`LazyCell`](https://doc.rust-lang.org/beta/core/cell/struct.LazyCell.html)
58+
- [`LazyLock`](https://doc.rust-lang.org/beta/std/sync/struct.LazyLock.html)
59+
- [`Duration::div_duration_f32`](https://doc.rust-lang.org/beta/std/time/struct.Duration.html#method.div_duration_f32)
60+
- [`Duration::div_duration_f64`](https://doc.rust-lang.org/beta/std/time/struct.Duration.html#method.div_duration_f64)
61+
- [`Option::take_if`](https://doc.rust-lang.org/beta/std/option/enum.Option.html#method.take_if)
62+
- [`Seek::seek_relative`](https://doc.rust-lang.org/beta/std/io/trait.Seek.html#method.seek_relative)
63+
- [`BinaryHeap::as_slice`](https://doc.rust-lang.org/beta/std/collections/struct.BinaryHeap.html#method.as_slice)
64+
- [`NonNull::offset`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.offset)
65+
- [`NonNull::byte_offset`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.byte_offset)
66+
- [`NonNull::add`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.add)
67+
- [`NonNull::byte_add`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.byte_add)
68+
- [`NonNull::sub`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.sub)
69+
- [`NonNull::byte_sub`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.byte_sub)
70+
- [`NonNull:offset_from`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.offset_from)
71+
- [`NonNull::byte_offset_from`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.byte_offset_from)
72+
- [`NonNull::read`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.read)
73+
- [`NonNull::read_volatile`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.read_volatile)
74+
- [`NonNull::read_unaligned`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.read_unaligned)
75+
- [`NonNull::write`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.write)
76+
- [`NonNull::write_volatile`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.write_volatile)
77+
- [`NonNull::write_unaligned`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.write_unaligned)
78+
- [`NonNull::write_bytes`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.write_bytes)
79+
- [`NonNull::copy_to`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.copy_to)
80+
- [`NonNull::copy_to_nonoverlapping`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.copy_to_nonoverlapping)
81+
- [`NonNull::copy_from`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.copy_from)
82+
- [`NonNull::copy_from_nonoverlapping`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.copy_from_nonoverlapping)
83+
- [`NonNull::replace`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.replace)
84+
- [`NonNull::swap`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.swap)
85+
- [`NonNull::drop_in_place`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.drop_in_place)
86+
- [`NonNull::align_offset`](https://doc.rust-lang.org/beta/std/ptr/struct.NonNull.html#method.align_offset)
87+
- [`<[T]>::split_at_checked`](https://doc.rust-lang.org/beta/std/primitive.slice.html#method.split_at_checked)
88+
- [`<[T]>::split_at_mut_checked`](https://doc.rust-lang.org/beta/std/primitive.slice.html#method.split_at_mut_checked)
89+
- [`str::split_at_checked`](https://doc.rust-lang.org/beta/std/primitive.str.html#method.split_at_checked)
90+
- [`str::split_at_mut_checked`](https://doc.rust-lang.org/beta/std/primitive.str.html#method.split_at_mut_checked)
91+
- [`str::trim_ascii`](https://doc.rust-lang.org/beta/std/primitive.str.html#method.trim_ascii)
92+
- [`str::trim_ascii_start`](https://doc.rust-lang.org/beta/std/primitive.str.html#method.trim_ascii_start)
93+
- [`str::trim_ascii_end`](https://doc.rust-lang.org/beta/std/primitive.str.html#method.trim_ascii_end)
94+
- [`<[AsciiChar]>::trim_ascii`](https://doc.rust-lang.org/beta/core/primitive.slice.html#method.trim_ascii)
95+
- [`<[AsciiChar]>::trim_ascii_start`](https://doc.rust-lang.org/beta/core/primitive.slice.html#method.trim_ascii_start)
96+
- [`<[AsciiChar]>::trim_ascii_end`](https://doc.rust-lang.org/beta/core/primitive.slice.html#method.trim_ascii_end)
97+
- [`Ipv4Addr::BITS`](https://doc.rust-lang.org/beta/core/net/struct.Ipv4Addr.html#associatedconstant.BITS)
98+
- [`Ipv4Addr::to_bits`](https://doc.rust-lang.org/beta/core/net/struct.Ipv4Addr.html#method.to_bits)
99+
- [`Ipv4Addr::from_bits`](https://doc.rust-lang.org/beta/core/net/struct.Ipv4Addr.html#method.from_bits)
100+
- [`Ipv6Addr::BITS`](https://doc.rust-lang.org/beta/core/net/struct.Ipv6Addr.html#associatedconstant.BITS)
101+
- [`Ipv6Addr::to_bits`](https://doc.rust-lang.org/beta/core/net/struct.Ipv6Addr.html#method.to_bits)
102+
- [`Ipv6Addr::from_bits`](https://doc.rust-lang.org/beta/core/net/struct.Ipv6Addr.html#method.from_bits)
103+
- [`Vec::<[T; N]>::into_flattened`](https://doc.rust-lang.org/beta/alloc/vec/struct.Vec.html#method.into_flattened)
104+
- [`<[[T; N]]>::as_flattened`](https://doc.rust-lang.org/beta/core/primitive.slice.html#method.as_flattened)
105+
- [`<[[T; N]]>::as_flattened_mut`](https://doc.rust-lang.org/beta/core/primitive.slice.html#method.as_flattened_mut)
106+
107+
These APIs are now stable in const contexts:
108+
109+
- [`<[T]>::last_chunk`](https://doc.rust-lang.org/beta/core/primitive.slice.html#method.last_chunk)
110+
- [`BinaryHeap::new`](https://doc.rust-lang.org/beta/std/collections/struct.BinaryHeap.html#method.new)
111+
112+
<a id="1.80-Cargo"></a>
113+
114+
Cargo
115+
-----
116+
- [Stabilize `-Zcheck-cfg` as always enabled](https://github.com/rust-lang/cargo/pull/13571/)
117+
- [Warn, rather than fail publish, if a target is excluded](https://github.com/rust-lang/cargo/pull/13713/)
118+
- [Add special `check-cfg` lint config for the `unexpected_cfgs` lint](https://github.com/rust-lang/cargo/pull/13913/)
119+
- [Stabilize `cargo update --precise <yanked>`](https://github.com/rust-lang/cargo/pull/13974/)
120+
- [Don't change file permissions on `Cargo.toml` when using `cargo add`](https://github.com/rust-lang/cargo/pull/13898/)
121+
- [Support using `cargo fix` on IPv6-only networks](https://github.com/rust-lang/cargo/pull/13907/)
122+
123+
<a id="1.80-Rustdoc"></a>
124+
125+
Rustdoc
126+
-----
127+
128+
- [Allow searching for references](https://github.com/rust-lang/rust/pull/124148/)
129+
- [Stabilize `custom_code_classes_in_docs` feature](https://github.com/rust-lang/rust/pull/124577/)
130+
- [fix: In cross-crate scenarios show enum variants on type aliases of enums](https://github.com/rust-lang/rust/pull/125300/)
131+
132+
<a id="1.80-Compatibility-Notes"></a>
133+
134+
Compatibility Notes
135+
-------------------
136+
- [rustfmt estimates line lengths differently when using non-ascii characters](https://github.com/rust-lang/rustfmt/issues/6203)
137+
- [Type aliases are now handled correctly in orphan check](https://github.com/rust-lang/rust/pull/117164/)
138+
- [Allow instructing rustdoc to read from stdin via `-`](https://github.com/rust-lang/rust/pull/124611/)
139+
- [`std::env::{set_var, remove_var}` can no longer be converted to safe function pointers and no longer implement the `Fn` family of traits](https://github.com/rust-lang/rust/pull/124636)
140+
- [Warn (or error) when `Self` constructor from outer item is referenced in inner nested item](https://github.com/rust-lang/rust/pull/124187/)
141+
- [Turn `indirect_structural_match` and `pointer_structural_match` lints into hard errors](https://github.com/rust-lang/rust/pull/124661/)
142+
- [Make `where_clause_object_safety` lint a regular object safety violation](https://github.com/rust-lang/rust/pull/125380/)
143+
- [Turn `proc_macro_back_compat` lint into a hard error.](https://github.com/rust-lang/rust/pull/125596/)
144+
- [Detect unused structs even when implementing private traits](https://github.com/rust-lang/rust/pull/122382/)
145+
- [`std::sync::ReentrantLockGuard<T>` is no longer `Sync` if `T: !Sync`](https://github.com/rust-lang/rust/pull/125527) which means [`std::io::StdoutLock` and `std::io::StderrLock` are no longer Sync](https://github.com/rust-lang/rust/issues/127340)
146+
147+
<a id="1.80-Internal-Changes"></a>
148+
149+
Internal Changes
150+
----------------
151+
152+
These changes do not affect any public interfaces of Rust, but they represent
153+
significant improvements to the performance or internals of rustc and related
154+
tools.
155+
156+
- Misc improvements to size of generated html by rustdoc e.g. [#124738](https://github.com/rust-lang/rust/pull/124738/) and [#123734](https://github.com/rust-lang/rust/pull/123734/)
157+
- [MSVC targets no longer depend on libc](https://github.com/rust-lang/rust/pull/124050/)
158+
1159
Version 1.79.0 (2024-06-13)
2160
==========================
3161

compiler/rustc_ast/src/attr/mod.rs

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -202,21 +202,18 @@ impl Attribute {
202202
}
203203
}
204204

205-
// Named `get_tokens` to distinguish it from the `<Attribute as HasTokens>::tokens` method.
206-
pub fn get_tokens(&self) -> TokenStream {
207-
match &self.kind {
208-
AttrKind::Normal(normal) => TokenStream::new(
209-
normal
210-
.tokens
211-
.as_ref()
212-
.unwrap_or_else(|| panic!("attribute is missing tokens: {self:?}"))
213-
.to_attr_token_stream()
214-
.to_token_trees(),
215-
),
216-
&AttrKind::DocComment(comment_kind, data) => TokenStream::token_alone(
205+
pub fn token_trees(&self) -> Vec<TokenTree> {
206+
match self.kind {
207+
AttrKind::Normal(ref normal) => normal
208+
.tokens
209+
.as_ref()
210+
.unwrap_or_else(|| panic!("attribute is missing tokens: {self:?}"))
211+
.to_attr_token_stream()
212+
.to_token_trees(),
213+
AttrKind::DocComment(comment_kind, data) => vec![TokenTree::token_alone(
217214
token::DocComment(comment_kind, self.style, data),
218215
self.span,
219-
),
216+
)],
220217
}
221218
}
222219
}

compiler/rustc_ast/src/mut_visit.rs

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use rustc_span::symbol::Ident;
2020
use rustc_span::Span;
2121
use smallvec::{smallvec, Array, SmallVec};
2222
use std::ops::DerefMut;
23-
use std::{panic, ptr};
23+
use std::panic;
2424
use thin_vec::ThinVec;
2525

2626
pub trait ExpectOne<A: Array> {
@@ -318,19 +318,8 @@ pub trait MutVisitor: Sized {
318318
//
319319
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.
320320
pub fn visit_clobber<T: DummyAstNode>(t: &mut T, f: impl FnOnce(T) -> T) {
321-
unsafe {
322-
// Safe because `t` is used in a read-only fashion by `read()` before
323-
// being overwritten by `write()`.
324-
let old_t = ptr::read(t);
325-
let new_t =
326-
panic::catch_unwind(panic::AssertUnwindSafe(|| f(old_t))).unwrap_or_else(|err| {
327-
// Set `t` to some valid but possible meaningless value,
328-
// and pass the fatal error further.
329-
ptr::write(t, T::dummy());
330-
panic::resume_unwind(err);
331-
});
332-
ptr::write(t, new_t);
333-
}
321+
let old_t = std::mem::replace(t, T::dummy());
322+
*t = f(old_t);
334323
}
335324

336325
// No `noop_` prefix because there isn't a corresponding method in `MutVisitor`.

0 commit comments

Comments
 (0)