@@ -383,25 +383,15 @@ pub fn eval_to_allocation_raw_provider<'tcx>(
383
383
Ok ( mplace) => {
384
384
// Since evaluation had no errors, valiate the resulting constant:
385
385
let validation = try {
386
- // FIXME do not validate promoteds until a decision on
387
- // https://github.com/rust-lang/rust/issues/67465 and
388
- // https://github.com/rust-lang/rust/issues/67534 is made.
389
- // Promoteds can contain unexpected `UnsafeCell` and reference `static`s, but their
390
- // otherwise restricted form ensures that this is still sound. We just lose the
391
- // extra safety net of some of the dynamic checks. They can also contain invalid
392
- // values, but since we do not usually check intermediate results of a computation
393
- // for validity, it might be surprising to do that here.
394
- if cid. promoted . is_none ( ) {
395
- let mut ref_tracking = RefTracking :: new ( mplace) ;
396
- let mut inner = false ;
397
- while let Some ( ( mplace, path) ) = ref_tracking. todo . pop ( ) {
398
- let mode = match tcx. static_mutability ( cid. instance . def_id ( ) ) {
399
- Some ( _) => CtfeValidationMode :: Regular , // a `static`
400
- None => CtfeValidationMode :: Const { inner } ,
401
- } ;
402
- ecx. const_validate_operand ( mplace. into ( ) , path, & mut ref_tracking, mode) ?;
403
- inner = true ;
404
- }
386
+ let mut ref_tracking = RefTracking :: new ( mplace) ;
387
+ let mut inner = false ;
388
+ while let Some ( ( mplace, path) ) = ref_tracking. todo . pop ( ) {
389
+ let mode = match tcx. static_mutability ( cid. instance . def_id ( ) ) {
390
+ Some ( _) if cid. promoted . is_none ( ) => CtfeValidationMode :: Regular , // a `static`
391
+ _ => CtfeValidationMode :: Const { inner } ,
392
+ } ;
393
+ ecx. const_validate_operand ( mplace. into ( ) , path, & mut ref_tracking, mode) ?;
394
+ inner = true ;
405
395
}
406
396
} ;
407
397
if let Err ( error) = validation {
0 commit comments