[gcc r14-8073] gccrs: Parse const with no value expression
Arthur Cohen
cohenarthur@gcc.gnu.org
Tue Jan 16 18:16:19 GMT 2024
https://gcc.gnu.org/g:91732258cedf367ac0f4dbe75aef7d0e22d46b3a
commit r14-8073-g91732258cedf367ac0f4dbe75aef7d0e22d46b3a
Author: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Date: Mon Oct 23 17:06:43 2023 +0200
gccrs: Parse const with no value expression
Const with no value expression may exist either in trait or in disabled
blocks. This means we should be able to parse those correctly.
gcc/rust/ChangeLog:
* ast/rust-item.h: Add a new constructor for const with no value
expression.
* parse/rust-parse-impl.h (Parser::parse_const_item): Allow const with
no expression value.
Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Diff:
---
gcc/rust/ast/rust-item.h | 7 +++++++
gcc/rust/parse/rust-parse-impl.h | 10 ++++++++++
2 files changed, 17 insertions(+)
diff --git a/gcc/rust/ast/rust-item.h b/gcc/rust/ast/rust-item.h
index b91e18dc035..eba86dca2fa 100644
--- a/gcc/rust/ast/rust-item.h
+++ b/gcc/rust/ast/rust-item.h
@@ -2604,6 +2604,13 @@ public:
const_expr (std::move (const_expr)), locus (locus)
{}
+ ConstantItem (std::string ident, Visibility vis, std::unique_ptr<Type> type,
+ std::vector<Attribute> outer_attrs, location_t locus)
+ : VisItem (std::move (vis), std::move (outer_attrs)),
+ identifier (std::move (ident)), type (std::move (type)),
+ const_expr (nullptr), locus (locus)
+ {}
+
ConstantItem (ConstantItem const &other)
: VisItem (other), identifier (other.identifier), locus (other.locus)
{
diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h
index 7844f7214ad..4738393fd42 100644
--- a/gcc/rust/parse/rust-parse-impl.h
+++ b/gcc/rust/parse/rust-parse-impl.h
@@ -4783,6 +4783,16 @@ Parser<ManagedTokenSource>::parse_const_item (AST::Visibility vis,
// parse constant type (required)
std::unique_ptr<AST::Type> type = parse_type ();
+ // A const with no given expression value
+ if (lexer.peek_token ()->get_id () == SEMICOLON)
+ {
+ lexer.skip_token ();
+ return std::unique_ptr<AST::ConstantItem> (
+ new AST::ConstantItem (std::move (ident), std::move (vis),
+ std::move (type), std::move (outer_attrs),
+ locus));
+ }
+
if (!skip_token (EQUAL))
{
skip_after_semicolon ();
More information about the Gcc-cvs
mailing list