aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/hir
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2022-01-21 22:24:23 +0000
committerGitHub <noreply@github.com>2022-01-21 22:24:23 +0000
commit6c9e57efa5474cfe5d0440e1022ee3c4a8400199 (patch)
tree9336a5c60138f53b3d83c4e8064ab4f5897d7c13 /gcc/rust/hir
parent8c96ccceb27e96246ff474800c3d7350445bd6e9 (diff)
parente77f051369efce4207c965ab2b69c5d9867c5846 (diff)
downloadgcc-6c9e57efa5474cfe5d0440e1022ee3c4a8400199.zip
gcc-6c9e57efa5474cfe5d0440e1022ee3c4a8400199.tar.gz
gcc-6c9e57efa5474cfe5d0440e1022ee3c4a8400199.tar.bz2
Merge #883
883: Extract AsyncConstStatus to be a shared enum between AST and HIR r=philberty a=philberty 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 Co-authored-by: Philip Herron <philip.herron@embecosm.com>
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 4391f39..5bfae46 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 3afea36..47c0452 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