]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: nr2.0: Add complex macro name resolution test cases
authorArthur Cohen <arthur.cohen@embecosm.com>
Thu, 27 Jul 2023 08:06:37 +0000 (10:06 +0200)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 16 Jan 2024 18:00:27 +0000 (19:00 +0100)
gcc/testsuite/ChangeLog:

* rust/compile/name_resolution6.rs: New test.
* rust/compile/name_resolution7.rs: New test.
* rust/compile/name_resolution8.rs: New test.
* rust/compile/name_resolution9.rs: New test.

gcc/testsuite/rust/compile/name_resolution6.rs [new file with mode: 0644]
gcc/testsuite/rust/compile/name_resolution7.rs [new file with mode: 0644]
gcc/testsuite/rust/compile/name_resolution8.rs [new file with mode: 0644]
gcc/testsuite/rust/compile/name_resolution9.rs [new file with mode: 0644]

diff --git a/gcc/testsuite/rust/compile/name_resolution6.rs b/gcc/testsuite/rust/compile/name_resolution6.rs
new file mode 100644 (file)
index 0000000..e4087e6
--- /dev/null
@@ -0,0 +1,28 @@
+// { dg-options "-frust-name-resolution-2.0 -frust-compile-until=lowering" }
+
+pub mod foo {
+    pub mod bar {
+        pub mod baz {
+            pub mod qux {
+                #[macro_export]
+                macro_rules! foo {
+                    (one) => {};
+                }
+
+                pub fn foo() {}
+            }
+        }
+
+        fn f() {
+            fn inner() {
+                macro_rules! foo {
+                    (two) => {};
+                }
+
+                foo!(two); // ok, textual scope
+                crate::foo!(one); // ok, path res
+                super::super::foo!(one); // ok, path res
+            }
+        }
+    }
+}
diff --git a/gcc/testsuite/rust/compile/name_resolution7.rs b/gcc/testsuite/rust/compile/name_resolution7.rs
new file mode 100644 (file)
index 0000000..fa84e2f
--- /dev/null
@@ -0,0 +1,17 @@
+// { dg-options "-frust-name-resolution-2.0" }
+
+// check that macros by example do not get inserted in ribs like regular items
+pub mod foo {
+    pub mod bar {
+        pub mod baz {
+            pub mod qux {
+                macro_rules! foo {
+                    (one) => {};
+                }
+            }
+        }
+    }
+}
+
+crate::foo::bar::baz::qux::foo!(); // { dg-error "could not resolve macro invocation" }
+foo::bar::baz::qux::foo!(); // { dg-error "could not resolve macro invocation" }
diff --git a/gcc/testsuite/rust/compile/name_resolution8.rs b/gcc/testsuite/rust/compile/name_resolution8.rs
new file mode 100644 (file)
index 0000000..6fb5170
--- /dev/null
@@ -0,0 +1,26 @@
+// { dg-options "-frust-name-resolution-2.0" }
+
+// check that macros by example get exported to the crate's root with #[macro_export]
+pub mod foo {
+    pub mod bar {
+        pub mod baz {
+            pub mod qux {
+                               #[macro_export]
+                macro_rules! foo {
+                    (one) => {};
+                }
+            }
+        }
+    }
+}
+
+crate::foo!(one); // ok
+foo!(one); // ok
+
+mod a {
+       mod b {
+               mod c {
+                       super::super::super::foo!(one); // ok
+               }
+       }
+}
diff --git a/gcc/testsuite/rust/compile/name_resolution9.rs b/gcc/testsuite/rust/compile/name_resolution9.rs
new file mode 100644 (file)
index 0000000..93adb46
--- /dev/null
@@ -0,0 +1,17 @@
+// { dg-options "-frust-name-resolution-2.0" }
+
+pub mod foo {
+    pub mod bar {
+        fn f() {
+            super::super::super::foo!(); // { dg-error "too many leading .super. keywords" }
+                                         // { dg-error "could not resolve macro invocation" "" { target *-*-* } .-1 }
+
+            super::crate::foo!(); // { dg-error "leading path segment .crate. can only be used" }
+                                  // { dg-error "could not resolve macro invocation" "" { target *-*-* } .-1 }
+
+                       
+            crate::foo::bar::super::foo!(); // { dg-error "leading path segment .super. can only be used" }
+                                                   // { dg-error "could not resolve macro invocation" "" { target *-*-* } .-1 }
+        }
+    }
+}