diff --git a/gcc/rust/resolve/rust-ast-resolve-type.cc b/gcc/rust/resolve/rust-ast-resolve-type.cc index 252d1cae8aa9..c27501e1a29b 100644 --- a/gcc/rust/resolve/rust-ast-resolve-type.cc +++ b/gcc/rust/resolve/rust-ast-resolve-type.cc @@ -167,6 +167,45 @@ ResolveTypeToCanonicalPath::visit (AST::ReferenceType &ref) result = result.append (ident_seg); } +void +ResolveTypeToCanonicalPath::visit (AST::RawPointerType &ref) +{ + auto inner_type + = ResolveTypeToCanonicalPath::resolve (*ref.get_type_pointed_to ().get (), + include_generic_args_flag, + type_resolve_generic_args_flag); + + std::string segment_string ("*"); + switch (ref.get_pointer_type ()) + { + case AST::RawPointerType::PointerType::MUT: + segment_string += "mut "; + break; + + case AST::RawPointerType::PointerType::CONST: + segment_string += "const "; + break; + } + + segment_string += inner_type.get (); + + auto ident_seg = CanonicalPath::new_seg (ref.get_node_id (), segment_string); + result = result.append (ident_seg); +} + +void +ResolveTypeToCanonicalPath::visit (AST::SliceType &slice) +{ + auto inner_type + = ResolveTypeToCanonicalPath::resolve (*slice.get_elem_type ().get (), + include_generic_args_flag, + type_resolve_generic_args_flag); + std::string segment_string = "[" + inner_type.get () + "]"; + auto ident_seg + = CanonicalPath::new_seg (slice.get_node_id (), segment_string); + result = result.append (ident_seg); +} + void ResolveType::visit (AST::ReferenceType &type) { diff --git a/gcc/rust/resolve/rust-ast-resolve-type.h b/gcc/rust/resolve/rust-ast-resolve-type.h index d835e00c77c3..6dcfb4495fc6 100644 --- a/gcc/rust/resolve/rust-ast-resolve-type.h +++ b/gcc/rust/resolve/rust-ast-resolve-type.h @@ -122,6 +122,10 @@ class ResolveTypeToCanonicalPath : public ResolverBase } } + void visit (AST::SliceType &slice) override; + + void visit (AST::RawPointerType &ptr) override; + void visit (AST::ReferenceType &ref) override; void visit (AST::TypePathSegmentGeneric &seg) override; diff --git a/gcc/testsuite/rust/compile/issue-1005.rs b/gcc/testsuite/rust/compile/issue-1005.rs new file mode 100644 index 000000000000..46c85eea91e8 --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-1005.rs @@ -0,0 +1,4 @@ +// { dg-additional-options "-w" } +impl *const T { + fn test(self) {} +}