mirror of https://github.com/rust-lang/rust.git
47 lines
1.4 KiB
Rust
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() {}
|