Closed
Description
Code
I tried cargo test
-ing this proc macro crate:
/// ```rust
/// pub extern crate proc_macro_crate;
///
/// #[macro_export]
/// macro_rules! foo {
/// ($($path:ident)::*) => (
/// $crate::proc_macro_crate::identity!{
/// $($path)::*
/// }
/// )
/// }
///
/// #[macro_export]
/// macro_rules! baz {
/// () => (
/// $crate::foo!($crate::BAR)
/// )
/// }
///
/// pub const BAR: u32 = 19;
///
/// fn main(){
/// println!("{}", crate::baz!());
/// }
///
/// ```
#[proc_macro]
pub fn identity(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
input.into_iter().collect()
}
I expected to see this happen: The test completes successfully
Instead, this happened:
The test fails compilation with this error:
error: proc macro panicked
--> src/lib.rs:7:9
|
7 | / $crate::proc_macro_crate::identity!{
8 | | $($path)::*
9 | | }
| |_________^
...
23 | println!("{}", crate::baz!());
| ------------- in this macro invocation
|
= help: message: `"$crate"` is not a valid identifier
= note: this error originates in the macro `$crate::foo` (in Nightly builds, run with -Z macro-backtrace for more info)
Version it worked on
It most recently worked on:
rustc 1.60.0 (7737e0b5c 2022-04-04)
binary: rustc
commit-hash: 7737e0b5c4103216d6fd8cf941b7ab9bdbaace7c
commit-date: 2022-04-04
host: x86_64-unknown-linux-gnu
release: 1.60.0
LLVM version: 14.0.0
Version with regression
rustc --version --verbose
:
rustc 1.61.0 (fe5b13d68 2022-05-18)
binary: rustc
commit-hash: fe5b13d681f25ee6474be29d748c65adcd91f69e
commit-date: 2022-05-18
host: x86_64-unknown-linux-gnu
release: 1.61.0
LLVM version: 14.0.0
This also fails in 1.62 and 1.63.
Meta
This appears to be fixed in the beta channel, but I could not find a mention of this bug or a related one.
It's entirely possible that the bug will trigger again in future versions if this code isn't used in tests.
Metadata
Metadata
Assignees
Labels
Area: All kinds of macros (custom derive, macro_rules!, proc macros, ..)Area: Procedural macrosCategory: This is a bug.Call for participation: Easy difficulty. Experience needed to fix: Not much. Good first issue.Call for participation: An issue has been fixed and does not reproduce, but no test has been added.Performance or correctness regression from one stable version to another.