rustc: Forbid #[inline(always)] with #[target_feature]
Once a target feature is enabled for a function that means that it in general can't be inlined into other functions which don't have that target feature enabled. This can cause both safety and LLVM issues if we were to actually inline it, so `#[inline(always)]` both can't be respected and would be an error if we did so! Today LLVM doesn't inline functions with different `#[target_feature]` annotations, but it turns out that if one is tagged with `#[inline(always)]` it'll override this and cause scary LLVM error to arise! This commit fixes this issue by forbidding these two attributes to be used in conjunction with one another. cc rust-lang-nursery/stdsimd#404
This commit is contained in:
parent
9c9424de51
commit
38d48ef537
3 changed files with 27 additions and 1 deletions
|
@ -33,6 +33,11 @@ fn bar() {}
|
|||
//~^ ERROR: should be applied to a function
|
||||
mod another {}
|
||||
|
||||
#[inline(always)]
|
||||
//~^ ERROR: cannot use #[inline(always)]
|
||||
#[target_feature(enable = "sse2")]
|
||||
unsafe fn test() {}
|
||||
|
||||
fn main() {
|
||||
unsafe {
|
||||
foo();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue