]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Refactor inline assembly constructor
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Mon, 11 Aug 2025 13:58:53 +0000 (15:58 +0200)
committerArthur Cohen <arthur.cohen@embecosm.com>
Thu, 30 Oct 2025 19:58:37 +0000 (20:58 +0100)
gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (parse_asm): Simplify expression.
(parse_llvm_asm): Likewise.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
gcc/rust/expand/rust-macro-builtins-asm.cc

index f9d2947163d1669a922d7c8215df75b1805f4127..4080a22cfae0c59373f3243707a43aea55c8a1a9 100644 (file)
@@ -880,7 +880,8 @@ parse_asm (location_t invoc_locus, AST::MacroInvocData &invoc,
   // context.
   if (resulting_context)
     {
-      auto node = (*resulting_context).inline_asm.clone_expr_without_block ();
+      auto resulting_ctx = resulting_context.value ();
+      auto node = resulting_ctx.inline_asm.clone_expr_without_block ();
 
       std::vector<AST::SingleASTNode> single_vec = {};
 
@@ -1177,12 +1178,13 @@ parse_llvm_asm (location_t invoc_locus, AST::MacroInvocData &invoc,
 
   auto asm_ctx = LlvmAsmContext (llvm_asm, parser, last_token_id);
 
-  auto resulting_context
+  tl::optional<LlvmAsmContext> resulting_context
     = parse_llvm_templates (asm_ctx).and_then (parse_llvm_arguments);
 
   if (resulting_context)
     {
-      auto node = (*resulting_context).llvm_asm.clone_expr_without_block ();
+      auto resulting_ctx = resulting_context.value ();
+      auto node = resulting_ctx.llvm_asm.clone_expr_without_block ();
 
       std::vector<AST::SingleASTNode> single_vec = {};
 
@@ -1190,12 +1192,13 @@ parse_llvm_asm (location_t invoc_locus, AST::MacroInvocData &invoc,
       // need to make it a statement. This way, it will be expanded
       // properly.
       if (semicolon == AST::InvocKind::Semicoloned)
-       single_vec.emplace_back (AST::SingleASTNode (
-         std::make_unique<AST::ExprStmt> (std::move (node), invoc_locus,
-                                          semicolon
-                                            == AST::InvocKind::Semicoloned)));
+       {
+         single_vec.emplace_back (
+           std::make_unique<AST::ExprStmt> (std::move (node), invoc_locus,
+                                            true /* has semicolon */));
+       }
       else
-       single_vec.emplace_back (AST::SingleASTNode (std::move (node)));
+       single_vec.emplace_back (std::move (node));
 
       AST::Fragment fragment_ast
        = AST::Fragment (single_vec,