diff options
author | Kushal Pal <kushalpal109@gmail.com> | 2024-08-19 09:48:49 +0000 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2025-03-19 15:32:09 +0100 |
commit | 7ec5d6bcbff36d98ae3dce2b928ae1202d208e48 (patch) | |
tree | 487372c61d936634bf194b854690e834f0e54e54 /gcc | |
parent | 1113b8e0340aec62eb471115619f9624d15fe86a (diff) | |
download | gcc-7ec5d6bcbff36d98ae3dce2b928ae1202d208e48.zip gcc-7ec5d6bcbff36d98ae3dce2b928ae1202d208e48.tar.gz gcc-7ec5d6bcbff36d98ae3dce2b928ae1202d208e48.tar.bz2 |
gccrs: 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')
-rw-r--r-- | gcc/rust/checks/errors/borrowck/rust-bir-place.h | 16 | ||||
-rw-r--r-- | gcc/rust/checks/errors/borrowck/rust-borrow-checker-diagnostics.cc | 2 |
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 bf4dfe6..ae8bec2 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 * |