decl_macro incremental compilation bug: missing field · Issue #112680 · rust-lang/rust (original) (raw)

Note: This may be a duplicate, but I couldn't find one, so I'm going ahead and reporting it.

When using decl_macro, I'm encountering a strange incremental compilation bug. I have a struct, declared as follows:

use a::entity_impl; entity_impl!(TestId, Test); // entity_impl! is the decl_macro

struct Test(u32); // now uncomment the following, and comment the above // struct Test;

To reproduce this, do the following:

  1. Run cargo clean, then cargo check.
  2. Comment line 3, and uncomment line 5.
  3. Run cargo check again. The error below is emitted.
  4. If cargo clean && cargo check is run again with either version, it compiles fine.

I don't understand why this would happen, but I do have the code, all of which can be found in this repository. a/src/lib.rs has the entity_impl macros 2.0 macro, while b/src/lib.rs has the struct & macro invocation shown above. I've minimized the example as best I can, but a normal (non-decl_macro) does not work, and I can't seem to reproduce in a single crate. If there's anything else needed, or anything I should try, please let me know.

Error message:

error[E0609]: no field `inner` on type `TestId`
 --> b/src/lib.rs:2:1
  |
2 | entity_impl!(TestId, Test);
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: a field with a similar name exists: `inner`
  |
  = note: this error originates in the macro `entity_impl` (in Nightly builds, run with -Z macro-backtrace for more info)

For more information about this error, try `rustc --explain E0609`.
error: could not compile `b` (lib) due to previous error

Meta

rustc --version --verbose:

rustc 1.72.0-nightly (8c74a5d27 2023-06-14)
binary: rustc
commit-hash: 8c74a5d27c644a0f7a22bb2fa8dd3ff8257bc220
commit-date: 2023-06-14
host: x86_64-unknown-linux-gnu // also reproduces on x86_64-pc-windows-msvc
release: 1.72.0-nightly
LLVM version: 16.0.5

@rustbot label +A-incr-comp +A-macros-2.0
(I'm just guessing on these labels.)