--- /dev/null
+// Copyright 2016 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 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#![feature(pub_restricted, type_macros)]
+
+mod foo {
+ type T = ();
+ struct S1(pub(foo) (), pub(T), pub(crate) (), pub(((), T)));
+ struct S2(pub((foo)) ()); //~ ERROR expected one of `+` or `,`, found `(`
+ //~| ERROR expected one of `+`, `;`, or `where`, found `(`
+}
--- /dev/null
+// Copyright 2016 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 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#![feature(pub_restricted, type_macros)]
+
+macro_rules! define_struct {
+ ($t:ty) => {
+ struct S1(pub $t);
+ struct S2(pub (foo) ());
+ struct S3(pub $t ()); //~ ERROR expected one of `+` or `,`, found `(`
+ //~| ERROR expected one of `+`, `;`, or `where`, found `(`
+ }
+}
+
+mod foo {
+ define_struct! { (foo) }
+}
--- /dev/null
+// Copyright 2016 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 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+#![feature(pub_restricted, type_macros)]
+
+macro_rules! define_struct {
+ ($t:ty) => {
+ struct S1(pub($t));
+ struct S2(pub (foo) ());
+ struct S3(pub($t) ()); //~ ERROR expected one of `+` or `,`, found `(`
+ //~| ERROR expected one of `+`, `;`, or `where`, found `(`
+ }
+}
+
+mod foo {
+ define_struct! { foo }
+}
struct S<T>(T);
m!{ S<u8> } //~ ERROR type or lifetime parameters in visibility path
+mod foo {
+ struct S(pub(foo<T>) ()); //~ ERROR type or lifetime parameters in visibility path
+}
+
fn main() {}