https://gcc.gnu.org/g:dfbd71a9ed79a121d380f5240b5a72b3175c20a4

commit dfbd71a9ed79a121d380f5240b5a72b3175c20a4
Author: Philip Herron <herron.phi...@googlemail.com>
Date:   Tue Nov 5 17:35:37 2024 +0000

    gccrs: fix ICE for placeholder which is not setup
    
    We can have a case where the placeholder is not configred and the
    can_resolve check is not detecting this case which can lead to ICE.
    
    gcc/rust/ChangeLog:
    
            * typecheck/rust-tyty.cc (PlaceholderType::can_resolve): check for 
empty mappings
    
    Signed-off-by: Philip Herron <herron.phi...@googlemail.com>

Diff:
---
 gcc/rust/typecheck/rust-tyty.cc | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/gcc/rust/typecheck/rust-tyty.cc b/gcc/rust/typecheck/rust-tyty.cc
index 1651ea685914..660931f8b945 100644
--- a/gcc/rust/typecheck/rust-tyty.cc
+++ b/gcc/rust/typecheck/rust-tyty.cc
@@ -3543,7 +3543,17 @@ bool
 PlaceholderType::can_resolve () const
 {
   auto context = Resolver::TypeCheckContext::get ();
-  return context->lookup_associated_type_mapping (get_ty_ref (), nullptr);
+
+  BaseType *lookup = nullptr;
+  HirId mapping;
+
+  if (!context->lookup_associated_type_mapping (get_ty_ref (), &mapping))
+    return false;
+
+  if (!context->lookup_type (mapping, &lookup))
+    return false;
+
+  return lookup != nullptr;
 }
 
 BaseType *

Reply via email to