diff options
author | Arthur Cohen <arthur.cohen@embecosm.com> | 2022-03-15 09:12:37 +0100 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2022-03-17 15:51:09 +0100 |
commit | 935b561e7fb6471773e2a7e860011b76702cd563 (patch) | |
tree | 9dd32d8d9383de1b52707f723b9990c8c0835bef /gcc | |
parent | 1a2ef9cae90db5bdb18723b6adafe2750a95ed76 (diff) | |
download | gcc-935b561e7fb6471773e2a7e860011b76702cd563.zip gcc-935b561e7fb6471773e2a7e860011b76702cd563.tar.gz gcc-935b561e7fb6471773e2a7e860011b76702cd563.tar.bz2 |
macros: Add test cases for remaining expansion contexts
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/rust/compile/macro20.rs | 16 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/macro21.rs | 9 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/macro22.rs | 10 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/macro23.rs | 25 |
4 files changed, 60 insertions, 0 deletions
diff --git a/gcc/testsuite/rust/compile/macro20.rs b/gcc/testsuite/rust/compile/macro20.rs new file mode 100644 index 0000000..9f3cbca --- /dev/null +++ b/gcc/testsuite/rust/compile/macro20.rs @@ -0,0 +1,16 @@ +macro_rules! define_trait { + ($assoc:ident, $i:item) => { + type $assoc; + + $i + }; +} + +trait DefinedThroughMacros { + define_trait!( + Inner, + fn takes_inner(i: Self::Inner) -> Self::Inner { + i + } + ); +} diff --git a/gcc/testsuite/rust/compile/macro21.rs b/gcc/testsuite/rust/compile/macro21.rs new file mode 100644 index 0000000..9a1d773 --- /dev/null +++ b/gcc/testsuite/rust/compile/macro21.rs @@ -0,0 +1,9 @@ +macro_rules! c_fn { + {$name:ident ($($arg_name:ident $arg_ty:ty),*) -> $ret_ty:ty} => { + fn $name($($arg_name: $arg_ty)*) -> $ret_ty; + }; +} + +extern "C" { + c_fn! {puts (s *const i8) -> i64} +} diff --git a/gcc/testsuite/rust/compile/macro22.rs b/gcc/testsuite/rust/compile/macro22.rs new file mode 100644 index 0000000..bdc4bad --- /dev/null +++ b/gcc/testsuite/rust/compile/macro22.rs @@ -0,0 +1,10 @@ +macro_rules! print { + () => { + fn puts(s: *const i8); + fn printf(fmt: *const i8, ...); + }; +} + +extern "C" { + print! {} +} diff --git a/gcc/testsuite/rust/compile/macro23.rs b/gcc/testsuite/rust/compile/macro23.rs new file mode 100644 index 0000000..afaca9b --- /dev/null +++ b/gcc/testsuite/rust/compile/macro23.rs @@ -0,0 +1,25 @@ +macro_rules! maybe_impl { + ($left:ident, $right:ident, $l_fn:ident, $r_fn:ident) => { + fn $l_fn(value: T) -> Maybe<T> { + Maybe::$left(value) + } + + fn $r_fn() -> Maybe<T> { + Maybe::$right + } + }; +} + +enum Maybe<T> { + Just(T), + Nothing, +} + +impl<T> Maybe<T> { + maybe_impl!(Just, Nothing, just, nothing); +} + +fn main() { + let _ = Maybe::just(14); + let _: Maybe<i32> = Maybe::nothing(); +} |