]> git.lizzy.rs Git - rust.git/commitdiff
Add a regression test for #44692
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>
Mon, 8 Jul 2019 18:58:42 +0000 (21:58 +0300)
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>
Wed, 10 Jul 2019 21:35:01 +0000 (00:35 +0300)
Add a test for the issue resolved by removing `resolve_macro_path`

Add a test making sure that extern prelude entries introduced from an opaque macro are not visible anywhere, even it that macro

Fix test output after rebase

src/test/ui/derives/auxiliary/derive-marker-tricky.rs [new file with mode: 0644]
src/test/ui/derives/derive-marker-tricky.rs [new file with mode: 0644]
src/test/ui/hygiene/extern-prelude-from-opaque-fail.rs [new file with mode: 0644]
src/test/ui/hygiene/extern-prelude-from-opaque-fail.stderr [new file with mode: 0644]
src/test/ui/macros/derive-in-eager-expansion-hang.rs [new file with mode: 0644]
src/test/ui/macros/derive-in-eager-expansion-hang.stderr [new file with mode: 0644]
src/test/ui/proc-macro/macro-namespace-reserved-2.stderr

diff --git a/src/test/ui/derives/auxiliary/derive-marker-tricky.rs b/src/test/ui/derives/auxiliary/derive-marker-tricky.rs
new file mode 100644 (file)
index 0000000..7034535
--- /dev/null
@@ -0,0 +1,15 @@
+// force-host
+// no-prefer-dynamic
+
+#![crate_type = "proc-macro"]
+
+extern crate proc_macro;
+use proc_macro::*;
+
+#[proc_macro_derive(NoMarker)]
+pub fn f(input: TokenStream) -> TokenStream {
+    if input.to_string().contains("rustc_copy_clone_marker") {
+        panic!("found `#[rustc_copy_clone_marker]`");
+    }
+    TokenStream::new()
+}
diff --git a/src/test/ui/derives/derive-marker-tricky.rs b/src/test/ui/derives/derive-marker-tricky.rs
new file mode 100644 (file)
index 0000000..730ea47
--- /dev/null
@@ -0,0 +1,16 @@
+// Test that `#[rustc_copy_clone_marker]` is not injected when a user-defined derive shadows
+// a built-in derive in non-trivial scope (e.g. in a nested module).
+
+// check-pass
+// aux-build:derive-marker-tricky.rs
+
+extern crate derive_marker_tricky;
+
+mod m {
+    use derive_marker_tricky::NoMarker as Copy;
+
+    #[derive(Copy)]
+    struct S;
+}
+
+fn main() {}
diff --git a/src/test/ui/hygiene/extern-prelude-from-opaque-fail.rs b/src/test/ui/hygiene/extern-prelude-from-opaque-fail.rs
new file mode 100644 (file)
index 0000000..06d6265
--- /dev/null
@@ -0,0 +1,28 @@
+#![feature(decl_macro)]
+
+macro a() {
+    extern crate core as my_core;
+    mod v {
+        // Early resolution.
+        use my_core; //~ ERROR unresolved import `my_core`
+    }
+    mod u {
+        // Late resolution.
+        fn f() { my_core::mem::drop(0); }
+        //~^ ERROR failed to resolve: use of undeclared type or module `my_core`
+    }
+}
+
+a!();
+
+mod v {
+    // Early resolution.
+    use my_core; //~ ERROR unresolved import `my_core`
+}
+mod u {
+    // Late resolution.
+    fn f() { my_core::mem::drop(0); }
+    //~^ ERROR failed to resolve: use of undeclared type or module `my_core`
+}
+
+fn main() {}
diff --git a/src/test/ui/hygiene/extern-prelude-from-opaque-fail.stderr b/src/test/ui/hygiene/extern-prelude-from-opaque-fail.stderr
new file mode 100644 (file)
index 0000000..65133eb
--- /dev/null
@@ -0,0 +1,37 @@
+error[E0432]: unresolved import `my_core`
+  --> $DIR/extern-prelude-from-opaque-fail.rs:20:9
+   |
+LL |     use my_core;
+   |         ^^^^^^^
+   |         |
+   |         no `my_core` in the root
+   |         help: a similar name exists in the module: `my_core`
+
+error[E0432]: unresolved import `my_core`
+  --> $DIR/extern-prelude-from-opaque-fail.rs:7:13
+   |
+LL |         use my_core;
+   |             ^^^^^^^ no `my_core` in the root
+...
+LL | a!();
+   | ----- in this macro invocation
+
+error[E0433]: failed to resolve: use of undeclared type or module `my_core`
+  --> $DIR/extern-prelude-from-opaque-fail.rs:11:18
+   |
+LL |         fn f() { my_core::mem::drop(0); }
+   |                  ^^^^^^^ use of undeclared type or module `my_core`
+...
+LL | a!();
+   | ----- in this macro invocation
+
+error[E0433]: failed to resolve: use of undeclared type or module `my_core`
+  --> $DIR/extern-prelude-from-opaque-fail.rs:24:14
+   |
+LL |     fn f() { my_core::mem::drop(0); }
+   |              ^^^^^^^ use of undeclared type or module `my_core`
+
+error: aborting due to 4 previous errors
+
+Some errors have detailed explanations: E0432, E0433.
+For more information about an error, try `rustc --explain E0432`.
diff --git a/src/test/ui/macros/derive-in-eager-expansion-hang.rs b/src/test/ui/macros/derive-in-eager-expansion-hang.rs
new file mode 100644 (file)
index 0000000..0729e14
--- /dev/null
@@ -0,0 +1,14 @@
+// Regression test for the issue #44692
+
+macro_rules! hang { () => {
+    { //~ ERROR format argument must be a string literal
+        #[derive(Clone)]
+        struct S;
+
+        ""
+    }
+}}
+
+fn main() {
+    format_args!(hang!());
+}
diff --git a/src/test/ui/macros/derive-in-eager-expansion-hang.stderr b/src/test/ui/macros/derive-in-eager-expansion-hang.stderr
new file mode 100644 (file)
index 0000000..1ef9427
--- /dev/null
@@ -0,0 +1,17 @@
+error: format argument must be a string literal
+  --> $DIR/derive-in-eager-expansion-hang.rs:4:5
+   |
+LL | /     {
+LL | |         #[derive(Clone)]
+LL | |         struct S;
+LL | |
+LL | |         ""
+LL | |     }
+   | |_____^
+help: you might be missing a string literal to format with
+   |
+LL |     format_args!("{}", hang!());
+   |                  ^^^^^
+
+error: aborting due to previous error
+
index a724d388f4891fa6e8d74b6110f7c47053a6ba2e..8a5e346c2b59fc8df0d3437bd9cee738a6d03645 100644 (file)
@@ -83,7 +83,7 @@ LL | #[my_macro]
    |   ^^^^^^^^
    |
    = note: for more information, see https://github.com/rust-lang/rust/issues/29642
-   = help: add #![feature(custom_attribute)] to the crate attributes to enable
+   = help: add `#![feature(custom_attribute)]` to the crate attributes to enable
 
 error: can't use a procedural macro from the same crate that defines it
   --> $DIR/macro-namespace-reserved-2.rs:39:3