aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPhilip Herron <herron.philip@googlemail.com>2024-11-05 17:35:37 +0000
committerArthur Cohen <arthur.cohen@embecosm.com>2025-03-21 12:32:56 +0100
commit87e4dcd782013a10de2a1cac8ff0364e5ff06bda (patch)
tree1e776f7d3f2f8bf06dbf15cbc58ec2dc1770d201 /gcc
parent2d0fc643a0c837064f92f0b3122988b841b74b5f (diff)
downloadgcc-87e4dcd782013a10de2a1cac8ff0364e5ff06bda.zip
gcc-87e4dcd782013a10de2a1cac8ff0364e5ff06bda.tar.gz
gcc-87e4dcd782013a10de2a1cac8ff0364e5ff06bda.tar.bz2
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.philip@googlemail.com>
Diffstat (limited to 'gcc')
-rw-r--r--gcc/rust/typecheck/rust-tyty.cc12
1 files changed, 11 insertions, 1 deletions
diff --git a/gcc/rust/typecheck/rust-tyty.cc b/gcc/rust/typecheck/rust-tyty.cc
index 1812c61..068e390 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 *