aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/expand/rust-macro-builtins.cc
diff options
context:
space:
mode:
authorArthur Cohen <arthur.cohen@embecosm.com>2024-06-14 16:45:34 +0200
committerCohenArthur <arthur.cohen@embecosm.com>2024-06-18 12:24:32 +0000
commitfb906a41a4e911f7f0d7b506347286c7d942995e (patch)
treeaab1c7992a4e3845b774a246ae070e8824bf82a6 /gcc/rust/expand/rust-macro-builtins.cc
parent89c056bf3738ecbe41ef9545697937c3f4fbbd87 (diff)
downloadgcc-fb906a41a4e911f7f0d7b506347286c7d942995e.zip
gcc-fb906a41a4e911f7f0d7b506347286c7d942995e.tar.gz
gcc-fb906a41a4e911f7f0d7b506347286c7d942995e.tar.bz2
expand: Keep track of semicoloned builtin macros
This is quite a rough fix (like a lot of the macro expansion code...) but it allows built-in macros to be treated as statements. I *think* asm!() might be the only one where it really matters, but also doing something like { line!(); } will now work, whereas before the macro invocation would not get expanded properly and would be ignored. gcc/rust/ChangeLog: * ast/rust-ast-fragment.h: Pass `is_semicolon` information to builtin macro transcribers. * ast/rust-macro.h: Pass semicolon information to transcriber.. * expand/rust-macro-builtins-asm.cc (MacroBuiltin::asm_handler): Likewise. (parse_asm): Likewise. * expand/rust-macro-builtins-asm.h (parse_asm): Likewise. * expand/rust-macro-builtins-format-args.cc (MacroBuiltin::format_args_handler): Likewise. * expand/rust-macro-builtins-include.cc (MacroBuiltin::include_bytes_handler): Likewise. (MacroBuiltin::include_str_handler): Likewise. (MacroBuiltin::include_handler): Likewise. * expand/rust-macro-builtins-location.cc (MacroBuiltin::file_handler): Likewise. (MacroBuiltin::column_handler): Likewise. (MacroBuiltin::line_handler): Likewise. * expand/rust-macro-builtins-log-debug.cc (MacroBuiltin::assert_handler): Likewise. * expand/rust-macro-builtins-utility.cc (MacroBuiltin::compile_error_handler): Likewise. (MacroBuiltin::concat_handler): Likewise. (MacroBuiltin::env_handler): Likewise. (MacroBuiltin::cfg_handler): Likewise. (MacroBuiltin::stringify_handler): Likewise. * expand/rust-macro-builtins.cc (format_args_maker): Likewise. (inline_asm_maker): Likewise. (MacroBuiltin::sorry): Likewise. (MacroBuiltin::proc_macro_builtin): Likewise. * expand/rust-macro-builtins.h: Likewise. * expand/rust-macro-expand.cc (MacroExpander::expand_decl_macro): Likewise. (MacroExpander::expand_invoc): Likewise. * ast/rust-ast-visitor.cc (DefaultASTVisitor::visit): Remove rust_unreachable. * ast/rust-ast.cc (InlineAsm::accept_vis): Likewise. * hir/tree/rust-hir.cc (InlineAsm::accept_vis): Likewise.
Diffstat (limited to 'gcc/rust/expand/rust-macro-builtins.cc')
-rw-r--r--gcc/rust/expand/rust-macro-builtins.cc16
1 files changed, 9 insertions, 7 deletions
diff --git a/gcc/rust/expand/rust-macro-builtins.cc b/gcc/rust/expand/rust-macro-builtins.cc
index a6a3370..567f4db 100644
--- a/gcc/rust/expand/rust-macro-builtins.cc
+++ b/gcc/rust/expand/rust-macro-builtins.cc
@@ -87,8 +87,8 @@ const BiMap<std::string, BuiltinMacro> MacroBuiltin::builtins = {{
AST::MacroTranscriberFunc
format_args_maker (AST::FormatArgs::Newline nl)
{
- return [nl] (location_t loc, AST::MacroInvocData &invoc) {
- return MacroBuiltin::format_args_handler (loc, invoc, nl);
+ return [nl] (location_t loc, AST::MacroInvocData &invoc, bool semicolon) {
+ return MacroBuiltin::format_args_handler (loc, invoc, semicolon, nl);
};
}
@@ -103,9 +103,10 @@ inline_asm_maker (isGlobalAsm is_global_asm)
{
bool global_asm = is_global_asm == isGlobalAsm::Global ? true : false;
- return [global_asm] (location_t loc, AST::MacroInvocData &invoc) {
- return MacroBuiltin::asm_handler (loc, invoc, global_asm);
- };
+ return
+ [global_asm] (location_t loc, AST::MacroInvocData &invoc, bool semicolon) {
+ return MacroBuiltin::asm_handler (loc, invoc, semicolon, global_asm);
+ };
}
std::unordered_map<std::string, AST::MacroTranscriberFunc>
@@ -167,7 +168,8 @@ builtin_macro_from_string (const std::string &identifier)
}
tl::optional<AST::Fragment>
-MacroBuiltin::sorry (location_t invoc_locus, AST::MacroInvocData &invoc)
+MacroBuiltin::sorry (location_t invoc_locus, AST::MacroInvocData &invoc,
+ bool semicolon)
{
rust_sorry_at (invoc_locus, "unimplemented builtin macro: %qs",
invoc.get_path ().as_string ().c_str ());
@@ -177,7 +179,7 @@ MacroBuiltin::sorry (location_t invoc_locus, AST::MacroInvocData &invoc)
tl::optional<AST::Fragment>
MacroBuiltin::proc_macro_builtin (location_t invoc_locus,
- AST::MacroInvocData &invoc)
+ AST::MacroInvocData &invoc, bool semicolon)
{
rust_error_at (invoc_locus, "cannot invoke derive macro: %qs",
invoc.get_path ().as_string ().c_str ());