]> git.lizzy.rs Git - rust.git/commitdiff
Add tests for intercrate ambiguity hints.
authorMasaki Hara <ackie.h.gmai@gmail.com>
Tue, 25 Jul 2017 06:46:26 +0000 (15:46 +0900)
committerNiko Matsakis <niko@alum.mit.edu>
Tue, 5 Sep 2017 16:19:35 +0000 (12:19 -0400)
src/test/compile-fail/coherence-overlap-issue-23516-inherent.rs [new file with mode: 0644]
src/test/compile-fail/coherence-overlap-issue-23516.rs
src/test/compile-fail/coherence-overlap-upstream-inherent.rs [new file with mode: 0644]
src/test/compile-fail/coherence-overlap-upstream.rs [new file with mode: 0644]
src/test/ui/codemap_tests/overlapping_inherent_impls.stderr

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 (file)
index 0000000..dfdcc1b
--- /dev/null
@@ -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() { }
index 51d7c3e8b4cb17962f0809276d5abf49b84a85af..ffde4011ee4d8f0fb5d5201264d3e2f8f4981f77 100644 (file)
 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 (file)
index 0000000..2ec51b1
--- /dev/null
@@ -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 (file)
index 0000000..81c22e0
--- /dev/null
@@ -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() {}
index de8a24cf33f44c12f0e70d3dbf57e99101a67e09..186bccdd25407f333686157a50b677228db3412f 100644 (file)
@@ -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