From 12935b6514c5e09fe67083da3e50dba18b2ae43d Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Thu, 22 Jun 2017 14:42:23 -0700 Subject: [PATCH] add some compile-fail tests --- tests/compile-fail/bitop-beyond-alignment.rs | 37 ++++++++++++++++++++ tests/compile-fail/ctlz_nonzero.rs | 15 ++++++++ tests/compile-fail/cttz_nonzero.rs | 15 ++++++++ 3 files changed, 67 insertions(+) create mode 100644 tests/compile-fail/bitop-beyond-alignment.rs create mode 100644 tests/compile-fail/ctlz_nonzero.rs create mode 100644 tests/compile-fail/cttz_nonzero.rs diff --git a/tests/compile-fail/bitop-beyond-alignment.rs b/tests/compile-fail/bitop-beyond-alignment.rs new file mode 100644 index 00000000000..a30c054ab5d --- /dev/null +++ b/tests/compile-fail/bitop-beyond-alignment.rs @@ -0,0 +1,37 @@ +// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![allow(dead_code)] + +use std::mem; + +enum Tag { + Tag2(A) +} + +struct Rec { + c8: u8, + t: Tag +} + +fn mk_rec() -> Rec { + return Rec { c8:0, t:Tag::Tag2(0) }; +} + +fn is_u64_aligned(u: &Tag) -> bool { + let p: usize = unsafe { mem::transmute(u) }; + let u64_align = std::mem::align_of::(); + return (p & (u64_align + 1)) == 0; //~ ERROR a raw memory access tried to access part of a pointer value as raw bytes +} + +pub fn main() { + let x = mk_rec(); + assert!(is_u64_aligned(&x.t)); +} diff --git a/tests/compile-fail/ctlz_nonzero.rs b/tests/compile-fail/ctlz_nonzero.rs new file mode 100644 index 00000000000..704c4d4b7d4 --- /dev/null +++ b/tests/compile-fail/ctlz_nonzero.rs @@ -0,0 +1,15 @@ +#![feature(intrinsics)] + +mod rusti { + extern "rust-intrinsic" { + pub fn ctlz_nonzero(x: T) -> T; + } +} + +pub fn main() { + unsafe { + use rusti::*; + + ctlz_nonzero(0u8); //~ ERROR: ctlz_nonzero called on 0 + } +} diff --git a/tests/compile-fail/cttz_nonzero.rs b/tests/compile-fail/cttz_nonzero.rs new file mode 100644 index 00000000000..eda25c66152 --- /dev/null +++ b/tests/compile-fail/cttz_nonzero.rs @@ -0,0 +1,15 @@ +#![feature(intrinsics)] + +mod rusti { + extern "rust-intrinsic" { + pub fn cttz_nonzero(x: T) -> T; + } +} + +pub fn main() { + unsafe { + use rusti::*; + + cttz_nonzero(0u8); //~ ERROR: cttz_nonzero called on 0 + } +}