Skip to content

Commit dd96ec6

Browse files
authored
Merge pull request rust-lang#4492 from rust-lang/rustup-2025-07-25
Automatic Rustup
2 parents 80c9f78 + d2ba3c8 commit dd96ec6

File tree

1,399 files changed

+14605
-12089
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,399 files changed

+14605
-12089
lines changed

.github/workflows/spellcheck.yml

Lines changed: 0 additions & 23 deletions
This file was deleted.

.gitignore

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,6 @@ __pycache__/
8585

8686
## Node
8787
node_modules
88-
package-lock.json
89-
package.json
9088
/src/doc/rustc-dev-guide/mermaid.min.js
9189

9290
## Rustdoc GUI tests

Cargo.lock

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4563,7 +4563,10 @@ dependencies = [
45634563
"rustc_macros",
45644564
"rustc_serialize",
45654565
"rustc_span",
4566+
"serde",
4567+
"serde_derive",
45664568
"serde_json",
4569+
"serde_path_to_error",
45674570
"tracing",
45684571
]
45694572

@@ -4955,6 +4958,16 @@ dependencies = [
49554958
"serde",
49564959
]
49574960

4961+
[[package]]
4962+
name = "serde_path_to_error"
4963+
version = "0.1.17"
4964+
source = "registry+https://github.com/rust-lang/crates.io-index"
4965+
checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a"
4966+
dependencies = [
4967+
"itoa",
4968+
"serde",
4969+
]
4970+
49584971
[[package]]
49594972
name = "serde_spanned"
49604973
version = "0.6.9"

REUSE.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ path = [
3737
"rust-bors.toml",
3838
"triagebot.toml",
3939
"typos.toml",
40+
"package.json",
41+
"package-lock.json",
4042
"x",
4143
"x.ps1",
4244
"x.py",

compiler/rustc_abi/src/layout.rs

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,6 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
313313
scalar_valid_range: (Bound<u128>, Bound<u128>),
314314
discr_range_of_repr: impl Fn(i128, i128) -> (Integer, bool),
315315
discriminants: impl Iterator<Item = (VariantIdx, i128)>,
316-
dont_niche_optimize_enum: bool,
317316
always_sized: bool,
318317
) -> LayoutCalculatorResult<FieldIdx, VariantIdx, F> {
319318
let (present_first, present_second) = {
@@ -352,13 +351,7 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
352351
// structs. (We have also handled univariant enums
353352
// that allow representation optimization.)
354353
assert!(is_enum);
355-
self.layout_of_enum(
356-
repr,
357-
variants,
358-
discr_range_of_repr,
359-
discriminants,
360-
dont_niche_optimize_enum,
361-
)
354+
self.layout_of_enum(repr, variants, discr_range_of_repr, discriminants)
362355
}
363356
}
364357

@@ -599,7 +592,6 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
599592
variants: &IndexSlice<VariantIdx, IndexVec<FieldIdx, F>>,
600593
discr_range_of_repr: impl Fn(i128, i128) -> (Integer, bool),
601594
discriminants: impl Iterator<Item = (VariantIdx, i128)>,
602-
dont_niche_optimize_enum: bool,
603595
) -> LayoutCalculatorResult<FieldIdx, VariantIdx, F> {
604596
// Until we've decided whether to use the tagged or
605597
// niche filling LayoutData, we don't want to intern the
@@ -618,7 +610,7 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
618610
}
619611

620612
let calculate_niche_filling_layout = || -> Option<TmpLayout<FieldIdx, VariantIdx>> {
621-
if dont_niche_optimize_enum {
613+
if repr.inhibit_enum_layout_opt() {
622614
return None;
623615
}
624616

compiler/rustc_abi/src/lib.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1376,6 +1376,28 @@ impl WrappingRange {
13761376
}
13771377
}
13781378

1379+
/// Returns `true` if all the values in `other` are contained in this range,
1380+
/// when the values are considered as having width `size`.
1381+
#[inline(always)]
1382+
pub fn contains_range(&self, other: Self, size: Size) -> bool {
1383+
if self.is_full_for(size) {
1384+
true
1385+
} else {
1386+
let trunc = |x| size.truncate(x);
1387+
1388+
let delta = self.start;
1389+
let max = trunc(self.end.wrapping_sub(delta));
1390+
1391+
let other_start = trunc(other.start.wrapping_sub(delta));
1392+
let other_end = trunc(other.end.wrapping_sub(delta));
1393+
1394+
// Having shifted both input ranges by `delta`, now we only need to check
1395+
// whether `0..=max` contains `other_start..=other_end`, which can only
1396+
// happen if the other doesn't wrap since `self` isn't everything.
1397+
(other_start <= other_end) && (other_end <= max)
1398+
}
1399+
}
1400+
13791401
/// Returns `self` with replaced `start`
13801402
#[inline(always)]
13811403
fn with_start(mut self, start: u128) -> Self {

compiler/rustc_abi/src/tests.rs

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,66 @@ fn align_constants() {
55
assert_eq!(Align::ONE, Align::from_bytes(1).unwrap());
66
assert_eq!(Align::EIGHT, Align::from_bytes(8).unwrap());
77
}
8+
9+
#[test]
10+
fn wrapping_range_contains_range() {
11+
let size16 = Size::from_bytes(16);
12+
13+
let a = WrappingRange { start: 10, end: 20 };
14+
assert!(a.contains_range(a, size16));
15+
assert!(a.contains_range(WrappingRange { start: 11, end: 19 }, size16));
16+
assert!(a.contains_range(WrappingRange { start: 10, end: 10 }, size16));
17+
assert!(a.contains_range(WrappingRange { start: 20, end: 20 }, size16));
18+
assert!(!a.contains_range(WrappingRange { start: 10, end: 21 }, size16));
19+
assert!(!a.contains_range(WrappingRange { start: 9, end: 20 }, size16));
20+
assert!(!a.contains_range(WrappingRange { start: 4, end: 6 }, size16));
21+
assert!(!a.contains_range(WrappingRange { start: 24, end: 26 }, size16));
22+
23+
assert!(!a.contains_range(WrappingRange { start: 16, end: 14 }, size16));
24+
25+
let b = WrappingRange { start: 20, end: 10 };
26+
assert!(b.contains_range(b, size16));
27+
assert!(b.contains_range(WrappingRange { start: 20, end: 20 }, size16));
28+
assert!(b.contains_range(WrappingRange { start: 10, end: 10 }, size16));
29+
assert!(b.contains_range(WrappingRange { start: 0, end: 10 }, size16));
30+
assert!(b.contains_range(WrappingRange { start: 20, end: 30 }, size16));
31+
assert!(b.contains_range(WrappingRange { start: 20, end: 9 }, size16));
32+
assert!(b.contains_range(WrappingRange { start: 21, end: 10 }, size16));
33+
assert!(b.contains_range(WrappingRange { start: 999, end: 9999 }, size16));
34+
assert!(b.contains_range(WrappingRange { start: 999, end: 9 }, size16));
35+
assert!(!b.contains_range(WrappingRange { start: 19, end: 19 }, size16));
36+
assert!(!b.contains_range(WrappingRange { start: 11, end: 11 }, size16));
37+
assert!(!b.contains_range(WrappingRange { start: 19, end: 11 }, size16));
38+
assert!(!b.contains_range(WrappingRange { start: 11, end: 19 }, size16));
39+
40+
let f = WrappingRange { start: 0, end: u128::MAX };
41+
assert!(f.contains_range(WrappingRange { start: 10, end: 20 }, size16));
42+
assert!(f.contains_range(WrappingRange { start: 20, end: 10 }, size16));
43+
44+
let g = WrappingRange { start: 2, end: 1 };
45+
assert!(g.contains_range(WrappingRange { start: 10, end: 20 }, size16));
46+
assert!(g.contains_range(WrappingRange { start: 20, end: 10 }, size16));
47+
48+
let size1 = Size::from_bytes(1);
49+
let u8r = WrappingRange { start: 0, end: 255 };
50+
let i8r = WrappingRange { start: 128, end: 127 };
51+
assert!(u8r.contains_range(i8r, size1));
52+
assert!(i8r.contains_range(u8r, size1));
53+
assert!(!u8r.contains_range(i8r, size16));
54+
assert!(i8r.contains_range(u8r, size16));
55+
56+
let boolr = WrappingRange { start: 0, end: 1 };
57+
assert!(u8r.contains_range(boolr, size1));
58+
assert!(i8r.contains_range(boolr, size1));
59+
assert!(!boolr.contains_range(u8r, size1));
60+
assert!(!boolr.contains_range(i8r, size1));
61+
62+
let cmpr = WrappingRange { start: 255, end: 1 };
63+
assert!(u8r.contains_range(cmpr, size1));
64+
assert!(i8r.contains_range(cmpr, size1));
65+
assert!(!cmpr.contains_range(u8r, size1));
66+
assert!(!cmpr.contains_range(i8r, size1));
67+
68+
assert!(!boolr.contains_range(cmpr, size1));
69+
assert!(cmpr.contains_range(boolr, size1));
70+
}

0 commit comments

Comments
 (0)