From fa9ebfc74e28ea2efb0508b3e2c73cc27ce3b65f Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Wed, 19 Oct 2016 17:17:35 -0400 Subject: move compile-fail tests to ui tests gets more comprehensive coverage in `ui` --- src/test/compile-fail/issue-2611-4.rs | 27 -------- src/test/compile-fail/issue-2611-5.rs | 27 -------- .../region-bound-extra-bound-in-impl.rs | 25 ------- .../compile-fail/trait-bounds-impl-comparison-1.rs | 80 ---------------------- .../compile-fail/trait-bounds-impl-comparison-2.rs | 33 --------- .../ui/compare-method/proj-outlives-region.stderr | 2 +- src/test/ui/compare-method/region-extra-2.rs | 25 +++++++ src/test/ui/compare-method/region-extra-2.stderr | 11 +++ src/test/ui/compare-method/region-extra.rs | 27 ++++++++ src/test/ui/compare-method/region-extra.stderr | 11 +++ src/test/ui/compare-method/region-extra.stdout | 0 src/test/ui/compare-method/region-unrelated.stderr | 2 +- src/test/ui/compare-method/region.rs | 28 -------- src/test/ui/compare-method/region.stderr | 11 --- src/test/ui/compare-method/region.stdout | 0 src/test/ui/compare-method/reordered-type-param.rs | 29 ++++++++ .../ui/compare-method/reordered-type-param.stderr | 14 ++++ .../trait-bound-on-type-parameter.rs | 28 ++++++++ .../trait-bound-on-type-parameter.stderr | 11 +++ .../ui/compare-method/traits-misc-mismatch-1.rs | 80 ++++++++++++++++++++++ .../compare-method/traits-misc-mismatch-1.stderr | 65 ++++++++++++++++++ .../ui/compare-method/traits-misc-mismatch-2.rs | 33 +++++++++ .../compare-method/traits-misc-mismatch-2.stderr | 11 +++ 23 files changed, 347 insertions(+), 233 deletions(-) delete mode 100644 src/test/compile-fail/issue-2611-4.rs delete mode 100644 src/test/compile-fail/issue-2611-5.rs delete mode 100644 src/test/compile-fail/region-bound-extra-bound-in-impl.rs delete mode 100644 src/test/compile-fail/trait-bounds-impl-comparison-1.rs delete mode 100644 src/test/compile-fail/trait-bounds-impl-comparison-2.rs create mode 100644 src/test/ui/compare-method/region-extra-2.rs create mode 100644 src/test/ui/compare-method/region-extra-2.stderr create mode 100644 src/test/ui/compare-method/region-extra.rs create mode 100644 src/test/ui/compare-method/region-extra.stderr create mode 100644 src/test/ui/compare-method/region-extra.stdout delete mode 100644 src/test/ui/compare-method/region.rs delete mode 100644 src/test/ui/compare-method/region.stderr delete mode 100644 src/test/ui/compare-method/region.stdout create mode 100644 src/test/ui/compare-method/reordered-type-param.rs create mode 100644 src/test/ui/compare-method/reordered-type-param.stderr create mode 100644 src/test/ui/compare-method/trait-bound-on-type-parameter.rs create mode 100644 src/test/ui/compare-method/trait-bound-on-type-parameter.stderr create mode 100644 src/test/ui/compare-method/traits-misc-mismatch-1.rs create mode 100644 src/test/ui/compare-method/traits-misc-mismatch-1.stderr create mode 100644 src/test/ui/compare-method/traits-misc-mismatch-2.rs create mode 100644 src/test/ui/compare-method/traits-misc-mismatch-2.stderr (limited to 'src') diff --git a/src/test/compile-fail/issue-2611-4.rs b/src/test/compile-fail/issue-2611-4.rs deleted file mode 100644 index 2222eccac73..00000000000 --- a/src/test/compile-fail/issue-2611-4.rs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012 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. - -// Tests that an impl method's bounds aren't *more* restrictive -// than the trait method it's implementing - -trait A { - fn b(&self, x: C) -> C; -} - -struct E { - f: isize -} - -impl A for E { - fn b(&self, _x: F) -> F { panic!() } - //~^ ERROR E0276 -} - -fn main() {} diff --git a/src/test/compile-fail/issue-2611-5.rs b/src/test/compile-fail/issue-2611-5.rs deleted file mode 100644 index 440294f38ae..00000000000 --- a/src/test/compile-fail/issue-2611-5.rs +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2012 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. - -// Tests that ty params get matched correctly when comparing -// an impl against a trait - -trait A { - fn b(&self, x: C) -> C; -} - -struct E { - f: isize -} - -impl A for E { - // n.b. The error message is awful -- see #3404 - fn b(&self, _x: G) -> G { panic!() } //~ ERROR method `b` has an incompatible type -} - -fn main() {} diff --git a/src/test/compile-fail/region-bound-extra-bound-in-impl.rs b/src/test/compile-fail/region-bound-extra-bound-in-impl.rs deleted file mode 100644 index b0cd3b8fdd2..00000000000 --- a/src/test/compile-fail/region-bound-extra-bound-in-impl.rs +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 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. - -// Regression test for issue #22779. An extra where clause was -// permitted on the impl that is not present on the trait. - -trait Tr<'a, T> { - fn renew<'b: 'a>(self) -> &'b mut [T]; -} - -impl<'a, T> Tr<'a, T> for &'a mut [T] { - fn renew<'b: 'a>(self) -> &'b mut [T] where 'a: 'b { - //~^ ERROR E0276 - &mut self[..] - } -} - -fn main() { } diff --git a/src/test/compile-fail/trait-bounds-impl-comparison-1.rs b/src/test/compile-fail/trait-bounds-impl-comparison-1.rs deleted file mode 100644 index cca282a1d19..00000000000 --- a/src/test/compile-fail/trait-bounds-impl-comparison-1.rs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 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. -// -// Make sure rustc checks the type parameter bounds in implementations of traits, -// see #2687 - -use std::marker; - -trait A { } - -trait B: A {} - -trait C: A {} - -trait Foo { - fn test_error1_fn(&self); - fn test_error2_fn(&self); - fn test_error3_fn(&self); - fn test3_fn(&self); - fn test4_fn(&self); - fn test_error5_fn(&self); - fn test6_fn(&self); - fn test_error7_fn(&self); - fn test_error8_fn(&self); -} - -impl Foo for isize { - // invalid bound for T, was defined as Eq in trait - fn test_error1_fn(&self) {} - //~^ ERROR E0276 - - // invalid bound for T, was defined as Eq + Ord in trait - fn test_error2_fn(&self) {} - //~^ ERROR E0276 - - // invalid bound for T, was defined as Eq + Ord in trait - fn test_error3_fn(&self) {} - //~^ ERROR E0276 - - // multiple bounds, same order as in trait - fn test3_fn(&self) {} - - // multiple bounds, different order as in trait - fn test4_fn(&self) {} - - // parameters in impls must be equal or more general than in the defining trait - fn test_error5_fn(&self) {} - //~^ ERROR E0276 - - // bound `std::cmp::Eq` not enforced by this implementation, but this is OK - fn test6_fn(&self) {} - - fn test_error7_fn(&self) {} - //~^ ERROR E0276 - - fn test_error8_fn(&self) {} - //~^ ERROR E0276 -} - -trait Getter { - fn get(&self) -> T { loop { } } -} - -trait Trait { - fn method>(&self); -} - -impl Trait for usize { - fn method>(&self) {} - //~^ ERROR E0276 -} - -fn main() {} diff --git a/src/test/compile-fail/trait-bounds-impl-comparison-2.rs b/src/test/compile-fail/trait-bounds-impl-comparison-2.rs deleted file mode 100644 index e82cf256df1..00000000000 --- a/src/test/compile-fail/trait-bounds-impl-comparison-2.rs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 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. - -// Issue #5886: a complex instance of issue #2687. - -trait Iterator { - fn next(&mut self) -> Option; -} - -trait IteratorUtil: Sized -{ - fn zip>(self, other: U) -> ZipIterator; -} - -impl> IteratorUtil for T { - fn zip>(self, other: U) -> ZipIterator { - //~^ ERROR E0276 - ZipIterator{a: self, b: other} - } -} - -struct ZipIterator { - a: T, b: U -} - -fn main() {} diff --git a/src/test/ui/compare-method/proj-outlives-region.stderr b/src/test/ui/compare-method/proj-outlives-region.stderr index f5907c0ae59..79293e0deed 100644 --- a/src/test/ui/compare-method/proj-outlives-region.stderr +++ b/src/test/ui/compare-method/proj-outlives-region.stderr @@ -8,7 +8,7 @@ error[E0276]: impl has stricter requirements than trait | ^^^^^^^^^^^^^^^^^^^^^^^^ impl has extra requirement `U: 'a` | = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - = note: for more information, see issue #18937 + = note: for more information, see issue #37166 note: lint level defined here --> $DIR/proj-outlives-region.rs:12:9 | diff --git a/src/test/ui/compare-method/region-extra-2.rs b/src/test/ui/compare-method/region-extra-2.rs new file mode 100644 index 00000000000..b0cd3b8fdd2 --- /dev/null +++ b/src/test/ui/compare-method/region-extra-2.rs @@ -0,0 +1,25 @@ +// Copyright 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. + +// Regression test for issue #22779. An extra where clause was +// permitted on the impl that is not present on the trait. + +trait Tr<'a, T> { + fn renew<'b: 'a>(self) -> &'b mut [T]; +} + +impl<'a, T> Tr<'a, T> for &'a mut [T] { + fn renew<'b: 'a>(self) -> &'b mut [T] where 'a: 'b { + //~^ ERROR E0276 + &mut self[..] + } +} + +fn main() { } diff --git a/src/test/ui/compare-method/region-extra-2.stderr b/src/test/ui/compare-method/region-extra-2.stderr new file mode 100644 index 00000000000..54a551bcfed --- /dev/null +++ b/src/test/ui/compare-method/region-extra-2.stderr @@ -0,0 +1,11 @@ +error[E0276]: impl has stricter requirements than trait + --> $DIR/region-extra-2.rs:19:5 + | +15 | fn renew<'b: 'a>(self) -> &'b mut [T]; + | -------------------------------------- definition of `renew` from trait +... +19 | fn renew<'b: 'a>(self) -> &'b mut [T] where 'a: 'b { + | ^ impl has extra requirement `'a: 'b` + +error: aborting due to previous error + diff --git a/src/test/ui/compare-method/region-extra.rs b/src/test/ui/compare-method/region-extra.rs new file mode 100644 index 00000000000..d61d0250211 --- /dev/null +++ b/src/test/ui/compare-method/region-extra.rs @@ -0,0 +1,27 @@ +// Copyright 2016 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)] +#![deny(extra_requirement_in_impl)] + +// Test that you cannot add an extra where clause in the impl relating +// two regions. + +trait Master<'a, 'b> { + fn foo(); +} + +impl<'a, 'b> Master<'a, 'b> for () { + fn foo() where 'a: 'b { } +} + +fn main() { + println!("Hello, world!"); +} diff --git a/src/test/ui/compare-method/region-extra.stderr b/src/test/ui/compare-method/region-extra.stderr new file mode 100644 index 00000000000..e657813221a --- /dev/null +++ b/src/test/ui/compare-method/region-extra.stderr @@ -0,0 +1,11 @@ +error[E0276]: impl has stricter requirements than trait + --> $DIR/region-extra.rs:22:5 + | +18 | fn foo(); + | --------- definition of `foo` from trait +... +22 | fn foo() where 'a: 'b { } + | ^^^^^^^^^^^^^^^^^^^^^^^^^ impl has extra requirement `'a: 'b` + +error: aborting due to previous error + diff --git a/src/test/ui/compare-method/region-extra.stdout b/src/test/ui/compare-method/region-extra.stdout new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/test/ui/compare-method/region-unrelated.stderr b/src/test/ui/compare-method/region-unrelated.stderr index b8084c4a2f3..b7cfdf799bc 100644 --- a/src/test/ui/compare-method/region-unrelated.stderr +++ b/src/test/ui/compare-method/region-unrelated.stderr @@ -8,7 +8,7 @@ error[E0276]: impl has stricter requirements than trait | ^^^^^^^^^^^^^^^^^^^^^^^^ impl has extra requirement `V: 'a` | = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - = note: for more information, see issue #18937 + = note: for more information, see issue #37166 note: lint level defined here --> $DIR/region-unrelated.rs:12:9 | diff --git a/src/test/ui/compare-method/region.rs b/src/test/ui/compare-method/region.rs deleted file mode 100644 index ef6a642143c..00000000000 --- a/src/test/ui/compare-method/region.rs +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2016 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)] -#![deny(extra_requirement_in_impl)] - -// Test that we elaborate `Type: 'region` constraints and infer various important things. - -trait Master<'a, 'b> { - fn foo(); -} - -// `U: 'a` does not imply `V: 'a` -impl<'a, 'b> Master<'a, 'b> for () { - fn foo() where 'a: 'b { } - //~^ ERROR parameter type `V` may not live long enough -} - -fn main() { - println!("Hello, world!"); -} diff --git a/src/test/ui/compare-method/region.stderr b/src/test/ui/compare-method/region.stderr deleted file mode 100644 index d5805981348..00000000000 --- a/src/test/ui/compare-method/region.stderr +++ /dev/null @@ -1,11 +0,0 @@ -error[E0276]: impl has stricter requirements than trait - --> $DIR/region.rs:22:5 - | -17 | fn foo(); - | --------- definition of `foo` from trait -... -22 | fn foo() where 'a: 'b { } - | ^^^^^^^^^^^^^^^^^^^^^^^^^ impl has extra requirement `'a: 'b` - -error: aborting due to previous error - diff --git a/src/test/ui/compare-method/region.stdout b/src/test/ui/compare-method/region.stdout deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/test/ui/compare-method/reordered-type-param.rs b/src/test/ui/compare-method/reordered-type-param.rs new file mode 100644 index 00000000000..0b844d4521d --- /dev/null +++ b/src/test/ui/compare-method/reordered-type-param.rs @@ -0,0 +1,29 @@ +// Copyright 2012 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. + +// Tests that ty params get matched correctly when comparing +// an impl against a trait +// +// cc #26111 + +trait A { + fn b(&self, x: C) -> C; +} + +struct E { + f: isize +} + +impl A for E { + // n.b. The error message is awful -- see #3404 + fn b(&self, _x: G) -> G { panic!() } //~ ERROR method `b` has an incompatible type +} + +fn main() {} diff --git a/src/test/ui/compare-method/reordered-type-param.stderr b/src/test/ui/compare-method/reordered-type-param.stderr new file mode 100644 index 00000000000..985b85cc4ec --- /dev/null +++ b/src/test/ui/compare-method/reordered-type-param.stderr @@ -0,0 +1,14 @@ +error[E0053]: method `b` has an incompatible type for trait + --> $DIR/reordered-type-param.rs:26:30 + | +17 | fn b(&self, x: C) -> C; + | - type in trait +... +26 | fn b(&self, _x: G) -> G { panic!() } //~ ERROR method `b` has an incompatible type + | ^ expected type parameter, found a different type parameter + | + = note: expected type `fn(&E, F) -> F` + = note: found type `fn(&E, G) -> G` + +error: aborting due to previous error + diff --git a/src/test/ui/compare-method/trait-bound-on-type-parameter.rs b/src/test/ui/compare-method/trait-bound-on-type-parameter.rs new file mode 100644 index 00000000000..09e9fb4ca2b --- /dev/null +++ b/src/test/ui/compare-method/trait-bound-on-type-parameter.rs @@ -0,0 +1,28 @@ +// Copyright 2012 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. + +// Tests that impl can't add extra `F: Sync` bound aren't *more* restrictive +// than the trait method it's implementing. +// +// Regr test for #26111. + +trait A { + fn b(&self, x: C) -> C; +} + +struct E { + f: isize +} + +impl A for E { + fn b(&self, _x: F) -> F { panic!() } //~ ERROR E0276 +} + +fn main() {} diff --git a/src/test/ui/compare-method/trait-bound-on-type-parameter.stderr b/src/test/ui/compare-method/trait-bound-on-type-parameter.stderr new file mode 100644 index 00000000000..7112a00c7b7 --- /dev/null +++ b/src/test/ui/compare-method/trait-bound-on-type-parameter.stderr @@ -0,0 +1,11 @@ +error[E0276]: impl has stricter requirements than trait + --> $DIR/trait-bound-on-type-parameter.rs:25:5 + | +17 | fn b(&self, x: C) -> C; + | ---------------------------- definition of `b` from trait +... +25 | fn b(&self, _x: F) -> F { panic!() } //~ ERROR E0276 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl has extra requirement `F: std::marker::Sync` + +error: aborting due to previous error + diff --git a/src/test/ui/compare-method/traits-misc-mismatch-1.rs b/src/test/ui/compare-method/traits-misc-mismatch-1.rs new file mode 100644 index 00000000000..cca282a1d19 --- /dev/null +++ b/src/test/ui/compare-method/traits-misc-mismatch-1.rs @@ -0,0 +1,80 @@ +// Copyright 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. +// +// Make sure rustc checks the type parameter bounds in implementations of traits, +// see #2687 + +use std::marker; + +trait A { } + +trait B: A {} + +trait C: A {} + +trait Foo { + fn test_error1_fn(&self); + fn test_error2_fn(&self); + fn test_error3_fn(&self); + fn test3_fn(&self); + fn test4_fn(&self); + fn test_error5_fn(&self); + fn test6_fn(&self); + fn test_error7_fn(&self); + fn test_error8_fn(&self); +} + +impl Foo for isize { + // invalid bound for T, was defined as Eq in trait + fn test_error1_fn(&self) {} + //~^ ERROR E0276 + + // invalid bound for T, was defined as Eq + Ord in trait + fn test_error2_fn(&self) {} + //~^ ERROR E0276 + + // invalid bound for T, was defined as Eq + Ord in trait + fn test_error3_fn(&self) {} + //~^ ERROR E0276 + + // multiple bounds, same order as in trait + fn test3_fn(&self) {} + + // multiple bounds, different order as in trait + fn test4_fn(&self) {} + + // parameters in impls must be equal or more general than in the defining trait + fn test_error5_fn(&self) {} + //~^ ERROR E0276 + + // bound `std::cmp::Eq` not enforced by this implementation, but this is OK + fn test6_fn(&self) {} + + fn test_error7_fn(&self) {} + //~^ ERROR E0276 + + fn test_error8_fn(&self) {} + //~^ ERROR E0276 +} + +trait Getter { + fn get(&self) -> T { loop { } } +} + +trait Trait { + fn method>(&self); +} + +impl Trait for usize { + fn method>(&self) {} + //~^ ERROR E0276 +} + +fn main() {} diff --git a/src/test/ui/compare-method/traits-misc-mismatch-1.stderr b/src/test/ui/compare-method/traits-misc-mismatch-1.stderr new file mode 100644 index 00000000000..f221ebe3302 --- /dev/null +++ b/src/test/ui/compare-method/traits-misc-mismatch-1.stderr @@ -0,0 +1,65 @@ +error[E0276]: impl has stricter requirements than trait + --> $DIR/traits-misc-mismatch-1.rs:36:5 + | +23 | fn test_error1_fn(&self); + | -------------------------------- definition of `test_error1_fn` from trait +... +36 | fn test_error1_fn(&self) {} + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl has extra requirement `T: std::cmp::Ord` + +error[E0276]: impl has stricter requirements than trait + --> $DIR/traits-misc-mismatch-1.rs:40:5 + | +24 | fn test_error2_fn(&self); + | -------------------------------------- definition of `test_error2_fn` from trait +... +40 | fn test_error2_fn(&self) {} + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl has extra requirement `T: B` + +error[E0276]: impl has stricter requirements than trait + --> $DIR/traits-misc-mismatch-1.rs:44:5 + | +25 | fn test_error3_fn(&self); + | -------------------------------------- definition of `test_error3_fn` from trait +... +44 | fn test_error3_fn(&self) {} + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl has extra requirement `T: B` + +error[E0276]: impl has stricter requirements than trait + --> $DIR/traits-misc-mismatch-1.rs:54:5 + | +28 | fn test_error5_fn(&self); + | ------------------------------- definition of `test_error5_fn` from trait +... +54 | fn test_error5_fn(&self) {} + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl has extra requirement `T: B` + +error[E0276]: impl has stricter requirements than trait + --> $DIR/traits-misc-mismatch-1.rs:60:5 + | +30 | fn test_error7_fn(&self); + | ------------------------------- definition of `test_error7_fn` from trait +... +60 | fn test_error7_fn(&self) {} + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl has extra requirement `T: std::cmp::Eq` + +error[E0276]: impl has stricter requirements than trait + --> $DIR/traits-misc-mismatch-1.rs:63:5 + | +31 | fn test_error8_fn(&self); + | ------------------------------- definition of `test_error8_fn` from trait +... +63 | fn test_error8_fn(&self) {} + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl has extra requirement `T: C` + +error[E0276]: impl has stricter requirements than trait + --> $DIR/traits-misc-mismatch-1.rs:76:5 + | +72 | fn method>(&self); + | ---------------------------------- definition of `method` from trait +... +76 | fn method>(&self) {} + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl has extra requirement `G: Getter` + +error: aborting due to 7 previous errors + diff --git a/src/test/ui/compare-method/traits-misc-mismatch-2.rs b/src/test/ui/compare-method/traits-misc-mismatch-2.rs new file mode 100644 index 00000000000..e82cf256df1 --- /dev/null +++ b/src/test/ui/compare-method/traits-misc-mismatch-2.rs @@ -0,0 +1,33 @@ +// Copyright 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. + +// Issue #5886: a complex instance of issue #2687. + +trait Iterator { + fn next(&mut self) -> Option; +} + +trait IteratorUtil: Sized +{ + fn zip>(self, other: U) -> ZipIterator; +} + +impl> IteratorUtil for T { + fn zip>(self, other: U) -> ZipIterator { + //~^ ERROR E0276 + ZipIterator{a: self, b: other} + } +} + +struct ZipIterator { + a: T, b: U +} + +fn main() {} diff --git a/src/test/ui/compare-method/traits-misc-mismatch-2.stderr b/src/test/ui/compare-method/traits-misc-mismatch-2.stderr new file mode 100644 index 00000000000..5003550fd1e --- /dev/null +++ b/src/test/ui/compare-method/traits-misc-mismatch-2.stderr @@ -0,0 +1,11 @@ +error[E0276]: impl has stricter requirements than trait + --> $DIR/traits-misc-mismatch-2.rs:23:5 + | +19 | fn zip>(self, other: U) -> ZipIterator; + | ------------------------------------------------------------------ definition of `zip` from trait +... +23 | fn zip>(self, other: U) -> ZipIterator { + | ^ impl has extra requirement `U: Iterator` + +error: aborting due to previous error + -- cgit 1.4.1-3-g733a5