about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2014-10-17 09:13:22 -0400
committerNiko Matsakis <niko@alum.mit.edu>2014-10-21 12:32:37 -0400
commit53ede4403bb79604eb378ba01f664a548a744044 (patch)
tree6b31f39d52a03ca799912fe709130f826ad17477
parent450263de4a93e7dd4eb863c8f4b98fc780b9c385 (diff)
downloadrust-53ede4403bb79604eb378ba01f664a548a744044.tar.gz
rust-53ede4403bb79604eb378ba01f664a548a744044.zip
Coherence tests that seemed to be missing.
-rw-r--r--src/test/compile-fail/coherence-blanket-conflicts-with-blanket-implemented.rs38
-rw-r--r--src/test/compile-fail/coherence-blanket-conflicts-with-blanket-unimplemented.rs34
2 files changed, 72 insertions, 0 deletions
diff --git a/src/test/compile-fail/coherence-blanket-conflicts-with-blanket-implemented.rs b/src/test/compile-fail/coherence-blanket-conflicts-with-blanket-implemented.rs
new file mode 100644
index 00000000000..c0d82d35e30
--- /dev/null
+++ b/src/test/compile-fail/coherence-blanket-conflicts-with-blanket-implemented.rs
@@ -0,0 +1,38 @@
+// 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 <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.
+
+use std::fmt::Show;
+use std::default::Default;
+
+// Test that two blanket impls conflict (at least without negative
+// bounds).  After all, some other crate could implement Even or Odd
+// for the same type (though this crate doesn't).
+
+trait MyTrait {
+    fn get(&self) -> uint;
+}
+
+trait Even { }
+
+trait Odd { }
+
+impl Even for int { }
+
+impl Odd for uint { }
+
+impl<T:Even> MyTrait for T { //~ ERROR E0119
+    fn get(&self) -> uint { 0 }
+}
+
+impl<T:Odd> MyTrait for T {
+    fn get(&self) -> uint { 0 }
+}
+
+fn main() { }
diff --git a/src/test/compile-fail/coherence-blanket-conflicts-with-blanket-unimplemented.rs b/src/test/compile-fail/coherence-blanket-conflicts-with-blanket-unimplemented.rs
new file mode 100644
index 00000000000..c44844bcf0b
--- /dev/null
+++ b/src/test/compile-fail/coherence-blanket-conflicts-with-blanket-unimplemented.rs
@@ -0,0 +1,34 @@
+// 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 <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.
+
+use std::fmt::Show;
+use std::default::Default;
+
+// Test that two blanket impls conflict (at least without negative
+// bounds).  After all, some other crate could implement Even or Odd
+// for the same type (though this crate doesn't implement them at all).
+
+trait MyTrait {
+    fn get(&self) -> uint;
+}
+
+trait Even { }
+
+trait Odd { }
+
+impl<T:Even> MyTrait for T { //~ ERROR E0119
+    fn get(&self) -> uint { 0 }
+}
+
+impl<T:Odd> MyTrait for T {
+    fn get(&self) -> uint { 0 }
+}
+
+fn main() { }