diff options
Diffstat (limited to 'tests/ui/or-patterns/macro-pat.rs')
-rw-r--r-- | tests/ui/or-patterns/macro-pat.rs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/ui/or-patterns/macro-pat.rs b/tests/ui/or-patterns/macro-pat.rs new file mode 100644 index 000000000..20d8f84c2 --- /dev/null +++ b/tests/ui/or-patterns/macro-pat.rs @@ -0,0 +1,41 @@ +// run-pass +// edition:2021 + +use Foo::*; + +#[allow(dead_code)] +#[derive(Eq, PartialEq, Debug)] +enum Foo { + A(u64), + B(u64), + C, + D, +} + +macro_rules! foo { + ($orpat:pat, $val:expr) => { + match $val { + x @ ($orpat) => x, // leading vert would not be allowed in $orpat + _ => B(0xDEADBEEFu64), + } + }; +} + +macro_rules! bar { + ($orpat:pat, $val:expr) => { + match $val { + $orpat => 42, // leading vert allowed here + _ => 0xDEADBEEFu64, + } + }; +} + +fn main() { + // Test or-pattern. + let y = foo!(A(_)|B(_), A(32)); + assert_eq!(y, A(32)); + + // Leading vert in or-pattern. + let y = bar!(|C| D, C); + assert_eq!(y, 42u64); +} |