Skip to content

Commit

Permalink
inline-asm: Fix some warnings
Browse files Browse the repository at this point in the history
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!.
  • Loading branch information
CohenArthur committed Feb 4, 2025
1 parent d3c9821 commit d096c74
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 7 deletions.
17 changes: 10 additions & 7 deletions gcc/rust/expand/rust-macro-builtins-asm.cc
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,18 @@ 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;

// 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);
Expand Down Expand Up @@ -240,12 +245,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
Expand Down Expand Up @@ -323,14 +326,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;
}
Expand All @@ -354,7 +357,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);

Expand Down
4 changes: 4 additions & 0 deletions gcc/rust/expand/rust-macro-builtins.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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},
Expand Down Expand Up @@ -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 */
Expand Down

0 comments on commit d096c74

Please sign in to comment.