Allow builtin macros to be used more than once.

This removes E0773 "A builtin-macro was defined more than once."
This commit is contained in:
Mara Bos 2025-03-17 16:50:55 +01:00
parent 1370611c0a
commit 6c865c1e14
13 changed files with 40 additions and 149 deletions

View file

@ -1,40 +1,4 @@
A builtin-macro was defined more than once.
#### this error code is no longer emitted by the compiler.
Erroneous code example:
```compile_fail,E0773
#![feature(decl_macro)]
#![feature(rustc_attrs)]
#![allow(internal_features)]
#[rustc_builtin_macro]
pub macro test($item:item) {
/* compiler built-in */
}
mod inner {
#[rustc_builtin_macro]
pub macro test($item:item) {
/* compiler built-in */
}
}
```
To fix the issue, remove the duplicate declaration:
```
#![feature(decl_macro)]
#![feature(rustc_attrs)]
#![allow(internal_features)]
#[rustc_builtin_macro]
pub macro test($item:item) {
/* compiler built-in */
}
```
In very rare edge cases, this may happen when loading `core` or `std` twice,
once with `check` metadata and once with `build` metadata.
For more information, see [#75176].
[#75176]: https://github.com/rust-lang/rust/pull/75176#issuecomment-683234468
This was triggered when multiple macro definitions used the same
`#[rustc_builtin_macro(..)]`. This is no longer an error.