diff options
| author | Simonas Kazlauskas <github@kazlauskas.me> | 2016-01-11 21:17:52 +0200 |
|---|---|---|
| committer | Simonas Kazlauskas <github@kazlauskas.me> | 2016-01-11 21:17:52 +0200 |
| commit | dd6aa056fc4997fca0f02f20bd4eceeeefffc1b5 (patch) | |
| tree | 2b370298c6a314eff4e54e7a8d0a2b5f64fb7083 /src/test | |
| parent | 0672ed4e82abb562660c8a6d7183288c15e4526a (diff) | |
| parent | bac3eec67c367718c05585b72974c58a66f6abd0 (diff) | |
| download | rust-dd6aa056fc4997fca0f02f20bd4eceeeefffc1b5.tar.gz rust-dd6aa056fc4997fca0f02f20bd4eceeeefffc1b5.zip | |
Rollup merge of #30538 - oli-obk:kill_unsigned_unary_negation, r=pnkfelix
fixes #29645
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/compile-fail/const-eval-overflow.rs | 9 | ||||
| -rw-r--r-- | src/test/compile-fail/const-eval-overflow0.rs | 100 | ||||
| -rw-r--r-- | src/test/compile-fail/enum-discrim-too-small.rs | 1 | ||||
| -rw-r--r-- | src/test/compile-fail/feature-gate-negate-unsigned.rs | 18 | ||||
| -rw-r--r-- | src/test/compile-fail/lint-type-limits.rs | 2 | ||||
| -rw-r--r-- | src/test/run-pass/bitwise.rs | 6 | ||||
| -rw-r--r-- | src/test/run-pass/intrinsics-integer.rs | 18 | ||||
| -rw-r--r-- | src/test/run-pass/unary-minus-suffix-inference.rs | 24 |
8 files changed, 125 insertions, 53 deletions
diff --git a/src/test/compile-fail/const-eval-overflow.rs b/src/test/compile-fail/const-eval-overflow.rs index daa60955ad8..2a2fc2ef080 100644 --- a/src/test/compile-fail/const-eval-overflow.rs +++ b/src/test/compile-fail/const-eval-overflow.rs @@ -9,7 +9,6 @@ // except according to those terms. #![allow(unused_imports)] -#![feature(negate_unsigned)] // Note: the relevant lint pass here runs before some of the constant // evaluation below (e.g. that performed by trans and llvm), so if you @@ -65,7 +64,7 @@ const VALS_I64: (i64, i64, i64, i64) = ); const VALS_U8: (u8, u8, u8, u8) = - (-u8::MIN, + (-(u8::MIN as i8) as u8, u8::MIN - 1, //~^ ERROR attempted to sub with overflow u8::MAX + 1, @@ -75,7 +74,7 @@ const VALS_U8: (u8, u8, u8, u8) = ); const VALS_U16: (u16, u16, u16, u16) = - (-u16::MIN, + (-(u16::MIN as i16) as u16, u16::MIN - 1, //~^ ERROR attempted to sub with overflow u16::MAX + 1, @@ -85,7 +84,7 @@ const VALS_U16: (u16, u16, u16, u16) = ); const VALS_U32: (u32, u32, u32, u32) = - (-u32::MIN, + (-(u32::MIN as i32) as u32, u32::MIN - 1, //~^ ERROR attempted to sub with overflow u32::MAX + 1, @@ -95,7 +94,7 @@ const VALS_U32: (u32, u32, u32, u32) = ); const VALS_U64: (u64, u64, u64, u64) = - (-u64::MIN, + (-(u64::MIN as i64) as u64, u64::MIN - 1, //~^ ERROR attempted to sub with overflow u64::MAX + 1, diff --git a/src/test/compile-fail/const-eval-overflow0.rs b/src/test/compile-fail/const-eval-overflow0.rs new file mode 100644 index 00000000000..7db7de9cee3 --- /dev/null +++ b/src/test/compile-fail/const-eval-overflow0.rs @@ -0,0 +1,100 @@ +// Copyright 2015 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 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![allow(unused_imports)] + +// Note: the relevant lint pass here runs before some of the constant +// evaluation below (e.g. that performed by trans and llvm), so if you +// change this warn to a deny, then the compiler will exit before +// those errors are detected. + +use std::fmt; +use std::{i8, i16, i32, i64, isize}; +use std::{u8, u16, u32, u64, usize}; + +const VALS_I8: (i8, i8, i8, i8) = + (-i8::MIN, + i8::MIN - 1, + i8::MAX + 1, + i8::MIN * 2, + ); + +const VALS_I16: (i16, i16, i16, i16) = + (-i16::MIN, + i16::MIN - 1, + i16::MAX + 1, + i16::MIN * 2, + ); + +const VALS_I32: (i32, i32, i32, i32) = + (-i32::MIN, + i32::MIN - 1, + i32::MAX + 1, + i32::MIN * 2, + ); + +const VALS_I64: (i64, i64, i64, i64) = + (-i64::MIN, + i64::MIN - 1, + i64::MAX + 1, + i64::MAX * 2, + ); + +const VALS_U8: (u8, u8, u8, u8) = + (-u8::MIN, + //~^ ERROR unary negation of unsigned integer + //~| HELP use a cast or the `!` operator + u8::MIN - 1, + u8::MAX + 1, + u8::MAX * 2, + ); + +const VALS_U16: (u16, u16, u16, u16) = + (-u16::MIN, + //~^ ERROR unary negation of unsigned integer + //~| HELP use a cast or the `!` operator + u16::MIN - 1, + u16::MAX + 1, + u16::MAX * 2, + ); + +const VALS_U32: (u32, u32, u32, u32) = + (-u32::MIN, + //~^ ERROR unary negation of unsigned integer + //~| HELP use a cast or the `!` operator + u32::MIN - 1, + u32::MAX + 1, + u32::MAX * 2, + ); + +const VALS_U64: (u64, u64, u64, u64) = + (-u64::MIN, + //~^ ERROR unary negation of unsigned integer + //~| HELP use a cast or the `!` operator + u64::MIN - 1, + u64::MAX + 1, + u64::MAX * 2, + ); + +fn main() { + foo(VALS_I8); + foo(VALS_I16); + foo(VALS_I32); + foo(VALS_I64); + + foo(VALS_U8); + foo(VALS_U16); + foo(VALS_U32); + foo(VALS_U64); +} + +fn foo<T:fmt::Debug>(x: T) { + println!("{:?}", x); +} diff --git a/src/test/compile-fail/enum-discrim-too-small.rs b/src/test/compile-fail/enum-discrim-too-small.rs index cdf7d026d5e..84a27a38200 100644 --- a/src/test/compile-fail/enum-discrim-too-small.rs +++ b/src/test/compile-fail/enum-discrim-too-small.rs @@ -8,7 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(negate_unsigned)] #[repr(u8)] //~ NOTE discriminant type specified here enum Eu8 { diff --git a/src/test/compile-fail/feature-gate-negate-unsigned.rs b/src/test/compile-fail/feature-gate-negate-unsigned.rs index b1c73fab4ff..15cc17b19db 100644 --- a/src/test/compile-fail/feature-gate-negate-unsigned.rs +++ b/src/test/compile-fail/feature-gate-negate-unsigned.rs @@ -8,8 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// Test that negating unsigned integers is gated by `negate_unsigned` feature -// gate +// Test that negating unsigned integers doesn't compile struct S; impl std::ops::Neg for S { @@ -18,21 +17,26 @@ impl std::ops::Neg for S { } const _MAX: usize = -1; -//~^ ERROR unary negation of unsigned integers may be removed in the future +//~^ ERROR unary negation of unsigned integer +//~| HELP use a cast or the `!` operator fn main() { let a = -1; - //~^ ERROR unary negation of unsigned integers may be removed in the future + //~^ ERROR unary negation of unsigned integer + //~| HELP use a cast or the `!` operator let _b : u8 = a; // for infering variable a to u8. -a; - //~^ ERROR unary negation of unsigned integers may be removed in the future + //~^ ERROR unary negation of unsigned integer + //~| HELP use a cast or the `!` operator let _d = -1u8; - //~^ ERROR unary negation of unsigned integers may be removed in the future + //~^ ERROR unary negation of unsigned integer + //~| HELP use a cast or the `!` operator for _ in -10..10u8 {} - //~^ ERROR unary negation of unsigned integers may be removed in the future + //~^ ERROR unary negation of unsigned integer + //~| HELP use a cast or the `!` operator -S; // should not trigger the gate; issue 26840 } diff --git a/src/test/compile-fail/lint-type-limits.rs b/src/test/compile-fail/lint-type-limits.rs index 839d50ae63f..0b414ad73db 100644 --- a/src/test/compile-fail/lint-type-limits.rs +++ b/src/test/compile-fail/lint-type-limits.rs @@ -8,9 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(negate_unsigned)] #![allow(dead_code)] -#![feature(negate_unsigned)] // compile-flags: -D unused-comparisons fn main() { } diff --git a/src/test/run-pass/bitwise.rs b/src/test/run-pass/bitwise.rs index a9f19c12b02..ac24ed8d916 100644 --- a/src/test/run-pass/bitwise.rs +++ b/src/test/run-pass/bitwise.rs @@ -8,16 +8,14 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(negate_unsigned)] - #[cfg(any(target_arch = "x86", target_arch = "arm"))] fn target() { - assert_eq!(-1000 as usize >> 3_usize, 536870787_usize); + assert_eq!(-1000isize as usize >> 3_usize, 536870787_usize); } #[cfg(any(target_arch = "x86_64", target_arch = "aarch64"))] fn target() { - assert_eq!(-1000 as usize >> 3_usize, 2305843009213693827_usize); + assert_eq!(-1000isize as usize >> 3_usize, 2305843009213693827_usize); } fn general() { diff --git a/src/test/run-pass/intrinsics-integer.rs b/src/test/run-pass/intrinsics-integer.rs index 170a6c95aa8..759dc515456 100644 --- a/src/test/run-pass/intrinsics-integer.rs +++ b/src/test/run-pass/intrinsics-integer.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. - -#![feature(negate_unsigned)] #![feature(intrinsics)] mod rusti { @@ -45,10 +43,10 @@ pub fn main() { assert_eq!(ctpop(100u32), 3); assert_eq!(ctpop(100i32), 3); assert_eq!(ctpop(100u64), 3); assert_eq!(ctpop(100i64), 3); - assert_eq!(ctpop(-1u8), 8); assert_eq!(ctpop(-1i8), 8); - assert_eq!(ctpop(-1u16), 16); assert_eq!(ctpop(-1i16), 16); - assert_eq!(ctpop(-1u32), 32); assert_eq!(ctpop(-1i32), 32); - assert_eq!(ctpop(-1u64), 64); assert_eq!(ctpop(-1i64), 64); + assert_eq!(ctpop(-1i8 as u8), 8); assert_eq!(ctpop(-1i8), 8); + assert_eq!(ctpop(-1i16 as u16), 16); assert_eq!(ctpop(-1i16), 16); + assert_eq!(ctpop(-1i32 as u32), 32); assert_eq!(ctpop(-1i32), 32); + assert_eq!(ctpop(-1i64 as u64), 64); assert_eq!(ctpop(-1i64), 64); assert_eq!(ctlz(0u8), 8); assert_eq!(ctlz(0i8), 8); assert_eq!(ctlz(0u16), 16); assert_eq!(ctlz(0i16), 16); @@ -70,10 +68,10 @@ pub fn main() { assert_eq!(ctlz(100u32), 25); assert_eq!(ctlz(100i32), 25); assert_eq!(ctlz(100u64), 57); assert_eq!(ctlz(100i64), 57); - assert_eq!(cttz(-1u8), 0); assert_eq!(cttz(-1i8), 0); - assert_eq!(cttz(-1u16), 0); assert_eq!(cttz(-1i16), 0); - assert_eq!(cttz(-1u32), 0); assert_eq!(cttz(-1i32), 0); - assert_eq!(cttz(-1u64), 0); assert_eq!(cttz(-1i64), 0); + assert_eq!(cttz(-1i8 as u8), 0); assert_eq!(cttz(-1i8), 0); + assert_eq!(cttz(-1i16 as u16), 0); assert_eq!(cttz(-1i16), 0); + assert_eq!(cttz(-1i32 as u32), 0); assert_eq!(cttz(-1i32), 0); + assert_eq!(cttz(-1i64 as u64), 0); assert_eq!(cttz(-1i64), 0); assert_eq!(cttz(0u8), 8); assert_eq!(cttz(0i8), 8); assert_eq!(cttz(0u16), 16); assert_eq!(cttz(0i16), 16); diff --git a/src/test/run-pass/unary-minus-suffix-inference.rs b/src/test/run-pass/unary-minus-suffix-inference.rs index fdb70fe248e..cff260c3ba6 100644 --- a/src/test/run-pass/unary-minus-suffix-inference.rs +++ b/src/test/run-pass/unary-minus-suffix-inference.rs @@ -8,8 +8,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(negate_unsigned)] - pub fn main() { let a = 1; let a_neg: i8 = -a; @@ -30,26 +28,4 @@ pub fn main() { let e = 1; let e_neg: isize = -e; println!("{}", e_neg); - - // intentional overflows - - let f = 1; - let f_neg: u8 = -f; - println!("{}", f_neg); - - let g = 1; - let g_neg: u16 = -g; - println!("{}", g_neg); - - let h = 1; - let h_neg: u32 = -h; - println!("{}", h_neg); - - let i = 1; - let i_neg: u64 = -i; - println!("{}", i_neg); - - let j = 1; - let j_neg: usize = -j; - println!("{}", j_neg); } |
