about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorEduard-Mihai Burtescu <edy.burt@gmail.com>2017-10-21 19:41:27 +0300
committerEduard-Mihai Burtescu <edy.burt@gmail.com>2017-10-31 17:34:46 +0200
commit1a7fb7dc78439a704f024609ce3dc0beb1386552 (patch)
tree36cc8c955e7c5e8e6dbdf1ca88d26ea1ea6ab022 /src/test
parent6713736275181abb3304730603afd785b0470ae3 (diff)
downloadrust-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.rs2
-rw-r--r--src/test/run-fail/binop-fail-3.rs2
-rw-r--r--src/test/run-pass/issue-32008.rs35
-rw-r--r--src/test/run-pass/issue-45425.rs20
-rw-r--r--src/test/ui/span/issue-39018.stderr2
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!";