about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2016-12-04 12:51:38 +0000
committerbors <bors@rust-lang.org>2016-12-04 12:51:38 +0000
commitb462e8fa61a6744aa7435f0bef17023062c165df (patch)
treee754bdabbfbebfe00b3f7d6c3926df26bd6e6855 /src/test
parentd14d74d5f7d39d1e2583bca231c26bbc0d4ee9a0 (diff)
parentff621ec70eac9c687d0154df5405600669041ab3 (diff)
downloadrust-b462e8fa61a6744aa7435f0bef17023062c165df.tar.gz
rust-b462e8fa61a6744aa7435f0bef17023062c165df.zip
Auto merge of #38082 - jseyfried:macro_invocation_paths, r=nrc
macros: support invocation paths (e.g. `foo::bar!()`) behind `#![feature(use_extern_macros)]`

r? @nrc
Diffstat (limited to 'src/test')
-rw-r--r--src/test/compile-fail/imports/macro-paths.rs42
-rw-r--r--src/test/compile-fail/macro-with-seps-err-msg.rs6
-rw-r--r--src/test/compile-fail/paths-in-macro-invocations.rs38
-rw-r--r--src/test/run-pass/auxiliary/two_macros.rs4
-rw-r--r--src/test/run-pass/paths-in-macro-invocations.rs46
5 files changed, 93 insertions, 43 deletions
diff --git a/src/test/compile-fail/imports/macro-paths.rs b/src/test/compile-fail/imports/macro-paths.rs
new file mode 100644
index 00000000000..97c05392e7d
--- /dev/null
+++ b/src/test/compile-fail/imports/macro-paths.rs
@@ -0,0 +1,42 @@
+// 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.
+
+// aux-build:two_macros.rs
+
+#![feature(use_extern_macros)]
+
+extern crate two_macros;
+
+mod foo {
+    pub mod bar {
+        pub use two_macros::m;
+    }
+}
+
+fn f() {
+    use foo::*; //~ NOTE could also resolve to the name imported here
+    bar::m! { //~ ERROR ambiguous
+              //~| NOTE macro-expanded items do not shadow when used in a macro invocation path
+        mod bar { pub use two_macros::m; } //~ NOTE could resolve to the name defined here
+                                           //~^^^ NOTE in this expansion
+    }
+}
+
+pub mod baz { //~ NOTE could also resolve to the name defined here
+    pub use two_macros::m;
+}
+
+fn g() {
+    baz::m! { //~ ERROR ambiguous
+              //~| NOTE macro-expanded items do not shadow when used in a macro invocation path
+        mod baz { pub use two_macros::m; } //~ NOTE could resolve to the name defined here
+                                           //~^^^ NOTE in this expansion
+    }
+}
diff --git a/src/test/compile-fail/macro-with-seps-err-msg.rs b/src/test/compile-fail/macro-with-seps-err-msg.rs
index 408bb15ba28..d5fc9a510f0 100644
--- a/src/test/compile-fail/macro-with-seps-err-msg.rs
+++ b/src/test/compile-fail/macro-with-seps-err-msg.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 fn main() {
-    globnar::brotz!(); //~ ERROR expected macro name without module separators
-    ::foo!(); //~ ERROR expected macro name without module separators
-    foo::<T>!(); //~ ERROR expected macro name without module separators
+    globnar::brotz!(); //~ ERROR non-ident macro paths are experimental
+    ::foo!(); //~ ERROR non-ident macro paths are experimental
+    foo::<T>!(); //~ ERROR type parameters are not allowed on macros
 }
diff --git a/src/test/compile-fail/paths-in-macro-invocations.rs b/src/test/compile-fail/paths-in-macro-invocations.rs
deleted file mode 100644
index c69b7e526cc..00000000000
--- a/src/test/compile-fail/paths-in-macro-invocations.rs
+++ /dev/null
@@ -1,38 +0,0 @@
-// 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.
-
-::foo::bar!(); //~ ERROR expected macro name without module separators
-foo::bar!(); //~ ERROR expected macro name without module separators
-
-trait T {
-    foo::bar!(); //~ ERROR expected macro name without module separators
-    ::foo::bar!(); //~ ERROR expected macro name without module separators
-}
-
-struct S {
-    x: foo::bar!(), //~ ERROR expected macro name without module separators
-    y: ::foo::bar!(), //~ ERROR expected macro name without module separators
-}
-
-impl S {
-    foo::bar!(); //~ ERROR expected macro name without module separators
-    ::foo::bar!(); //~ ERROR expected macro name without module separators
-}
-
-fn main() {
-    foo::bar!(); //~ ERROR expected macro name without module separators
-    ::foo::bar!(); //~ ERROR expected macro name without module separators
-
-    let _ = foo::bar!(); //~ ERROR expected macro name without module separators
-    let _ = ::foo::bar!(); //~ ERROR expected macro name without module separators
-
-    let foo::bar!() = 0; //~ ERROR expected macro name without module separators
-    let ::foo::bar!() = 0; //~ ERROR expected macro name without module separators
-}
diff --git a/src/test/run-pass/auxiliary/two_macros.rs b/src/test/run-pass/auxiliary/two_macros.rs
index 060960f0dbc..0da6ba13696 100644
--- a/src/test/run-pass/auxiliary/two_macros.rs
+++ b/src/test/run-pass/auxiliary/two_macros.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 #[macro_export]
-macro_rules! macro_one { () => ("one") }
+macro_rules! macro_one { ($($t:tt)*) => ($($t)*) }
 
 #[macro_export]
-macro_rules! macro_two { () => ("two") }
+macro_rules! macro_two { ($($t:tt)*) => ($($t)*) }
diff --git a/src/test/run-pass/paths-in-macro-invocations.rs b/src/test/run-pass/paths-in-macro-invocations.rs
new file mode 100644
index 00000000000..69f8906778a
--- /dev/null
+++ b/src/test/run-pass/paths-in-macro-invocations.rs
@@ -0,0 +1,46 @@
+// 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.
+
+// aux-build:two_macros.rs
+
+#![feature(use_extern_macros)]
+
+extern crate two_macros;
+
+::two_macros::macro_one!();
+two_macros::macro_one!();
+
+mod foo { pub use two_macros::macro_one as bar; }
+
+trait T {
+    foo::bar!();
+    ::foo::bar!();
+}
+
+struct S {
+    x: foo::bar!(i32),
+    y: ::foo::bar!(i32),
+}
+
+impl S {
+    foo::bar!();
+    ::foo::bar!();
+}
+
+fn main() {
+    foo::bar!();
+    ::foo::bar!();
+
+    let _ = foo::bar!(0);
+    let _ = ::foo::bar!(0);
+
+    let foo::bar!(_) = 0;
+    let ::foo::bar!(_) = 0;
+}