From ed8d059d8d49491b736ea88edd8f2b57a866c44a Mon Sep 17 00:00:00 2001
From: Aaron Turon <aturon@mozilla.com>
Date: Wed, 30 Dec 2015 15:25:31 -0800
Subject: [PATCH] Adjust tests for feature gate, and add tests for the gate
 itself

---
 src/test/auxiliary/go_trait.rs                |  2 ++
 .../auxiliary/specialization_cross_crate.rs   |  2 ++
 .../specialization-default-projection.rs      |  2 ++
 .../specialization-default-types.rs           |  2 ++
 .../specialization-feature-gate-default.rs    | 19 +++++++++++++++
 .../specialization-feature-gate-overlap.rs    | 23 +++++++++++++++++++
 .../specialization-negative-impl.rs           |  1 +
 .../compile-fail/specialization-no-default.rs |  2 ++
 .../specialization-overlap-negative.rs        |  1 +
 .../compile-fail/specialization-overlap.rs    |  2 ++
 .../specialization-allowed-cross-crate.rs     |  2 ++
 src/test/run-pass/specialization-assoc-fns.rs |  2 ++
 src/test/run-pass/specialization-basics.rs    |  2 ++
 .../run-pass/specialization-cross-crate.rs    |  2 ++
 .../specialization-default-methods.rs         |  2 ++
 .../run-pass/specialization-on-projection.rs  |  2 ++
 .../run-pass/specialization-projection.rs     |  2 ++
 .../run-pass/specialization-super-traits.rs   |  2 ++
 ...ation-translate-projections-with-params.rs |  2 ++
 .../specialization-translate-projections.rs   |  2 ++
 20 files changed, 76 insertions(+)
 create mode 100644 src/test/compile-fail/specialization-feature-gate-default.rs
 create mode 100644 src/test/compile-fail/specialization-feature-gate-overlap.rs

diff --git a/src/test/auxiliary/go_trait.rs b/src/test/auxiliary/go_trait.rs
index ab1051c5650..044bb606b40 100644
--- a/src/test/auxiliary/go_trait.rs
+++ b/src/test/auxiliary/go_trait.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(specialization)]
+
 // Common code used for tests that model the Fn/FnMut/FnOnce hierarchy.
 
 pub trait Go {
diff --git a/src/test/auxiliary/specialization_cross_crate.rs b/src/test/auxiliary/specialization_cross_crate.rs
index 92c985a3e1d..1d235336de8 100644
--- a/src/test/auxiliary/specialization_cross_crate.rs
+++ b/src/test/auxiliary/specialization_cross_crate.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(specialization)]
+
 pub trait Foo {
     fn foo(&self) -> &'static str;
 }
diff --git a/src/test/compile-fail/specialization-default-projection.rs b/src/test/compile-fail/specialization-default-projection.rs
index b85dba126e6..3f85a503f62 100644
--- a/src/test/compile-fail/specialization-default-projection.rs
+++ b/src/test/compile-fail/specialization-default-projection.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(specialization)]
+
 // Make sure we can't project defaulted associated types
 
 trait Foo {
diff --git a/src/test/compile-fail/specialization-default-types.rs b/src/test/compile-fail/specialization-default-types.rs
index f6b2dd46efc..dce1db06a92 100644
--- a/src/test/compile-fail/specialization-default-types.rs
+++ b/src/test/compile-fail/specialization-default-types.rs
@@ -12,6 +12,8 @@
 // associated type in the impl defining it -- otherwise, what happens
 // if it's overridden?
 
+#![feature(specialization)]
+
 trait Example {
     type Output;
     fn generate(self) -> Self::Output;
diff --git a/src/test/compile-fail/specialization-feature-gate-default.rs b/src/test/compile-fail/specialization-feature-gate-default.rs
new file mode 100644
index 00000000000..caac21278d4
--- /dev/null
+++ b/src/test/compile-fail/specialization-feature-gate-default.rs
@@ -0,0 +1,19 @@
+// 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.
+
+trait Foo {
+    fn foo(&self);
+}
+
+impl<T> Foo for T {
+    default fn foo(&self) {} //~ ERROR
+}
+
+fn main() {}
diff --git a/src/test/compile-fail/specialization-feature-gate-overlap.rs b/src/test/compile-fail/specialization-feature-gate-overlap.rs
new file mode 100644
index 00000000000..a7918e4426d
--- /dev/null
+++ b/src/test/compile-fail/specialization-feature-gate-overlap.rs
@@ -0,0 +1,23 @@
+// 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.
+
+trait Foo {
+    fn foo(&self);
+}
+
+impl<T> Foo for T {
+    fn foo(&self) {}
+}
+
+impl Foo for u8 { //~ ERROR
+    fn foo(&self) {}
+}
+
+fn main() {}
diff --git a/src/test/compile-fail/specialization-negative-impl.rs b/src/test/compile-fail/specialization-negative-impl.rs
index d0d698d12e0..3a907dc3b8e 100644
--- a/src/test/compile-fail/specialization-negative-impl.rs
+++ b/src/test/compile-fail/specialization-negative-impl.rs
@@ -9,6 +9,7 @@
 // except according to those terms.
 
 #![feature(optin_builtin_traits)]
+#![feature(specialization)]
 
 struct TestType<T>(T);
 
diff --git a/src/test/compile-fail/specialization-no-default.rs b/src/test/compile-fail/specialization-no-default.rs
index 3e23c6e06ea..143c6f0e858 100644
--- a/src/test/compile-fail/specialization-no-default.rs
+++ b/src/test/compile-fail/specialization-no-default.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(specialization)]
+
 trait Foo {
     fn foo(&self);
     fn bar(&self);
diff --git a/src/test/compile-fail/specialization-overlap-negative.rs b/src/test/compile-fail/specialization-overlap-negative.rs
index cc427b4fed2..62a6d8d9b50 100644
--- a/src/test/compile-fail/specialization-overlap-negative.rs
+++ b/src/test/compile-fail/specialization-overlap-negative.rs
@@ -9,6 +9,7 @@
 // except according to those terms.
 
 #![feature(optin_builtin_traits)]
+#![feature(specialization)]
 
 trait MyTrait {}
 
diff --git a/src/test/compile-fail/specialization-overlap.rs b/src/test/compile-fail/specialization-overlap.rs
index 7d14e85fba8..57529d2ae42 100644
--- a/src/test/compile-fail/specialization-overlap.rs
+++ b/src/test/compile-fail/specialization-overlap.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(specialization)]
+
 trait Foo {}
 impl<T: Clone> Foo for T {}
 impl<T> Foo for Vec<T> {} //~ ERROR E0119
diff --git a/src/test/run-pass/specialization-allowed-cross-crate.rs b/src/test/run-pass/specialization-allowed-cross-crate.rs
index 139c63d3cdb..6b999f38358 100644
--- a/src/test/run-pass/specialization-allowed-cross-crate.rs
+++ b/src/test/run-pass/specialization-allowed-cross-crate.rs
@@ -10,6 +10,8 @@
 
 // aux-build:go_trait.rs
 
+#![feature(specialization)]
+
 extern crate go_trait;
 
 use go_trait::{Go,GoMut};
diff --git a/src/test/run-pass/specialization-assoc-fns.rs b/src/test/run-pass/specialization-assoc-fns.rs
index 750581ffe92..683e0d55dc9 100644
--- a/src/test/run-pass/specialization-assoc-fns.rs
+++ b/src/test/run-pass/specialization-assoc-fns.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(specialization)]
+
 trait Foo {
     fn mk() -> Self;
 }
diff --git a/src/test/run-pass/specialization-basics.rs b/src/test/run-pass/specialization-basics.rs
index e585c8e2353..b11495e9edf 100644
--- a/src/test/run-pass/specialization-basics.rs
+++ b/src/test/run-pass/specialization-basics.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(specialization)]
+
 // Tests a variety of basic specialization scenarios and method
 // dispatch for them.
 
diff --git a/src/test/run-pass/specialization-cross-crate.rs b/src/test/run-pass/specialization-cross-crate.rs
index c74b1f2e49e..7593ac4fb1d 100644
--- a/src/test/run-pass/specialization-cross-crate.rs
+++ b/src/test/run-pass/specialization-cross-crate.rs
@@ -10,6 +10,8 @@
 
 // aux-build:specialization_cross_crate.rs
 
+#![feature(specialization)]
+
 extern crate specialization_cross_crate;
 
 use specialization_cross_crate::*;
diff --git a/src/test/run-pass/specialization-default-methods.rs b/src/test/run-pass/specialization-default-methods.rs
index 7482d3acbc1..9c52ceb5247 100644
--- a/src/test/run-pass/specialization-default-methods.rs
+++ b/src/test/run-pass/specialization-default-methods.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(specialization)]
+
 // First, test only use of explicit `default` items:
 
 trait Foo {
diff --git a/src/test/run-pass/specialization-on-projection.rs b/src/test/run-pass/specialization-on-projection.rs
index f2061532662..65cbb31d221 100644
--- a/src/test/run-pass/specialization-on-projection.rs
+++ b/src/test/run-pass/specialization-on-projection.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(specialization)]
+
 trait Foo<T> {}
 
 trait Assoc {
diff --git a/src/test/run-pass/specialization-projection.rs b/src/test/run-pass/specialization-projection.rs
index 86fcab1fdc2..d26d59896a5 100644
--- a/src/test/run-pass/specialization-projection.rs
+++ b/src/test/run-pass/specialization-projection.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(specialization)]
+
 // Make sure we *can* project non-defaulted associated types
 // cf compile-fail/specialization-default-projection.rs
 
diff --git a/src/test/run-pass/specialization-super-traits.rs b/src/test/run-pass/specialization-super-traits.rs
index 4a30e6bcd25..a9b3bfca53d 100644
--- a/src/test/run-pass/specialization-super-traits.rs
+++ b/src/test/run-pass/specialization-super-traits.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(specialization)]
+
 // Test that you can specialize via an explicit trait hierarchy
 
 // FIXME: this doesn't work yet...
diff --git a/src/test/run-pass/specialization-translate-projections-with-params.rs b/src/test/run-pass/specialization-translate-projections-with-params.rs
index 6bca8939d82..3d90bc56f42 100644
--- a/src/test/run-pass/specialization-translate-projections-with-params.rs
+++ b/src/test/run-pass/specialization-translate-projections-with-params.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(specialization)]
+
 trait Trait<T> {
     fn convert(&self) -> T;
 }
diff --git a/src/test/run-pass/specialization-translate-projections.rs b/src/test/run-pass/specialization-translate-projections.rs
index 7f41729a527..d224efe8c31 100644
--- a/src/test/run-pass/specialization-translate-projections.rs
+++ b/src/test/run-pass/specialization-translate-projections.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(specialization)]
+
 use std::convert::Into;
 
 trait Trait {