https://gcc.gnu.org/g:2f80f40a25fc5dc115680f044710403eb32bc656

commit r15-8220-g2f80f40a25fc5dc115680f044710403eb32bc656
Author: badumbatish <tanghocle...@gmail.com>
Date:   Sat Jun 29 17:12:33 2024 -0700

    gccrs: Store parse result of parse_format_string(s)
    
    gcc/rust/ChangeLog:
    
            * ast/rust-expr.h (struct TupleTemplateStr):
            Store parse result of parse_format_string(s)
            * expand/rust-macro-builtins-asm.cc (parse_format_strings):
            Likewise
    
    Signed-off-by: badumbatish <tanghocle...@gmail.com>

Diff:
---
 gcc/rust/ast/rust-expr.h                   |  7 +++++--
 gcc/rust/expand/rust-macro-builtins-asm.cc | 17 ++++++++++++++++-
 2 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/gcc/rust/ast/rust-expr.h b/gcc/rust/ast/rust-expr.h
index 9787e9ae123a..f3ebf0bbdde0 100644
--- a/gcc/rust/ast/rust-expr.h
+++ b/gcc/rust/ast/rust-expr.h
@@ -5057,9 +5057,12 @@ struct TupleClobber
 struct TupleTemplateStr
 {
   // as gccrs still doesn't contain a symbol class I have put them as strings
-  std::string symbol;
-  std::string optional_symbol;
   location_t loc;
+  std::string symbol;
+
+  TupleTemplateStr (location_t loc, const std::string &symbol)
+    : loc (loc), symbol (symbol)
+  {}
 };
 
 // Inline Assembly Node
diff --git a/gcc/rust/expand/rust-macro-builtins-asm.cc 
b/gcc/rust/expand/rust-macro-builtins-asm.cc
index 87c90a290ac1..94927fd0849d 100644
--- a/gcc/rust/expand/rust-macro-builtins-asm.cc
+++ b/gcc/rust/expand/rust-macro-builtins-asm.cc
@@ -784,12 +784,20 @@ parse_format_strings (InlineAsmContext inline_asm_ctx)
   auto last_token_id = inline_asm_ctx.last_token_id;
   auto fm_string = parse_format_string (inline_asm_ctx);
 
+  auto &inline_asm = inline_asm_ctx.inline_asm;
+  auto token = parser.peek_current_token ();
   if (fm_string == tl::nullopt)
     {
       rust_error_at (parser.peek_current_token ()->get_locus (),
                     "%s template must be a string literal", "asm");
       return tl::unexpected<InlineAsmParseError> (COMMITTED);
     }
+  else
+    {
+      auto template_str
+       = AST::TupleTemplateStr (token->get_locus (), fm_string.value ());
+      inline_asm.template_strs.push_back (template_str);
+    }
 
   // formatted string stream
 
@@ -803,15 +811,22 @@ parse_format_strings (InlineAsmContext inline_asm_ctx)
       // in here, which is formatted string in ABNF
       inline_asm_ctx.consumed_comma_without_formatted_string = false;
 
+      token = parser.peek_current_token ();
       fm_string = parse_format_string (inline_asm_ctx);
       if (fm_string == tl::nullopt)
        {
          inline_asm_ctx.consumed_comma_without_formatted_string = true;
          break;
        }
+      else
+       {
+         auto template_str
+           = AST::TupleTemplateStr (token->get_locus (), fm_string.value ());
+         inline_asm.template_strs.push_back (template_str);
+       }
     }
 
-  return tl::expected<InlineAsmContext, InlineAsmParseError> (inline_asm_ctx);
+  return inline_asm_ctx;
 }
 
 // bool

Reply via email to