aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/hir
diff options
context:
space:
mode:
authorArthur Cohen <arthur.cohen@embecosm.com>2024-12-25 17:55:09 +0000
committerCohenArthur <arthur.cohen@embecosm.com>2025-01-03 11:19:08 +0000
commit31d3f550bad1d8fe8d9f0d08252412a8d106d860 (patch)
tree25b2c2535d567e961a1b9b9081ceaab7727fc296 /gcc/rust/hir
parentde8606fc7272c75e71976730b9a9c08ef52a7d36 (diff)
downloadgcc-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.cc19
-rw-r--r--gcc/rust/hir/rust-ast-lower-type.h2
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 &param)
{
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)