From: badumbatish <tanghocle...@gmail.com> 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 --- 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 7f0498fdef4..492bcfe3172 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 -- 2.45.2