Revert "Rollup merge of #134371 - scottmcm:fix-134352, r=oli-obk" · cuviper/rust@0bb4880 (original) (raw)

`@@ -647,31 +647,13 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {

`

647

647

``

648

648

`match place_ty.kind() {

`

649

649

` ty::Array(_elem_ty, len_const) => {

`

650

``

`-

let ty_const = if let Some((_, len_ty)) = len_const.try_to_valtree()

`

651

``

`-

&& len_ty != self.tcx.types.usize

`

652

``

`-

{

`

653

``

`-

// Bad const generics can give us a constant from the type that's

`

654

``

`` -

// not actually a usize, so in that case give an error instead.

``

655

``

`-

// FIXME: It'd be nice if the type checker made sure this wasn't

`

656

``

`-

// possible, instead.

`

657

``

`-

let err = self.tcx.dcx().span_delayed_bug(

`

658

``

`-

span,

`

659

``

`-

format!(

`

660

``

`-

"Array length should have already been a type error, as it's {len_ty:?}"

`

661

``

`-

),

`

662

``

`-

);

`

663

``

`-

ty::Const::new_error(self.tcx, err)

`

664

``

`-

} else {

`

665

``

`-

// We know how long an array is, so just use that as a constant

`

666

``

`-

// directly -- no locals needed. We do need one statement so

`

667

``

`-

// that borrow- and initialization-checking consider it used,

`

668

``

`-

// though. FIXME: Do we really need to count this as a use?

`

669

``

`-

// Could partial array tracking work off something else instead?

`

670

``

`-

self.cfg.push_fake_read(block, source_info, FakeReadCause::ForIndex, place);

`

671

``

`-

*len_const

`

672

``

`-

};

`

673

``

-

674

``

`-

let const_ = Const::from_ty_const(ty_const, usize_ty, self.tcx);

`

``

650

`+

// We know how long an array is, so just use that as a constant

`

``

651

`+

// directly -- no locals needed. We do need one statement so

`

``

652

`+

// that borrow- and initialization-checking consider it used,

`

``

653

`+

// though. FIXME: Do we really need to count this as a use?

`

``

654

`+

// Could partial array tracking work off something else instead?

`

``

655

`+

self.cfg.push_fake_read(block, source_info, FakeReadCause::ForIndex, place);

`

``

656

`+

let const_ = Const::from_ty_const(*len_const, usize_ty, self.tcx);

`

675

657

`Operand::Constant(Box::new(ConstOperand { span, user_ty: None, const_ }))

`

676

658

`}

`

677

659

` ty::Slice(_elem_ty) => {

`