https://gcc.gnu.org/g:522576d07f042bc048fcc2f64ab91014d6f88f47

commit 522576d07f042bc048fcc2f64ab91014d6f88f47
Author: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>
Date:   Thu Sep 19 14:38:48 2024 +0200

    Check if the type has been correctly resolved
    
    We did not check the optional was valid, this lead to rogue dereference
    and undefined behaviors.
    
    gcc/rust/ChangeLog:
    
            * resolve/rust-late-name-resolver-2.0.cc (Late::visit): Add optional
            check.
    
    Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.pa...@embecosm.com>

Diff:
---
 gcc/rust/resolve/rust-late-name-resolver-2.0.cc | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/gcc/rust/resolve/rust-late-name-resolver-2.0.cc 
b/gcc/rust/resolve/rust-late-name-resolver-2.0.cc
index 995c022fbed7..f171f14429c3 100644
--- a/gcc/rust/resolve/rust-late-name-resolver-2.0.cc
+++ b/gcc/rust/resolve/rust-late-name-resolver-2.0.cc
@@ -23,6 +23,7 @@
 #include "rust-default-resolver.h"
 #include "rust-name-resolution-context.h"
 #include "rust-path.h"
+#include "rust-system.h"
 #include "rust-tyty.h"
 #include "rust-hir-type-check.h"
 
@@ -223,9 +224,11 @@ Late::visit (AST::TypePath &type)
   // typepath-like path resolution? that sounds good
 
   auto resolved = ctx.types.get (type.get_segments ().back ()->as_string ());
-
-  ctx.map_usage (Usage (type.get_node_id ()),
-                Definition (resolved->get_node_id ()));
+  if (resolved)
+    ctx.map_usage (Usage (type.get_node_id ()),
+                  Definition (resolved->get_node_id ()));
+  else
+    rust_unreachable ();
 }
 
 void

Reply via email to