]> git.lizzy.rs Git - rust.git/commitdiff
Add tests.
authorJeffrey Seyfried <jeffrey.seyfried@gmail.com>
Mon, 28 Nov 2016 07:57:17 +0000 (07:57 +0000)
committerJeffrey Seyfried <jeffrey.seyfried@gmail.com>
Wed, 30 Nov 2016 23:17:56 +0000 (23:17 +0000)
src/test/compile-fail/imports/macro-paths.rs [new file with mode: 0644]
src/test/compile-fail/macro-with-seps-err-msg.rs
src/test/compile-fail/paths-in-macro-invocations.rs [deleted file]
src/test/run-pass/auxiliary/two_macros.rs
src/test/run-pass/paths-in-macro-invocations.rs [new file with mode: 0644]

diff --git a/src/test/compile-fail/imports/macro-paths.rs b/src/test/compile-fail/imports/macro-paths.rs
new file mode 100644 (file)
index 0000000..97c0539
--- /dev/null
@@ -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
+    }
+}
index 408bb15ba28cdd165cbf9246f2bdf1f891760b4e..d5fc9a510f0db709c61d06e5f942ecb4c678051f 100644 (file)
@@ -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 (file)
index c69b7e5..0000000
+++ /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
-}
index 060960f0dbc88cd40b16ede1144175c463a0bfdb..0da6ba13696da0b976f827bfdb5e759bacd22c70 100644 (file)
@@ -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 (file)
index 0000000..69f8906
--- /dev/null
@@ -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;
+}