aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/expand
diff options
context:
space:
mode:
authorbadumbatish <tanghocle456@gmail.com>2024-07-23 22:17:12 -0700
committerArthur Cohen <arthur.cohen@embecosm.com>2025-03-19 15:32:05 +0100
commit9996b8ef849cb5626e14d0747dd45f10541807d0 (patch)
tree80ce69abc44196ebf963fad9cc5fd68c4a10c692 /gcc/rust/expand
parentb78b238e7aebd6d551f4b3a0684f341db0075610 (diff)
downloadgcc-9996b8ef849cb5626e14d0747dd45f10541807d0.zip
gcc-9996b8ef849cb5626e14d0747dd45f10541807d0.tar.gz
gcc-9996b8ef849cb5626e14d0747dd45f10541807d0.tar.bz2
gccrs: Fix the parser's operand and flags storage
gcc/rust/ChangeLog: * expand/rust-macro-builtins-asm.cc (parse_reg_operand): Fix parsing logic & reassignment logic (parse_reg_operand_in): Fix parsing (parse_reg_operand_out): Fix parsing (parse_reg_operand_inout): Fix parsing (parse_reg_operand_unexpected): Remove rust_unreachable() (parse_asm_arg): Fix parsing logic
Diffstat (limited to 'gcc/rust/expand')
-rw-r--r--gcc/rust/expand/rust-macro-builtins-asm.cc21
1 files changed, 15 insertions, 6 deletions
diff --git a/gcc/rust/expand/rust-macro-builtins-asm.cc b/gcc/rust/expand/rust-macro-builtins-asm.cc
index 7f0498f..492bcfe 100644
--- a/gcc/rust/expand/rust-macro-builtins-asm.cc
+++ b/gcc/rust/expand/rust-macro-builtins-asm.cc
@@ -226,10 +226,12 @@ parse_reg_operand (InlineAsmContext inline_asm_ctx)
// Loop over and execute the parsing functions, if the parser successfullly
// parses or if the parser fails to parse while it has committed to a token,
// we propogate the result.
+ int count = 0;
tl::expected<InlineAsmContext, InlineAsmParseError> parsing_operand (
inline_asm_ctx);
for (auto &parse_func : parse_funcs)
{
+ count++;
auto result = parsing_operand.and_then (parse_func);
// Per rust's asm.rs's structure
@@ -238,8 +240,7 @@ parse_reg_operand (InlineAsmContext inline_asm_ctx)
if (result.has_value ())
{
- //
- inline_asm_ctx = *result;
+ inline_asm_ctx = result.value ();
break;
}
else if (result.error () == COMMITTED)
@@ -687,7 +688,9 @@ parse_asm_arg (InlineAsmContext inline_asm_ctx)
{
auto expected = parse_clobber_abi (inline_asm_ctx);
if (expected.has_value ())
- continue;
+ {
+ continue;
+ }
else if (expected.error () == COMMITTED)
return expected;
@@ -699,7 +702,9 @@ parse_asm_arg (InlineAsmContext inline_asm_ctx)
{
auto expected = parse_options (inline_asm_ctx);
if (expected.has_value ())
- continue;
+ {
+ continue;
+ }
else if (expected.error () == COMMITTED)
return expected;
@@ -712,9 +717,13 @@ parse_asm_arg (InlineAsmContext inline_asm_ctx)
auto expected = parse_reg_operand (inline_asm_ctx);
if (expected.has_value ())
- continue;
+ {
+ continue;
+ }
else if (expected.error () == COMMITTED)
- return expected;
+ {
+ return expected;
+ }
// Since parse_reg_operand is the last thing we've considered,
// The non-committed parse error type means that we have exhausted our