From d6466ff13aef6af45f24f28e23f2f3dd36c96cf0 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Tue, 24 Mar 2015 15:36:59 -0400 Subject: [PATCH] Driveby cleanup of the impl for negation, which had some kind of surprising casts. This version more obviously corresponds to the builtin semantics. --- src/libcore/ops.rs | 24 ++----------------- .../{run-pass => compile-fail}/issue-13352.rs | 2 ++ 2 files changed, 4 insertions(+), 22 deletions(-) rename src/test/{run-pass => compile-fail}/issue-13352.rs (94%) diff --git a/src/libcore/ops.rs b/src/libcore/ops.rs index 26deb80d8c5..862eb16d0bf 100644 --- a/src/libcore/ops.rs +++ b/src/libcore/ops.rs @@ -485,6 +485,7 @@ pub trait Neg { macro_rules! neg_impl { ($($t:ty)*) => ($( #[stable(feature = "rust1", since = "1.0.0")] + #[allow(unsigned_negation)] impl Neg for $t { #[stable(feature = "rust1", since = "1.0.0")] type Output = $t; @@ -498,28 +499,7 @@ macro_rules! neg_impl { )*) } -macro_rules! neg_uint_impl { - ($t:ty, $t_signed:ty) => { - #[stable(feature = "rust1", since = "1.0.0")] - impl Neg for $t { - type Output = $t; - - #[inline] - fn neg(self) -> $t { -(self as $t_signed) as $t } - } - - forward_ref_unop! { impl Neg, neg for $t } - } -} - -neg_impl! { isize i8 i16 i32 i64 f32 f64 } - -neg_uint_impl! { usize, isize } -neg_uint_impl! { u8, i8 } -neg_uint_impl! { u16, i16 } -neg_uint_impl! { u32, i32 } -neg_uint_impl! { u64, i64 } - +neg_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 } /// The `Not` trait is used to specify the functionality of unary `!`. /// diff --git a/src/test/run-pass/issue-13352.rs b/src/test/compile-fail/issue-13352.rs similarity index 94% rename from src/test/run-pass/issue-13352.rs rename to src/test/compile-fail/issue-13352.rs index af31fee048c..a8c8c8b40c1 100644 --- a/src/test/run-pass/issue-13352.rs +++ b/src/test/compile-fail/issue-13352.rs @@ -23,4 +23,6 @@ fn main() { unsafe { libc::exit(0 as libc::c_int); } }); 2_usize + (loop {}); + //~^ ERROR E0277 + //~| ERROR E0277 }