From 698f8c2f01ea549d77d7dc3338a12e04c11057b9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:02:58 +0200 Subject: Adding upstream version 1.64.0+dfsg1. Signed-off-by: Daniel Baumann --- .../ui/compare-method/traits-misc-mismatch-1.rs | 71 ++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/test/ui/compare-method/traits-misc-mismatch-1.rs (limited to 'src/test/ui/compare-method/traits-misc-mismatch-1.rs') 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 000000000..0da4aba30 --- /dev/null +++ b/src/test/ui/compare-method/traits-misc-mismatch-1.rs @@ -0,0 +1,71 @@ +// +// 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() {} -- cgit v1.2.3