diff options
| author | Masaki Hara <ackie.h.gmai@gmail.com> | 2017-07-25 15:46:26 +0900 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2017-09-05 12:19:35 -0400 |
| commit | a59cc32ed41e4ebbd98bfe52d0491d6ebb5bd4fc (patch) | |
| tree | 05a4428c9249261489ad461b49bc6748b32b81ea /src | |
| parent | bebd6221986764d4e98488a5a7b9730edacbc07a (diff) | |
| download | rust-a59cc32ed41e4ebbd98bfe52d0491d6ebb5bd4fc.tar.gz rust-a59cc32ed41e4ebbd98bfe52d0491d6ebb5bd4fc.zip | |
Add tests for intercrate ambiguity hints.
Diffstat (limited to 'src')
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 |
