From: Kushal Pal Date: Thu, 25 Jul 2024 11:57:35 +0000 (+0000) Subject: gccrs: Map locations to placeholder regions X-Git-Tag: basepoints/gcc-16~1233 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6f009aedaff88e359aee82628bccf683315222c6;p=thirdparty%2Fgcc.git gccrs: Map locations to placeholder regions Mapped placeholder regions to their respective HIR nodes so we can fetch locations during error reporting. gcc/rust/ChangeLog: * checks/errors/borrowck/rust-bir-builder.h: Map regions to their respective HIR nodes. * checks/errors/borrowck/rust-bir.h (struct Function): Add unordered_map to maintain the mapping. Signed-off-by: Kushal Pal --- diff --git a/gcc/rust/checks/errors/borrowck/rust-bir-builder.h b/gcc/rust/checks/errors/borrowck/rust-bir-builder.h index b7d0651fcdd..e3d61b5b36e 100644 --- a/gcc/rust/checks/errors/borrowck/rust-bir-builder.h +++ b/gcc/rust/checks/errors/borrowck/rust-bir-builder.h @@ -50,6 +50,8 @@ public: handle_param (param); handle_body (*function.get_definition ()); + auto region_hir_map + = map_region_to_hir (function.get_generic_params (), ctx.fn_free_regions); return Function{ std::move (ctx.place_db), @@ -57,6 +59,7 @@ public: std::move (ctx.basic_blocks), std::move (ctx.fn_free_regions), std::move (universal_region_bounds), + std::move (region_hir_map), function.get_locus (), }; } @@ -161,6 +164,26 @@ private: push_return (return_location); } } + + // Maps named lifetime parameters to their respective HIR node + const std::unordered_map + map_region_to_hir ( + const std::vector> &generic_params, + const FreeRegions ®ions) + { + std::unordered_map result; + size_t region_index = 0; + for (auto &generic_param : generic_params) + { + if (generic_param->get_kind () + == HIR::GenericParam::GenericKind::LIFETIME) + { + result[regions[region_index++]] + = static_cast (generic_param.get ()); + } + } + return result; + } }; } // namespace BIR diff --git a/gcc/rust/checks/errors/borrowck/rust-bir.h b/gcc/rust/checks/errors/borrowck/rust-bir.h index 583d1ebd58f..e8b7e39c550 100644 --- a/gcc/rust/checks/errors/borrowck/rust-bir.h +++ b/gcc/rust/checks/errors/borrowck/rust-bir.h @@ -47,6 +47,7 @@ struct Function std::vector basic_blocks; FreeRegions universal_regions; std::vector> universal_region_bounds; + std::unordered_map region_hir_map; location_t location; };