diff options
| author | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2017-10-21 19:41:27 +0300 |
|---|---|---|
| committer | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2017-10-31 17:34:46 +0200 |
| commit | 1a7fb7dc78439a704f024609ce3dc0beb1386552 (patch) | |
| tree | 36cc8c955e7c5e8e6dbdf1ca88d26ea1ea6ab022 /src/test | |
| parent | 6713736275181abb3304730603afd785b0470ae3 (diff) | |
| download | rust-1a7fb7dc78439a704f024609ce3dc0beb1386552.tar.gz rust-1a7fb7dc78439a704f024609ce3dc0beb1386552.zip | |
rustc_typeck: use subtyping on the LHS of binops.
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/compile-fail/issue-41394.rs | 2 | ||||
| -rw-r--r-- | src/test/run-fail/binop-fail-3.rs | 2 | ||||
| -rw-r--r-- | src/test/run-pass/issue-32008.rs | 35 | ||||
| -rw-r--r-- | src/test/run-pass/issue-45425.rs | 20 | ||||
| -rw-r--r-- | src/test/ui/span/issue-39018.stderr | 2 |
5 files changed, 59 insertions, 2 deletions
diff --git a/src/test/compile-fail/issue-41394.rs b/src/test/compile-fail/issue-41394.rs index 1fb3b7c4ee1..89f11edaec8 100644 --- a/src/test/compile-fail/issue-41394.rs +++ b/src/test/compile-fail/issue-41394.rs @@ -10,7 +10,7 @@ enum Foo { A = "" + 1 - //~^ ERROR binary operation `+` cannot be applied to type `&'static str` + //~^ ERROR binary operation `+` cannot be applied to type `&str` } enum Bar { diff --git a/src/test/run-fail/binop-fail-3.rs b/src/test/run-fail/binop-fail-3.rs index 5be9cd4a9bc..efbc49fbece 100644 --- a/src/test/run-fail/binop-fail-3.rs +++ b/src/test/run-fail/binop-fail-3.rs @@ -12,6 +12,8 @@ fn foo() -> ! { panic!("quux"); } + +#[allow(resolve_trait_on_defaulted_unit)] fn main() { foo() == foo(); // these types wind up being defaulted to () } diff --git a/src/test/run-pass/issue-32008.rs b/src/test/run-pass/issue-32008.rs new file mode 100644 index 00000000000..cb489acf1d9 --- /dev/null +++ b/src/test/run-pass/issue-32008.rs @@ -0,0 +1,35 @@ +// Copyright 2017 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 binary operators allow subtyping on both the LHS and RHS, +// and as such do not introduce unnecesarily strict lifetime constraints. + +use std::ops::Add; + +struct Foo; + +impl<'a> Add<&'a Foo> for &'a Foo { + type Output = (); + fn add(self, rhs: &'a Foo) {} +} + +fn try_to_add(input: &Foo) { + let local = Foo; + + // Manual reborrow worked even with invariant trait search. + &*input + &local; + + // Direct use of the reference on the LHS requires additional + // subtyping before searching (invariantly) for `LHS: Add<RHS>`. + input + &local; +} + +fn main() { +} diff --git a/src/test/run-pass/issue-45425.rs b/src/test/run-pass/issue-45425.rs new file mode 100644 index 00000000000..06ffa6b3dea --- /dev/null +++ b/src/test/run-pass/issue-45425.rs @@ -0,0 +1,20 @@ +// Copyright 2017 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::ops::Add; + +fn ref_add<T>(a: &T, b: &T) -> T +where + for<'x> &'x T: Add<&'x T, Output = T>, +{ + a + b +} + +fn main() {} diff --git a/src/test/ui/span/issue-39018.stderr b/src/test/ui/span/issue-39018.stderr index d87fc122d8e..2782753f6c8 100644 --- a/src/test/ui/span/issue-39018.stderr +++ b/src/test/ui/span/issue-39018.stderr @@ -1,4 +1,4 @@ -error[E0369]: binary operation `+` cannot be applied to type `&'static str` +error[E0369]: binary operation `+` cannot be applied to type `&str` --> $DIR/issue-39018.rs:12:13 | 12 | let x = "Hello " + "World!"; |
