1 // Checks that only functions with compatible attributes are inlined. 2 // 3 // only-x86_64 4 // EMIT_MIR_FOR_EACH_PANIC_STRATEGY 5 6 #![crate_type = "lib"] 7 #![feature(no_sanitize)] 8 #![feature(target_feature_11)] 9 #![feature(c_variadic)] 10 11 // EMIT_MIR inline_compatibility.inlined_target_feature.Inline.diff 12 #[target_feature(enable = "sse2")] inlined_target_feature()13pub unsafe fn inlined_target_feature() { 14 target_feature(); 15 } 16 17 // EMIT_MIR inline_compatibility.not_inlined_target_feature.Inline.diff not_inlined_target_feature()18pub unsafe fn not_inlined_target_feature() { 19 target_feature(); 20 } 21 22 // EMIT_MIR inline_compatibility.inlined_no_sanitize.Inline.diff 23 #[no_sanitize(address)] inlined_no_sanitize()24pub unsafe fn inlined_no_sanitize() { 25 no_sanitize(); 26 } 27 28 // EMIT_MIR inline_compatibility.not_inlined_no_sanitize.Inline.diff not_inlined_no_sanitize()29pub unsafe fn not_inlined_no_sanitize() { 30 no_sanitize(); 31 } 32 33 #[inline] 34 #[target_feature(enable = "sse2")] target_feature()35pub unsafe fn target_feature() {} 36 37 #[inline] 38 #[no_sanitize(address)] no_sanitize()39pub unsafe fn no_sanitize() {} 40 41 // EMIT_MIR inline_compatibility.not_inlined_c_variadic.Inline.diff not_inlined_c_variadic()42pub unsafe fn not_inlined_c_variadic() { 43 let s = sum(4u32, 4u32, 30u32, 200u32, 1000u32); 44 } 45 46 #[no_mangle] 47 #[inline(always)] sum(n: u32, mut vs: ...) -> u3248unsafe extern "C" fn sum(n: u32, mut vs: ...) -> u32 { 49 let mut s = 0; 50 let mut i = 0; 51 while i != n { 52 s += vs.arg::<u32>(); 53 i += 1; 54 } 55 s 56 } 57