From: badumbatish Date: Wed, 24 Jul 2024 05:17:12 +0000 (-0700) Subject: gccrs: Fix the parser's operand and flags storage X-Git-Tag: basepoints/gcc-16~1218 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9996b8ef849cb5626e14d0747dd45f10541807d0;p=thirdparty%2Fgcc.git 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 --- 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 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