From: Owen Avery Date: Mon, 5 Jun 2023 14:41:43 +0000 (-0400) Subject: gccrs: Add error message when derive macro is invoked X-Git-Tag: basepoints/gcc-15~2492 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e50a99a1aa386427050662a52bbedee18d895fc9;p=thirdparty%2Fgcc.git gccrs: Add error message when derive macro is invoked gcc/rust/ChangeLog: * expand/rust-macro-builtins.cc: Fix comments. (MacroBuiltin::proc_macro_builtin): Add error message. * expand/rust-macro-builtins.h: Fix comments. gcc/testsuite/ChangeLog: * rust/compile/derive_macro8.rs: New test. Signed-off-by: Owen Avery --- diff --git a/gcc/rust/expand/rust-macro-builtins.cc b/gcc/rust/expand/rust-macro-builtins.cc index 33b813c45940..363819b35c57 100644 --- a/gcc/rust/expand/rust-macro-builtins.cc +++ b/gcc/rust/expand/rust-macro-builtins.cc @@ -106,7 +106,7 @@ std::unordered_map< {"global_allocator", MacroBuiltin::sorry}, {"cfg_accessible", MacroBuiltin::sorry}, /* Derive builtins do not need a real transcriber, but still need one. It - will however never be called since builtin derive macros get expanded + should however never be called since builtin derive macros get expanded differently, and benefit from knowing on what kind of items they are applied (struct, enums, unions) rather than receiving a list of tokens like regular builtin macros */ @@ -949,9 +949,12 @@ MacroBuiltin::sorry (Location invoc_locus, AST::MacroInvocData &invoc) } AST::Fragment -MacroBuiltin::proc_macro_builtin (Location, AST::MacroInvocData &) +MacroBuiltin::proc_macro_builtin (Location invoc_locus, + AST::MacroInvocData &invoc) { - // nothing to do! + rust_error_at (invoc_locus, "cannot invoke derive macro: %qs", + invoc.get_path ().as_string ().c_str ()); + return AST::Fragment::create_error (); } diff --git a/gcc/rust/expand/rust-macro-builtins.h b/gcc/rust/expand/rust-macro-builtins.h index 3ad10a33920e..87b6a1ed9da2 100644 --- a/gcc/rust/expand/rust-macro-builtins.h +++ b/gcc/rust/expand/rust-macro-builtins.h @@ -160,8 +160,8 @@ public: static AST::Fragment sorry (Location invoc_locus, AST::MacroInvocData &invoc); - /* Builtin procedural macros do not work directly on tokens, but still need an - * empty builtin transcriber to be considered proper builtin macros */ + /* Builtin procedural macros do not work directly on tokens, but still need a + * builtin transcriber to be considered proper builtin macros */ static AST::Fragment proc_macro_builtin (Location, AST::MacroInvocData &); }; } // namespace Rust diff --git a/gcc/testsuite/rust/compile/derive_macro8.rs b/gcc/testsuite/rust/compile/derive_macro8.rs new file mode 100644 index 000000000000..ba7e71036314 --- /dev/null +++ b/gcc/testsuite/rust/compile/derive_macro8.rs @@ -0,0 +1,9 @@ +#![feature(rustc_attrs)] +#![feature(decl_macro)] + +#[rustc_builtin_macro] +pub macro Copy($i:item) { /* builtin */ } + +pub fn foo() { + Copy!(); // { dg-error "cannot invoke derive macro" } +}