summaryrefslogtreecommitdiffstats
path: root/src/test/ui/proc-macro/inner-attrs.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/proc-macro/inner-attrs.rs')
-rw-r--r--src/test/ui/proc-macro/inner-attrs.rs86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/test/ui/proc-macro/inner-attrs.rs b/src/test/ui/proc-macro/inner-attrs.rs
new file mode 100644
index 000000000..2e3c704da
--- /dev/null
+++ b/src/test/ui/proc-macro/inner-attrs.rs
@@ -0,0 +1,86 @@
+// 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() {}