@@ -63,6 +63,7 @@ use rustc_data_structures::fingerprint::Fingerprint;
6363use rustc_hir:: def_id:: { CrateNum , DefId , LocalDefId , CRATE_DEF_INDEX } ;
6464use rustc_hir:: definitions:: DefPathHash ;
6565use rustc_hir:: HirId ;
66+ use rustc_query_system:: dep_graph:: FingerprintStyle ;
6667use rustc_span:: symbol:: Symbol ;
6768use std:: hash:: Hash ;
6869
@@ -89,9 +90,9 @@ pub struct DepKindStruct {
8990
9091 /// Whether the query key can be recovered from the hashed fingerprint.
9192 /// See [DepNodeParams] trait for the behaviour of each key type.
92- // FIXME: Make this a simple boolean once DepNodeParams::can_reconstruct_query_key
93+ // FIXME: Make this a simple boolean once DepNodeParams::fingerprint_style
9394 // can be made a specialized associated const.
94- can_reconstruct_query_key : fn ( ) -> bool ,
95+ fingerprint_style : fn ( ) -> FingerprintStyle ,
9596}
9697
9798impl std:: ops:: Deref for DepKind {
@@ -103,14 +104,14 @@ impl std::ops::Deref for DepKind {
103104
104105impl DepKind {
105106 #[ inline( always) ]
106- pub fn can_reconstruct_query_key ( & self ) -> bool {
107+ pub fn fingerprint_style ( & self ) -> FingerprintStyle {
107108 // Only fetch the DepKindStruct once.
108109 let data: & DepKindStruct = & * * self ;
109110 if data. is_anon {
110- return false ;
111+ return FingerprintStyle :: Opaque ;
111112 }
112113
113- ( data. can_reconstruct_query_key ) ( )
114+ ( data. fingerprint_style ) ( )
114115 }
115116}
116117
@@ -151,38 +152,39 @@ macro_rules! contains_eval_always_attr {
151152pub mod dep_kind {
152153 use super :: * ;
153154 use crate :: ty:: query:: query_keys;
155+ use rustc_query_system:: dep_graph:: FingerprintStyle ;
154156
155157 // We use this for most things when incr. comp. is turned off.
156158 pub const Null : DepKindStruct = DepKindStruct {
157159 has_params : false ,
158160 is_anon : false ,
159161 is_eval_always : false ,
160162
161- can_reconstruct_query_key : || true ,
163+ fingerprint_style : || FingerprintStyle :: Unit ,
162164 } ;
163165
164166 pub const TraitSelect : DepKindStruct = DepKindStruct {
165167 has_params : false ,
166168 is_anon : true ,
167169 is_eval_always : false ,
168170
169- can_reconstruct_query_key : || true ,
171+ fingerprint_style : || FingerprintStyle :: Unit ,
170172 } ;
171173
172174 pub const CompileCodegenUnit : DepKindStruct = DepKindStruct {
173175 has_params : true ,
174176 is_anon : false ,
175177 is_eval_always : false ,
176178
177- can_reconstruct_query_key : || false ,
179+ fingerprint_style : || FingerprintStyle :: Opaque ,
178180 } ;
179181
180182 pub const CompileMonoItem : DepKindStruct = DepKindStruct {
181183 has_params : true ,
182184 is_anon : false ,
183185 is_eval_always : false ,
184186
185- can_reconstruct_query_key : || false ,
187+ fingerprint_style : || FingerprintStyle :: Opaque ,
186188 } ;
187189
188190 macro_rules! define_query_dep_kinds {
@@ -196,16 +198,16 @@ pub mod dep_kind {
196198 const is_eval_always: bool = contains_eval_always_attr!( $( $attrs) * ) ;
197199
198200 #[ inline( always) ]
199- fn can_reconstruct_query_key ( ) -> bool {
201+ fn fingerprint_style ( ) -> rustc_query_system :: dep_graph :: FingerprintStyle {
200202 <query_keys:: $variant<' _> as DepNodeParams <TyCtxt <' _>>>
201- :: can_reconstruct_query_key ( )
203+ :: fingerprint_style ( )
202204 }
203205
204206 DepKindStruct {
205207 has_params,
206208 is_anon,
207209 is_eval_always,
208- can_reconstruct_query_key ,
210+ fingerprint_style ,
209211 }
210212 } ; ) *
211213 ) ;
@@ -320,7 +322,7 @@ impl DepNodeExt for DepNode {
320322 /// method will assert that the given DepKind actually requires a
321323 /// single DefId/DefPathHash parameter.
322324 fn from_def_path_hash ( def_path_hash : DefPathHash , kind : DepKind ) -> DepNode {
323- debug_assert ! ( kind. can_reconstruct_query_key ( ) && kind . has_params ) ;
325+ debug_assert ! ( kind. fingerprint_style ( ) == FingerprintStyle :: DefPathHash ) ;
324326 DepNode { kind, hash : def_path_hash. 0 . into ( ) }
325327 }
326328
@@ -335,7 +337,7 @@ impl DepNodeExt for DepNode {
335337 /// refers to something from the previous compilation session that
336338 /// has been removed.
337339 fn extract_def_id ( & self , tcx : TyCtxt < ' tcx > ) -> Option < DefId > {
338- if self . kind . can_reconstruct_query_key ( ) {
340+ if self . kind . fingerprint_style ( ) == FingerprintStyle :: DefPathHash {
339341 Some (
340342 tcx. on_disk_cache
341343 . as_ref ( ) ?
@@ -350,14 +352,16 @@ impl DepNodeExt for DepNode {
350352 fn from_label_string ( label : & str , def_path_hash : DefPathHash ) -> Result < DepNode , ( ) > {
351353 let kind = dep_kind_from_label_string ( label) ?;
352354
353- if !kind. can_reconstruct_query_key ( ) {
354- return Err ( ( ) ) ;
355- }
356-
357- if kind. has_params {
358- Ok ( DepNode :: from_def_path_hash ( def_path_hash, kind) )
359- } else {
360- Ok ( DepNode :: new_no_params ( kind) )
355+ match kind. fingerprint_style ( ) {
356+ FingerprintStyle :: Opaque => Err ( ( ) ) ,
357+ FingerprintStyle :: Unit => {
358+ if !kind. has_params {
359+ Ok ( DepNode :: new_no_params ( kind) )
360+ } else {
361+ Err ( ( ) )
362+ }
363+ }
364+ FingerprintStyle :: DefPathHash => Ok ( DepNode :: from_def_path_hash ( def_path_hash, kind) ) ,
361365 }
362366 }
363367
@@ -369,8 +373,8 @@ impl DepNodeExt for DepNode {
369373
370374impl < ' tcx > DepNodeParams < TyCtxt < ' tcx > > for ( ) {
371375 #[ inline( always) ]
372- fn can_reconstruct_query_key ( ) -> bool {
373- true
376+ fn fingerprint_style ( ) -> FingerprintStyle {
377+ FingerprintStyle :: Unit
374378 }
375379
376380 fn to_fingerprint ( & self , _: TyCtxt < ' tcx > ) -> Fingerprint {
@@ -384,8 +388,8 @@ impl<'tcx> DepNodeParams<TyCtxt<'tcx>> for () {
384388
385389impl < ' tcx > DepNodeParams < TyCtxt < ' tcx > > for DefId {
386390 #[ inline( always) ]
387- fn can_reconstruct_query_key ( ) -> bool {
388- true
391+ fn fingerprint_style ( ) -> FingerprintStyle {
392+ FingerprintStyle :: DefPathHash
389393 }
390394
391395 fn to_fingerprint ( & self , tcx : TyCtxt < ' tcx > ) -> Fingerprint {
@@ -403,8 +407,8 @@ impl<'tcx> DepNodeParams<TyCtxt<'tcx>> for DefId {
403407
404408impl < ' tcx > DepNodeParams < TyCtxt < ' tcx > > for LocalDefId {
405409 #[ inline( always) ]
406- fn can_reconstruct_query_key ( ) -> bool {
407- true
410+ fn fingerprint_style ( ) -> FingerprintStyle {
411+ FingerprintStyle :: DefPathHash
408412 }
409413
410414 fn to_fingerprint ( & self , tcx : TyCtxt < ' tcx > ) -> Fingerprint {
@@ -422,8 +426,8 @@ impl<'tcx> DepNodeParams<TyCtxt<'tcx>> for LocalDefId {
422426
423427impl < ' tcx > DepNodeParams < TyCtxt < ' tcx > > for CrateNum {
424428 #[ inline( always) ]
425- fn can_reconstruct_query_key ( ) -> bool {
426- true
429+ fn fingerprint_style ( ) -> FingerprintStyle {
430+ FingerprintStyle :: DefPathHash
427431 }
428432
429433 fn to_fingerprint ( & self , tcx : TyCtxt < ' tcx > ) -> Fingerprint {
@@ -442,8 +446,8 @@ impl<'tcx> DepNodeParams<TyCtxt<'tcx>> for CrateNum {
442446
443447impl < ' tcx > DepNodeParams < TyCtxt < ' tcx > > for ( DefId , DefId ) {
444448 #[ inline( always) ]
445- fn can_reconstruct_query_key ( ) -> bool {
446- false
449+ fn fingerprint_style ( ) -> FingerprintStyle {
450+ FingerprintStyle :: Opaque
447451 }
448452
449453 // We actually would not need to specialize the implementation of this
@@ -467,8 +471,8 @@ impl<'tcx> DepNodeParams<TyCtxt<'tcx>> for (DefId, DefId) {
467471
468472impl < ' tcx > DepNodeParams < TyCtxt < ' tcx > > for HirId {
469473 #[ inline( always) ]
470- fn can_reconstruct_query_key ( ) -> bool {
471- false
474+ fn fingerprint_style ( ) -> FingerprintStyle {
475+ FingerprintStyle :: Opaque
472476 }
473477
474478 // We actually would not need to specialize the implementation of this
0 commit comments