diff options
author | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-12-25 17:55:09 +0000 |
---|---|---|
committer | CohenArthur <arthur.cohen@embecosm.com> | 2025-01-03 11:19:08 +0000 |
commit | 31d3f550bad1d8fe8d9f0d08252412a8d106d860 (patch) | |
tree | 25b2c2535d567e961a1b9b9081ceaab7727fc296 /gcc/rust/hir | |
parent | de8606fc7272c75e71976730b9a9c08ef52a7d36 (diff) | |
download | gcc-31d3f550bad1d8fe8d9f0d08252412a8d106d860.zip gcc-31d3f550bad1d8fe8d9f0d08252412a8d106d860.tar.gz gcc-31d3f550bad1d8fe8d9f0d08252412a8d106d860.tar.bz2 |
lower: Correctly lower parenthesized types
This is useful for handling multiple trait bounds, and required for better handling of auto traits.
gcc/rust/ChangeLog:
* hir/rust-ast-lower-type.cc (ASTLoweringType::visit): Add implementation for
ParenthesizedType.
* hir/rust-ast-lower-type.h: Declare that new visitor.
gcc/testsuite/ChangeLog:
* rust/compile/auto_traits1.rs: New test.
Diffstat (limited to 'gcc/rust/hir')
-rw-r--r-- | gcc/rust/hir/rust-ast-lower-type.cc | 19 | ||||
-rw-r--r-- | gcc/rust/hir/rust-ast-lower-type.h | 2 |
2 files changed, 21 insertions, 0 deletions
diff --git a/gcc/rust/hir/rust-ast-lower-type.cc b/gcc/rust/hir/rust-ast-lower-type.cc index 2c124d1..605a2e5 100644 --- a/gcc/rust/hir/rust-ast-lower-type.cc +++ b/gcc/rust/hir/rust-ast-lower-type.cc @@ -19,6 +19,7 @@ #include "rust-ast-lower-type.h" #include "rust-hir-map.h" #include "rust-hir-path.h" +#include "rust-hir-type.h" #include "rust-path.h" #include "rust-pattern.h" @@ -471,6 +472,24 @@ ASTLoweringType::visit (AST::TraitObjectType &type) type.get_locus (), type.is_dyn ()); } +void +ASTLoweringType::visit (AST::ParenthesisedType &type) +{ + auto *inner = ASTLoweringType::translate (*type.get_type_in_parens (), + default_to_static_lifetime); + + auto crate_num = mappings.get_current_crate (); + Analysis::NodeMapping mapping (crate_num, type.get_node_id (), + mappings.get_next_hir_id (crate_num), + mappings.get_next_localdef_id (crate_num)); + + // FIXME: Do we actually need to know if a type is parenthesized in the HIR? + // or can we just use the type in parens? + translated + = new HIR::ParenthesisedType (mapping, std::unique_ptr<HIR::Type> (inner), + type.get_locus ()); +} + HIR::GenericParam * ASTLowerGenericParam::translate (AST::GenericParam ¶m) { diff --git a/gcc/rust/hir/rust-ast-lower-type.h b/gcc/rust/hir/rust-ast-lower-type.h index 2509276..1e88ec2 100644 --- a/gcc/rust/hir/rust-ast-lower-type.h +++ b/gcc/rust/hir/rust-ast-lower-type.h @@ -22,6 +22,7 @@ #include "rust-ast-lower-base.h" #include "rust-ast-lower-expr.h" #include "rust-hir-path.h" +#include "rust-type.h" namespace Rust { namespace HIR { @@ -83,6 +84,7 @@ public: void visit (AST::NeverType &type) override; void visit (AST::TraitObjectTypeOneBound &type) override; void visit (AST::TraitObjectType &type) override; + void visit (AST::ParenthesisedType &type) override; private: ASTLoweringType (bool default_to_static_lifetime) |