diff --git a/src/test/auxiliary/go_trait.rs b/src/test/auxiliary/go_trait.rs index ab1051c56501..044bb606b40e 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 92c985a3e1dd..1d235336de82 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 b85dba126e61..3f85a503f62d 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 f6b2dd46efc2..dce1db06a92b 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 000000000000..caac21278d46 --- /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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +trait Foo { + fn foo(&self); +} + +impl 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 000000000000..a7918e4426d9 --- /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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +trait Foo { + fn foo(&self); +} + +impl 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 d0d698d12e09..3a907dc3b8e7 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); diff --git a/src/test/compile-fail/specialization-no-default.rs b/src/test/compile-fail/specialization-no-default.rs index 3e23c6e06eaf..143c6f0e8582 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 cc427b4fed21..62a6d8d9b503 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 7d14e85fba83..57529d2ae426 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 Foo for T {} impl Foo for Vec {} //~ 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 139c63d3cdb4..6b999f383583 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 750581ffe923..683e0d55dc94 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 e585c8e23535..b11495e9edf1 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 c74b1f2e49e4..7593ac4fb1dd 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 7482d3acbc1a..9c52ceb52472 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 f20615326622..65cbb31d2214 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 {} trait Assoc { diff --git a/src/test/run-pass/specialization-projection.rs b/src/test/run-pass/specialization-projection.rs index 86fcab1fdc28..d26d59896a57 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 4a30e6bcd25f..a9b3bfca53d1 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 6bca8939d82a..3d90bc56f42b 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 { 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 7f41729a527d..d224efe8c318 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 {