]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Used `IndexVec` for Loans
authorKushal Pal <kushalpal109@gmail.com>
Mon, 19 Aug 2024 09:48:49 +0000 (09:48 +0000)
committerArthur Cohen <arthur.cohen@embecosm.com>
Wed, 19 Mar 2025 14:32:09 +0000 (15:32 +0100)
gcc/rust/ChangeLog:

* checks/errors/borrowck/rust-bir-place.h: Used `IndexVec` with
ScopeId as index.
* checks/errors/borrowck/rust-borrow-checker-diagnostics.cc
(BorrowCheckerDiagnostics::get_loan): Convert Polonius::Loan to
BIR::Loan, so we can use it as index.

Signed-off-by: Kushal Pal <kushalpal109@gmail.com>
gcc/rust/checks/errors/borrowck/rust-bir-place.h
gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.cc

index bf4dfe625a0eed3caf75e55fc9aa27e6589e1dfe..ae8bec2e2735bba23991109284b3d0cc7cf3f6e7 100644 (file)
@@ -215,10 +215,12 @@ public:
   {
     internal_vector.emplace_back (std::forward<Args> (args)...);
   }
+  std::vector<T> &get_vector () { return internal_vector; }
   size_t size () const { return internal_vector.size (); }
 };
 
 using Scopes = IndexVec<ScopeId, Scope>;
+using Loans = IndexVec<LoanId, Loan>;
 
 /** Allocated places and keeps track of paths. */
 class PlaceDB
@@ -230,7 +232,7 @@ private:
   Scopes scopes;
   ScopeId current_scope = ROOT_SCOPE;
 
-  std::vector<Loan> loans;
+  Loans loans;
 
   FreeRegion next_free_region = {1};
 
@@ -251,11 +253,8 @@ public:
 
   size_t size () const { return places.size (); }
 
-  const std::vector<Loan> &get_loans () const { return loans; }
-  const Loan &get_loan (LoanId loan_id) const
-  {
-    return loans.at (loan_id.value);
-  }
+  const Loans &get_loans () const { return loans; }
+  const Loan &get_loan (LoanId loan_id) const { return loans.at (loan_id); }
 
   ScopeId get_current_scope_id () const { return current_scope; }
 
@@ -383,8 +382,9 @@ public:
   {
     LoanId id = {loans.size ()};
     loans.push_back (std::forward<Loan &&> (loan));
-    PlaceId borrowed_place = loans.rbegin ()->place;
-    places[loans.rbegin ()->place.value].borrowed_by.push_back (id);
+    PlaceId borrowed_place = loans.get_vector ().rbegin ()->place;
+    places[loans.get_vector ().rbegin ()->place.value].borrowed_by.push_back (
+      id);
     if (places[borrowed_place.value].kind == Place::DEREF)
       {
        places[places[borrowed_place.value].path.parent.value]
index f2e4c38cfa0f882edc95747e50c029e6c351aefd..4002ed4dd3456188bf117118cb3b3aaf908c23a7 100644 (file)
@@ -142,7 +142,7 @@ BorrowCheckerDiagnostics::get_statement (Polonius::Point point)
 const BIR::Loan &
 BorrowCheckerDiagnostics::get_loan (Polonius::Loan loan)
 {
-  return bir_function.place_db.get_loans ()[loan];
+  return bir_function.place_db.get_loans ()[{loan}];
 }
 
 const HIR::LifetimeParam *