|  | 
| 2 | 2 | 
 | 
| 3 | 3 | use rustc_data_structures::fx::{FxHashMap, FxHashSet}; | 
| 4 | 4 | use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrFlags; | 
| 5 |  | -use rustc_middle::mir::interpret::{ | 
| 6 |  | -    read_target_uint, AllocId, ConstValue, ErrorHandled, GlobalAlloc, Scalar, | 
| 7 |  | -}; | 
|  | 5 | +use rustc_middle::mir::interpret::{read_target_uint, AllocId, ConstValue, GlobalAlloc, Scalar}; | 
| 8 | 6 | 
 | 
| 9 | 7 | use cranelift_module::*; | 
| 10 | 8 | 
 | 
| @@ -33,16 +31,6 @@ impl ConstantCx { | 
| 33 | 31 |     } | 
| 34 | 32 | } | 
| 35 | 33 | 
 | 
| 36 |  | -pub(crate) fn check_constants(fx: &mut FunctionCx<'_, '_, '_>) -> bool { | 
| 37 |  | -    let mut all_constants_ok = true; | 
| 38 |  | -    for constant in &fx.mir.required_consts { | 
| 39 |  | -        if eval_mir_constant(fx, constant).is_none() { | 
| 40 |  | -            all_constants_ok = false; | 
| 41 |  | -        } | 
| 42 |  | -    } | 
| 43 |  | -    all_constants_ok | 
| 44 |  | -} | 
| 45 |  | - | 
| 46 | 34 | pub(crate) fn codegen_static(tcx: TyCtxt<'_>, module: &mut dyn Module, def_id: DefId) { | 
| 47 | 35 |     let mut constants_cx = ConstantCx::new(); | 
| 48 | 36 |     constants_cx.todo.push(TodoItem::Static(def_id)); | 
| @@ -76,30 +64,20 @@ pub(crate) fn codegen_tls_ref<'tcx>( | 
| 76 | 64 | pub(crate) fn eval_mir_constant<'tcx>( | 
| 77 | 65 |     fx: &FunctionCx<'_, '_, 'tcx>, | 
| 78 | 66 |     constant: &Constant<'tcx>, | 
| 79 |  | -) -> Option<(ConstValue<'tcx>, Ty<'tcx>)> { | 
|  | 67 | +) -> (ConstValue<'tcx>, Ty<'tcx>) { | 
| 80 | 68 |     let cv = fx.monomorphize(constant.literal); | 
|  | 69 | +    // This cannot fail because we checked all required_consts in advance. | 
| 81 | 70 |     let val = cv | 
| 82 | 71 |         .eval(fx.tcx, ty::ParamEnv::reveal_all(), Some(constant.span)) | 
| 83 |  | -        .map_err(|err| match err { | 
| 84 |  | -            ErrorHandled::Reported(_) => { | 
| 85 |  | -                fx.tcx.sess.span_err(constant.span, "erroneous constant encountered"); | 
| 86 |  | -            } | 
| 87 |  | -            ErrorHandled::TooGeneric => { | 
| 88 |  | -                span_bug!(constant.span, "codegen encountered polymorphic constant: {:?}", err); | 
| 89 |  | -            } | 
| 90 |  | -        }) | 
| 91 |  | -        .ok(); | 
| 92 |  | -    val.map(|val| (val, cv.ty())) | 
|  | 72 | +        .expect("erroneous constant not captured by required_consts"); | 
|  | 73 | +    (val, cv.ty()) | 
| 93 | 74 | } | 
| 94 | 75 | 
 | 
| 95 | 76 | pub(crate) fn codegen_constant_operand<'tcx>( | 
| 96 | 77 |     fx: &mut FunctionCx<'_, '_, 'tcx>, | 
| 97 | 78 |     constant: &Constant<'tcx>, | 
| 98 | 79 | ) -> CValue<'tcx> { | 
| 99 |  | -    let (const_val, ty) = eval_mir_constant(fx, constant).unwrap_or_else(|| { | 
| 100 |  | -        span_bug!(constant.span, "erroneous constant not captured by required_consts") | 
| 101 |  | -    }); | 
| 102 |  | - | 
|  | 80 | +    let (const_val, ty) = eval_mir_constant(fx, constant); | 
| 103 | 81 |     codegen_const_value(fx, const_val, ty) | 
| 104 | 82 | } | 
| 105 | 83 | 
 | 
| @@ -459,7 +437,7 @@ pub(crate) fn mir_operand_get_const_val<'tcx>( | 
| 459 | 437 |     operand: &Operand<'tcx>, | 
| 460 | 438 | ) -> Option<ConstValue<'tcx>> { | 
| 461 | 439 |     match operand { | 
| 462 |  | -        Operand::Constant(const_) => Some(eval_mir_constant(fx, const_).unwrap().0), | 
|  | 440 | +        Operand::Constant(const_) => Some(eval_mir_constant(fx, const_).0), | 
| 463 | 441 |         // FIXME(rust-lang/rust#85105): Casts like `IMM8 as u32` result in the const being stored | 
| 464 | 442 |         // inside a temporary before being passed to the intrinsic requiring the const argument. | 
| 465 | 443 |         // This code tries to find a single constant defining definition of the referenced local. | 
|  | 
0 commit comments