aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorArthur Cohen <arthur.cohen@embecosm.com>2023-07-27 10:06:37 +0200
committerCohenArthur <arthur.cohen@embecosm.com>2023-08-03 17:36:42 +0000
commitd77abf259db509c9592ed97b287a04d169892cde (patch)
tree76657aee5d467f78d16b5765b7459e738dd00d9c /gcc
parent980ef03bc57a723e6b7a74c2546c84ad529d93ac (diff)
downloadgcc-d77abf259db509c9592ed97b287a04d169892cde.zip
gcc-d77abf259db509c9592ed97b287a04d169892cde.tar.gz
gcc-d77abf259db509c9592ed97b287a04d169892cde.tar.bz2
nr2.0: Add complex macro name resolution test cases
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/rust/compile/name_resolution6.rs28
-rw-r--r--gcc/testsuite/rust/compile/name_resolution7.rs17
-rw-r--r--gcc/testsuite/rust/compile/name_resolution8.rs26
-rw-r--r--gcc/testsuite/rust/compile/name_resolution9.rs17
4 files changed, 88 insertions, 0 deletions
diff --git a/gcc/testsuite/rust/compile/name_resolution6.rs b/gcc/testsuite/rust/compile/name_resolution6.rs
new file mode 100644
index 0000000..e4087e6
--- /dev/null
+++ b/gcc/testsuite/rust/compile/name_resolution6.rs
@@ -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
index 0000000..fa84e2f
--- /dev/null
+++ b/gcc/testsuite/rust/compile/name_resolution7.rs
@@ -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
index 0000000..6fb5170
--- /dev/null
+++ b/gcc/testsuite/rust/compile/name_resolution8.rs
@@ -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
index 0000000..93adb46
--- /dev/null
+++ b/gcc/testsuite/rust/compile/name_resolution9.rs
@@ -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 }
+ }
+ }
+}