[gccrs COMMIT 08/17] gccrs: add more filtering

gerris.rs@gmail.com gerris.rs@gmail.com
Sun Aug 30 21:46:04 GMT 2026


From: Philip Herron <herron.philip@googlemail.com>

gcc/rust/ChangeLog:

	* typecheck/rust-hir-path-probe.cc (PathProbeType::Probe): filter

Signed-off-by: Philip Herron <herron.philip@googlemail.com>
---
This change was merged into the gccrs repository and is posted here for
upstream visibility and potential drive-by review, as requested by GCC
release managers.
Each commit email contains a link to its details on github from where you can
find the Pull-Request and associated discussions.


Commit on github: https://github.com/Rust-GCC/gccrs/commit/26d050d9f27ed8436c08fcb70d3a688c73c1294c

The commit has NOT been mentioned in any issue.

The commit has been mentioned in the following pull-request(s):
 - https://github.com/Rust-GCC/gccrs/pull/4816

 gcc/rust/typecheck/rust-hir-path-probe.cc | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/gcc/rust/typecheck/rust-hir-path-probe.cc b/gcc/rust/typecheck/rust-hir-path-probe.cc
index d8ff6ff62..4245e8a38 100644
--- a/gcc/rust/typecheck/rust-hir-path-probe.cc
+++ b/gcc/rust/typecheck/rust-hir-path-probe.cc
@@ -17,6 +17,7 @@
 // <http://www.gnu.org/licenses/>.
 
 #include "rust-hir-path-probe.h"
+#include "rust-hir-item.h"
 #include "rust-hir-trait-resolve.h"
 #include "rust-type-util.h"
 #include "rust-hir-type-bounds.h"
@@ -151,6 +152,8 @@ PathProbeType::Probe (TyTy::BaseType *receiver,
 		      bool ignore_mandatory_trait_items,
 		      DefId specific_trait_id)
 {
+  Analysis::Mappings &mappings = Analysis::Mappings::get ();
+
   PathProbeType probe (receiver, segment_name, specific_trait_id);
   if (probe_impls)
     {
@@ -170,8 +173,20 @@ PathProbeType::Probe (TyTy::BaseType *receiver,
 
   if (!probe.is_receiver_generic ())
     {
-      std::vector<std::pair<TraitReference *, HIR::ImplBlock *>> probed_bounds
-	= TypeBoundsProbe::Probe (receiver);
+      HIR::Trait *associated_trait = nullptr;
+      if (specific_trait_id != UNKNOWN_DEFID)
+	{
+	  auto item_lookup = mappings.lookup_defid (specific_trait_id);
+	  if (item_lookup.has_value ())
+	    {
+	      HIR::Item *item = item_lookup.value ();
+	      rust_assert (item->get_item_kind ()
+			   == HIR::Item::ItemKind::Trait);
+	      associated_trait = static_cast<HIR::Trait *> (item);
+	    }
+	}
+
+      auto probed_bounds = TypeBoundsProbe::Probe (receiver, associated_trait);
       for (auto &candidate : probed_bounds)
 	{
 	  const TraitReference *trait_ref = candidate.first;
-- 
2.55.0



More information about the Gcc-rust mailing list