44//! def-path. This is used for unit testing the code that generates
55//! paths etc in all kinds of annoying scenarios.
66
7- use rustc_hir:: def_id:: LocalDefId ;
8- use rustc_hir:: find_attr;
7+ use rustc_hir:: { CRATE_OWNER_ID , find_attr} ;
98use rustc_middle:: ty:: print:: with_no_trimmed_paths;
109use rustc_middle:: ty:: { GenericArgs , Instance , TyCtxt } ;
1110
12- use crate :: errors:: { Kind , TestOutput } ;
13-
1411pub fn dump_symbol_names_and_def_paths ( tcx : TyCtxt < ' _ > ) {
1512 // if the `rustc_attrs` feature is not enabled, then the
1613 // attributes we are interested in cannot be present anyway, so
@@ -20,73 +17,33 @@ pub fn dump_symbol_names_and_def_paths(tcx: TyCtxt<'_>) {
2017 }
2118
2219 tcx. dep_graph . with_ignore ( || {
23- let mut symbol_names = SymbolNamesTest { tcx } ;
24- let crate_items = tcx. hir_crate_items ( ( ) ) ;
25-
26- for id in crate_items. free_items ( ) {
27- symbol_names. process_attrs ( id. owner_id . def_id ) ;
28- }
29-
30- for id in crate_items. trait_items ( ) {
31- symbol_names. process_attrs ( id. owner_id . def_id ) ;
32- }
33-
34- for id in crate_items. impl_items ( ) {
35- symbol_names. process_attrs ( id. owner_id . def_id ) ;
36- }
20+ for id in tcx. hir_crate_items ( ( ) ) . owners ( ) {
21+ if id == CRATE_OWNER_ID {
22+ continue ;
23+ }
3724
38- for id in crate_items. foreign_items ( ) {
39- symbol_names. process_attrs ( id. owner_id . def_id ) ;
40- }
41- } )
42- }
25+ // The format `$tag($value)` is chosen so that tests can elect to test the
26+ // entirety of the string, if they choose, or else just some subset.
4327
44- struct SymbolNamesTest < ' tcx > {
45- tcx : TyCtxt < ' tcx > ,
46- }
28+ if let Some ( & span) = find_attr ! ( tcx, id. def_id, RustcDumpSymbolName ( span) => span) {
29+ let def_id = id. def_id . to_def_id ( ) ;
30+ let args = GenericArgs :: identity_for_item ( tcx, id. def_id ) ;
31+ let args = tcx. erase_and_anonymize_regions ( args) ;
32+ let instance = Instance :: new_raw ( def_id, args) ;
33+ let mangled = tcx. symbol_name ( instance) ;
4734
48- impl SymbolNamesTest < ' _ > {
49- fn process_attrs ( & mut self , def_id : LocalDefId ) {
50- let tcx = self . tcx ;
51- // The formatting of `tag({})` is chosen so that tests can elect
52- // to test the entirety of the string, if they choose, or else just
53- // some subset.
35+ tcx. dcx ( ) . span_err ( span, format ! ( "symbol-name({mangled})" ) ) ;
5436
55- if let Some ( attr_span) = find_attr ! ( tcx, def_id, RustcDumpSymbolName ( span) => span) {
56- let def_id = def_id. to_def_id ( ) ;
57- let instance = Instance :: new_raw (
58- def_id,
59- tcx. erase_and_anonymize_regions ( GenericArgs :: identity_for_item ( tcx, def_id) ) ,
60- ) ;
61- let mangled = tcx. symbol_name ( instance) ;
62- tcx. dcx ( ) . emit_err ( TestOutput {
63- span : * attr_span,
64- kind : Kind :: SymbolName ,
65- content : format ! ( "{mangled}" ) ,
66- } ) ;
67- if let Ok ( demangling) = rustc_demangle:: try_demangle ( mangled. name ) {
68- tcx. dcx ( ) . emit_err ( TestOutput {
69- span : * attr_span,
70- kind : Kind :: Demangling ,
71- content : format ! ( "{demangling}" ) ,
72- } ) ;
73- tcx. dcx ( ) . emit_err ( TestOutput {
74- span : * attr_span,
75- kind : Kind :: DemanglingAlt ,
76- content : format ! ( "{demangling:#}" ) ,
77- } ) ;
37+ if let Ok ( demangling) = rustc_demangle:: try_demangle ( mangled. name ) {
38+ tcx. dcx ( ) . span_err ( span, format ! ( "demangling({demangling})" ) ) ;
39+ tcx. dcx ( ) . span_err ( span, format ! ( "demangling-alt({demangling:#})" ) ) ;
40+ }
7841 }
79- }
8042
81- if let Some ( attr_span) = find_attr ! (
82- tcx, def_id,
83- RustcDumpDefPath ( span) => span
84- ) {
85- tcx. dcx ( ) . emit_err ( TestOutput {
86- span : * attr_span,
87- kind : Kind :: DefPath ,
88- content : with_no_trimmed_paths ! ( tcx. def_path_str( def_id) ) ,
89- } ) ;
43+ if let Some ( & span) = find_attr ! ( tcx, id. def_id, RustcDumpDefPath ( span) => span) {
44+ let def_path = with_no_trimmed_paths ! ( tcx. def_path_str( id. def_id) ) ;
45+ tcx. dcx ( ) . span_err ( span, format ! ( "def-path({def_path})" ) ) ;
46+ }
9047 }
91- }
48+ } )
9249}
0 commit comments