inliner: Add mir-opt tests for codegen attributes compatibility
This commit is contained in:
parent
326b772609
commit
c23151bdb1
5 changed files with 133 additions and 0 deletions
39
src/test/mir-opt/inline/inline-compatibility.rs
Normal file
39
src/test/mir-opt/inline/inline-compatibility.rs
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
// Checks that only functions with compatible attributes are inlined.
|
||||||
|
//
|
||||||
|
// only-x86_64
|
||||||
|
// needs-sanitizer-address
|
||||||
|
// compile-flags: -Zsanitizer=address
|
||||||
|
|
||||||
|
#![crate_type = "lib"]
|
||||||
|
#![feature(no_sanitize)]
|
||||||
|
#![feature(target_feature_11)]
|
||||||
|
|
||||||
|
// EMIT_MIR inline_compatibility.inlined_target_feature.Inline.diff
|
||||||
|
#[target_feature(enable = "sse2")]
|
||||||
|
pub unsafe fn inlined_target_feature() {
|
||||||
|
target_feature();
|
||||||
|
}
|
||||||
|
|
||||||
|
// EMIT_MIR inline_compatibility.not_inlined_target_feature.Inline.diff
|
||||||
|
pub unsafe fn not_inlined_target_feature() {
|
||||||
|
target_feature();
|
||||||
|
}
|
||||||
|
|
||||||
|
// EMIT_MIR inline_compatibility.inlined_no_sanitize.Inline.diff
|
||||||
|
#[no_sanitize(address)]
|
||||||
|
pub unsafe fn inlined_no_sanitize() {
|
||||||
|
no_sanitize();
|
||||||
|
}
|
||||||
|
|
||||||
|
// EMIT_MIR inline_compatibility.not_inlined_no_sanitize.Inline.diff
|
||||||
|
pub unsafe fn not_inlined_no_sanitize() {
|
||||||
|
no_sanitize();
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
#[target_feature(enable = "sse2")]
|
||||||
|
pub unsafe fn target_feature() {}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
#[no_sanitize(address, memory)]
|
||||||
|
pub unsafe fn no_sanitize() {}
|
|
@ -0,0 +1,25 @@
|
||||||
|
- // MIR for `inlined_no_sanitize` before Inline
|
||||||
|
+ // MIR for `inlined_no_sanitize` after Inline
|
||||||
|
|
||||||
|
fn inlined_no_sanitize() -> () {
|
||||||
|
let mut _0: (); // return place in scope 0 at $DIR/inline-compatibility.rs:24:37: 24:37
|
||||||
|
let _1: (); // in scope 0 at $DIR/inline-compatibility.rs:25:5: 25:18
|
||||||
|
+ scope 1 {
|
||||||
|
+ }
|
||||||
|
|
||||||
|
bb0: {
|
||||||
|
StorageLive(_1); // scope 0 at $DIR/inline-compatibility.rs:25:5: 25:18
|
||||||
|
- _1 = no_sanitize() -> bb1; // scope 0 at $DIR/inline-compatibility.rs:25:5: 25:18
|
||||||
|
- // mir::Constant
|
||||||
|
- // + span: $DIR/inline-compatibility.rs:25:5: 25:16
|
||||||
|
- // + literal: Const { ty: unsafe fn() {no_sanitize}, val: Value(Scalar(<ZST>)) }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- bb1: {
|
||||||
|
+ _1 = const (); // scope 1 at $DIR/inline-compatibility.rs:39:29: 39:31
|
||||||
|
StorageDead(_1); // scope 0 at $DIR/inline-compatibility.rs:25:18: 25:19
|
||||||
|
_0 = const (); // scope 0 at $DIR/inline-compatibility.rs:24:37: 26:2
|
||||||
|
return; // scope 0 at $DIR/inline-compatibility.rs:26:2: 26:2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
- // MIR for `inlined_target_feature` before Inline
|
||||||
|
+ // MIR for `inlined_target_feature` after Inline
|
||||||
|
|
||||||
|
fn inlined_target_feature() -> () {
|
||||||
|
let mut _0: (); // return place in scope 0 at $DIR/inline-compatibility.rs:13:40: 13:40
|
||||||
|
let _1: (); // in scope 0 at $DIR/inline-compatibility.rs:14:5: 14:21
|
||||||
|
+ scope 1 {
|
||||||
|
+ }
|
||||||
|
|
||||||
|
bb0: {
|
||||||
|
StorageLive(_1); // scope 0 at $DIR/inline-compatibility.rs:14:5: 14:21
|
||||||
|
- _1 = target_feature() -> bb1; // scope 0 at $DIR/inline-compatibility.rs:14:5: 14:21
|
||||||
|
- // mir::Constant
|
||||||
|
- // + span: $DIR/inline-compatibility.rs:14:5: 14:19
|
||||||
|
- // + literal: Const { ty: unsafe fn() {target_feature}, val: Value(Scalar(<ZST>)) }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- bb1: {
|
||||||
|
+ _1 = const (); // scope 1 at $DIR/inline-compatibility.rs:35:32: 35:34
|
||||||
|
StorageDead(_1); // scope 0 at $DIR/inline-compatibility.rs:14:21: 14:22
|
||||||
|
_0 = const (); // scope 0 at $DIR/inline-compatibility.rs:13:40: 15:2
|
||||||
|
return; // scope 0 at $DIR/inline-compatibility.rs:15:2: 15:2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
- // MIR for `not_inlined_no_sanitize` before Inline
|
||||||
|
+ // MIR for `not_inlined_no_sanitize` after Inline
|
||||||
|
|
||||||
|
fn not_inlined_no_sanitize() -> () {
|
||||||
|
let mut _0: (); // return place in scope 0 at $DIR/inline-compatibility.rs:29:41: 29:41
|
||||||
|
let _1: (); // in scope 0 at $DIR/inline-compatibility.rs:30:5: 30:18
|
||||||
|
|
||||||
|
bb0: {
|
||||||
|
StorageLive(_1); // scope 0 at $DIR/inline-compatibility.rs:30:5: 30:18
|
||||||
|
_1 = no_sanitize() -> bb1; // scope 0 at $DIR/inline-compatibility.rs:30:5: 30:18
|
||||||
|
// mir::Constant
|
||||||
|
// + span: $DIR/inline-compatibility.rs:30:5: 30:16
|
||||||
|
// + literal: Const { ty: unsafe fn() {no_sanitize}, val: Value(Scalar(<ZST>)) }
|
||||||
|
}
|
||||||
|
|
||||||
|
bb1: {
|
||||||
|
StorageDead(_1); // scope 0 at $DIR/inline-compatibility.rs:30:18: 30:19
|
||||||
|
_0 = const (); // scope 0 at $DIR/inline-compatibility.rs:29:41: 31:2
|
||||||
|
return; // scope 0 at $DIR/inline-compatibility.rs:31:2: 31:2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
- // MIR for `not_inlined_target_feature` before Inline
|
||||||
|
+ // MIR for `not_inlined_target_feature` after Inline
|
||||||
|
|
||||||
|
fn not_inlined_target_feature() -> () {
|
||||||
|
let mut _0: (); // return place in scope 0 at $DIR/inline-compatibility.rs:18:44: 18:44
|
||||||
|
let _1: (); // in scope 0 at $DIR/inline-compatibility.rs:19:5: 19:21
|
||||||
|
|
||||||
|
bb0: {
|
||||||
|
StorageLive(_1); // scope 0 at $DIR/inline-compatibility.rs:19:5: 19:21
|
||||||
|
_1 = target_feature() -> bb1; // scope 0 at $DIR/inline-compatibility.rs:19:5: 19:21
|
||||||
|
// mir::Constant
|
||||||
|
// + span: $DIR/inline-compatibility.rs:19:5: 19:19
|
||||||
|
// + literal: Const { ty: unsafe fn() {target_feature}, val: Value(Scalar(<ZST>)) }
|
||||||
|
}
|
||||||
|
|
||||||
|
bb1: {
|
||||||
|
StorageDead(_1); // scope 0 at $DIR/inline-compatibility.rs:19:21: 19:22
|
||||||
|
_0 = const (); // scope 0 at $DIR/inline-compatibility.rs:18:44: 20:2
|
||||||
|
return; // scope 0 at $DIR/inline-compatibility.rs:20:2: 20:2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue