diff options
author | Arthur Cohen <arthur.cohen@embecosm.com> | 2023-07-27 10:06:37 +0200 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-01-16 19:00:27 +0100 |
commit | 44ec7404b9a1fb25512bcd262db7e8a1f8248f33 (patch) | |
tree | 45ab58fdbf37578be2f0a5d33fd47f9f821d65c5 | |
parent | 301e59b864ba32b6e69b906a11352863983c2572 (diff) | |
download | gcc-44ec7404b9a1fb25512bcd262db7e8a1f8248f33.zip gcc-44ec7404b9a1fb25512bcd262db7e8a1f8248f33.tar.gz gcc-44ec7404b9a1fb25512bcd262db7e8a1f8248f33.tar.bz2 |
gccrs: 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.
-rw-r--r-- | gcc/testsuite/rust/compile/name_resolution6.rs | 28 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/name_resolution7.rs | 17 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/name_resolution8.rs | 26 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/name_resolution9.rs | 17 |
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 } + } + } +} |