rust/tests/ui/const-generics/early/const_arg_trivial_macro_exp...

47 lines
1.4 KiB
Rust

// Additional checks for macro expansion in const args
//@ check-pass
macro_rules! closure {
() => { |()| () };
}
macro_rules! indir_semi {
($nested:ident) => { $nested!(); };
}
macro_rules! indir {
($nested:ident) => { $nested!() };
}
macro_rules! empty {
() => {};
}
macro_rules! arg {
() => { N };
}
struct Adt<const N: usize>;
fn array1() -> [(); { closure!(); 0 }] { loop {} }
fn array2() -> [(); { indir!(closure); 0}] { loop {} }
fn array3() -> [(); { indir_semi!{ closure } 0 }] { loop {} }
fn array4<const N: usize>() -> [(); { indir!{ empty } arg!{} }] { loop {} }
fn array5<const N: usize>() -> [(); { empty!{} arg!() }] { loop {} }
fn array6<const N: usize>() -> [(); { empty!{} N }] { loop {} }
fn array7<const N: usize>() -> [(); { arg!{} empty!{} }] { loop {} }
fn array8<const N: usize>() -> [(); { empty!{} arg!{} empty!{} }] { loop {} }
fn adt1() -> Adt<{ closure!(); 0 }> { loop {} }
fn adt2() -> Adt<{ indir!(closure); 0}> { loop {} }
fn adt3() -> Adt<{ indir_semi!{ closure } 0 }> { loop {} }
fn adt4<const N: usize>() -> Adt<{ indir!{ empty } arg!{} }> { loop {} }
fn adt5<const N: usize>() -> Adt<{ empty!{} arg!() }> { loop {} }
fn adt6<const N: usize>() -> Adt<{ empty!{} N }> { loop {} }
fn adt7<const N: usize>() -> Adt<{ arg!{} empty!{} }> { loop {} }
fn adt8<const N: usize>() -> Adt<{ empty!{} arg!{} empty!{} }> { loop {} }
fn main() {}