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 d6cc317d7060..43e41201a852 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 (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 (inline_asm_ctx); + return inline_asm_ctx; } // bool