Skip to content

Commit

Permalink
Added ui tests for volatile and nearby intrinsics
Browse files Browse the repository at this point in the history
  • Loading branch information
theo-lw committed Jul 13, 2020
1 parent 9a3a31a commit 5ff7e1a
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 0 deletions.
18 changes: 18 additions & 0 deletions src/test/codegen/intrinsics/volatile_order.rs
@@ -0,0 +1,18 @@
#![crate_type = "lib"]
#![feature(core_intrinsics)]

use std::intrinsics::*;

pub unsafe fn test_volatile_order() {
let mut a: Box<u8> = Box::new(0);
// CHECK: load volatile
let x = volatile_load(&*a);
// CHECK: load volatile
let x = volatile_load(&*a);
// CHECK: store volatile
volatile_store(&mut *a, 12);
// CHECK: store volatile
unaligned_volatile_store(&mut *a, 12);
// CHECK: llvm.memset.p0i8
volatile_set_memory(&mut *a, 12, 1)
}
11 changes: 11 additions & 0 deletions src/test/ui/intrinsics/intrinsic-nearby.rs
@@ -0,0 +1,11 @@
// run-pass
#![feature(core_intrinsics)]

use std::intrinsics::*;

fn main() {
unsafe {
assert_eq!(nearbyintf32(5.234f32), 5f32);
assert_eq!(nearbyintf64(6.777f64), 7f64);
}
}
43 changes: 43 additions & 0 deletions src/test/ui/intrinsics/intrinsic-volatile.rs
@@ -0,0 +1,43 @@
// run-pass
#![feature(core_intrinsics)]

use std::intrinsics::*;

pub fn main() {
unsafe {
let mut x: Box<u8> = Box::new(0);
let mut y: Box<u8> = Box::new(0);

// test volatile load
assert_eq!(volatile_load(&*x), 0);
*x = 1;
assert_eq!(volatile_load(&*x), 1);

// test volatile store
volatile_store(&mut *x, 2);
assert_eq!(*x, 2);

// test volatile copy memory
volatile_copy_memory(&mut *y, &*x, 1);
assert_eq!(*y, 2);

// test volatile copy non-overlapping memory
*x = 3;
volatile_copy_nonoverlapping_memory(&mut *y, &*x, 1);
assert_eq!(*y, 3);

// test volatile set memory
volatile_set_memory(&mut *x, 4, 1);
assert_eq!(*x, 4);

// test unaligned volatile load
let arr: [u8; 3] = [1, 2, 3];
let ptr = arr[1..].as_ptr() as *const u16;
assert_eq!(unaligned_volatile_load(ptr), u16::from_ne_bytes([arr[1], arr[2]]));

// test unaligned volatile store
let ptr = arr[1..].as_ptr() as *mut u16;
unaligned_volatile_store(ptr, 0);
assert_eq!(arr, [1, 0, 0]);
}
}

0 comments on commit 5ff7e1a

Please sign in to comment.