Closed
Description
Declarative macro with '#[derive(Serialize)]' inside generates compilation error. The same old-style macro works ok.
I tried this code:
`#![feature(decl_macro)]
extern crate serde;
#[macro_use] extern crate serde_derive;
macro_rules! old_macro {
($name:ident) => {
#[derive(Serialize)]
struct $name {
name: &'static str
}
}
}
macro new_macro($name:ident) {
#[derive(Serialize)]
struct $name {
name: &'static str
}
}
old_macro!(Name1);
new_macro!(Name2);
fn main() {
}
'old_macro' and 'new_marcro' are equal so I expect that both should be compiled. Instead compiler failed on 'new_macro' (but compiled 'old_macro' successfully):
error[E0609]: no field `name` on type `&Name2`
--> src\main.rs:15:14
|
15 | #[derive(Serialize)]
| ^^^^^^^^^
...
22 | new_macro!(Name2);
| ------------------ in this macro invocation
Meta
C:\Temp\bug>rustc --version
rustc 1.19.0-nightly (554c685b0 2017-06-14)
C:\Temp\bug>cargo rustc --verbose
Fresh serde v1.0.8
Fresh unicode-xid v0.0.4
Fresh quote v0.3.15
Fresh synom v0.11.3
Fresh syn v0.11.11
Fresh serde_derive_internals v0.15.1
Fresh serde_derive v1.0.8
Compiling bug v0.1.0 (file:///C:/Temp/bug)
Running `rustc --crate-name bug src\main.rs --crate-type bin --emit=dep-info,link -C debuginfo=2 -C metadata=1ffe308d662129d2 -C extra-filename=-1ffe308d66
2129d2 --out-dir C:\Temp\bug\target\debug\deps -L dependency=C:\Temp\bug\target\debug\deps --extern serde_derive=C:\Temp\bug\target\debug\deps\serde_derive-7311
4808ba8f6d5d.dll --extern serde=C:\Temp\bug\target\debug\deps\libserde-78efb8229e554e58.rlib`
error[E0609]: no field `name` on type `&Name2`
--> src\main.rs:15:14
|
15 | #[derive(Serialize)]
| ^^^^^^^^^
...
22 | new_macro!(Name2);
| ------------------ in this macro invocation
error: aborting due to previous error(s)
error: Could not compile `bug`.
Caused by:
process didn't exit successfully: `rustc --crate-name bug src\main.rs --crate-type bin --emit=dep-info,link -C debuginfo=2 -C metadata=1ffe308d662129d2 -C ext
ra-filename=-1ffe308d662129d2 --out-dir C:\Temp\bug\target\debug\deps -L dependency=C:\Temp\bug\target\debug\deps --extern serde_derive=C:\Temp\bug\target\debug
\deps\serde_derive-73114808ba8f6d5d.dll --extern serde=C:\Temp\bug\target\debug\deps\libserde-78efb8229e554e58.rlib` (exit code: 101)