aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust
diff options
context:
space:
mode:
authorKushal Pal <kushalpal109@gmail.com>2024-08-19 09:48:49 +0000
committerP-E-P <32375388+P-E-P@users.noreply.github.com>2024-09-09 08:33:02 +0000
commit5f42a91bd2b308da2d78912f899dff871598b23e (patch)
tree30dc24692752c1088070a6109083ca45cd364198 /gcc/rust
parenta912ffbf32a20fa81120f36ad9042f0dc99872c2 (diff)
downloadgcc-5f42a91bd2b308da2d78912f899dff871598b23e.zip
gcc-5f42a91bd2b308da2d78912f899dff871598b23e.tar.gz
gcc-5f42a91bd2b308da2d78912f899dff871598b23e.tar.bz2
Used `IndexVec` for Loans
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>
Diffstat (limited to 'gcc/rust')
-rw-r--r--gcc/rust/checks/errors/borrowck/rust-bir-place.h16
-rw-r--r--gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.cc2
2 files changed, 9 insertions, 9 deletions
diff --git a/gcc/rust/checks/errors/borrowck/rust-bir-place.h b/gcc/rust/checks/errors/borrowck/rust-bir-place.h
index 05e25ed..5f1c09a 100644
--- a/gcc/rust/checks/errors/borrowck/rust-bir-place.h
+++ b/gcc/rust/checks/errors/borrowck/rust-bir-place.h
@@ -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]
diff --git a/gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.cc b/gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.cc
index f2e4c38..4002ed4 100644
--- a/gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.cc
+++ b/gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.cc
@@ -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 *