https://gcc.gnu.org/g:716dadc80001a1d2c896f98f2713573a1616ea34
commit 716dadc80001a1d2c896f98f2713573a1616ea34 Author: badumbatish <tanghocle...@gmail.com> Date: Tue Jul 23 22:17:12 2024 -0700 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 Diff: --- gcc/rust/expand/rust-macro-builtins-asm.cc | 21 +++++++++++++++------ 1 file 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 d809eaaf4b41..79b7c8e0e33c 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