From c92bdcb232da3973a8a548e6b2044b610e286210 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Tue, 24 Mar 2015 15:45:11 -0400 Subject: [PATCH] Fallout where types must be specified. This is due to a [breaking-change] to operators. The primary affected code is uses of the `Rng` trait where we used to (incorrectly) infer the right-hand-side type from the left-hand-side, in the case that the LHS type was a scalar like `i32`. The fix is to add a type annotation like `x + rng.gen::()`. --- src/libcollectionstest/bench.rs | 6 +++--- src/librand/distributions/mod.rs | 2 +- src/librand/distributions/range.rs | 2 +- src/test/auxiliary/lang-item-public.rs | 18 +++++++++++++++++ src/test/bench/noise.rs | 2 +- src/test/run-pass/dst-raw.rs | 4 ++-- src/test/run-pass/early-ret-binop-add.rs | 5 ++++- src/test/run-pass/issue-1460.rs | 2 +- src/test/run-pass/issue-16560.rs | 2 +- src/test/run-pass/issue-21634.rs | 6 +++--- src/test/run-pass/issue-8460.rs | 20 +++++++++---------- .../reexported-static-methods-cross-crate.rs | 4 ++-- 12 files changed, 47 insertions(+), 26 deletions(-) diff --git a/src/libcollectionstest/bench.rs b/src/libcollectionstest/bench.rs index e883b07dc5a4..8f2e71b666c6 100644 --- a/src/libcollectionstest/bench.rs +++ b/src/libcollectionstest/bench.rs @@ -22,13 +22,13 @@ macro_rules! map_insert_rand_bench { let mut rng = rand::weak_rng(); for _ in 0..n { - let i = rng.gen() % n; + let i = rng.gen::() % n; map.insert(i, i); } // measure b.iter(|| { - let k = rng.gen() % n; + let k = rng.gen::() % n; map.insert(k, k); map.remove(&k); }); @@ -77,7 +77,7 @@ macro_rules! map_find_rand_bench { // setup let mut rng = rand::weak_rng(); - let mut keys: Vec<_> = (0..n).map(|_| rng.gen() % n).collect(); + let mut keys: Vec<_> = (0..n).map(|_| rng.gen::() % n).collect(); for &k in &keys { map.insert(k, k); diff --git a/src/librand/distributions/mod.rs b/src/librand/distributions/mod.rs index cb0829f52457..62189e721e59 100644 --- a/src/librand/distributions/mod.rs +++ b/src/librand/distributions/mod.rs @@ -256,7 +256,7 @@ fn ziggurat( return zero_case(rng, u); } // algebraically equivalent to f1 + DRanU()*(f0 - f1) < 1 - if f_tab[i + 1] + (f_tab[i] - f_tab[i + 1]) * rng.gen() < pdf(x) { + if f_tab[i + 1] + (f_tab[i] - f_tab[i + 1]) * rng.gen::() < pdf(x) { return x; } } diff --git a/src/librand/distributions/range.rs b/src/librand/distributions/range.rs index 0f74e67f5a72..347d494259d0 100644 --- a/src/librand/distributions/range.rs +++ b/src/librand/distributions/range.rs @@ -154,7 +154,7 @@ macro_rules! float_impl { } } fn sample_range(r: &Range<$ty>, rng: &mut R) -> $ty { - r.low + r.range * rng.gen() + r.low + r.range * rng.gen::<$ty>() } } } diff --git a/src/test/auxiliary/lang-item-public.rs b/src/test/auxiliary/lang-item-public.rs index 3b4547e31f5d..3c416dc2ef8d 100644 --- a/src/test/auxiliary/lang-item-public.rs +++ b/src/test/auxiliary/lang-item-public.rs @@ -32,3 +32,21 @@ extern fn eh_personality() {} pub trait Copy : PhantomFn { // Empty. } + +#[lang="rem"] +pub trait Rem { + /// The resulting type after applying the `%` operator + #[stable(feature = "rust1", since = "1.0.0")] + type Output = Self; + + /// The method for the `%` operator + #[stable(feature = "rust1", since = "1.0.0")] + fn rem(self, rhs: RHS) -> Self::Output; +} + +impl Rem for i32 { + type Output = i32; + + #[inline] + fn rem(self, other: i32) -> i32 { self % other } +} diff --git a/src/test/bench/noise.rs b/src/test/bench/noise.rs index ff2428286d26..d6577036b8eb 100644 --- a/src/test/bench/noise.rs +++ b/src/test/bench/noise.rs @@ -29,7 +29,7 @@ fn lerp(a: f32, b: f32, v: f32) -> f32 { a * (1.0 - v) + b * v } fn smooth(v: f32) -> f32 { v * v * (3.0 - 2.0 * v) } fn random_gradient(r: &mut R) -> Vec2 { - let v = PI * 2.0 * r.gen(); + let v = PI * 2.0 * r.gen::(); Vec2 { x: v.cos(), y: v.sin() } } diff --git a/src/test/run-pass/dst-raw.rs b/src/test/run-pass/dst-raw.rs index c8f8218cc28d..5e0e5bd03fe6 100644 --- a/src/test/run-pass/dst-raw.rs +++ b/src/test/run-pass/dst-raw.rs @@ -56,7 +56,7 @@ pub fn main() { } // raw slice with explicit cast - let a = &[1, 2, 3] as *const [_]; + let a = &[1, 2, 3] as *const [i32]; unsafe { let b = (*a)[2]; assert!(b == 3); @@ -96,7 +96,7 @@ pub fn main() { assert!(len == 3); } - let a = &mut [1, 2, 3] as *mut [_]; + let a = &mut [1, 2, 3] as *mut [i32]; unsafe { let b = (*a)[2]; assert!(b == 3); diff --git a/src/test/run-pass/early-ret-binop-add.rs b/src/test/run-pass/early-ret-binop-add.rs index b01d6523bf01..7bd292e66f25 100644 --- a/src/test/run-pass/early-ret-binop-add.rs +++ b/src/test/run-pass/early-ret-binop-add.rs @@ -10,5 +10,8 @@ // pretty-expanded FIXME #23616 -fn wsucc(n: isize) -> isize { 0 + { return n + 1 } } +use std::num::Int; + +fn wsucc(n: T) -> T { n + { return n } } + pub fn main() { } diff --git a/src/test/run-pass/issue-1460.rs b/src/test/run-pass/issue-1460.rs index 6d2d02d2b8b6..6e1cfc718629 100644 --- a/src/test/run-pass/issue-1460.rs +++ b/src/test/run-pass/issue-1460.rs @@ -12,5 +12,5 @@ // pretty-expanded FIXME #23616 pub fn main() { - {|i| if 1 == i { }}; + {|i: u32| if 1 == i { }}; } diff --git a/src/test/run-pass/issue-16560.rs b/src/test/run-pass/issue-16560.rs index 15a5080f5a24..33842fab6989 100644 --- a/src/test/run-pass/issue-16560.rs +++ b/src/test/run-pass/issue-16560.rs @@ -17,7 +17,7 @@ use std::mem; fn main() { let y = 0u8; - let closure = move |x| y + x; + let closure = move |x: u8| y + x; // Check that both closures are capturing by value assert_eq!(1, mem::size_of_val(&closure)); diff --git a/src/test/run-pass/issue-21634.rs b/src/test/run-pass/issue-21634.rs index 53297d0a8f3b..fe540e1aabef 100644 --- a/src/test/run-pass/issue-21634.rs +++ b/src/test/run-pass/issue-21634.rs @@ -12,13 +12,13 @@ // pretty-expanded FIXME #23616 fn main() { - if let Ok(x) = "3.1415".parse() { + if let Ok(x) = "3.1415".parse::() { assert_eq!(false, x <= 0.0); } - if let Ok(x) = "3.1415".parse() { + if let Ok(x) = "3.1415".parse::() { assert_eq!(3.1415, x + 0.0); } - if let Ok(mut x) = "3.1415".parse() { + if let Ok(mut x) = "3.1415".parse::() { assert_eq!(8.1415, { x += 5.0; x }); } } diff --git a/src/test/run-pass/issue-8460.rs b/src/test/run-pass/issue-8460.rs index 0ef668794ec0..7d8c4ab210d0 100644 --- a/src/test/run-pass/issue-8460.rs +++ b/src/test/run-pass/issue-8460.rs @@ -25,19 +25,19 @@ fn main() { assert!(thread::spawn(move|| { min_val::() / -1; }).join().is_err()); assert!(thread::spawn(move|| { min_val::() / -1; }).join().is_err()); assert!(thread::spawn(move|| { min_val::() / -1; }).join().is_err()); - assert!(thread::spawn(move|| { 1isize / zero(); }).join().is_err()); - assert!(thread::spawn(move|| { 1i8 / zero(); }).join().is_err()); - assert!(thread::spawn(move|| { 1i16 / zero(); }).join().is_err()); - assert!(thread::spawn(move|| { 1i32 / zero(); }).join().is_err()); - assert!(thread::spawn(move|| { 1i64 / zero(); }).join().is_err()); + assert!(thread::spawn(move|| { 1isize / zero::(); }).join().is_err()); + assert!(thread::spawn(move|| { 1i8 / zero::(); }).join().is_err()); + assert!(thread::spawn(move|| { 1i16 / zero::(); }).join().is_err()); + assert!(thread::spawn(move|| { 1i32 / zero::(); }).join().is_err()); + assert!(thread::spawn(move|| { 1i64 / zero::(); }).join().is_err()); assert!(thread::spawn(move|| { min_val::() % -1; }).join().is_err()); assert!(thread::spawn(move|| { min_val::() % -1; }).join().is_err()); assert!(thread::spawn(move|| { min_val::() % -1; }).join().is_err()); assert!(thread::spawn(move|| { min_val::() % -1; }).join().is_err()); assert!(thread::spawn(move|| { min_val::() % -1; }).join().is_err()); - assert!(thread::spawn(move|| { 1isize % zero(); }).join().is_err()); - assert!(thread::spawn(move|| { 1i8 % zero(); }).join().is_err()); - assert!(thread::spawn(move|| { 1i16 % zero(); }).join().is_err()); - assert!(thread::spawn(move|| { 1i32 % zero(); }).join().is_err()); - assert!(thread::spawn(move|| { 1i64 % zero(); }).join().is_err()); + assert!(thread::spawn(move|| { 1isize % zero::(); }).join().is_err()); + assert!(thread::spawn(move|| { 1i8 % zero::(); }).join().is_err()); + assert!(thread::spawn(move|| { 1i16 % zero::(); }).join().is_err()); + assert!(thread::spawn(move|| { 1i32 % zero::(); }).join().is_err()); + assert!(thread::spawn(move|| { 1i64 % zero::(); }).join().is_err()); } diff --git a/src/test/run-pass/reexported-static-methods-cross-crate.rs b/src/test/run-pass/reexported-static-methods-cross-crate.rs index 374d0d8d9b96..3efd913cf543 100644 --- a/src/test/run-pass/reexported-static-methods-cross-crate.rs +++ b/src/test/run-pass/reexported-static-methods-cross-crate.rs @@ -19,8 +19,8 @@ use reexported_static_methods::Boz; use reexported_static_methods::Bort; pub fn main() { - assert_eq!(42, Foo::foo()); - assert_eq!(84, Baz::bar()); + assert_eq!(42_isize, Foo::foo()); + assert_eq!(84_isize, Baz::bar()); assert!(Boz::boz(1)); assert_eq!("bort()".to_string(), Bort::bort()); }