about summary refs log tree commit diff
path: root/tests/ui/proc-macro/inner-attrs.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/proc-macro/inner-attrs.rs')
-rw-r--r--tests/ui/proc-macro/inner-attrs.rs87
1 files changed, 87 insertions, 0 deletions
diff --git a/tests/ui/proc-macro/inner-attrs.rs b/tests/ui/proc-macro/inner-attrs.rs
new file mode 100644
index 00000000000..1000c9c755f
--- /dev/null
+++ b/tests/ui/proc-macro/inner-attrs.rs
@@ -0,0 +1,87 @@
+// gate-test-custom_inner_attributes
+// compile-flags: -Z span-debug --error-format human
+// aux-build:test-macros.rs
+// edition:2018
+
+#![feature(custom_inner_attributes)]
+#![feature(proc_macro_hygiene)]
+#![feature(stmt_expr_attributes)]
+#![feature(rustc_attrs)]
+
+#![no_std] // Don't load unnecessary hygiene information from std
+extern crate std;
+
+#[macro_use]
+extern crate test_macros;
+
+#[print_target_and_args(first)]
+#[print_target_and_args(second)]
+fn foo() {
+    #![print_target_and_args(third)]
+    #![print_target_and_args(fourth)]
+}
+
+#[print_target_and_args(mod_first)]
+#[print_target_and_args(mod_second)]
+mod inline_mod {
+    #![print_target_and_args(mod_third)]
+    #![print_target_and_args(mod_fourth)]
+}
+
+struct MyStruct {
+    field: bool
+}
+
+#[derive(Print)]
+struct MyDerivePrint {
+    field: [u8; {
+        match true {
+            _ => {
+                #![cfg_attr(not(FALSE), rustc_dummy(third))]
+                true
+            }
+        };
+        0
+    }]
+}
+
+fn bar() {
+    #[print_target_and_args(tuple_attrs)] (
+        3, 4, {
+            #![cfg_attr(not(FALSE), rustc_dummy(innermost))]
+            5
+        }
+    );
+
+    #[print_target_and_args(tuple_attrs)] (
+        3, 4, {
+            #![cfg_attr(not(FALSE), rustc_dummy(innermost))]
+            5
+        }
+    );
+
+    for _ in &[true] {
+        #![print_attr] //~ ERROR expected non-macro inner attribute
+    }
+
+    let _ = {
+        #![print_attr] //~ ERROR expected non-macro inner attribute
+    };
+
+    let _ = async {
+        #![print_attr] //~ ERROR expected non-macro inner attribute
+    };
+
+    {
+        #![print_attr] //~ ERROR expected non-macro inner attribute
+    };
+}
+
+
+extern {
+    fn weird_extern() {
+        #![print_target_and_args_consume(tenth)]
+    }
+}
+
+fn main() {}