| #![allow(clashing_extern_declarations)] |
| //@ check-pass |
| |
| // In this test we check that the parser accepts an ABI string when it |
| // comes from a macro `literal` or `expr` fragment as opposed to a hardcoded string. |
| |
| fn main() {} |
| |
| macro_rules! abi_from_lit_frag { |
| ($abi:literal) => { |
| extern $abi { |
| fn _import(); |
| } |
| |
| extern $abi fn _export() {} |
| |
| type _PTR = extern $abi fn(); |
| } |
| } |
| |
| macro_rules! abi_from_expr_frag { |
| ($abi:expr) => { |
| extern $abi { |
| fn _import(); |
| } |
| |
| extern $abi fn _export() {} |
| |
| type _PTR = extern $abi fn(); |
| }; |
| } |
| |
| mod rust { |
| abi_from_lit_frag!("Rust"); |
| } |
| |
| mod c { |
| abi_from_lit_frag!("C"); |
| } |
| |
| mod rust_expr { |
| abi_from_expr_frag!("Rust"); |
| } |
| |
| mod c_expr { |
| abi_from_expr_frag!("C"); |
| } |