Skip to content

Commit 1c2f6ad

Browse files
author
addie.sh
committed
all of this
1 parent 042c759 commit 1c2f6ad

13 files changed

Lines changed: 136 additions & 1 deletion

File tree

compiler/rustc_attr_parsing/src/attributes/rustc_dump.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,24 @@ impl SingleAttributeParser for RustcDumpDefPathParser {
4545
}
4646
}
4747

48+
pub(crate) struct RustcDumpGenericsParser;
49+
50+
impl NoArgsAttributeParser for RustcDumpGenericsParser {
51+
const PATH: &[Symbol] = &[sym::rustc_dump_generics];
52+
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[
53+
Allow(Target::Struct),
54+
Allow(Target::Enum),
55+
Allow(Target::Union),
56+
Allow(Target::Trait),
57+
Allow(Target::Fn),
58+
Allow(Target::Closure),
59+
Allow(Target::Union),
60+
Allow(Target::TyAlias),
61+
Allow(Target::TraitAlias),
62+
]);
63+
const CREATE: fn(Span) -> AttributeKind = |_| AttributeKind::RustcDumpGenerics;
64+
}
65+
4866
pub(crate) struct RustcDumpHiddenTypeOfOpaquesParser;
4967

5068
impl NoArgsAttributeParser for RustcDumpHiddenTypeOfOpaquesParser {

compiler/rustc_attr_parsing/src/context.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,7 @@ attribute_parsers!(
275275
Single<WithoutArgs<RustcDenyExplicitImplParser>>,
276276
Single<WithoutArgs<RustcDoNotConstCheckParser>>,
277277
Single<WithoutArgs<RustcDumpDefParentsParser>>,
278+
Single<WithoutArgs<RustcDumpGenericsParser>>,
278279
Single<WithoutArgs<RustcDumpHiddenTypeOfOpaquesParser>>,
279280
Single<WithoutArgs<RustcDumpInferredOutlivesParser>>,
280281
Single<WithoutArgs<RustcDumpItemBoundsParser>>,

compiler/rustc_feature/src/builtin_attrs.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,7 @@ pub static BUILTIN_ATTRIBUTES: &[Symbol] = &[
491491
sym::rustc_strict_coherence,
492492
sym::rustc_dump_variances,
493493
sym::rustc_dump_variances_of_opaques,
494+
sym::rustc_dump_generics,
494495
sym::rustc_dump_hidden_type_of_opaques,
495496
sym::rustc_dump_layout,
496497
sym::rustc_abi,

compiler/rustc_hir/src/attrs/data_structures.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1359,6 +1359,9 @@ pub enum AttributeKind {
13591359
/// Represents `#[rustc_dump_def_path]`
13601360
RustcDumpDefPath(Span),
13611361

1362+
/// Represents `#[rustc_dump_generics]`
1363+
RustcDumpGenerics,
1364+
13621365
/// Represents `#[rustc_dump_hidden_type_of_opaques]`
13631366
RustcDumpHiddenTypeOfOpaques,
13641367

compiler/rustc_hir/src/attrs/encode_cross_crate.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ impl AttributeKind {
126126
RustcDummy => No,
127127
RustcDumpDefParents => No,
128128
RustcDumpDefPath(..) => No,
129+
RustcDumpGenerics => No,
129130
RustcDumpHiddenTypeOfOpaques => No,
130131
RustcDumpInferredOutlives => No,
131132
RustcDumpItemBounds => No,

compiler/rustc_hir_analysis/src/collect/dump.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,24 @@ use rustc_middle::hir::nested_filter;
66
use rustc_middle::ty::{self, TyCtxt, TypeVisitableExt, Unnormalized};
77
use rustc_span::sym;
88

9+
pub(crate) fn generics(tcx: TyCtxt<'_>) {
10+
for iid in tcx.hir_free_items() {
11+
let did = iid.owner_id.def_id;
12+
if find_attr!(tcx, did, RustcDumpGenerics) {
13+
let span = tcx.def_span(did);
14+
15+
let mut diag = tcx
16+
.dcx()
17+
.struct_span_err(span, format!("{}: {did:?}", sym::rustc_dump_generics.as_str()));
18+
19+
let current_did = did.to_def_id();
20+
let generics = tcx.generics_of(current_did);
21+
diag.span_note(tcx.def_span(did), format!("{generics:#?}"));
22+
diag.emit();
23+
}
24+
}
25+
}
26+
927
pub(crate) fn opaque_hidden_types(tcx: TyCtxt<'_>) {
1028
if !find_attr!(tcx, crate, RustcDumpHiddenTypeOfOpaques) {
1129
return;

compiler/rustc_hir_analysis/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ pub fn check_crate(tcx: TyCtxt<'_>) {
201201
tcx.sess.time("dumping_rustc_attr_data", || {
202202
outlives::dump::inferred_outlives(tcx);
203203
variance::dump::variances(tcx);
204+
collect::dump::generics(tcx);
204205
collect::dump::opaque_hidden_types(tcx);
205206
collect::dump::predicates_and_item_bounds(tcx);
206207
collect::dump::def_parents(tcx);

compiler/rustc_passes/src/check_attr.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,7 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
342342
AttributeKind::RustcDummy => (),
343343
AttributeKind::RustcDumpDefParents => (),
344344
AttributeKind::RustcDumpDefPath(..) => (),
345+
AttributeKind::RustcDumpGenerics => (),
345346
AttributeKind::RustcDumpHiddenTypeOfOpaques => (),
346347
AttributeKind::RustcDumpInferredOutlives => (),
347348
AttributeKind::RustcDumpItemBounds => (),

compiler/rustc_span/src/symbol.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1744,6 +1744,7 @@ symbols! {
17441744
rustc_dummy,
17451745
rustc_dump_def_parents,
17461746
rustc_dump_def_path,
1747+
rustc_dump_generics,
17471748
rustc_dump_hidden_type_of_opaques,
17481749
rustc_dump_inferred_outlives,
17491750
rustc_dump_item_bounds,

library/backtrace

0 commit comments

Comments
 (0)