Auto merge of #141583 - tage64:master, r= · rust-lang/rust@16435a6 (original) (raw)

`@@ -301,6 +301,7 @@ struct PoloniusOutOfScopePrecomputer<'a, 'tcx> {

`

301

301

`loans_out_of_scope_at_location: FxIndexMap<Location, Vec>,

`

302

302

`}

`

303

303

``

``

304

`+

#[expect(dead_code)]

`

304

305

`impl<'tcx> PoloniusOutOfScopePrecomputer<'_, 'tcx> {

`

305

306

`fn compute(

`

306

307

`body: &Body<'tcx>,

`

`@@ -476,11 +477,18 @@ impl<'a, 'tcx> Borrows<'a, 'tcx> {

`

476

477

`if !tcx.sess.opts.unstable_opts.polonius.is_next_enabled() {

`

477

478

`calculate_borrows_out_of_scope_at_location(body, regioncx, borrow_set)

`

478

479

`} else {

`

479

``

`-

PoloniusOutOfScopePrecomputer::compute(body, regioncx, borrow_set)

`

``

480

`+

unimplemented!() // This should probably be removed.

`

480

481

`};

`

481

482

`Borrows { tcx, body, borrow_set, borrows_out_of_scope_at_location }

`

482

483

`}

`

483

484

``

``

485

`` +

/// A dummy Borrows with no useful information.

``

``

486

`+

///

`

``

487

`+

/// Used for Polonius which doesn't need this.

`

``

488

`+

pub fn dummy(tcx: TyCtxt<'tcx>, body: &'a Body<'tcx>, borrow_set: &'a BorrowSet<'tcx>) -> Self {

`

``

489

`+

Borrows { tcx, body, borrow_set, borrows_out_of_scope_at_location: Default::default() }

`

``

490

`+

}

`

``

491

+

484

492

`` /// Add all borrows to the kill set, if those borrows are out of scope at location.

``

485

493

`/// That means they went out of a nonlexical scope

`

486

494

`fn kill_loans_out_of_scope_at_location(

`

`@@ -563,6 +571,10 @@ impl<'tcx> rustc_mir_dataflow::Analysis<'tcx> for Borrows<'_, 'tcx> {

`

563

571

`const NAME: &'static str = "borrows";

`

564

572

``

565

573

`fn bottom_value(&self, _: &mir::Body<'tcx>) -> Self::Domain {

`

``

574

`+

if !self.tcx.sess.opts.unstable_opts.polonius.is_legacy_enabled() {

`

``

575

`+

return DenseBitSet::new_empty(0);

`

``

576

`+

}

`

``

577

+

566

578

`// bottom = nothing is reserved or activated yet;

`

567

579

`DenseBitSet::new_empty(self.borrow_set.len())

`

568

580

`}

`

`@@ -578,6 +590,10 @@ impl<'tcx> rustc_mir_dataflow::Analysis<'tcx> for Borrows<'_, 'tcx> {

`

578

590

`_statement: &mir::Statement<'tcx>,

`

579

591

`location: Location,

`

580

592

`) {

`

``

593

`+

if !self.tcx.sess.opts.unstable_opts.polonius.is_legacy_enabled() {

`

``

594

`+

return;

`

``

595

`+

}

`

``

596

+

581

597

`self.kill_loans_out_of_scope_at_location(state, location);

`

582

598

`}

`

583

599

``

`@@ -587,6 +603,10 @@ impl<'tcx> rustc_mir_dataflow::Analysis<'tcx> for Borrows<'_, 'tcx> {

`

587

603

`stmt: &mir::Statement<'tcx>,

`

588

604

`location: Location,

`

589

605

`) {

`

``

606

`+

if !self.tcx.sess.opts.unstable_opts.polonius.is_legacy_enabled() {

`

``

607

`+

return;

`

``

608

`+

}

`

``

609

+

590

610

`match &stmt.kind {

`

591

611

` mir::StatementKind::Assign(box (lhs, rhs)) => {

`

592

612

`if let mir::Rvalue::Ref(_, _, place) = rhs {

`

`@@ -636,6 +656,10 @@ impl<'tcx> rustc_mir_dataflow::Analysis<'tcx> for Borrows<'_, 'tcx> {

`

636

656

`_terminator: &mir::Terminator<'tcx>,

`

637

657

`location: Location,

`

638

658

`) {

`

``

659

`+

if !self.tcx.sess.opts.unstable_opts.polonius.is_legacy_enabled() {

`

``

660

`+

return;

`

``

661

`+

}

`

``

662

+

639

663

`self.kill_loans_out_of_scope_at_location(state, location);

`

640

664

`}

`

641

665

``

`@@ -645,6 +669,10 @@ impl<'tcx> rustc_mir_dataflow::Analysis<'tcx> for Borrows<'_, 'tcx> {

`

645

669

`terminator: &'mir mir::Terminator<'tcx>,

`

646

670

`_location: Location,

`

647

671

`) -> TerminatorEdges<'mir, 'tcx> {

`

``

672

`+

if !self.tcx.sess.opts.unstable_opts.polonius.is_legacy_enabled() {

`

``

673

`+

return terminator.edges();

`

``

674

`+

}

`

``

675

+

648

676

`if let mir::TerminatorKind::InlineAsm { operands, .. } = &terminator.kind {

`

649

677

`for op in operands {

`

650

678

`if let mir::InlineAsmOperand::Out { place: Some(place), .. }

`