[COMMITTED 038/144] gccrs: Fix the parser's operand and flags storage

arthur.cohen@embecosm.com arthur.cohen@embecosm.com
Wed Mar 19 14:43:19 GMT 2025


From: badumbatish <tanghocle456@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



More information about the Gcc-rust mailing list