]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: inline-asm: Fix some warnings
authorArthur Cohen <arthur.cohen@embecosm.com>
Wed, 29 Jan 2025 14:41:19 +0000 (14:41 +0000)
committerArthur Cohen <arthur.cohen@embecosm.com>
Mon, 24 Mar 2025 12:07:03 +0000 (13:07 +0100)
gcc/rust/ChangeLog:

* expand/rust-macro-builtins-asm.cc (strip_double_quotes): Special case empty
strings ("\"\"").
(parse_reg_operand): Remove use of the `struct` keyword.
(parse_reg_operand_in): Likewise.
(parse_reg_operand_out): Likewise.
* expand/rust-macro-builtins.cc: Add llvm_asm! built-in macro as an alias to asm!.

gcc/rust/expand/rust-macro-builtins-asm.cc
gcc/rust/expand/rust-macro-builtins.cc

index 78e308a6654e2f74bedd28087d544e74aeb1a33c..4d0260447761e2037f9deeba8cea45557858fecb 100644 (file)
@@ -39,16 +39,28 @@ std::map<AST::InlineAsmOption, std::string> InlineAsmOptionMap{
 std::set<std::string> potentially_nonpromoted_keywords
   = {"in", "out", "lateout", "inout", "inlateout", "const", "sym", "label"};
 
+// Helper function strips the beginning and ending double quotes from a
+// string.
 std::string
 strip_double_quotes (const std::string &str)
 {
-  // Helper function strips the beginning and ending double quotes from a
-  // string.
   std::string result = str;
 
+  rust_assert (!str.empty ());
+
+  rust_assert (str.front () == '\"');
+  rust_assert (str.back () == '\"');
+
+  // we have to special case empty strings which just contain a set of quotes
+  // so, if the string is "\"\"", just return ""
+  if (result.size () == 2)
+    return "";
+
   rust_assert (result.size () >= 3);
+
   result.erase (0, 1);
   result.erase (result.size () - 1, 1);
+
   return result;
 }
 
@@ -240,12 +252,10 @@ 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
@@ -323,14 +333,14 @@ parse_reg_operand_in (InlineAsmContext inline_asm_ctx)
          // We are sure to be failing a test here, based on asm.rs
          // https://github.com/rust-lang/rust/blob/a330e49593ee890f9197727a3a558b6e6b37f843/compiler/rustc_builtin_macros/src/asm.rs#L112
          rust_unreachable ();
-         return tl::unexpected<InlineAsmParseError> (COMMITTED);
+         // return tl::unexpected<InlineAsmParseError> (COMMITTED);
        }
 
       auto expr = parser.parse_expr ();
 
       // TODO: When we've succesfully parse an expr, remember to clone_expr()
       // instead of nullptr
-      struct AST::InlineAsmOperand::In in (reg, std::move (expr));
+      AST::InlineAsmOperand::In in (reg, std::move (expr));
       inline_asm_ctx.inline_asm.operands.emplace_back (in, locus);
       return inline_asm_ctx;
     }
@@ -354,7 +364,7 @@ parse_reg_operand_out (InlineAsmContext inline_asm_ctx)
 
       // TODO: When we've succesfully parse an expr, remember to clone_expr()
       // instead of nullptr
-      struct AST::InlineAsmOperand::Out out (reg, false, std::move (expr));
+      AST::InlineAsmOperand::Out out (reg, false, std::move (expr));
 
       inline_asm_ctx.inline_asm.operands.emplace_back (out, locus);
 
index 804cfed521a127027aa804ea22ffaed3c61aeee1..39c4c46b8e0d8caa79710bf18fd12181f6bae106 100644 (file)
@@ -62,6 +62,8 @@ const BiMap<std::string, BuiltinMacro> MacroBuiltin::builtins = {{
   {"concat_idents", BuiltinMacro::ConcatIdents},
   {"module_path", BuiltinMacro::ModulePath},
   {"asm", BuiltinMacro::Asm},
+  // FIXME: Is that okay
+  {"llvm_asm", BuiltinMacro::Asm},
   {"global_asm", BuiltinMacro::GlobalAsm},
   {"log_syntax", BuiltinMacro::LogSyntax},
   {"trace_macros", BuiltinMacro::TraceMacros},
@@ -119,6 +121,8 @@ std::unordered_map<std::string, AST::MacroTranscriberFunc>
     {"format_args", format_args_maker (AST::FormatArgs::Newline::No)},
     {"format_args_nl", format_args_maker (AST::FormatArgs::Newline::Yes)},
     {"asm", inline_asm_maker (AST::AsmKind::Inline)},
+    // FIXME: Is that okay?
+    {"llvm_asm", inline_asm_maker (AST::AsmKind::Inline)},
     {"global_asm", inline_asm_maker (AST::AsmKind::Global)},
     {"option_env", MacroBuiltin::option_env_handler},
     /* Unimplemented macro builtins */