aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/hir
diff options
context:
space:
mode:
authorPhilip Herron <philip.herron@embecosm.com>2022-01-21 20:16:38 +0000
committerPhilip Herron <philip.herron@embecosm.com>2022-01-21 20:42:09 +0000
commite77f051369efce4207c965ab2b69c5d9867c5846 (patch)
treec8f2157e6a3abf4d6bfc4ac2e81498127c88e1c9 /gcc/rust/hir
parenta6c5dbadc3c9023821244bd4af4e78ad9d8f63f2 (diff)
downloadgcc-e77f051369efce4207c965ab2b69c5d9867c5846.zip
gcc-e77f051369efce4207c965ab2b69c5d9867c5846.tar.gz
gcc-e77f051369efce4207c965ab2b69c5d9867c5846.tar.bz2
Extract AsyncConstStatus to be a shared enum between AST and HIR
This allows us to reuse the same enum and fix the uninitilized warning as it has already been setup before hand in the AST. Fixes #875
Diffstat (limited to 'gcc/rust/hir')
-rw-r--r--gcc/rust/hir/rust-ast-lower-implitem.h16
-rw-r--r--gcc/rust/hir/rust-ast-lower-stmt.h4
-rw-r--r--gcc/rust/hir/rust-ast-lower-type.h4
-rw-r--r--gcc/rust/hir/rust-ast-lower.cc18
-rw-r--r--gcc/rust/hir/tree/rust-hir-full-test.cc4
-rw-r--r--gcc/rust/hir/tree/rust-hir-item.h14
6 files changed, 17 insertions, 43 deletions
diff --git a/gcc/rust/hir/rust-ast-lower-implitem.h b/gcc/rust/hir/rust-ast-lower-implitem.h
index 3613df5..f68b3f0 100644
--- a/gcc/rust/hir/rust-ast-lower-implitem.h
+++ b/gcc/rust/hir/rust-ast-lower-implitem.h
@@ -118,8 +118,8 @@ public:
// ignore for now and leave empty
std::vector<std::unique_ptr<HIR::WhereClauseItem> > where_clause_items;
HIR::WhereClause where_clause (std::move (where_clause_items));
- HIR::FunctionQualifiers qualifiers (
- HIR::FunctionQualifiers::AsyncConstStatus::NONE, Unsafety::Normal);
+ HIR::FunctionQualifiers qualifiers
+ = lower_qualifiers (function.get_qualifiers ());
HIR::Visibility vis = HIR::Visibility::create_public ();
// need
@@ -202,8 +202,8 @@ public:
// ignore for now and leave empty
std::vector<std::unique_ptr<HIR::WhereClauseItem> > where_clause_items;
HIR::WhereClause where_clause (std::move (where_clause_items));
- HIR::FunctionQualifiers qualifiers (
- HIR::FunctionQualifiers::AsyncConstStatus::NONE, Unsafety::Normal);
+ HIR::FunctionQualifiers qualifiers
+ = lower_qualifiers (method.get_qualifiers ());
HIR::Visibility vis = HIR::Visibility::create_public ();
// need
@@ -314,8 +314,8 @@ public:
std::vector<std::unique_ptr<HIR::WhereClauseItem> > where_clause_items;
HIR::WhereClause where_clause (std::move (where_clause_items));
- HIR::FunctionQualifiers qualifiers (
- HIR::FunctionQualifiers::AsyncConstStatus::NONE, Unsafety::Normal);
+ HIR::FunctionQualifiers qualifiers
+ = lower_qualifiers (func.get_trait_function_decl ().get_qualifiers ());
std::vector<std::unique_ptr<HIR::GenericParam> > generic_params;
if (ref.has_generics ())
@@ -392,8 +392,8 @@ public:
std::vector<std::unique_ptr<HIR::WhereClauseItem> > where_clause_items;
HIR::WhereClause where_clause (std::move (where_clause_items));
- HIR::FunctionQualifiers qualifiers (
- HIR::FunctionQualifiers::AsyncConstStatus::NONE, Unsafety::Normal);
+ HIR::FunctionQualifiers qualifiers
+ = lower_qualifiers (method.get_trait_method_decl ().get_qualifiers ());
std::vector<std::unique_ptr<HIR::GenericParam> > generic_params;
if (ref.has_generics ())
diff --git a/gcc/rust/hir/rust-ast-lower-stmt.h b/gcc/rust/hir/rust-ast-lower-stmt.h
index 27fdd22..5ce573e 100644
--- a/gcc/rust/hir/rust-ast-lower-stmt.h
+++ b/gcc/rust/hir/rust-ast-lower-stmt.h
@@ -356,8 +356,8 @@ public:
// ignore for now and leave empty
std::vector<std::unique_ptr<HIR::WhereClauseItem>> where_clause_items;
HIR::WhereClause where_clause (std::move (where_clause_items));
- HIR::FunctionQualifiers qualifiers (
- HIR::FunctionQualifiers::AsyncConstStatus::NONE, Unsafety::Normal);
+ HIR::FunctionQualifiers qualifiers
+ = lower_qualifiers (function.get_qualifiers ());
HIR::Visibility vis = HIR::Visibility::create_public ();
// need
diff --git a/gcc/rust/hir/rust-ast-lower-type.h b/gcc/rust/hir/rust-ast-lower-type.h
index 858984c..4042908 100644
--- a/gcc/rust/hir/rust-ast-lower-type.h
+++ b/gcc/rust/hir/rust-ast-lower-type.h
@@ -135,8 +135,8 @@ public:
{
bool is_variadic = false;
std::vector<HIR::LifetimeParam> lifetime_params;
- HIR::FunctionQualifiers qualifiers (
- HIR::FunctionQualifiers::AsyncConstStatus::NONE, Unsafety::Normal);
+ HIR::FunctionQualifiers qualifiers
+ = lower_qualifiers (fntype.get_function_qualifiers ());
std::vector<HIR::MaybeNamedParam> named_params;
for (auto &param : fntype.get_function_params ())
diff --git a/gcc/rust/hir/rust-ast-lower.cc b/gcc/rust/hir/rust-ast-lower.cc
index d6f5cf2..87fc523 100644
--- a/gcc/rust/hir/rust-ast-lower.cc
+++ b/gcc/rust/hir/rust-ast-lower.cc
@@ -597,20 +597,6 @@ struct_field_name_exists (std::vector<HIR::StructField> &fields,
HIR::FunctionQualifiers
ASTLoweringBase::lower_qualifiers (const AST::FunctionQualifiers &qualifiers)
{
- HIR::FunctionQualifiers::AsyncConstStatus const_status;
- switch (qualifiers.get_const_status ())
- {
- case AST::FunctionQualifiers::AsyncConstStatus::NONE:
- const_status = HIR::FunctionQualifiers::AsyncConstStatus::NONE;
- break;
- case AST::FunctionQualifiers::AsyncConstStatus::CONST:
- const_status = HIR::FunctionQualifiers::AsyncConstStatus::CONST;
- break;
- case AST::FunctionQualifiers::AsyncConstStatus::ASYNC:
- const_status = HIR::FunctionQualifiers::AsyncConstStatus::ASYNC;
- break;
- }
-
Unsafety unsafety
= qualifiers.is_unsafe () ? Unsafety::Unsafe : Unsafety::Normal;
bool has_extern = qualifiers.is_extern ();
@@ -618,8 +604,8 @@ ASTLoweringBase::lower_qualifiers (const AST::FunctionQualifiers &qualifiers)
// FIXME turn this into the Rust::ABI enum
std::string extern_abi = qualifiers.get_extern_abi ();
- return HIR::FunctionQualifiers (const_status, unsafety, has_extern,
- extern_abi);
+ return HIR::FunctionQualifiers (qualifiers.get_const_status (), unsafety,
+ has_extern, extern_abi);
}
} // namespace HIR
diff --git a/gcc/rust/hir/tree/rust-hir-full-test.cc b/gcc/rust/hir/tree/rust-hir-full-test.cc
index adc8eea..50979d4 100644
--- a/gcc/rust/hir/tree/rust-hir-full-test.cc
+++ b/gcc/rust/hir/tree/rust-hir-full-test.cc
@@ -2040,10 +2040,10 @@ FunctionQualifiers::as_string () const
case NONE:
// do nothing
break;
- case CONST:
+ case CONST_FN:
str += "const ";
break;
- case ASYNC:
+ case ASYNC_FN:
str += "async ";
break;
default:
diff --git a/gcc/rust/hir/tree/rust-hir-item.h b/gcc/rust/hir/tree/rust-hir-item.h
index 09f9d38..cd8b960 100644
--- a/gcc/rust/hir/tree/rust-hir-item.h
+++ b/gcc/rust/hir/tree/rust-hir-item.h
@@ -477,16 +477,6 @@ public:
// Qualifiers for function, i.e. const, unsafe, extern etc.
struct FunctionQualifiers
{
-public:
- /* Whether the function is neither const nor async, const only, or async
- * only. */
- enum AsyncConstStatus
- {
- NONE,
- CONST,
- ASYNC
- };
-
private:
AsyncConstStatus const_status;
Unsafety unsafety;
@@ -494,8 +484,6 @@ private:
std::string extern_abi; // e.g. extern "C" fn() -> i32 {}
// TODO: maybe ensure that extern_abi only exists if extern exists?
- // should this store location info?
-
public:
FunctionQualifiers (AsyncConstStatus const_status, Unsafety unsafety,
bool has_extern = false,
@@ -514,7 +502,7 @@ public:
AsyncConstStatus get_status () const { return const_status; }
- bool is_const () const { return const_status == AsyncConstStatus::CONST; }
+ bool is_const () const { return const_status == AsyncConstStatus::CONST_FN; }
};
// A function parameter