Skip to content

Commit 004d710

Browse files
committed
Auto merge of rust-lang#151471 - JonathanBrouwer:rollup-EgxENYU, r=JonathanBrouwer
Rollup of 5 pull requests Successful merges: - rust-lang#151010 (std: use `ByteStr`'s `Display` for `OsStr`) - rust-lang#151156 (Add GCC and the GCC codegen backend to build-manifest and rustup) - rust-lang#151219 (Fixed ICE when using function pointer as const generic parameter) - rust-lang#151343 (Port some crate level attrs to the attribute parser) - rust-lang#151463 (add x86_64-unknown-linux-gnuasan to CI) r? @ghost
2 parents eda76d9 + 5be6218 commit 004d710

25 files changed

Lines changed: 353 additions & 158 deletions

File tree

compiler/rustc_attr_parsing/src/attributes/crate_level.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,3 +184,39 @@ impl<S: Stage> SingleAttributeParser<S> for WindowsSubsystemParser {
184184
Some(AttributeKind::WindowsSubsystem(kind, cx.attr_span))
185185
}
186186
}
187+
188+
pub(crate) struct PanicRuntimeParser;
189+
190+
impl<S: Stage> NoArgsAttributeParser<S> for PanicRuntimeParser {
191+
const PATH: &[Symbol] = &[sym::panic_runtime];
192+
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Warn;
193+
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::Crate)]);
194+
const CREATE: fn(Span) -> AttributeKind = |_| AttributeKind::PanicRuntime;
195+
}
196+
197+
pub(crate) struct NeedsPanicRuntimeParser;
198+
199+
impl<S: Stage> NoArgsAttributeParser<S> for NeedsPanicRuntimeParser {
200+
const PATH: &[Symbol] = &[sym::needs_panic_runtime];
201+
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Warn;
202+
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::Crate)]);
203+
const CREATE: fn(Span) -> AttributeKind = |_| AttributeKind::NeedsPanicRuntime;
204+
}
205+
206+
pub(crate) struct ProfilerRuntimeParser;
207+
208+
impl<S: Stage> NoArgsAttributeParser<S> for ProfilerRuntimeParser {
209+
const PATH: &[Symbol] = &[sym::profiler_runtime];
210+
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Warn;
211+
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::Crate)]);
212+
const CREATE: fn(Span) -> AttributeKind = |_| AttributeKind::ProfilerRuntime;
213+
}
214+
215+
pub(crate) struct NoBuiltinsParser;
216+
217+
impl<S: Stage> NoArgsAttributeParser<S> for NoBuiltinsParser {
218+
const PATH: &[Symbol] = &[sym::no_builtins];
219+
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Warn;
220+
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::Crate)]);
221+
const CREATE: fn(Span) -> AttributeKind = |_| AttributeKind::NoBuiltins;
222+
}

compiler/rustc_attr_parsing/src/attributes/link_attrs.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -665,3 +665,12 @@ impl<S: Stage> NoArgsAttributeParser<S> for NeedsAllocatorParser {
665665
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::Crate)]);
666666
const CREATE: fn(Span) -> AttributeKind = |_| AttributeKind::NeedsAllocator;
667667
}
668+
669+
pub(crate) struct CompilerBuiltinsParser;
670+
671+
impl<S: Stage> NoArgsAttributeParser<S> for CompilerBuiltinsParser {
672+
const PATH: &[Symbol] = &[sym::compiler_builtins];
673+
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Warn;
674+
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::Crate)]);
675+
const CREATE: fn(Span) -> AttributeKind = |_| AttributeKind::CompilerBuiltins;
676+
}

compiler/rustc_attr_parsing/src/context.rs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,10 @@ use crate::attributes::codegen_attrs::{
2828
};
2929
use crate::attributes::confusables::ConfusablesParser;
3030
use crate::attributes::crate_level::{
31-
CrateNameParser, MoveSizeLimitParser, NoCoreParser, NoMainParser, NoStdParser,
32-
PatternComplexityLimitParser, RecursionLimitParser, RustcCoherenceIsCoreParser,
33-
TypeLengthLimitParser, WindowsSubsystemParser,
31+
CrateNameParser, MoveSizeLimitParser, NeedsPanicRuntimeParser, NoBuiltinsParser, NoCoreParser,
32+
NoMainParser, NoStdParser, PanicRuntimeParser, PatternComplexityLimitParser,
33+
ProfilerRuntimeParser, RecursionLimitParser, RustcCoherenceIsCoreParser, TypeLengthLimitParser,
34+
WindowsSubsystemParser,
3435
};
3536
use crate::attributes::debugger::DebuggerViualizerParser;
3637
use crate::attributes::deprecation::DeprecationParser;
@@ -40,8 +41,9 @@ use crate::attributes::dummy::DummyParser;
4041
use crate::attributes::inline::{InlineParser, RustcForceInlineParser};
4142
use crate::attributes::instruction_set::InstructionSetParser;
4243
use crate::attributes::link_attrs::{
43-
ExportStableParser, FfiConstParser, FfiPureParser, LinkNameParser, LinkOrdinalParser,
44-
LinkParser, LinkSectionParser, LinkageParser, NeedsAllocatorParser, StdInternalSymbolParser,
44+
CompilerBuiltinsParser, ExportStableParser, FfiConstParser, FfiPureParser, LinkNameParser,
45+
LinkOrdinalParser, LinkParser, LinkSectionParser, LinkageParser, NeedsAllocatorParser,
46+
StdInternalSymbolParser,
4547
};
4648
use crate::attributes::lint_helpers::{
4749
AsPtrParser, AutomaticallyDerivedParser, PassByValueParser, PubTransparentParser,
@@ -251,6 +253,7 @@ attribute_parsers!(
251253
Single<WithoutArgs<AutomaticallyDerivedParser>>,
252254
Single<WithoutArgs<CoinductiveParser>>,
253255
Single<WithoutArgs<ColdParser>>,
256+
Single<WithoutArgs<CompilerBuiltinsParser>>,
254257
Single<WithoutArgs<ConstContinueParser>>,
255258
Single<WithoutArgs<ConstStabilityIndirectParser>>,
256259
Single<WithoutArgs<CoroutineParser>>,
@@ -266,19 +269,23 @@ attribute_parsers!(
266269
Single<WithoutArgs<MarkerParser>>,
267270
Single<WithoutArgs<MayDangleParser>>,
268271
Single<WithoutArgs<NeedsAllocatorParser>>,
272+
Single<WithoutArgs<NeedsPanicRuntimeParser>>,
273+
Single<WithoutArgs<NoBuiltinsParser>>,
269274
Single<WithoutArgs<NoCoreParser>>,
270275
Single<WithoutArgs<NoImplicitPreludeParser>>,
271276
Single<WithoutArgs<NoLinkParser>>,
272277
Single<WithoutArgs<NoMainParser>>,
273278
Single<WithoutArgs<NoMangleParser>>,
274279
Single<WithoutArgs<NoStdParser>>,
275280
Single<WithoutArgs<NonExhaustiveParser>>,
281+
Single<WithoutArgs<PanicRuntimeParser>>,
276282
Single<WithoutArgs<ParenSugarParser>>,
277283
Single<WithoutArgs<PassByValueParser>>,
278284
Single<WithoutArgs<PinV2Parser>>,
279285
Single<WithoutArgs<PointeeParser>>,
280286
Single<WithoutArgs<ProcMacroAttributeParser>>,
281287
Single<WithoutArgs<ProcMacroParser>>,
288+
Single<WithoutArgs<ProfilerRuntimeParser>>,
282289
Single<WithoutArgs<PubTransparentParser>>,
283290
Single<WithoutArgs<RustcAllocatorParser>>,
284291
Single<WithoutArgs<RustcAllocatorZeroedParser>>,

compiler/rustc_codegen_ssa/src/back/write.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ use std::sync::mpsc::{Receiver, Sender, channel};
66
use std::{fs, io, mem, str, thread};
77

88
use rustc_abi::Size;
9-
use rustc_ast::attr;
109
use rustc_data_structures::assert_matches;
1110
use rustc_data_structures::fx::FxIndexMap;
1211
use rustc_data_structures::jobserver::{self, Acquired};
@@ -19,6 +18,8 @@ use rustc_errors::{
1918
Level, MultiSpan, Style, Suggestions, catch_fatal_errors,
2019
};
2120
use rustc_fs_util::link_or_copy;
21+
use rustc_hir::attrs::AttributeKind;
22+
use rustc_hir::find_attr;
2223
use rustc_incremental::{
2324
copy_cgu_workproduct_to_incr_comp_cache_dir, in_incr_comp_dir, in_incr_comp_dir_sess,
2425
};
@@ -31,7 +32,7 @@ use rustc_session::config::{
3132
self, CrateType, Lto, OutFileName, OutputFilenames, OutputType, Passes, SwitchWithOptPath,
3233
};
3334
use rustc_span::source_map::SourceMap;
34-
use rustc_span::{FileName, InnerSpan, Span, SpanData, sym};
35+
use rustc_span::{FileName, InnerSpan, Span, SpanData};
3536
use rustc_target::spec::{MergeFunctions, SanitizerSet};
3637
use tracing::debug;
3738

@@ -453,7 +454,7 @@ pub(crate) fn start_async_codegen<B: ExtraBackendMethods>(
453454
let (coordinator_send, coordinator_receive) = channel();
454455

455456
let crate_attrs = tcx.hir_attrs(rustc_hir::CRATE_HIR_ID);
456-
let no_builtins = attr::contains_name(crate_attrs, sym::no_builtins);
457+
let no_builtins = find_attr!(crate_attrs, AttributeKind::NoBuiltins);
457458

458459
let crate_info = CrateInfo::new(tcx, target_cpu);
459460

compiler/rustc_codegen_ssa/src/codegen_attrs.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::str::FromStr;
22

33
use rustc_abi::{Align, ExternAbi};
44
use rustc_ast::expand::autodiff_attrs::{AutoDiffAttrs, DiffActivity, DiffMode};
5-
use rustc_ast::{LitKind, MetaItem, MetaItemInner, attr};
5+
use rustc_ast::{LitKind, MetaItem, MetaItemInner};
66
use rustc_hir::attrs::{
77
AttributeKind, EiiImplResolution, InlineAttr, Linkage, RtsanSetting, UsedBy,
88
};
@@ -353,7 +353,7 @@ fn apply_overrides(tcx: TyCtxt<'_>, did: LocalDefId, codegen_fn_attrs: &mut Code
353353
// When `no_builtins` is applied at the crate level, we should add the
354354
// `no-builtins` attribute to each function to ensure it takes effect in LTO.
355355
let crate_attrs = tcx.hir_attrs(rustc_hir::CRATE_HIR_ID);
356-
let no_builtins = attr::contains_name(crate_attrs, sym::no_builtins);
356+
let no_builtins = find_attr!(crate_attrs, AttributeKind::NoBuiltins);
357357
if no_builtins {
358358
codegen_fn_attrs.flags |= CodegenFnAttrFlags::NO_BUILTINS;
359359
}

compiler/rustc_hir/src/attrs/data_structures.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -687,6 +687,9 @@ pub enum AttributeKind {
687687
/// Represents `#[collapse_debuginfo]`.
688688
CollapseDebugInfo(CollapseMacroDebuginfo),
689689

690+
/// Represents `#[compiler_builtins]`.
691+
CompilerBuiltins,
692+
690693
/// Represents `#[rustc_confusables]`.
691694
Confusables {
692695
symbols: ThinVec<Symbol>,
@@ -843,6 +846,12 @@ pub enum AttributeKind {
843846
/// Represents `#[needs_allocator]`
844847
NeedsAllocator,
845848

849+
/// Represents `#[needs_panic_runtime]`
850+
NeedsPanicRuntime,
851+
852+
/// Represents `#[no_builtins]`
853+
NoBuiltins,
854+
846855
/// Represents `#[no_core]`
847856
NoCore(Span),
848857

@@ -873,6 +882,9 @@ pub enum AttributeKind {
873882
/// Represents `#[optimize(size|speed)]`
874883
Optimize(OptimizeAttr, Span),
875884

885+
/// Represents `#[panic_runtime]`
886+
PanicRuntime,
887+
876888
/// Represents `#[rustc_paren_sugar]`.
877889
ParenSugar(Span),
878890

@@ -903,6 +915,9 @@ pub enum AttributeKind {
903915
/// Represents `#[proc_macro_derive]`
904916
ProcMacroDerive { trait_name: Symbol, helper_attrs: ThinVec<Symbol>, span: Span },
905917

918+
/// Represents `#[profiler_runtime]`
919+
ProfilerRuntime,
920+
906921
/// Represents `#[rustc_pub_transparent]` (used by the `repr_transparent_external_private_fields` lint).
907922
PubTransparent(Span),
908923

compiler/rustc_hir/src/attrs/encode_cross_crate.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ impl AttributeKind {
3232
Coinductive(..) => No,
3333
Cold(..) => No,
3434
CollapseDebugInfo(..) => Yes,
35+
CompilerBuiltins => No,
3536
Confusables { .. } => Yes,
3637
ConstContinue(..) => No,
3738
ConstStability { .. } => Yes,
@@ -76,6 +77,8 @@ impl AttributeKind {
7677
MustUse { .. } => Yes,
7778
Naked(..) => No,
7879
NeedsAllocator => No,
80+
NeedsPanicRuntime => No,
81+
NoBuiltins => Yes,
7982
NoCore(..) => No,
8083
NoImplicitPrelude(..) => No,
8184
NoLink => No,
@@ -86,6 +89,7 @@ impl AttributeKind {
8689
ObjcClass { .. } => No,
8790
ObjcSelector { .. } => No,
8891
Optimize(..) => No,
92+
PanicRuntime => No,
8993
ParenSugar(..) => No,
9094
PassByValue(..) => Yes,
9195
PatchableFunctionEntry { .. } => Yes,
@@ -96,6 +100,7 @@ impl AttributeKind {
96100
ProcMacro(..) => No,
97101
ProcMacroAttribute(..) => No,
98102
ProcMacroDerive { .. } => No,
103+
ProfilerRuntime => No,
99104
PubTransparent(..) => Yes,
100105
RecursionLimit { .. } => No,
101106
Repr { .. } => No,

compiler/rustc_hir_analysis/src/hir_ty_lowering/generics.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -627,13 +627,10 @@ pub(crate) fn prohibit_explicit_late_bound_lifetimes(
627627
position: GenericArgPosition,
628628
) -> ExplicitLateBound {
629629
let param_counts = def.own_counts();
630-
let infer_lifetimes = position != GenericArgPosition::Type && !args.has_lifetime_params();
631630

632-
if infer_lifetimes {
633-
return ExplicitLateBound::No;
634-
}
635-
636-
if let Some(span_late) = def.has_late_bound_regions {
631+
if let Some(span_late) = def.has_late_bound_regions
632+
&& args.has_lifetime_params()
633+
{
637634
let msg = "cannot specify lifetime arguments explicitly \
638635
if late bound lifetime parameters are present";
639636
let note = "the late bound lifetime parameter is introduced here";

compiler/rustc_metadata/src/rmeta/encoder.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -741,12 +741,12 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
741741
externally_implementable_items,
742742
proc_macro_data,
743743
debugger_visualizers,
744-
compiler_builtins: ast::attr::contains_name(attrs, sym::compiler_builtins),
744+
compiler_builtins: find_attr!(attrs, AttributeKind::CompilerBuiltins),
745745
needs_allocator: find_attr!(attrs, AttributeKind::NeedsAllocator),
746-
needs_panic_runtime: ast::attr::contains_name(attrs, sym::needs_panic_runtime),
747-
no_builtins: ast::attr::contains_name(attrs, sym::no_builtins),
748-
panic_runtime: ast::attr::contains_name(attrs, sym::panic_runtime),
749-
profiler_runtime: ast::attr::contains_name(attrs, sym::profiler_runtime),
746+
needs_panic_runtime: find_attr!(attrs, AttributeKind::NeedsPanicRuntime),
747+
no_builtins: find_attr!(attrs, AttributeKind::NoBuiltins),
748+
panic_runtime: find_attr!(attrs, AttributeKind::PanicRuntime),
749+
profiler_runtime: find_attr!(attrs, AttributeKind::ProfilerRuntime),
750750
symbol_mangling_version: tcx.sess.opts.get_symbol_mangling_version(),
751751

752752
crate_deps,

compiler/rustc_middle/src/ty/context.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ use rustc_hir::definitions::{DefPathData, Definitions, DisambiguatorState};
3838
use rustc_hir::intravisit::VisitorExt;
3939
use rustc_hir::lang_items::LangItem;
4040
use rustc_hir::limit::Limit;
41-
use rustc_hir::{self as hir, Attribute, HirId, Node, TraitCandidate, find_attr};
41+
use rustc_hir::{self as hir, HirId, Node, TraitCandidate, find_attr};
4242
use rustc_index::IndexVec;
4343
use rustc_query_system::cache::WithDepNode;
4444
use rustc_query_system::dep_graph::DepNodeIndex;
@@ -49,7 +49,7 @@ use rustc_session::config::CrateType;
4949
use rustc_session::cstore::{CrateStoreDyn, Untracked};
5050
use rustc_session::lint::Lint;
5151
use rustc_span::def_id::{CRATE_DEF_ID, DefPathHash, StableCrateId};
52-
use rustc_span::{DUMMY_SP, Ident, Span, Symbol, kw, sym};
52+
use rustc_span::{DUMMY_SP, Ident, Span, Symbol, kw};
5353
use rustc_type_ir::TyKind::*;
5454
use rustc_type_ir::lang_items::{SolverAdtLangItem, SolverLangItem, SolverTraitLangItem};
5555
pub use rustc_type_ir::lift::Lift;
@@ -3560,16 +3560,12 @@ impl<'tcx> TyCtxt<'tcx> {
35603560

35613561
pub fn provide(providers: &mut Providers) {
35623562
providers.is_panic_runtime =
3563-
|tcx, LocalCrate| contains_name(tcx.hir_krate_attrs(), sym::panic_runtime);
3563+
|tcx, LocalCrate| find_attr!(tcx.hir_krate_attrs(), AttributeKind::PanicRuntime);
35643564
providers.is_compiler_builtins =
3565-
|tcx, LocalCrate| contains_name(tcx.hir_krate_attrs(), sym::compiler_builtins);
3565+
|tcx, LocalCrate| find_attr!(tcx.hir_krate_attrs(), AttributeKind::CompilerBuiltins);
35663566
providers.has_panic_handler = |tcx, LocalCrate| {
35673567
// We want to check if the panic handler was defined in this crate
35683568
tcx.lang_items().panic_impl().is_some_and(|did| did.is_local())
35693569
};
35703570
providers.source_span = |tcx, def_id| tcx.untracked.source_span.get(def_id).unwrap_or(DUMMY_SP);
35713571
}
3572-
3573-
pub fn contains_name(attrs: &[Attribute], name: Symbol) -> bool {
3574-
attrs.iter().any(|x| x.has_name(name))
3575-
}

0 commit comments

Comments
 (0)