diff --git a/src/librustc/hir/print.rs b/src/librustc/hir/print.rs index b6b7aa6ce7de7..6340f9e74724a 100644 --- a/src/librustc/hir/print.rs +++ b/src/librustc/hir/print.rs @@ -911,8 +911,9 @@ impl<'a> State<'a> { if struct_def.is_tuple() { self.popen()?; self.commasep(Inconsistent, struct_def.fields(), |s, field| { - s.print_visibility(&field.vis)?; s.maybe_print_comment(field.span.lo)?; + s.print_outer_attributes(&field.attrs)?; + s.print_visibility(&field.vis)?; s.print_type(&field.ty) })?; self.pclose()?; diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 0c90e102f3425..34bb83711f2f6 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -1403,8 +1403,9 @@ impl<'a> State<'a> { try!(self.commasep( Inconsistent, struct_def.fields(), |s, field| { - try!(s.print_visibility(&field.vis)); try!(s.maybe_print_comment(field.span.lo)); + try!(s.print_outer_attributes(&field.attrs)); + try!(s.print_visibility(&field.vis)); s.print_type(&field.ty) } )); diff --git a/src/test/pretty/attr-variant-data.rs b/src/test/pretty/attr-variant-data.rs new file mode 100644 index 0000000000000..1ffacaa9f5a5d --- /dev/null +++ b/src/test/pretty/attr-variant-data.rs @@ -0,0 +1,51 @@ +// Copyright 2012 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// pp-exact +// Testing that both the inner item and next outer item are +// preserved, and that the first outer item parsed in main is not +// accidentally carried over to each inner function + +#![feature(custom_attribute)] +#![feature(custom_derive)] + +#[derive(Serialize, Deserialize)] +struct X; + +#[derive(Serialize, Deserialize)] +struct WithRef<'a, T: 'a> { + #[serde(skip_deserializing)] + t: Option<&'a T>, + #[serde(serialize_with = "ser_x", deserialize_with = "de_x")] + x: X, +} + +#[derive(Serialize, Deserialize)] +enum EnumWith { + Unit, + Newtype( + #[serde(serialize_with = "ser_x", deserialize_with = "de_x")] + X), + Tuple(T, + #[serde(serialize_with = "ser_x", deserialize_with = "de_x")] + X), + Struct { + t: T, + #[serde(serialize_with = "ser_x", deserialize_with = "de_x")] + x: X, + }, +} + +#[derive(Serialize, Deserialize)] +struct Tuple(T, + #[serde(serialize_with = "ser_x", deserialize_with = "de_x")] + X); + +fn main() { }