diff options
author | Philip Herron <herron.philip@googlemail.com> | 2024-09-20 18:45:12 +0100 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2025-03-19 15:32:11 +0100 |
commit | d007ce87451f75134ccf38a3d760cbdc6720e608 (patch) | |
tree | 7238b1f2339bb3c2a24da281ce5c023a2594efb8 /gcc/rust/resolve/rust-name-resolver.cc | |
parent | 88524c5314967f013f1596cdd935da4d9dc27500 (diff) | |
download | gcc-d007ce87451f75134ccf38a3d760cbdc6720e608.zip gcc-d007ce87451f75134ccf38a3d760cbdc6720e608.tar.gz gcc-d007ce87451f75134ccf38a3d760cbdc6720e608.tar.bz2 |
rust: fix ICE when compiling impl block for !
We need to resolve the never type which is its own special AST node so it
doesnt magically get handled like the regular builtin type paths such as
i32.
Fixes #3035
gcc/rust/ChangeLog:
* resolve/rust-ast-resolve-type.cc (ResolveType::visit):
handle never type
(ResolveTypeToCanonicalPath::visit): likewise
* resolve/rust-ast-resolve-type.h: missing never type
* resolve/rust-name-resolver.cc (Resolver::generate_builtins):
track never type node_id
(Resolver::setup_builtin): likewise
* resolve/rust-name-resolver.h: new never type getter
gcc/testsuite/ChangeLog:
* rust/compile/nr2/exclude: nr2 cant handle this
* rust/compile/issue-3035.rs: New test.
Signed-off-by: Philip Herron <herron.philip@googlemail.com>
Diffstat (limited to 'gcc/rust/resolve/rust-name-resolver.cc')
-rw-r--r-- | gcc/rust/resolve/rust-name-resolver.cc | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/rust/resolve/rust-name-resolver.cc b/gcc/rust/resolve/rust-name-resolver.cc index ee52e5c..21147bd8 100644 --- a/gcc/rust/resolve/rust-name-resolver.cc +++ b/gcc/rust/resolve/rust-name-resolver.cc @@ -429,7 +429,10 @@ Resolver::generate_builtins () setup_builtin ("isize", isize); setup_builtin ("char", char_tyty); setup_builtin ("str", str); - setup_builtin ("!", never); + + // never type + NodeId never_node_id = setup_builtin ("!", never); + set_never_type_node_id (never_node_id); // unit type () TyTy::TupleType *unit_tyty @@ -443,7 +446,7 @@ Resolver::generate_builtins () set_unit_type_node_id (unit_type->get_node_id ()); } -void +NodeId Resolver::setup_builtin (const std::string &name, TyTy::BaseType *tyty) { AST::PathIdentSegment seg (name, BUILTINS_LOCATION); @@ -459,6 +462,8 @@ Resolver::setup_builtin (const std::string &name, TyTy::BaseType *tyty) mappings.insert_canonical_path ( builtin_type->get_node_id (), CanonicalPath::new_seg (builtin_type->get_node_id (), name)); + + return builtin_type->get_node_id (); } void |