about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorMasaki Hara <ackie.h.gmai@gmail.com>2017-07-25 15:46:26 +0900
committerNiko Matsakis <niko@alum.mit.edu>2017-09-05 12:19:35 -0400
commita59cc32ed41e4ebbd98bfe52d0491d6ebb5bd4fc (patch)
tree05a4428c9249261489ad461b49bc6748b32b81ea /src
parentbebd6221986764d4e98488a5a7b9730edacbc07a (diff)
downloadrust-a59cc32ed41e4ebbd98bfe52d0491d6ebb5bd4fc.tar.gz
rust-a59cc32ed41e4ebbd98bfe52d0491d6ebb5bd4fc.zip
Add tests for intercrate ambiguity hints.
Diffstat (limited to 'src')
-rw-r--r--src/test/compile-fail/coherence-overlap-issue-23516-inherent.rs26
-rw-r--r--src/test/compile-fail/coherence-overlap-issue-23516.rs7
-rw-r--r--src/test/compile-fail/coherence-overlap-upstream-inherent.rs28
-rw-r--r--src/test/compile-fail/coherence-overlap-upstream.rs28
-rw-r--r--src/test/ui/codemap_tests/overlapping_inherent_impls.stderr1
5 files changed, 89 insertions, 1 deletions
diff --git a/src/test/compile-fail/coherence-overlap-issue-23516-inherent.rs b/src/test/compile-fail/coherence-overlap-issue-23516-inherent.rs
new file mode 100644
index 00000000000..dfdcc1bc7cb
--- /dev/null
+++ b/src/test/compile-fail/coherence-overlap-issue-23516-inherent.rs
@@ -0,0 +1,26 @@
+// Copyright 2015 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.
+
+// Tests that we consider `Box<U>: !Sugar` to be ambiguous, even
+// though we see no impl of `Sugar` for `Box`. Therefore, an overlap
+// error is reported for the following pair of impls (#23516).
+
+pub trait Sugar {}
+
+struct Cake<X>(X);
+
+impl<T:Sugar> Cake<T> { fn dummy(&self) { } }
+//~^ ERROR E0592
+//~| NOTE duplicate definitions for `dummy`
+//~| NOTE upstream crates may add new impl for `Sugar` in future versions
+impl<U:Sugar> Cake<Box<U>> { fn dummy(&self) { } }
+//~^ NOTE other definition for `dummy`
+
+fn main() { }
diff --git a/src/test/compile-fail/coherence-overlap-issue-23516.rs b/src/test/compile-fail/coherence-overlap-issue-23516.rs
index 51d7c3e8b4c..ffde4011ee4 100644
--- a/src/test/compile-fail/coherence-overlap-issue-23516.rs
+++ b/src/test/compile-fail/coherence-overlap-issue-23516.rs
@@ -15,5 +15,10 @@
 pub trait Sugar { fn dummy(&self) { } }
 pub trait Sweet { fn dummy(&self) { } }
 impl<T:Sugar> Sweet for T { }
-impl<U:Sugar> Sweet for Box<U> { } //~ ERROR E0119
+//~^ NOTE first implementation here
+impl<U:Sugar> Sweet for Box<U> { }
+//~^ ERROR E0119
+//~| NOTE conflicting implementation for `std::boxed::Box<_>`
+//~| NOTE upstream crates may add new impl for `Sugar` in future versions
+
 fn main() { }
diff --git a/src/test/compile-fail/coherence-overlap-upstream-inherent.rs b/src/test/compile-fail/coherence-overlap-upstream-inherent.rs
new file mode 100644
index 00000000000..2ec51b1bbe3
--- /dev/null
+++ b/src/test/compile-fail/coherence-overlap-upstream-inherent.rs
@@ -0,0 +1,28 @@
+// Copyright 2015 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.
+
+// Tests that we consider `i16: Remote` to be ambiguous, even
+// though the upstream crate doesn't implement it for now.
+
+// aux-build:coherence_lib.rs
+
+extern crate coherence_lib;
+
+use coherence_lib::Remote;
+
+struct A<X>(X);
+impl<T> A<T> where T: Remote { fn dummy(&self) { } }
+//~^ ERROR E0592
+//~| NOTE duplicate definitions for `dummy`
+//~| NOTE upstream crates may add new impl for `coherence_lib::Remote` in future versions
+impl A<i16> { fn dummy(&self) { } }
+//~^ NOTE other definition for `dummy`
+
+fn main() {}
diff --git a/src/test/compile-fail/coherence-overlap-upstream.rs b/src/test/compile-fail/coherence-overlap-upstream.rs
new file mode 100644
index 00000000000..81c22e06850
--- /dev/null
+++ b/src/test/compile-fail/coherence-overlap-upstream.rs
@@ -0,0 +1,28 @@
+// Copyright 2015 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.
+
+// Tests that we consider `i16: Remote` to be ambiguous, even
+// though the upstream crate doesn't implement it for now.
+
+// aux-build:coherence_lib.rs
+
+extern crate coherence_lib;
+
+use coherence_lib::Remote;
+
+trait Foo {}
+impl<T> Foo for T where T: Remote {}
+//~^ NOTE first implementation here
+impl Foo for i16 {}
+//~^ ERROR E0119
+//~| NOTE conflicting implementation for `i16`
+//~| NOTE upstream crates may add new impl for `coherence_lib::Remote` in future versions
+
+fn main() {}
diff --git a/src/test/ui/codemap_tests/overlapping_inherent_impls.stderr b/src/test/ui/codemap_tests/overlapping_inherent_impls.stderr
index de8a24cf33f..186bccdd254 100644
--- a/src/test/ui/codemap_tests/overlapping_inherent_impls.stderr
+++ b/src/test/ui/codemap_tests/overlapping_inherent_impls.stderr
@@ -24,6 +24,7 @@ error[E0592]: duplicate definitions with name `baz`
 ...
 43 |     fn baz(&self) {}
    |     ---------------- other definition for `baz`
+   = note: upstream crates may add new impl for `std::marker::Copy` in future versions
 
 error: aborting due to 3 previous errors