]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Add error message when derive macro is invoked
authorOwen Avery <powerboat9.gamer@gmail.com>
Mon, 5 Jun 2023 14:41:43 +0000 (10:41 -0400)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 16 Jan 2024 17:46:25 +0000 (18:46 +0100)
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 <powerboat9.gamer@gmail.com>
gcc/rust/expand/rust-macro-builtins.cc
gcc/rust/expand/rust-macro-builtins.h
gcc/testsuite/rust/compile/derive_macro8.rs [new file with mode: 0644]

index 33b813c45940ed38efcf1e9832fbff7b3363f9fd..363819b35c57244c2bfc7985ffbc54eb00d61910 100644 (file)
@@ -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 ();
 }
 
index 3ad10a33920e18f6adc6d952f91c99332482018e..87b6a1ed9da2537b98936489134406e6cdfc9a9f 100644 (file)
@@ -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 (file)
index 0000000..ba7e710
--- /dev/null
@@ -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" }
+}