Skip to content

Commit 3b3ebe8

Browse files
committed
Auto merge of #154242 - JonathanBrouwer:rollup-k3HJOEW, r=<try>
Rollup of 13 pull requests try-job: test-various try-job: x86_64-gnu-aux try-job: x86_64-gnu-llvm-21-3 try-job: x86_64-msvc-1 try-job: aarch64-apple try-job: x86_64-mingw-1
2 parents bbe8536 + ef6f1a6 commit 3b3ebe8

122 files changed

Lines changed: 1180 additions & 949 deletions

File tree

Some content is hidden

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

compiler/rustc_ast_lowering/src/asm.rs

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
use std::collections::hash_map::Entry;
2-
use std::fmt::Write;
32

43
use rustc_ast::*;
54
use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexMap};
@@ -124,13 +123,9 @@ impl<'hir, R: ResolverAstLoweringExt<'hir>> LoweringContext<'_, 'hir, R> {
124123
self.dcx().emit_err(ClobberAbiNotSupported { abi_span: *abi_span });
125124
}
126125
Err(supported_abis) => {
127-
let mut abis = format!("`{}`", supported_abis[0]);
128-
for m in &supported_abis[1..] {
129-
let _ = write!(abis, ", `{m}`");
130-
}
131126
self.dcx().emit_err(InvalidAbiClobberAbi {
132127
abi_span: *abi_span,
133-
supported_abis: abis,
128+
supported_abis: supported_abis.to_vec().into(),
134129
});
135130
}
136131
}
@@ -164,15 +159,12 @@ impl<'hir, R: ResolverAstLoweringExt<'hir>> LoweringContext<'_, 'hir, R> {
164159
asm::InlineAsmRegOrRegClass::RegClass(if let Some(asm_arch) = asm_arch {
165160
asm::InlineAsmRegClass::parse(asm_arch, reg_class).unwrap_or_else(
166161
|supported_register_classes| {
167-
let mut register_classes =
168-
format!("`{}`", supported_register_classes[0]);
169-
for m in &supported_register_classes[1..] {
170-
let _ = write!(register_classes, ", `{m}`");
171-
}
172162
self.dcx().emit_err(InvalidRegisterClass {
173163
op_span: *op_sp,
174164
reg_class,
175-
supported_register_classes: register_classes,
165+
supported_register_classes: supported_register_classes
166+
.to_vec()
167+
.into(),
176168
});
177169
asm::InlineAsmRegClass::Err
178170
},
@@ -272,23 +264,20 @@ impl<'hir, R: ResolverAstLoweringExt<'hir>> LoweringContext<'_, 'hir, R> {
272264
}
273265
let valid_modifiers = class.valid_modifiers(asm_arch.unwrap());
274266
if !valid_modifiers.contains(&modifier) {
275-
let sub = if !valid_modifiers.is_empty() {
276-
let mut mods = format!("`{}`", valid_modifiers[0]);
277-
for m in &valid_modifiers[1..] {
278-
let _ = write!(mods, ", `{m}`");
279-
}
280-
InvalidAsmTemplateModifierRegClassSub::SupportModifier {
267+
let sub = if valid_modifiers.is_empty() {
268+
InvalidAsmTemplateModifierRegClassSub::DoesNotSupportModifier {
281269
class_name: class.name(),
282-
modifiers: mods,
283270
}
284271
} else {
285-
InvalidAsmTemplateModifierRegClassSub::DoesNotSupportModifier {
272+
InvalidAsmTemplateModifierRegClassSub::SupportModifier {
286273
class_name: class.name(),
274+
modifiers: valid_modifiers.to_vec().into(),
287275
}
288276
};
289277
self.dcx().emit_err(InvalidAsmTemplateModifierRegClass {
290278
placeholder_span,
291279
op_span: op_sp,
280+
modifier: modifier.to_string(),
292281
sub,
293282
});
294283
}

compiler/rustc_ast_lowering/src/errors.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
use rustc_errors::DiagArgFromDisplay;
21
use rustc_errors::codes::*;
2+
use rustc_errors::{DiagArgFromDisplay, DiagSymbolList};
33
use rustc_macros::{Diagnostic, Subdiagnostic};
44
use rustc_span::{Ident, Span, Symbol};
55

@@ -191,10 +191,10 @@ pub(crate) struct ClobberAbiNotSupported {
191191
#[derive(Diagnostic)]
192192
#[note("the following ABIs are supported on this target: {$supported_abis}")]
193193
#[diag("invalid ABI for `clobber_abi`")]
194-
pub(crate) struct InvalidAbiClobberAbi {
194+
pub(crate) struct InvalidAbiClobberAbi<'a> {
195195
#[primary_span]
196196
pub abi_span: Span,
197-
pub supported_abis: String,
197+
pub supported_abis: DiagSymbolList<&'a str>,
198198
}
199199

200200
#[derive(Diagnostic)]
@@ -215,17 +215,18 @@ pub(crate) struct InvalidRegisterClass {
215215
#[primary_span]
216216
pub op_span: Span,
217217
pub reg_class: Symbol,
218-
pub supported_register_classes: String,
218+
pub supported_register_classes: DiagSymbolList<Symbol>,
219219
}
220220

221221
#[derive(Diagnostic)]
222-
#[diag("invalid asm template modifier for this register class")]
222+
#[diag("invalid asm template modifier `{$modifier}` for this register class")]
223223
pub(crate) struct InvalidAsmTemplateModifierRegClass {
224224
#[primary_span]
225225
#[label("template modifier")]
226226
pub placeholder_span: Span,
227227
#[label("argument")]
228228
pub op_span: Span,
229+
pub modifier: String,
229230
#[subdiagnostic]
230231
pub sub: InvalidAsmTemplateModifierRegClassSub,
231232
}
@@ -235,7 +236,7 @@ pub(crate) enum InvalidAsmTemplateModifierRegClassSub {
235236
#[note(
236237
"the `{$class_name}` register class supports the following template modifiers: {$modifiers}"
237238
)]
238-
SupportModifier { class_name: Symbol, modifiers: String },
239+
SupportModifier { class_name: Symbol, modifiers: DiagSymbolList<char> },
239240
#[note("the `{$class_name}` register class does not support template modifiers")]
240241
DoesNotSupportModifier { class_name: Symbol },
241242
}

compiler/rustc_ast_pretty/src/pprust/state.rs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1786,6 +1786,23 @@ impl<'a> State<'a> {
17861786
}
17871787
}
17881788

1789+
/// Print a pattern, parenthesizing it if it is an or-pattern (`A | B`).
1790+
///
1791+
/// Or-patterns have the lowest precedence among patterns, so they need
1792+
/// parentheses when nested inside `@` bindings, `&` references, or `box`
1793+
/// patterns — otherwise `x @ A | B` parses as `(x @ A) | B`, `&A | B`
1794+
/// parses as `(&A) | B`, etc.
1795+
fn print_pat_paren_if_or(&mut self, pat: &ast::Pat) {
1796+
let needs_paren = matches!(pat.kind, PatKind::Or(..));
1797+
if needs_paren {
1798+
self.popen();
1799+
}
1800+
self.print_pat(pat);
1801+
if needs_paren {
1802+
self.pclose();
1803+
}
1804+
}
1805+
17891806
fn print_pat(&mut self, pat: &ast::Pat) {
17901807
self.maybe_print_comment(pat.span.lo());
17911808
self.ann.pre(self, AnnNode::Pat(pat));
@@ -1813,7 +1830,7 @@ impl<'a> State<'a> {
18131830
if let Some(p) = sub {
18141831
self.space();
18151832
self.word_space("@");
1816-
self.print_pat(p);
1833+
self.print_pat_paren_if_or(p);
18171834
}
18181835
}
18191836
PatKind::TupleStruct(qself, path, elts) => {
@@ -1885,7 +1902,7 @@ impl<'a> State<'a> {
18851902
}
18861903
PatKind::Box(inner) => {
18871904
self.word("box ");
1888-
self.print_pat(inner);
1905+
self.print_pat_paren_if_or(inner);
18891906
}
18901907
PatKind::Deref(inner) => {
18911908
self.word("deref!");
@@ -1909,7 +1926,7 @@ impl<'a> State<'a> {
19091926
self.print_pat(inner);
19101927
self.pclose();
19111928
} else {
1912-
self.print_pat(inner);
1929+
self.print_pat_paren_if_or(inner);
19131930
}
19141931
}
19151932
PatKind::Expr(e) => self.print_expr(e, FixupContext::default()),

compiler/rustc_attr_parsing/src/attributes/autodiff.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use rustc_span::{Symbol, sym};
99
use thin_vec::ThinVec;
1010

1111
use crate::attributes::prelude::Allow;
12-
use crate::attributes::{AttributeOrder, OnDuplicate, SingleAttributeParser};
12+
use crate::attributes::{OnDuplicate, SingleAttributeParser};
1313
use crate::context::{AcceptContext, Stage};
1414
use crate::parser::{ArgParser, MetaItemOrLitParser};
1515
use crate::target_checking::AllowedTargets;
@@ -18,7 +18,6 @@ pub(crate) struct RustcAutodiffParser;
1818

1919
impl<S: Stage> SingleAttributeParser<S> for RustcAutodiffParser {
2020
const PATH: &[Symbol] = &[sym::rustc_autodiff];
21-
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepInnermost;
2221
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
2322
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[
2423
Allow(Target::Fn),

compiler/rustc_attr_parsing/src/attributes/cfi_encoding.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ impl<S: Stage> SingleAttributeParser<S> for CfiEncodingParser {
88
Allow(Target::Enum),
99
Allow(Target::Union),
1010
]);
11-
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepInnermost;
1211
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
1312
const TEMPLATE: AttributeTemplate = template!(NameValueStr: "encoding");
1413

compiler/rustc_attr_parsing/src/attributes/codegen_attrs.rs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ pub(crate) struct OptimizeParser;
1212

1313
impl<S: Stage> SingleAttributeParser<S> for OptimizeParser {
1414
const PATH: &[Symbol] = &[sym::optimize];
15-
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepOutermost;
1615
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::WarnButFutureError;
1716
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[
1817
Allow(Target::Fn),
@@ -68,7 +67,6 @@ pub(crate) struct CoverageParser;
6867

6968
impl<S: Stage> SingleAttributeParser<S> for CoverageParser {
7069
const PATH: &[Symbol] = &[sym::coverage];
71-
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepOutermost;
7270
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
7371
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[
7472
Allow(Target::Fn),
@@ -119,7 +117,6 @@ pub(crate) struct ExportNameParser;
119117

120118
impl<S: Stage> SingleAttributeParser<S> for ExportNameParser {
121119
const PATH: &[rustc_span::Symbol] = &[sym::export_name];
122-
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepInnermost;
123120
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::WarnButFutureError;
124121
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[
125122
Allow(Target::Static),
@@ -157,7 +154,6 @@ pub(crate) struct RustcObjcClassParser;
157154

158155
impl<S: Stage> SingleAttributeParser<S> for RustcObjcClassParser {
159156
const PATH: &[rustc_span::Symbol] = &[sym::rustc_objc_class];
160-
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepInnermost;
161157
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
162158
const ALLOWED_TARGETS: AllowedTargets =
163159
AllowedTargets::AllowList(&[Allow(Target::ForeignStatic)]);
@@ -189,7 +185,6 @@ pub(crate) struct RustcObjcSelectorParser;
189185

190186
impl<S: Stage> SingleAttributeParser<S> for RustcObjcSelectorParser {
191187
const PATH: &[rustc_span::Symbol] = &[sym::rustc_objc_selector];
192-
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepInnermost;
193188
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
194189
const ALLOWED_TARGETS: AllowedTargets =
195190
AllowedTargets::AllowList(&[Allow(Target::ForeignStatic)]);
@@ -595,7 +590,6 @@ impl<S: Stage> SingleAttributeParser<S> for SanitizeParser {
595590
r#"realtime = "nonblocking|blocking|caller""#,
596591
]);
597592

598-
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepOutermost;
599593
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
600594

601595
fn convert(cx: &mut AcceptContext<'_, '_, S>, args: &ArgParser) -> Option<AttributeKind> {
@@ -724,7 +718,6 @@ pub(crate) struct PatchableFunctionEntryParser;
724718
impl<S: Stage> SingleAttributeParser<S> for PatchableFunctionEntryParser {
725719
const PATH: &[Symbol] = &[sym::patchable_function_entry];
726720
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
727-
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepInnermost;
728721
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::Fn)]);
729722
const TEMPLATE: AttributeTemplate = template!(List: &["prefix_nops = m, entry_nops = n"]);
730723

compiler/rustc_attr_parsing/src/attributes/crate_level.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ pub(crate) struct CrateNameParser;
1010

1111
impl<S: Stage> SingleAttributeParser<S> for CrateNameParser {
1212
const PATH: &[Symbol] = &[sym::crate_name];
13-
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepOutermost;
1413
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::WarnButFutureError;
1514
const TEMPLATE: AttributeTemplate = template!(NameValueStr: "name");
1615
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::Crate)]);
@@ -84,7 +83,6 @@ pub(crate) struct RecursionLimitParser;
8483

8584
impl<S: Stage> SingleAttributeParser<S> for RecursionLimitParser {
8685
const PATH: &[Symbol] = &[sym::recursion_limit];
87-
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepOutermost;
8886
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::WarnButFutureError;
8987
const TEMPLATE: AttributeTemplate = template!(NameValueStr: "N", "https://doc.rust-lang.org/reference/attributes/limits.html#the-recursion_limit-attribute");
9088
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::Crate)]);
@@ -107,7 +105,6 @@ pub(crate) struct MoveSizeLimitParser;
107105

108106
impl<S: Stage> SingleAttributeParser<S> for MoveSizeLimitParser {
109107
const PATH: &[Symbol] = &[sym::move_size_limit];
110-
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepOutermost;
111108
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
112109
const TEMPLATE: AttributeTemplate = template!(NameValueStr: "N");
113110
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::Crate)]);
@@ -130,7 +127,6 @@ pub(crate) struct TypeLengthLimitParser;
130127

131128
impl<S: Stage> SingleAttributeParser<S> for TypeLengthLimitParser {
132129
const PATH: &[Symbol] = &[sym::type_length_limit];
133-
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepOutermost;
134130
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::WarnButFutureError;
135131
const TEMPLATE: AttributeTemplate = template!(NameValueStr: "N");
136132
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::Crate)]);
@@ -153,7 +149,6 @@ pub(crate) struct PatternComplexityLimitParser;
153149

154150
impl<S: Stage> SingleAttributeParser<S> for PatternComplexityLimitParser {
155151
const PATH: &[Symbol] = &[sym::pattern_complexity_limit];
156-
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepOutermost;
157152
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
158153
const TEMPLATE: AttributeTemplate = template!(NameValueStr: "N");
159154
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::Crate)]);
@@ -213,7 +208,6 @@ pub(crate) struct WindowsSubsystemParser;
213208
impl<S: Stage> SingleAttributeParser<S> for WindowsSubsystemParser {
214209
const PATH: &[Symbol] = &[sym::windows_subsystem];
215210
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::WarnButFutureError;
216-
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepOutermost;
217211
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::Crate)]);
218212
const TEMPLATE: AttributeTemplate = template!(NameValueStr: ["windows", "console"], "https://doc.rust-lang.org/reference/runtime.html#the-windows_subsystem-attribute");
219213

compiler/rustc_attr_parsing/src/attributes/deprecation.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ fn get<S: Stage>(
3434
pub(crate) struct DeprecatedParser;
3535
impl<S: Stage> SingleAttributeParser<S> for DeprecatedParser {
3636
const PATH: &[Symbol] = &[sym::deprecated];
37-
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepInnermost;
3837
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
3938
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowListWarnRest(&[
4039
Allow(Target::Fn),

compiler/rustc_attr_parsing/src/attributes/diagnostic/do_not_recommend.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,14 @@ use rustc_hir::lints::AttributeLintKind;
44
use rustc_session::lint::builtin::MALFORMED_DIAGNOSTIC_ATTRIBUTES;
55
use rustc_span::{Symbol, sym};
66

7-
use crate::attributes::{AttributeOrder, OnDuplicate, SingleAttributeParser};
7+
use crate::attributes::{OnDuplicate, SingleAttributeParser};
88
use crate::context::{AcceptContext, Stage};
99
use crate::parser::ArgParser;
1010
use crate::target_checking::{ALL_TARGETS, AllowedTargets};
1111

1212
pub(crate) struct DoNotRecommendParser;
1313
impl<S: Stage> SingleAttributeParser<S> for DoNotRecommendParser {
1414
const PATH: &[Symbol] = &[sym::diagnostic, sym::do_not_recommend];
15-
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepInnermost;
1615
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Warn;
1716
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(ALL_TARGETS); // Checked in check_attr.
1817
const TEMPLATE: AttributeTemplate = template!(Word /*doesn't matter */);

compiler/rustc_attr_parsing/src/attributes/dummy.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,14 @@ use rustc_feature::{AttributeTemplate, template};
22
use rustc_hir::attrs::AttributeKind;
33
use rustc_span::{Symbol, sym};
44

5-
use crate::attributes::{AttributeOrder, OnDuplicate, SingleAttributeParser};
5+
use crate::attributes::{OnDuplicate, SingleAttributeParser};
66
use crate::context::{AcceptContext, Stage};
77
use crate::parser::ArgParser;
88
use crate::target_checking::{ALL_TARGETS, AllowedTargets};
99

1010
pub(crate) struct RustcDummyParser;
1111
impl<S: Stage> SingleAttributeParser<S> for RustcDummyParser {
1212
const PATH: &[Symbol] = &[sym::rustc_dummy];
13-
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepInnermost;
1413
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Ignore;
1514
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(ALL_TARGETS);
1615
const TEMPLATE: AttributeTemplate = template!(Word); // Anything, really

0 commit comments

Comments
 (0)