diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2024-09-19 14:38:48 +0200 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2025-03-19 15:32:11 +0100 |
commit | a8bebc3bdd41fb86a3b4fa534820456719eaa79f (patch) | |
tree | 0406d21a0fca4071fdba642b4f33ccc2da411b3c | |
parent | 506459fac4e1a4a8d8ed68711cf88bddb1bbf601 (diff) | |
download | gcc-a8bebc3bdd41fb86a3b4fa534820456719eaa79f.zip gcc-a8bebc3bdd41fb86a3b4fa534820456719eaa79f.tar.gz gcc-a8bebc3bdd41fb86a3b4fa534820456719eaa79f.tar.bz2 |
gccrs: 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.patry@embecosm.com>
-rw-r--r-- | gcc/rust/resolve/rust-late-name-resolver-2.0.cc | 9 |
1 files 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 9ac0945..068d231 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 |