aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust
diff options
context:
space:
mode:
authorArthur Cohen <arthur.cohen@embecosm.com>2024-12-25 18:13:43 +0000
committerCohenArthur <arthur.cohen@embecosm.com>2025-01-03 11:19:08 +0000
commit9de42352bb28dc20752fa81ca26cf9929936a48a (patch)
tree16756ba2466bdfcec7fa2649032a3763bc820e18 /gcc/rust
parent31d3f550bad1d8fe8d9f0d08252412a8d106d860 (diff)
downloadgcc-9de42352bb28dc20752fa81ca26cf9929936a48a.zip
gcc-9de42352bb28dc20752fa81ca26cf9929936a48a.tar.gz
gcc-9de42352bb28dc20752fa81ca26cf9929936a48a.tar.bz2
tychk: Add more support for additional trait bounds in functions
This commit correctly lowers and typechecks parenthesized types, which are used for trait objects with additional bounds. gcc/rust/ChangeLog: * resolve/rust-ast-resolve-type.cc (ResolveType::visit): New visitor to handle ParenthesizedType. * resolve/rust-ast-resolve-type.h: Likewise. * typecheck/rust-hir-type-check-type.cc (TypeCheckType::visit): Likewise. * typecheck/rust-hir-type-check-type.h: Likewise. gcc/testsuite/ChangeLog: * rust/compile/auto_traits2.rs: New test. * rust/compile/auto_traits3.rs: New test. * rust/compile/nr2/exclude: Add auto_traits2 test.
Diffstat (limited to 'gcc/rust')
-rw-r--r--gcc/rust/resolve/rust-ast-resolve-type.cc6
-rw-r--r--gcc/rust/resolve/rust-ast-resolve-type.h3
-rw-r--r--gcc/rust/typecheck/rust-hir-type-check-type.cc6
-rw-r--r--gcc/rust/typecheck/rust-hir-type-check-type.h4
4 files changed, 16 insertions, 3 deletions
diff --git a/gcc/rust/resolve/rust-ast-resolve-type.cc b/gcc/rust/resolve/rust-ast-resolve-type.cc
index 56ce95f..a4878a2 100644
--- a/gcc/rust/resolve/rust-ast-resolve-type.cc
+++ b/gcc/rust/resolve/rust-ast-resolve-type.cc
@@ -51,6 +51,12 @@ ResolveType::visit (AST::TraitObjectType &type)
}
void
+ResolveType::visit (AST::ParenthesisedType &type)
+{
+ resolved_node = ResolveType::go (*type.get_type_in_parens ());
+}
+
+void
ResolveType::visit (AST::ReferenceType &type)
{
resolved_node = ResolveType::go (type.get_type_referenced ());
diff --git a/gcc/rust/resolve/rust-ast-resolve-type.h b/gcc/rust/resolve/rust-ast-resolve-type.h
index 763838e..3a7dbd6 100644
--- a/gcc/rust/resolve/rust-ast-resolve-type.h
+++ b/gcc/rust/resolve/rust-ast-resolve-type.h
@@ -24,6 +24,7 @@
#include "rust-diagnostics.h"
#include "rust-hir-map.h"
#include "rust-path.h"
+#include "rust-type.h"
#include "util/rust-hir-map.h"
namespace Rust {
@@ -143,6 +144,8 @@ public:
void visit (AST::TraitObjectType &type) override;
+ void visit (AST::ParenthesisedType &type) override;
+
void visit (AST::SliceType &type) override;
private:
diff --git a/gcc/rust/typecheck/rust-hir-type-check-type.cc b/gcc/rust/typecheck/rust-hir-type-check-type.cc
index 3c41b2b..3f4076c 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-type.cc
+++ b/gcc/rust/typecheck/rust-hir-type-check-type.cc
@@ -791,6 +791,12 @@ TypeCheckType::visit (HIR::TraitObjectType &type)
}
void
+TypeCheckType::visit (HIR::ParenthesisedType &type)
+{
+ translated = TypeCheckType::Resolve (type.get_type_in_parens ());
+}
+
+void
TypeCheckType::visit (HIR::ArrayType &type)
{
auto capacity_type = TypeCheckExpr::Resolve (type.get_size_expr ());
diff --git a/gcc/rust/typecheck/rust-hir-type-check-type.h b/gcc/rust/typecheck/rust-hir-type-check-type.h
index 10acde0..aafdac8 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-type.h
+++ b/gcc/rust/typecheck/rust-hir-type-check-type.h
@@ -59,6 +59,7 @@ public:
void visit (HIR::InferredType &type) override;
void visit (HIR::NeverType &type) override;
void visit (HIR::TraitObjectType &type) override;
+ void visit (HIR::ParenthesisedType &type) override;
void visit (HIR::TypePathSegmentFunction &segment) override
{ /* TODO */
@@ -69,9 +70,6 @@ public:
void visit (HIR::ImplTraitType &type) override
{ /* TODO */
}
- void visit (HIR::ParenthesisedType &type) override
- { /* TODO */
- }
void visit (HIR::ImplTraitTypeOneBound &type) override
{ /* TODO */
}