diff options
Diffstat (limited to 'src/test/ui/hygiene/fields.rs')
-rw-r--r-- | src/test/ui/hygiene/fields.rs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/test/ui/hygiene/fields.rs b/src/test/ui/hygiene/fields.rs new file mode 100644 index 000000000..7a417b46f --- /dev/null +++ b/src/test/ui/hygiene/fields.rs @@ -0,0 +1,30 @@ +// ignore-pretty pretty-printing is unhygienic + +#![feature(decl_macro)] + +mod foo { + struct S { x: u32 } + struct T(u32); + + pub macro m($S:ident, $x:ident) {{ + struct $S { + $x: u32, + x: i32, + } + + let s = S { x: 0 }; //~ ERROR type `foo::S` is private + let _ = s.x; //~ ERROR type `foo::S` is private + + let t = T(0); //~ ERROR type `T` is private + let _ = t.0; //~ ERROR type `T` is private + + let s = $S { $x: 0, x: 1 }; + assert_eq!((s.$x, s.x), (0, 1)); + s + }} +} + +fn main() { + let s = foo::m!(S, x); + assert_eq!(s.x, 0); +} |