From 612ef5f518198448c43959a6416b9da2964f9167 Mon Sep 17 00:00:00 2001
From: Niko Matsakis <niko@alum.mit.edu>
Date: Thu, 12 Sep 2019 17:04:32 -0400
Subject: [PATCH 1/2] add new tests for re_rebalance_coherence

---
 ...]-foreign[foreign[t],local]-for-foreign.rs | 14 +++++++++++++
 ...pl[t]-foreign[local]-for-fundamental[t].rs | 21 +++++++++++++++++++
 .../coherence/impl[t]-foreign[local]-for-t.rs | 16 ++++++++++++++
 .../impl[t]-foreign[local]-for-t.stderr       | 11 ++++++++++
 .../coherence/re-rebalance-coherence-rpass.rs | 14 -------------
 5 files changed, 62 insertions(+), 14 deletions(-)
 create mode 100644 src/test/ui/coherence/impl[t]-foreign[foreign[t],local]-for-foreign.rs
 create mode 100644 src/test/ui/coherence/impl[t]-foreign[local]-for-fundamental[t].rs
 create mode 100644 src/test/ui/coherence/impl[t]-foreign[local]-for-t.rs
 create mode 100644 src/test/ui/coherence/impl[t]-foreign[local]-for-t.stderr
 delete mode 100644 src/test/ui/coherence/re-rebalance-coherence-rpass.rs

diff --git a/src/test/ui/coherence/impl[t]-foreign[foreign[t],local]-for-foreign.rs b/src/test/ui/coherence/impl[t]-foreign[foreign[t],local]-for-foreign.rs
new file mode 100644
index 0000000000000..61f2637c0c297
--- /dev/null
+++ b/src/test/ui/coherence/impl[t]-foreign[foreign[t],local]-for-foreign.rs
@@ -0,0 +1,14 @@
+#![feature(re_rebalance_coherence)]
+
+// run-pass
+// compile-flags:--crate-name=test
+// aux-build:coherence_lib.rs
+
+extern crate coherence_lib as lib;
+use lib::*;
+use std::rc::Rc;
+
+struct Local;
+impl<T> Remote2<Rc<T>, Local> for usize { }
+
+fn main() {}
diff --git a/src/test/ui/coherence/impl[t]-foreign[local]-for-fundamental[t].rs b/src/test/ui/coherence/impl[t]-foreign[local]-for-fundamental[t].rs
new file mode 100644
index 0000000000000..586b8de9e95c9
--- /dev/null
+++ b/src/test/ui/coherence/impl[t]-foreign[local]-for-fundamental[t].rs
@@ -0,0 +1,21 @@
+#![feature(re_rebalance_coherence)]
+
+// compile-flags:--crate-name=test
+// aux-build:coherence_lib.rs
+// run-pass
+
+extern crate coherence_lib as lib;
+use lib::*;
+use std::rc::Rc;
+
+struct Local;
+
+impl<T> Remote1<Local> for Box<T> {
+    // FIXME(#64412) -- this is expected to error
+}
+
+impl<T> Remote1<Local> for &T {
+    // FIXME(#64412) -- this is expected to error
+}
+
+fn main() {}
diff --git a/src/test/ui/coherence/impl[t]-foreign[local]-for-t.rs b/src/test/ui/coherence/impl[t]-foreign[local]-for-t.rs
new file mode 100644
index 0000000000000..6f35c6c9dbc88
--- /dev/null
+++ b/src/test/ui/coherence/impl[t]-foreign[local]-for-t.rs
@@ -0,0 +1,16 @@
+#![feature(re_rebalance_coherence)]
+
+// compile-flags:--crate-name=test
+// aux-build:coherence_lib.rs
+
+extern crate coherence_lib as lib;
+use lib::*;
+use std::rc::Rc;
+
+struct Local;
+
+impl<T> Remote1<Local> for T {
+    //~^ ERROR type parameter `T` must be used as the type parameter for some local type
+}
+
+fn main() {}
diff --git a/src/test/ui/coherence/impl[t]-foreign[local]-for-t.stderr b/src/test/ui/coherence/impl[t]-foreign[local]-for-t.stderr
new file mode 100644
index 0000000000000..be7de8cccb467
--- /dev/null
+++ b/src/test/ui/coherence/impl[t]-foreign[local]-for-t.stderr
@@ -0,0 +1,11 @@
+error[E0210]: type parameter `T` must be used as the type parameter for some local type (e.g., `MyStruct<T>`)
+  --> $DIR/impl[t]-foreign[local]-for-t.rs:12:1
+   |
+LL | impl<T> Remote1<Local> for T {
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ type parameter `T` must be used as the type parameter for some local type
+   |
+   = note: only traits defined in the current crate can be implemented for a type parameter
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0210`.
diff --git a/src/test/ui/coherence/re-rebalance-coherence-rpass.rs b/src/test/ui/coherence/re-rebalance-coherence-rpass.rs
deleted file mode 100644
index bacd3b89fad29..0000000000000
--- a/src/test/ui/coherence/re-rebalance-coherence-rpass.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-#![allow(dead_code)]
-#![feature(re_rebalance_coherence)]
-
-// run-pass
-// aux-build:re_rebalance_coherence_lib.rs
-
-extern crate re_rebalance_coherence_lib as lib;
-use lib::*;
-
-struct Oracle;
-impl Backend for Oracle {}
-impl<'a, T:'a, Tab> QueryFragment<Oracle> for BatchInsert<'a, T, Tab> {}
-
-fn main() {}

From e69d1b67b6603e0635c553eff693a0606d282d75 Mon Sep 17 00:00:00 2001
From: Niko Matsakis <niko@alum.mit.edu>
Date: Fri, 13 Sep 2019 14:57:06 -0400
Subject: [PATCH 2/2] change to check-pass

---
 .../coherence/impl[t]-foreign[foreign[t],local]-for-foreign.rs  | 2 +-
 .../ui/coherence/impl[t]-foreign[local]-for-fundamental[t].rs   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/test/ui/coherence/impl[t]-foreign[foreign[t],local]-for-foreign.rs b/src/test/ui/coherence/impl[t]-foreign[foreign[t],local]-for-foreign.rs
index 61f2637c0c297..54d4bf04a583c 100644
--- a/src/test/ui/coherence/impl[t]-foreign[foreign[t],local]-for-foreign.rs
+++ b/src/test/ui/coherence/impl[t]-foreign[foreign[t],local]-for-foreign.rs
@@ -1,6 +1,6 @@
 #![feature(re_rebalance_coherence)]
 
-// run-pass
+// check-pass
 // compile-flags:--crate-name=test
 // aux-build:coherence_lib.rs
 
diff --git a/src/test/ui/coherence/impl[t]-foreign[local]-for-fundamental[t].rs b/src/test/ui/coherence/impl[t]-foreign[local]-for-fundamental[t].rs
index 586b8de9e95c9..db671cb9bcaba 100644
--- a/src/test/ui/coherence/impl[t]-foreign[local]-for-fundamental[t].rs
+++ b/src/test/ui/coherence/impl[t]-foreign[local]-for-fundamental[t].rs
@@ -2,7 +2,7 @@
 
 // compile-flags:--crate-name=test
 // aux-build:coherence_lib.rs
-// run-pass
+// check-pass
 
 extern crate coherence_lib as lib;
 use lib::*;