Skip to content

Commit 5a6036a

Browse files
committed
Auto merge of #134137 - fmease:rollup-u1p7swx, r=fmease
Rollup of 9 pull requests Successful merges: - #133583 (Fix type (exit → exist)) - #134042 (Add the `power8-crypto` target feature) - #134094 (Tweak wording of non-const traits used as const bounds) - #134100 (Remove rustc_const_stable attribute on const NOOP) - #134103 (Don't ICE when encountering never in range pattern) - #134113 (run-make: Fix `assert_stderr_not_contains_regex`) - #134115 (rustc_target: ppc64 target string fixes for LLVM 20) - #134116 (stabilize const_nonnull_new) - #134120 (Remove Felix from ping groups and review rotation) r? `@ghost` `@rustbot` modify labels: rollup
2 parents 33c245b + e60f6cd commit 5a6036a

File tree

73 files changed

+1177
-215
lines changed

Some content is hidden

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

73 files changed

+1177
-215
lines changed

compiler/rustc_codegen_llvm/src/context.rs

+5
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,11 @@ pub(crate) unsafe fn create_module<'ll>(
159159
// See https://github.com/llvm/llvm-project/pull/112084
160160
target_data_layout = target_data_layout.replace("-i128:128", "");
161161
}
162+
if sess.target.arch.starts_with("powerpc64") {
163+
// LLVM 20 updates the powerpc64 layout to correctly align 128 bit integers to 128 bit.
164+
// See https://github.com/llvm/llvm-project/pull/118004
165+
target_data_layout = target_data_layout.replace("-i128:128", "");
166+
}
162167
}
163168

164169
// Ensure the data-layout values hardcoded remain the defaults.

compiler/rustc_codegen_llvm/src/llvm_util.rs

+3
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,8 @@ pub(crate) fn to_llvm_features<'a>(sess: &Session, s: &'a str) -> Option<LLVMFea
230230
"aarch64"
231231
} else if sess.target.arch == "sparc64" {
232232
"sparc"
233+
} else if sess.target.arch == "powerpc64" {
234+
"powerpc"
233235
} else {
234236
&*sess.target.arch
235237
};
@@ -289,6 +291,7 @@ pub(crate) fn to_llvm_features<'a>(sess: &Session, s: &'a str) -> Option<LLVMFea
289291
// https://github.com/llvm/llvm-project/blob/llvmorg-18.1.0/llvm/lib/Target/Sparc/MCTargetDesc/SparcELFObjectWriter.cpp#L26
290292
("sparc", "v8plus") if get_version().0 == 19 => Some(LLVMFeature::new("v9")),
291293
("sparc", "v8plus") if get_version().0 < 19 => None,
294+
("powerpc", "power8-crypto") => Some(LLVMFeature::new("crypto")),
292295
(_, s) => Some(LLVMFeature::new(s)),
293296
}
294297
}

compiler/rustc_hir_analysis/messages.ftl

+8-6
Original file line numberDiff line numberDiff line change
@@ -96,12 +96,14 @@ hir_analysis_coercion_between_struct_same_note = expected coercion between the s
9696
9797
hir_analysis_coercion_between_struct_single_note = expected a single field to be coerced, none found
9898
99-
hir_analysis_const_bound_for_non_const_trait =
100-
`{$modifier}` can only be applied to `#[const_trait]` traits
101-
102-
hir_analysis_const_impl_for_non_const_trait =
103-
const `impl` for trait `{$trait_name}` which is not marked with `#[const_trait]`
104-
.suggestion = mark `{$trait_name}` as const
99+
hir_analysis_const_bound_for_non_const_trait = `{$modifier}` can only be applied to `#[const_trait]` traits
100+
.label = can't be applied to `{$trait_name}`
101+
.note = `{$trait_name}` can't be used with `{$modifier}` because it isn't annotated with `#[const_trait]`
102+
.suggestion = {$suggestion_pre}mark `{$trait_name}` as `#[const_trait]` to allow it to have `const` implementations
103+
104+
hir_analysis_const_impl_for_non_const_trait = const `impl` for trait `{$trait_name}` which is not marked with `#[const_trait]`
105+
.label = this trait is not `const`
106+
.suggestion = {$suggestion_pre}mark `{$trait_name}` as `#[const_trait]` to allow it to have `const` implementations
105107
.note = marking a trait with `#[const_trait]` ensures all default method bodies are `const`
106108
.adding = adding a non-const method body in the future would be a breaking change
107109

compiler/rustc_hir_analysis/src/collect.rs

+14-2
Original file line numberDiff line numberDiff line change
@@ -1638,11 +1638,23 @@ fn check_impl_constness(
16381638
}
16391639

16401640
let trait_name = tcx.item_name(trait_def_id).to_string();
1641+
let (local_trait_span, suggestion_pre) =
1642+
match (trait_def_id.is_local(), tcx.sess.is_nightly_build()) {
1643+
(true, true) => (
1644+
Some(tcx.def_span(trait_def_id).shrink_to_lo()),
1645+
if tcx.features().const_trait_impl() {
1646+
""
1647+
} else {
1648+
"enable `#![feature(const_trait_impl)]` in your crate and "
1649+
},
1650+
),
1651+
(false, _) | (_, false) => (None, ""),
1652+
};
16411653
Some(tcx.dcx().emit_err(errors::ConstImplForNonConstTrait {
16421654
trait_ref_span: hir_trait_ref.path.span,
16431655
trait_name,
1644-
local_trait_span:
1645-
trait_def_id.as_local().map(|_| tcx.def_span(trait_def_id).shrink_to_lo()),
1656+
local_trait_span,
1657+
suggestion_pre,
16461658
marking: (),
16471659
adding: (),
16481660
}))

compiler/rustc_hir_analysis/src/errors.rs

+18-1
Original file line numberDiff line numberDiff line change
@@ -530,10 +530,16 @@ pub(crate) struct GenericArgsOnOverriddenImpl {
530530
#[diag(hir_analysis_const_impl_for_non_const_trait)]
531531
pub(crate) struct ConstImplForNonConstTrait {
532532
#[primary_span]
533+
#[label]
533534
pub trait_ref_span: Span,
534535
pub trait_name: String,
535-
#[suggestion(applicability = "machine-applicable", code = "#[const_trait]")]
536+
#[suggestion(
537+
applicability = "machine-applicable",
538+
code = "#[const_trait] ",
539+
style = "verbose"
540+
)]
536541
pub local_trait_span: Option<Span>,
542+
pub suggestion_pre: &'static str,
537543
#[note]
538544
pub marking: (),
539545
#[note(hir_analysis_adding)]
@@ -544,8 +550,19 @@ pub(crate) struct ConstImplForNonConstTrait {
544550
#[diag(hir_analysis_const_bound_for_non_const_trait)]
545551
pub(crate) struct ConstBoundForNonConstTrait {
546552
#[primary_span]
553+
#[label]
547554
pub span: Span,
548555
pub modifier: &'static str,
556+
#[note]
557+
pub def_span: Option<Span>,
558+
pub suggestion_pre: &'static str,
559+
#[suggestion(
560+
applicability = "machine-applicable",
561+
code = "#[const_trait] ",
562+
style = "verbose"
563+
)]
564+
pub suggestion: Option<Span>,
565+
pub trait_name: String,
549566
}
550567

551568
#[derive(Diagnostic)]

compiler/rustc_hir_analysis/src/hir_ty_lowering/mod.rs

+17
Original file line numberDiff line numberDiff line change
@@ -737,9 +737,26 @@ impl<'tcx> dyn HirTyLowerer<'tcx> + '_ {
737737
if let hir::BoundConstness::Always(span) | hir::BoundConstness::Maybe(span) = constness
738738
&& !self.tcx().is_const_trait(trait_def_id)
739739
{
740+
let (def_span, suggestion, suggestion_pre) =
741+
match (trait_def_id.is_local(), self.tcx().sess.is_nightly_build()) {
742+
(true, true) => (
743+
None,
744+
Some(tcx.def_span(trait_def_id).shrink_to_lo()),
745+
if self.tcx().features().const_trait_impl() {
746+
""
747+
} else {
748+
"enable `#![feature(const_trait_impl)]` in your crate and "
749+
},
750+
),
751+
(false, _) | (_, false) => (Some(tcx.def_span(trait_def_id)), None, ""),
752+
};
740753
self.dcx().emit_err(crate::errors::ConstBoundForNonConstTrait {
741754
span,
742755
modifier: constness.as_str(),
756+
def_span,
757+
trait_name: self.tcx().def_path_str(trait_def_id),
758+
suggestion_pre,
759+
suggestion,
743760
});
744761
}
745762

compiler/rustc_hir_typeck/src/expr.rs

+5-1
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,11 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
403403
})
404404
| hir::Node::ImplItem(hir::ImplItem { kind: hir::ImplItemKind::Const(..), .. }) => true,
405405

406+
hir::Node::Pat(_) => {
407+
self.dcx().span_delayed_bug(expr.span, "place expr not allowed in pattern");
408+
true
409+
}
410+
406411
// These nodes do not have direct sub-exprs.
407412
hir::Node::Param(_)
408413
| hir::Node::Item(_)
@@ -415,7 +420,6 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
415420
| hir::Node::Ty(_)
416421
| hir::Node::AssocItemConstraint(_)
417422
| hir::Node::TraitRef(_)
418-
| hir::Node::Pat(_)
419423
| hir::Node::PatField(_)
420424
| hir::Node::LetStmt(_)
421425
| hir::Node::Synthetic

compiler/rustc_target/src/spec/targets/powerpc64_ibm_aix.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ pub(crate) fn target() -> Target {
1919
std: None, // ?
2020
},
2121
pointer_width: 64,
22-
data_layout: "E-m:a-Fi64-i64:64-n32:64-S128-v256:256:256-v512:512:512".into(),
22+
data_layout: "E-m:a-Fi64-i64:64-i128:128-n32:64-S128-v256:256:256-v512:512:512".into(),
2323
arch: "powerpc64".into(),
2424
options: base,
2525
}

compiler/rustc_target/src/spec/targets/powerpc64_unknown_freebsd.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pub(crate) fn target() -> Target {
1717
std: Some(true),
1818
},
1919
pointer_width: 64,
20-
data_layout: "E-m:e-Fn32-i64:64-n32:64".into(),
20+
data_layout: "E-m:e-Fn32-i64:64-i128:128-n32:64".into(),
2121
arch: "powerpc64".into(),
2222
options: TargetOptions { endian: Endian::Big, mcount: "_mcount".into(), ..base },
2323
}

compiler/rustc_target/src/spec/targets/powerpc64_unknown_linux_gnu.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pub(crate) fn target() -> Target {
1717
std: Some(true),
1818
},
1919
pointer_width: 64,
20-
data_layout: "E-m:e-Fi64-i64:64-n32:64-S128-v256:256:256-v512:512:512".into(),
20+
data_layout: "E-m:e-Fi64-i64:64-i128:128-n32:64-S128-v256:256:256-v512:512:512".into(),
2121
arch: "powerpc64".into(),
2222
options: TargetOptions { endian: Endian::Big, mcount: "_mcount".into(), ..base },
2323
}

compiler/rustc_target/src/spec/targets/powerpc64_unknown_linux_musl.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pub(crate) fn target() -> Target {
1717
std: Some(true),
1818
},
1919
pointer_width: 64,
20-
data_layout: "E-m:e-Fn32-i64:64-n32:64-S128-v256:256:256-v512:512:512".into(),
20+
data_layout: "E-m:e-Fn32-i64:64-i128:128-n32:64-S128-v256:256:256-v512:512:512".into(),
2121
arch: "powerpc64".into(),
2222
options: TargetOptions { endian: Endian::Big, mcount: "_mcount".into(), ..base },
2323
}

compiler/rustc_target/src/spec/targets/powerpc64_unknown_openbsd.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pub(crate) fn target() -> Target {
1717
std: Some(true),
1818
},
1919
pointer_width: 64,
20-
data_layout: "E-m:e-Fn32-i64:64-n32:64".into(),
20+
data_layout: "E-m:e-Fn32-i64:64-i128:128-n32:64".into(),
2121
arch: "powerpc64".into(),
2222
options: TargetOptions { endian: Endian::Big, mcount: "_mcount".into(), ..base },
2323
}

compiler/rustc_target/src/spec/targets/powerpc64_wrs_vxworks.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pub(crate) fn target() -> Target {
1717
std: Some(true),
1818
},
1919
pointer_width: 64,
20-
data_layout: "E-m:e-Fi64-i64:64-n32:64-S128-v256:256:256-v512:512:512".into(),
20+
data_layout: "E-m:e-Fi64-i64:64-i128:128-n32:64-S128-v256:256:256-v512:512:512".into(),
2121
arch: "powerpc64".into(),
2222
options: TargetOptions { endian: Endian::Big, ..base },
2323
}

compiler/rustc_target/src/spec/targets/powerpc64le_unknown_freebsd.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ pub(crate) fn target() -> Target {
1616
std: Some(true),
1717
},
1818
pointer_width: 64,
19-
data_layout: "e-m:e-Fn32-i64:64-n32:64".into(),
19+
data_layout: "e-m:e-Fn32-i64:64-i128:128-n32:64".into(),
2020
arch: "powerpc64".into(),
2121
options: TargetOptions { mcount: "_mcount".into(), ..base },
2222
}

compiler/rustc_target/src/spec/targets/powerpc64le_unknown_linux_gnu.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ pub(crate) fn target() -> Target {
1616
std: Some(true),
1717
},
1818
pointer_width: 64,
19-
data_layout: "e-m:e-Fn32-i64:64-n32:64-S128-v256:256:256-v512:512:512".into(),
19+
data_layout: "e-m:e-Fn32-i64:64-i128:128-n32:64-S128-v256:256:256-v512:512:512".into(),
2020
arch: "powerpc64".into(),
2121
options: TargetOptions { mcount: "_mcount".into(), ..base },
2222
}

compiler/rustc_target/src/spec/targets/powerpc64le_unknown_linux_musl.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ pub(crate) fn target() -> Target {
1616
std: Some(true),
1717
},
1818
pointer_width: 64,
19-
data_layout: "e-m:e-Fn32-i64:64-n32:64-S128-v256:256:256-v512:512:512".into(),
19+
data_layout: "e-m:e-Fn32-i64:64-i128:128-n32:64-S128-v256:256:256-v512:512:512".into(),
2020
arch: "powerpc64".into(),
2121
options: TargetOptions { mcount: "_mcount".into(), ..base },
2222
}

compiler/rustc_target/src/target_features.rs

+1
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,7 @@ const POWERPC_FEATURES: &[(&str, Stability, ImpliedFeatures)] = &[
412412
("partword-atomics", Unstable(sym::powerpc_target_feature), &[]),
413413
("power10-vector", Unstable(sym::powerpc_target_feature), &["power9-vector"]),
414414
("power8-altivec", Unstable(sym::powerpc_target_feature), &["altivec"]),
415+
("power8-crypto", Unstable(sym::powerpc_target_feature), &["power8-altivec"]),
415416
("power8-vector", Unstable(sym::powerpc_target_feature), &["vsx", "power8-altivec"]),
416417
("power9-altivec", Unstable(sym::powerpc_target_feature), &["power8-altivec"]),
417418
("power9-vector", Unstable(sym::powerpc_target_feature), &["power8-vector", "power9-altivec"]),

library/core/src/ptr/non_null.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ impl<T: ?Sized> NonNull<T> {
217217
/// }
218218
/// ```
219219
#[stable(feature = "nonnull", since = "1.25.0")]
220-
#[rustc_const_unstable(feature = "const_nonnull_new", issue = "93235")]
220+
#[rustc_const_stable(feature = "const_nonnull_new", since = "CURRENT_RUSTC_VERSION")]
221221
#[inline]
222222
pub const fn new(ptr: *mut T) -> Option<Self> {
223223
if !ptr.is_null() {

library/core/src/ptr/unique.rs

-2
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,6 @@ impl<T: ?Sized> Unique<T> {
9292

9393
/// Creates a new `Unique` if `ptr` is non-null.
9494
#[inline]
95-
// rustc_const_unstable attribute can be removed when `const_nonnull_new` is stable
96-
#[rustc_const_unstable(feature = "ptr_internals", issue = "none")]
9795
pub const fn new(ptr: *mut T) -> Option<Self> {
9896
if let Some(pointer) = NonNull::new(ptr) {
9997
Some(Unique { pointer, _marker: PhantomData })

library/core/src/task/wake.rs

-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ impl RawWaker {
6161
}
6262

6363
#[stable(feature = "noop_waker", since = "CURRENT_RUSTC_VERSION")]
64-
#[rustc_const_stable(feature = "noop_waker", since = "CURRENT_RUSTC_VERSION")]
6564
const NOOP: RawWaker = {
6665
const VTABLE: RawWakerVTable = RawWakerVTable::new(
6766
// Cloning just returns a new no-op raw waker

library/core/tests/lib.rs

-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
#![feature(clone_to_uninit)]
1616
#![feature(const_black_box)]
1717
#![feature(const_eval_select)]
18-
#![feature(const_nonnull_new)]
1918
#![feature(const_swap)]
2019
#![feature(const_trait_impl)]
2120
#![feature(core_intrinsics)]

src/tools/run-make-support/src/command.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ impl CompletedProcess {
329329
/// Checks that `stderr` does not contain the regex pattern `unexpected`.
330330
#[track_caller]
331331
pub fn assert_stderr_not_contains_regex<S: AsRef<str>>(&self, unexpected: S) -> &Self {
332-
assert_not_contains_regex(&self.stdout_utf8(), unexpected);
332+
assert_not_contains_regex(&self.stderr_utf8(), unexpected);
333333
self
334334
}
335335

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
error: `~const` is not allowed here
2+
--> const-super-trait.rs:7:12
3+
|
4+
LL | trait Bar: ~const Foo {}
5+
| ^^^^^^
6+
|
7+
note: this trait is not a `#[const_trait]`, so it cannot have `~const` trait bounds
8+
--> const-super-trait.rs:7:1
9+
|
10+
LL | trait Bar: ~const Foo {}
11+
| ^^^^^^^^^^^^^^^^^^^^^^^^
12+
13+
error[E0658]: const trait impls are experimental
14+
--> const-super-trait.rs:7:12
15+
|
16+
LL | trait Bar: ~const Foo {}
17+
| ^^^^^^
18+
|
19+
= note: see issue #67792 <https://github.com/rust-lang/rust/issues/67792> for more information
20+
= help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
21+
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
22+
23+
error[E0658]: const trait impls are experimental
24+
--> const-super-trait.rs:9:17
25+
|
26+
LL | const fn foo<T: ~const Bar>(x: &T) {
27+
| ^^^^^^
28+
|
29+
= note: see issue #67792 <https://github.com/rust-lang/rust/issues/67792> for more information
30+
= help: add `#![feature(const_trait_impl)]` to the crate attributes to enable
31+
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
32+
33+
error: `~const` can only be applied to `#[const_trait]` traits
34+
--> const-super-trait.rs:7:12
35+
|
36+
LL | trait Bar: ~const Foo {}
37+
| ^^^^^^ can't be applied to `Foo`
38+
|
39+
help: enable `#![feature(const_trait_impl)]` in your crate and mark `Foo` as `#[const_trait]` to allow it to have `const` implementations
40+
|
41+
LL | #[const_trait] trait Foo {
42+
| ++++++++++++++
43+
44+
error: `~const` can only be applied to `#[const_trait]` traits
45+
--> const-super-trait.rs:9:17
46+
|
47+
LL | const fn foo<T: ~const Bar>(x: &T) {
48+
| ^^^^^^ can't be applied to `Bar`
49+
|
50+
help: enable `#![feature(const_trait_impl)]` in your crate and mark `Bar` as `#[const_trait]` to allow it to have `const` implementations
51+
|
52+
LL | #[const_trait] trait Bar: ~const Foo {}
53+
| ++++++++++++++
54+
55+
error[E0015]: cannot call non-const fn `<T as Foo>::a` in constant functions
56+
--> const-super-trait.rs:10:7
57+
|
58+
LL | x.a();
59+
| ^^^
60+
|
61+
= note: calls in constant functions are limited to constant functions, tuple structs and tuple variants
62+
63+
error: aborting due to 6 previous errors
64+
65+
Some errors have detailed explanations: E0015, E0658.
66+
For more information about an error, try `rustc --explain E0015`.

0 commit comments

Comments
 (0)