Skip to content

Commit 5a6036a

Browse files
committed
Auto merge of rust-lang#134137 - fmease:rollup-u1p7swx, r=fmease
Rollup of 9 pull requests Successful merges: - rust-lang#133583 (Fix type (exit → exist)) - rust-lang#134042 (Add the `power8-crypto` target feature) - rust-lang#134094 (Tweak wording of non-const traits used as const bounds) - rust-lang#134100 (Remove rustc_const_stable attribute on const NOOP) - rust-lang#134103 (Don't ICE when encountering never in range pattern) - rust-lang#134113 (run-make: Fix `assert_stderr_not_contains_regex`) - rust-lang#134115 (rustc_target: ppc64 target string fixes for LLVM 20) - rust-lang#134116 (stabilize const_nonnull_new) - rust-lang#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

Lines changed: 5 additions & 0 deletions
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

Lines changed: 3 additions & 0 deletions
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

Lines changed: 8 additions & 6 deletions
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

Lines changed: 14 additions & 2 deletions
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

Lines changed: 18 additions & 1 deletion
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

Lines changed: 17 additions & 0 deletions
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

Lines changed: 5 additions & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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
}

0 commit comments

Comments
 (0)