//@ force-host //@ no-prefer-dynamic // check that having extern "C" functions in a proc macro doesn't crash. #![crate_type="proc-macro"] #![allow(non_snake_case)] extern crate proc_macro; macro_rules! proc_macro_tokenstream { () => { ::proc_macro::TokenStream }; } macro_rules! proc_macro_expr_impl { ($( $( #[$attr:meta] )* pub fn $func:ident($input:ident: &str) -> String $body:block )+) => { $( // Parses an input that looks like: // // ``` // #[allow(unused)] // enum ProcMacroHack { // Input = (stringify!(ARGS), 0).1, // } // ``` $( #[$attr] )* #[proc_macro_derive($func)] pub fn $func(input: proc_macro_tokenstream!()) -> proc_macro_tokenstream!() { unsafe { rust_dbg_extern_identity_u64(0); } panic!() } )+ }; } proc_macro_expr_impl! { pub fn base2_impl(input: &str) -> String { panic!() } } #[link(name="rust_test_helpers")] extern "C" { pub fn rust_dbg_extern_identity_u64(v: u64) -> u64; }