// Regression test for issue #116334. // Don't include hygienic fields from different syntax contexts in // the list of available or similarly named fields. #![feature(decl_macro)] macro compound($Ty:ident) { #[derive(Default)] struct $Ty { field: u32, // field `field` is hygienic } } macro component($Ty:ident) { struct $Ty(u64); // field `0` is hygienic (but still accessible via the constructor) } compound! { Compound } component! { Component } fn main() { let ty = Compound::default(); let _ = ty.field; //~ ERROR no field `field` on type `Compound` let _ = ty.fieeld; //~ ERROR no field `fieeld` on type `Compound` let Compound { field } = ty; //~^ ERROR struct `Compound` does not have a field named `field` //~| ERROR pattern requires `..` due to inaccessible fields //~| HELP ignore the inaccessible and unused fields let ty = Component(90); let _ = ty.0; //~ ERROR no field `0` on type `Component` } environment!(); macro environment() { struct Crate { field: () } // Here, we do want to suggest `field` even though it's hygienic // precisely because they come from the same syntax context. const CRATE: Crate = Crate { fiel: () }; //~^ ERROR struct `Crate` has no field named `fiel` //~| HELP a field with a similar name exists }