@@ -54,9 +54,17 @@ fn unused_generic_params(tcx: TyCtxt<'_>, def_id: DefId) -> FiniteBitSet<u32> {
5454 }
5555
5656 // Exit early when there is no MIR available.
57- if !tcx. is_mir_available ( def_id) {
58- debug ! ( "unused_generic_params: (no mir available) def_id={:?}" , def_id) ;
59- return FiniteBitSet :: new_empty ( ) ;
57+ let context = tcx. hir ( ) . body_const_context ( def_id. expect_local ( ) ) ;
58+ match context {
59+ None if !tcx. is_mir_available ( def_id) => {
60+ debug ! ( "unused_generic_params: (no mir available) def_id={:?}" , def_id) ;
61+ return FiniteBitSet :: new_empty ( ) ;
62+ }
63+ Some ( _) if !tcx. is_ctfe_mir_available ( def_id) => {
64+ debug ! ( "unused_generic_params: (no ctfe mir available) def_id={:?}" , def_id) ;
65+ return FiniteBitSet :: new_empty ( ) ;
66+ }
67+ _ => { }
6068 }
6169
6270 // Create a bitset with N rightmost ones for each parameter.
@@ -69,8 +77,11 @@ fn unused_generic_params(tcx: TyCtxt<'_>, def_id: DefId) -> FiniteBitSet<u32> {
6977 debug ! ( "unused_generic_params: (after default) unused_parameters={:?}" , unused_parameters) ;
7078
7179 // Visit MIR and accumululate used generic parameters.
72- let body = match tcx . hir ( ) . body_const_context ( def_id . expect_local ( ) ) {
80+ let body = match context {
7381 None => tcx. optimized_mir ( def_id) ,
82+ // FIXME(oli-obk): since this is solely used for codegen (I think?), should we keep using
83+ // the optimized MIR for `const fn`? Need to adjust the above `is_mir_available` check
84+ // in that case.
7485 Some ( _) => tcx. mir_for_ctfe ( def_id) ,
7586 } ;
7687 let mut vis = MarkUsedGenericParams { tcx, def_id, unused_parameters : & mut unused_parameters } ;
0 commit comments