//@ add-core-stubs //@ build-fail //@ compile-flags: --crate-type=lib --target thumbv4t-none-eabi //@ needs-llvm-components: arm // Checks that forced inlining won't mix asm with incompatible instruction sets. #![crate_type = "lib"] #![feature(rustc_attrs)] #![feature(no_core, lang_items)] #![no_core] extern crate minicore; use minicore::*; #[rustc_builtin_macro] #[macro_export] macro_rules! asm { ("assembly template", $(operands,)* $(options($(option),*))? ) => { /* compiler built-in */ }; } #[instruction_set(arm::a32)] #[rustc_force_inline] fn instruction_set_a32() {} #[instruction_set(arm::t32)] #[rustc_force_inline] fn instruction_set_t32() {} #[rustc_force_inline] fn instruction_set_default() {} #[rustc_force_inline] fn inline_always_and_using_inline_asm() { unsafe { asm!("/* do nothing */") }; } #[instruction_set(arm::t32)] pub fn t32() { instruction_set_a32(); //~^ ERROR `instruction_set_a32` could not be inlined into `t32` but is required to be inlined instruction_set_t32(); instruction_set_default(); inline_always_and_using_inline_asm(); //~^ ERROR `inline_always_and_using_inline_asm` could not be inlined into `t32` but is required to be inlined } pub fn default() { instruction_set_a32(); //~^ ERROR `instruction_set_a32` could not be inlined into `default` but is required to be inlined instruction_set_t32(); //~^ ERROR `instruction_set_t32` could not be inlined into `default` but is required to be inlined instruction_set_default(); inline_always_and_using_inline_asm(); }