@@ -29,12 +29,12 @@ use rustc_hir::def::{DefKind, Res};
29
29
use rustc_hir:: def_id:: { DefId , LocalDefId } ;
30
30
use rustc_hir:: intravisit:: { self , Visitor } ;
31
31
use rustc_hir:: Node ;
32
+ use rustc_middle:: bug;
32
33
use rustc_middle:: middle:: codegen_fn_attrs:: { CodegenFnAttrFlags , CodegenFnAttrs } ;
33
34
use rustc_middle:: middle:: privacy:: { self , Level } ;
34
35
use rustc_middle:: mir:: interpret:: { ConstAllocation , ErrorHandled , GlobalAlloc } ;
35
36
use rustc_middle:: query:: Providers ;
36
37
use rustc_middle:: ty:: { self , ExistentialTraitRef , TyCtxt } ;
37
- use rustc_middle:: { bug, span_bug} ;
38
38
use rustc_privacy:: DefIdVisitor ;
39
39
use rustc_session:: config:: CrateType ;
40
40
use tracing:: debug;
@@ -205,19 +205,19 @@ impl<'tcx> ReachableContext<'tcx> {
205
205
}
206
206
}
207
207
208
- // Reachable constants will be inlined into other crates
209
- // unconditionally, so we need to make sure that their
210
- // contents are also reachable.
211
- hir :: ItemKind :: Const ( .. ) => {
208
+ hir :: ItemKind :: Const ( _ , _ , init ) => {
209
+ // Only things actually ending up in the final constant need to be reachable.
210
+ // Everything else is either already available as `mir_for_ctfe`, or can't be used
211
+ // by codegen anyway.
212
212
match self . tcx . const_eval_poly_to_alloc ( item. owner_id . def_id . into ( ) ) {
213
213
Ok ( alloc) => {
214
214
let alloc = self . tcx . global_alloc ( alloc. alloc_id ) . unwrap_memory ( ) ;
215
215
self . propagate_from_alloc ( alloc) ;
216
216
}
217
- Err ( ErrorHandled :: TooGeneric ( span ) ) => span_bug ! (
218
- span ,
219
- "generic constants aren't implemented in reachability"
220
- ) ,
217
+ // Reachable generic constants will be inlined into other crates
218
+ // unconditionally, so we need to make sure that their
219
+ // contents are also reachable.
220
+ Err ( ErrorHandled :: TooGeneric ( _ ) ) => self . visit_nested_body ( init ) ,
221
221
Err ( ErrorHandled :: Reported ( ..) ) => { }
222
222
}
223
223
}
0 commit comments