about summary refs log tree commit diff
path: root/src/test/compile-fail
diff options
context:
space:
mode:
authorHuon Wilson <dbau.pp+github@gmail.com>2015-02-18 23:50:21 +1100
committerHuon Wilson <dbau.pp+github@gmail.com>2015-02-18 23:50:21 +1100
commitdfc5c0f1e8799f47f9033bdcc8a7cd8a217620a5 (patch)
treee9c32f2e58b3462a23dd9c472d2f236640b78811 /src/test/compile-fail
parent6c065fc8cb036785f61ff03e05c1563cbb2dd081 (diff)
parent47f91a9484eceef10536d4caac6ef578cd254567 (diff)
downloadrust-dfc5c0f1e8799f47f9033bdcc8a7cd8a217620a5.tar.gz
rust-dfc5c0f1e8799f47f9033bdcc8a7cd8a217620a5.zip
Manual merge of #22475 - alexcrichton:rollup, r=alexcrichton
 One windows bot failed spuriously.
Diffstat (limited to 'src/test/compile-fail')
-rw-r--r--src/test/compile-fail/asm-gated2.rs15
-rw-r--r--src/test/compile-fail/borrowck-loan-blocks-move-cc.rs6
-rw-r--r--src/test/compile-fail/borrowck-multiple-captures.rs10
-rw-r--r--src/test/compile-fail/builtin-superkinds-simple.rs4
-rw-r--r--src/test/compile-fail/coherence-impls-builtin.rs9
-rw-r--r--src/test/compile-fail/concat_idents-gate.rs19
-rw-r--r--src/test/compile-fail/concat_idents-gate2.rs17
-rw-r--r--src/test/compile-fail/custom_attribute.rs14
-rw-r--r--src/test/compile-fail/issue-12041.rs4
-rw-r--r--src/test/compile-fail/issue-8460-const.rs42
-rw-r--r--src/test/compile-fail/kindck-impl-type-params.rs2
-rw-r--r--src/test/compile-fail/kindck-send-object.rs4
-rw-r--r--src/test/compile-fail/kindck-send-object1.rs8
-rw-r--r--src/test/compile-fail/kindck-send-object2.rs4
-rw-r--r--src/test/compile-fail/kindck-send-owned.rs4
-rw-r--r--src/test/compile-fail/kindck-send-region-pointers.rs34
-rw-r--r--src/test/compile-fail/linkage1.rs1
-rw-r--r--src/test/compile-fail/linkage4.rs2
-rw-r--r--src/test/compile-fail/lint-obsolete-attr.rs1
-rw-r--r--src/test/compile-fail/lint-stability.rs5
-rw-r--r--src/test/compile-fail/lint-unknown-attr.rs1
-rw-r--r--src/test/compile-fail/lint-uppercase-variables.rs19
-rw-r--r--src/test/compile-fail/log-syntax-gate2.rs13
-rw-r--r--src/test/compile-fail/macro-inner-attributes.rs2
-rw-r--r--src/test/compile-fail/macro-outer-attributes.rs2
-rw-r--r--src/test/compile-fail/missing-stability.rs2
-rw-r--r--src/test/compile-fail/move-fragments-1.rs2
-rw-r--r--src/test/compile-fail/move-fragments-2.rs2
-rw-r--r--src/test/compile-fail/move-fragments-3.rs2
-rw-r--r--src/test/compile-fail/move-fragments-4.rs2
-rw-r--r--src/test/compile-fail/move-fragments-5.rs2
-rw-r--r--src/test/compile-fail/move-fragments-6.rs2
-rw-r--r--src/test/compile-fail/move-fragments-7.rs2
-rw-r--r--src/test/compile-fail/move-fragments-8.rs2
-rw-r--r--src/test/compile-fail/move-fragments-9.rs2
-rw-r--r--src/test/compile-fail/moves-based-on-type-capture-clause-bad.rs4
-rw-r--r--src/test/compile-fail/no-capture-arc.rs4
-rw-r--r--src/test/compile-fail/no-reuse-move-arc.rs4
-rw-r--r--src/test/compile-fail/no-send-res-ports.rs4
-rw-r--r--src/test/compile-fail/object-lifetime-default.rs2
-rw-r--r--src/test/compile-fail/region-object-lifetime-1.rs1
-rw-r--r--src/test/compile-fail/region-object-lifetime-3.rs1
-rw-r--r--src/test/compile-fail/regions-bounded-by-send.rs83
-rw-r--r--src/test/compile-fail/regions-pattern-typing-issue-19552.rs4
-rw-r--r--src/test/compile-fail/rustc-error.rs2
-rwxr-xr-xsrc/test/compile-fail/send-is-not-static-ensures-scoping.rs24
-rw-r--r--src/test/compile-fail/trace_macros-gate.rs30
-rw-r--r--src/test/compile-fail/trace_macros-gate2.rs20
-rw-r--r--src/test/compile-fail/trace_macros-gate3.rs20
-rw-r--r--src/test/compile-fail/trait-bounds-cant-coerce.rs2
-rw-r--r--src/test/compile-fail/unused-attr.rs3
-rw-r--r--src/test/compile-fail/variance-associated-types.rs2
-rw-r--r--src/test/compile-fail/variance-object-types.rs2
-rw-r--r--src/test/compile-fail/variance-regions-direct.rs2
-rw-r--r--src/test/compile-fail/variance-regions-indirect.rs2
-rw-r--r--src/test/compile-fail/variance-trait-object-bound.rs2
56 files changed, 292 insertions, 188 deletions
diff --git a/src/test/compile-fail/asm-gated2.rs b/src/test/compile-fail/asm-gated2.rs
new file mode 100644
index 00000000000..d2ee01109f8
--- /dev/null
+++ b/src/test/compile-fail/asm-gated2.rs
@@ -0,0 +1,15 @@
+// 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.
+
+fn main() {
+    unsafe {
+        println!("{}", asm!("")); //~ ERROR inline assembly is not stable
+    }
+}
diff --git a/src/test/compile-fail/borrowck-loan-blocks-move-cc.rs b/src/test/compile-fail/borrowck-loan-blocks-move-cc.rs
index 980c498e39b..7f676f5166f 100644
--- a/src/test/compile-fail/borrowck-loan-blocks-move-cc.rs
+++ b/src/test/compile-fail/borrowck-loan-blocks-move-cc.rs
@@ -10,7 +10,7 @@
 
 #![feature(box_syntax)]
 
-use std::thread::Thread;
+use std::thread;
 
 fn borrow<F>(v: &isize, f: F) where F: FnOnce(&isize) {
     f(v);
@@ -19,7 +19,7 @@ fn borrow<F>(v: &isize, f: F) where F: FnOnce(&isize) {
 fn box_imm() {
     let v = box 3;
     let _w = &v;
-    Thread::spawn(move|| {
+    thread::spawn(move|| {
         println!("v={}", *v);
         //~^ ERROR cannot move `v` into closure
     });
@@ -28,7 +28,7 @@ fn box_imm() {
 fn box_imm_explicit() {
     let v = box 3;
     let _w = &v;
-    Thread::spawn(move|| {
+    thread::spawn(move|| {
         println!("v={}", *v);
         //~^ ERROR cannot move
     });
diff --git a/src/test/compile-fail/borrowck-multiple-captures.rs b/src/test/compile-fail/borrowck-multiple-captures.rs
index 94e213ae1ae..9db05d76284 100644
--- a/src/test/compile-fail/borrowck-multiple-captures.rs
+++ b/src/test/compile-fail/borrowck-multiple-captures.rs
@@ -10,7 +10,7 @@
 
 #![feature(box_syntax)]
 
-use std::thread::Thread;
+use std::thread;
 
 fn borrow<T>(_: &T) { }
 
@@ -19,7 +19,7 @@ fn different_vars_after_borrows() {
     let p1 = &x1;
     let x2 = box 2;
     let p2 = &x2;
-    Thread::spawn(move|| {
+    thread::spawn(move|| {
         drop(x1); //~ ERROR cannot move `x1` into closure because it is borrowed
         drop(x2); //~ ERROR cannot move `x2` into closure because it is borrowed
     });
@@ -32,7 +32,7 @@ fn different_vars_after_moves() {
     drop(x1);
     let x2 = box 2;
     drop(x2);
-    Thread::spawn(move|| {
+    thread::spawn(move|| {
         drop(x1); //~ ERROR capture of moved value: `x1`
         drop(x2); //~ ERROR capture of moved value: `x2`
     });
@@ -41,7 +41,7 @@ fn different_vars_after_moves() {
 fn same_var_after_borrow() {
     let x = box 1;
     let p = &x;
-    Thread::spawn(move|| {
+    thread::spawn(move|| {
         drop(x); //~ ERROR cannot move `x` into closure because it is borrowed
         drop(x); //~ ERROR use of moved value: `x`
     });
@@ -51,7 +51,7 @@ fn same_var_after_borrow() {
 fn same_var_after_move() {
     let x = box 1;
     drop(x);
-    Thread::spawn(move|| {
+    thread::spawn(move|| {
         drop(x); //~ ERROR capture of moved value: `x`
         drop(x); //~ ERROR use of moved value: `x`
     });
diff --git a/src/test/compile-fail/builtin-superkinds-simple.rs b/src/test/compile-fail/builtin-superkinds-simple.rs
index c7b75ade555..c3fb6a1be87 100644
--- a/src/test/compile-fail/builtin-superkinds-simple.rs
+++ b/src/test/compile-fail/builtin-superkinds-simple.rs
@@ -13,7 +13,7 @@
 
 trait Foo : Send { }
 
-impl <'a> Foo for &'a mut () { }
-//~^ ERROR the type `&'a mut ()` does not fulfill the required lifetime
+impl Foo for std::rc::Rc<i8> { }
+//~^ ERROR the trait `core::marker::Send` is not implemented
 
 fn main() { }
diff --git a/src/test/compile-fail/coherence-impls-builtin.rs b/src/test/compile-fail/coherence-impls-builtin.rs
index 2ca288b60a3..38730d241f6 100644
--- a/src/test/compile-fail/coherence-impls-builtin.rs
+++ b/src/test/compile-fail/coherence-impls-builtin.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(optin_builtin_traits)]
+
 use std::marker::Send;
 
 enum TestE {
@@ -16,18 +18,21 @@ enum TestE {
 
 struct MyType;
 
+struct NotSync;
+impl !Sync for NotSync {}
+
 unsafe impl Send for TestE {}
 unsafe impl Send for MyType {}
 unsafe impl Send for (MyType, MyType) {}
 //~^ ERROR builtin traits can only be implemented on structs or enums
 
-unsafe impl Send for &'static MyType {}
+unsafe impl Send for &'static NotSync {}
 //~^ ERROR builtin traits can only be implemented on structs or enums
 
 unsafe impl Send for [MyType] {}
 //~^ ERROR builtin traits can only be implemented on structs or enums
 
-unsafe impl Send for &'static [MyType] {}
+unsafe impl Send for &'static [NotSync] {}
 //~^ ERROR builtin traits can only be implemented on structs or enums
 
 fn is_send<T: Send>() {}
diff --git a/src/test/compile-fail/concat_idents-gate.rs b/src/test/compile-fail/concat_idents-gate.rs
new file mode 100644
index 00000000000..f4d97445725
--- /dev/null
+++ b/src/test/compile-fail/concat_idents-gate.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.
+
+const XY_1: i32 = 10;
+
+fn main() {
+    const XY_2: i32 = 20;
+    let a = concat_idents!(X, Y_1); //~ ERROR `concat_idents` is not stable
+    let b = concat_idents!(X, Y_2); //~ ERROR `concat_idents` is not stable
+    assert_eq!(a, 10);
+    assert_eq!(b, 20);
+}
diff --git a/src/test/compile-fail/concat_idents-gate2.rs b/src/test/compile-fail/concat_idents-gate2.rs
new file mode 100644
index 00000000000..d8f8f803edc
--- /dev/null
+++ b/src/test/compile-fail/concat_idents-gate2.rs
@@ -0,0 +1,17 @@
+// 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.
+
+const XY_1: i32 = 10;
+
+fn main() {
+    const XY_2: i32 = 20;
+    assert_eq!(10, concat_idents!(X, Y_1)); //~ ERROR `concat_idents` is not stable
+    assert_eq!(20, concat_idents!(X, Y_2)); //~ ERROR `concat_idents` is not stable
+}
diff --git a/src/test/compile-fail/custom_attribute.rs b/src/test/compile-fail/custom_attribute.rs
new file mode 100644
index 00000000000..193063a98cb
--- /dev/null
+++ b/src/test/compile-fail/custom_attribute.rs
@@ -0,0 +1,14 @@
+// Copyright 2014 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.
+
+#[foo] //~ ERROR The attribute `foo`
+fn main() {
+
+}
\ No newline at end of file
diff --git a/src/test/compile-fail/issue-12041.rs b/src/test/compile-fail/issue-12041.rs
index 236142a6919..735f529277c 100644
--- a/src/test/compile-fail/issue-12041.rs
+++ b/src/test/compile-fail/issue-12041.rs
@@ -9,11 +9,11 @@
 // except according to those terms.
 
 use std::sync::mpsc::channel;
-use std::thread::Thread;
+use std::thread;
 
 fn main() {
     let (tx, rx) = channel();
-    let _t = Thread::spawn(move|| -> () {
+    let _t = thread::spawn(move|| -> () {
         loop {
             let tx = tx;
             //~^ ERROR: use of moved value: `tx`
diff --git a/src/test/compile-fail/issue-8460-const.rs b/src/test/compile-fail/issue-8460-const.rs
index 01bed69fb1d..b6d371e4b11 100644
--- a/src/test/compile-fail/issue-8460-const.rs
+++ b/src/test/compile-fail/issue-8460-const.rs
@@ -9,47 +9,47 @@
 // except according to those terms.
 
 use std::{int, i8, i16, i32, i64};
-use std::thread::Thread;
+use std::thread;
 
 fn main() {
-    assert!(Thread::scoped(move|| int::MIN / -1).join().is_err());
+    assert!(thread::spawn(move|| { int::MIN / -1; }).join().is_err());
     //~^ ERROR attempted to divide with overflow in a constant expression
-    assert!(Thread::scoped(move|| i8::MIN / -1).join().is_err());
+    assert!(thread::spawn(move|| { i8::MIN / -1; }).join().is_err());
     //~^ ERROR attempted to divide with overflow in a constant expression
-    assert!(Thread::scoped(move|| i16::MIN / -1).join().is_err());
+    assert!(thread::spawn(move|| { i16::MIN / -1; }).join().is_err());
     //~^ ERROR attempted to divide with overflow in a constant expression
-    assert!(Thread::scoped(move|| i32::MIN / -1).join().is_err());
+    assert!(thread::spawn(move|| { i32::MIN / -1; }).join().is_err());
     //~^ ERROR attempted to divide with overflow in a constant expression
-    assert!(Thread::scoped(move|| i64::MIN / -1).join().is_err());
+    assert!(thread::spawn(move|| { i64::MIN / -1; }).join().is_err());
     //~^ ERROR attempted to divide with overflow in a constant expression
-    assert!(Thread::scoped(move|| 1is / 0).join().is_err());
+    assert!(thread::spawn(move|| { 1is / 0; }).join().is_err());
     //~^ ERROR attempted to divide by zero in a constant expression
-    assert!(Thread::scoped(move|| 1i8 / 0).join().is_err());
+    assert!(thread::spawn(move|| { 1i8 / 0; }).join().is_err());
     //~^ ERROR attempted to divide by zero in a constant expression
-    assert!(Thread::scoped(move|| 1i16 / 0).join().is_err());
+    assert!(thread::spawn(move|| { 1i16 / 0; }).join().is_err());
     //~^ ERROR attempted to divide by zero in a constant expression
-    assert!(Thread::scoped(move|| 1i32 / 0).join().is_err());
+    assert!(thread::spawn(move|| { 1i32 / 0; }).join().is_err());
     //~^ ERROR attempted to divide by zero in a constant expression
-    assert!(Thread::scoped(move|| 1i64 / 0).join().is_err());
+    assert!(thread::spawn(move|| { 1i64 / 0; }).join().is_err());
     //~^ ERROR attempted to divide by zero in a constant expression
-    assert!(Thread::scoped(move|| int::MIN % -1).join().is_err());
+    assert!(thread::spawn(move|| { int::MIN % -1; }).join().is_err());
     //~^ ERROR attempted remainder with overflow in a constant expression
-    assert!(Thread::scoped(move|| i8::MIN % -1).join().is_err());
+    assert!(thread::spawn(move|| { i8::MIN % -1; }).join().is_err());
     //~^ ERROR attempted remainder with overflow in a constant expression
-    assert!(Thread::scoped(move|| i16::MIN % -1).join().is_err());
+    assert!(thread::spawn(move|| { i16::MIN % -1; }).join().is_err());
     //~^ ERROR attempted remainder with overflow in a constant expression
-    assert!(Thread::scoped(move|| i32::MIN % -1).join().is_err());
+    assert!(thread::spawn(move|| { i32::MIN % -1; }).join().is_err());
     //~^ ERROR attempted remainder with overflow in a constant expression
-    assert!(Thread::scoped(move|| i64::MIN % -1).join().is_err());
+    assert!(thread::spawn(move|| { i64::MIN % -1; }).join().is_err());
     //~^ ERROR attempted remainder with overflow in a constant expression
-    assert!(Thread::scoped(move|| 1is % 0).join().is_err());
+    assert!(thread::spawn(move|| { 1is % 0; }).join().is_err());
     //~^ ERROR attempted remainder with a divisor of zero in a constant expression
-    assert!(Thread::scoped(move|| 1i8 % 0).join().is_err());
+    assert!(thread::spawn(move|| { 1i8 % 0; }).join().is_err());
     //~^ ERROR attempted remainder with a divisor of zero in a constant expression
-    assert!(Thread::scoped(move|| 1i16 % 0).join().is_err());
+    assert!(thread::spawn(move|| { 1i16 % 0; }).join().is_err());
     //~^ ERROR attempted remainder with a divisor of zero in a constant expression
-    assert!(Thread::scoped(move|| 1i32 % 0).join().is_err());
+    assert!(thread::spawn(move|| { 1i32 % 0; }).join().is_err());
     //~^ ERROR attempted remainder with a divisor of zero in a constant expression
-    assert!(Thread::scoped(move|| 1i64 % 0).join().is_err());
+    assert!(thread::spawn(move|| { 1i64 % 0; }).join().is_err());
     //~^ ERROR attempted remainder with a divisor of zero in a constant expression
 }
diff --git a/src/test/compile-fail/kindck-impl-type-params.rs b/src/test/compile-fail/kindck-impl-type-params.rs
index de7639c6213..d5276efa8be 100644
--- a/src/test/compile-fail/kindck-impl-type-params.rs
+++ b/src/test/compile-fail/kindck-impl-type-params.rs
@@ -17,7 +17,7 @@ struct S<T>;
 
 trait Gettable<T> {}
 
-impl<T: Send + Copy> Gettable<T> for S<T> {}
+impl<T: Send + Copy + 'static> Gettable<T> for S<T> {}
 
 fn f<T>(val: T) {
     let t: S<T> = S;
diff --git a/src/test/compile-fail/kindck-send-object.rs b/src/test/compile-fail/kindck-send-object.rs
index 7984b3b32c2..570f7ad7fe3 100644
--- a/src/test/compile-fail/kindck-send-object.rs
+++ b/src/test/compile-fail/kindck-send-object.rs
@@ -20,7 +20,7 @@ trait Message : Send { }
 
 fn object_ref_with_static_bound_not_ok() {
     assert_send::<&'static (Dummy+'static)>();
-    //~^ ERROR the trait `core::marker::Send` is not implemented
+    //~^ ERROR the trait `core::marker::Sync` is not implemented
 }
 
 fn box_object_with_no_bound_not_ok<'a>() {
@@ -28,7 +28,7 @@ fn box_object_with_no_bound_not_ok<'a>() {
 }
 
 fn object_with_send_bound_ok() {
-    assert_send::<&'static (Dummy+Send)>();
+    assert_send::<&'static (Dummy+Sync)>();
     assert_send::<Box<Dummy+Send>>();
 }
 
diff --git a/src/test/compile-fail/kindck-send-object1.rs b/src/test/compile-fail/kindck-send-object1.rs
index 3d47d33d7c3..48d5215b708 100644
--- a/src/test/compile-fail/kindck-send-object1.rs
+++ b/src/test/compile-fail/kindck-send-object1.rs
@@ -12,22 +12,22 @@
 // is broken into two parts because some errors occur in distinct
 // phases in the compiler. See kindck-send-object2.rs as well!
 
-fn assert_send<T:Send>() { }
+fn assert_send<T:Send+'static>() { }
 trait Dummy { }
 
 // careful with object types, who knows what they close over...
 fn test51<'a>() {
     assert_send::<&'a Dummy>();
-    //~^ ERROR the trait `core::marker::Send` is not implemented
+    //~^ ERROR the trait `core::marker::Sync` is not implemented
 }
 fn test52<'a>() {
-    assert_send::<&'a (Dummy+Send)>();
+    assert_send::<&'a (Dummy+Sync)>();
     //~^ ERROR does not fulfill the required lifetime
 }
 
 // ...unless they are properly bounded
 fn test60() {
-    assert_send::<&'static (Dummy+Send)>();
+    assert_send::<&'static (Dummy+Sync)>();
 }
 fn test61() {
     assert_send::<Box<Dummy+Send>>();
diff --git a/src/test/compile-fail/kindck-send-object2.rs b/src/test/compile-fail/kindck-send-object2.rs
index 75bae09b37f..d3d166e2a69 100644
--- a/src/test/compile-fail/kindck-send-object2.rs
+++ b/src/test/compile-fail/kindck-send-object2.rs
@@ -14,7 +14,7 @@ fn assert_send<T:Send>() { }
 trait Dummy { }
 
 fn test50() {
-    assert_send::<&'static Dummy>(); //~ ERROR the trait `core::marker::Send` is not implemented
+    assert_send::<&'static Dummy>(); //~ ERROR the trait `core::marker::Sync` is not implemented
 }
 
 fn test53() {
@@ -23,7 +23,7 @@ fn test53() {
 
 // ...unless they are properly bounded
 fn test60() {
-    assert_send::<&'static (Dummy+Send)>();
+    assert_send::<&'static (Dummy+Sync)>();
 }
 fn test61() {
     assert_send::<Box<Dummy+Send>>();
diff --git a/src/test/compile-fail/kindck-send-owned.rs b/src/test/compile-fail/kindck-send-owned.rs
index 266b6156656..406711902a5 100644
--- a/src/test/compile-fail/kindck-send-owned.rs
+++ b/src/test/compile-fail/kindck-send-owned.rs
@@ -18,8 +18,8 @@ fn test31() { assert_send::<String>(); }
 fn test32() { assert_send::<Vec<isize> >(); }
 
 // but not if they own a bad thing
-fn test40<'a>(_: &'a isize) {
-    assert_send::<Box<&'a isize>>(); //~ ERROR does not fulfill the required lifetime
+fn test40() {
+    assert_send::<Box<*mut u8>>(); //~ ERROR `core::marker::Send` is not implemented
 }
 
 fn main() { }
diff --git a/src/test/compile-fail/kindck-send-region-pointers.rs b/src/test/compile-fail/kindck-send-region-pointers.rs
deleted file mode 100644
index e2a5b0678a6..00000000000
--- a/src/test/compile-fail/kindck-send-region-pointers.rs
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2014 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.
-
-// Test that borrowed pointers are not sendable unless 'static.
-
-fn assert_send<T:Send>() { }
-
-// lifetime pointers with 'static lifetime are ok
-fn test01() { assert_send::<&'static isize>(); }
-fn test02() { assert_send::<&'static str>(); }
-fn test03() { assert_send::<&'static [isize]>(); }
-
-// whether or not they are mutable
-fn test10() { assert_send::<&'static mut isize>(); }
-
-// otherwise lifetime pointers are not ok
-fn test20<'a>(_: &'a isize) {
-    assert_send::<&'a isize>(); //~ ERROR does not fulfill the required lifetime
-}
-fn test21<'a>(_: &'a isize) {
-    assert_send::<&'a str>(); //~ ERROR does not fulfill the required lifetime
-}
-fn test22<'a>(_: &'a isize) {
-    assert_send::<&'a [isize]>(); //~ ERROR does not fulfill the required lifetime
-}
-
-fn main() { }
diff --git a/src/test/compile-fail/linkage1.rs b/src/test/compile-fail/linkage1.rs
index 555cc2b9a7a..35f93c13fb5 100644
--- a/src/test/compile-fail/linkage1.rs
+++ b/src/test/compile-fail/linkage1.rs
@@ -11,4 +11,5 @@
 extern {
     #[linkage = "extern_weak"] static foo: isize;
     //~^ ERROR: the `linkage` attribute is experimental and not portable
+    //~^^ ERROR: the `linkage` attribute is experimental and not portable
 }
diff --git a/src/test/compile-fail/linkage4.rs b/src/test/compile-fail/linkage4.rs
index 635d58e04c7..1cf6e90d6c8 100644
--- a/src/test/compile-fail/linkage4.rs
+++ b/src/test/compile-fail/linkage4.rs
@@ -10,6 +10,6 @@
 
 #[linkage = "external"]
 static foo: isize = 0;
-//~^ ERROR: the `linkage` attribute is experimental and not portable
+//~^^ ERROR: the `linkage` attribute is experimental and not portable
 
 fn main() {}
diff --git a/src/test/compile-fail/lint-obsolete-attr.rs b/src/test/compile-fail/lint-obsolete-attr.rs
index e4fd042d098..dd4e1212a00 100644
--- a/src/test/compile-fail/lint-obsolete-attr.rs
+++ b/src/test/compile-fail/lint-obsolete-attr.rs
@@ -13,6 +13,7 @@
 
 #![deny(unused_attributes)]
 #![allow(dead_code)]
+#![feature(custom_attribute)]
 
 #[abi="stdcall"] extern {} //~ ERROR unused attribute
 
diff --git a/src/test/compile-fail/lint-stability.rs b/src/test/compile-fail/lint-stability.rs
index 5c187176fb2..f9cdfa4f7d6 100644
--- a/src/test/compile-fail/lint-stability.rs
+++ b/src/test/compile-fail/lint-stability.rs
@@ -133,6 +133,11 @@ mod cross_crate {
     impl UnstableTrait for S { } //~ WARNING use of unstable library feature
 
     trait LocalTrait : UnstableTrait { } //~ WARNING use of unstable library feature
+
+    impl Trait for S {
+        fn trait_stable(&self) {}
+        fn trait_unstable(&self) {} //~ WARNING use of unstable library feature
+    }
 }
 
 mod inheritance {
diff --git a/src/test/compile-fail/lint-unknown-attr.rs b/src/test/compile-fail/lint-unknown-attr.rs
index e4cb92477c2..af4e81be195 100644
--- a/src/test/compile-fail/lint-unknown-attr.rs
+++ b/src/test/compile-fail/lint-unknown-attr.rs
@@ -11,6 +11,7 @@
 // When denying at the crate level, be sure to not get random warnings from the
 // injected intrinsics by the compiler.
 
+#![feature(custom_attribute)]
 #![deny(unused_attributes)]
 
 #![mutable_doc] //~ ERROR unused attribute
diff --git a/src/test/compile-fail/lint-uppercase-variables.rs b/src/test/compile-fail/lint-uppercase-variables.rs
index 057b8e3acc6..a4f46cbd187 100644
--- a/src/test/compile-fail/lint-uppercase-variables.rs
+++ b/src/test/compile-fail/lint-uppercase-variables.rs
@@ -12,11 +12,10 @@
 
 #![allow(dead_code)]
 #![deny(non_snake_case)]
-#![feature(path)]
-#![feature(io)]
 
-use std::old_io::File;
-use std::old_io::IoError;
+mod foo {
+    pub enum Foo { Foo }
+}
 
 struct Something {
     X: usize //~ ERROR structure field `X` should have a snake case name such as `x`
@@ -30,13 +29,11 @@ fn main() {
     let Test: usize = 0; //~ ERROR variable `Test` should have a snake case name such as `test`
     println!("{}", Test);
 
-    let mut f = File::open(&Path::new("something.txt"));
-    let mut buff = [0u8; 16];
-    match f.read(&mut buff) {
-        Ok(cnt) => println!("read this many bytes: {}", cnt),
-        Err(IoError{ kind: EndOfFile, .. }) => println!("Got end of file: {:?}", EndOfFile),
-//~^ ERROR variable `EndOfFile` should have a snake case name such as `end_of_file`
-//~^^ WARN `EndOfFile` is named the same as one of the variants of the type `std::old_io::IoErrorKind`
+    match foo::Foo::Foo {
+        Foo => {}
+//~^ ERROR variable `Foo` should have a snake case name such as `foo`
+//~^^ WARN `Foo` is named the same as one of the variants of the type `foo::Foo`
+//~^^^ WARN unused variable: `Foo`
     }
 
     test(1);
diff --git a/src/test/compile-fail/log-syntax-gate2.rs b/src/test/compile-fail/log-syntax-gate2.rs
new file mode 100644
index 00000000000..bb19e97ab0f
--- /dev/null
+++ b/src/test/compile-fail/log-syntax-gate2.rs
@@ -0,0 +1,13 @@
+// Copyright 2012 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.
+
+fn main() {
+    println!("{}", log_syntax!()); //~ ERROR `log_syntax!` is not stable
+}
diff --git a/src/test/compile-fail/macro-inner-attributes.rs b/src/test/compile-fail/macro-inner-attributes.rs
index e4fc5bb4627..e76eaea365e 100644
--- a/src/test/compile-fail/macro-inner-attributes.rs
+++ b/src/test/compile-fail/macro-inner-attributes.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(custom_attribute)]
+
 macro_rules! test { ($nm:ident,
                      #[$a:meta],
                      $i:item) => (mod $nm { #![$a] $i }); }
diff --git a/src/test/compile-fail/macro-outer-attributes.rs b/src/test/compile-fail/macro-outer-attributes.rs
index a0f23c72bc4..cff01f36f3a 100644
--- a/src/test/compile-fail/macro-outer-attributes.rs
+++ b/src/test/compile-fail/macro-outer-attributes.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(custom_attribute)]
+
 macro_rules! test { ($nm:ident,
                      #[$a:meta],
                      $i:item) => (mod $nm { #[$a] $i }); }
diff --git a/src/test/compile-fail/missing-stability.rs b/src/test/compile-fail/missing-stability.rs
index 14dd983161b..cf7a8378b9a 100644
--- a/src/test/compile-fail/missing-stability.rs
+++ b/src/test/compile-fail/missing-stability.rs
@@ -30,4 +30,4 @@ pub mod bar {
     // #[stable] is not inherited
     pub fn unmarked() {}
     //~^ ERROR This node does not have a stability attribute
-}
\ No newline at end of file
+}
diff --git a/src/test/compile-fail/move-fragments-1.rs b/src/test/compile-fail/move-fragments-1.rs
index 3f14be2da10..0219f5b6bec 100644
--- a/src/test/compile-fail/move-fragments-1.rs
+++ b/src/test/compile-fail/move-fragments-1.rs
@@ -18,6 +18,8 @@
 // These are all fairly trivial cases: unused variables or direct
 // drops of substructure.
 
+#![feature(rustc_attrs)]
+
 pub struct D { d: isize }
 impl Drop for D { fn drop(&mut self) { } }
 
diff --git a/src/test/compile-fail/move-fragments-2.rs b/src/test/compile-fail/move-fragments-2.rs
index 6c0635d6be9..175488bf2fc 100644
--- a/src/test/compile-fail/move-fragments-2.rs
+++ b/src/test/compile-fail/move-fragments-2.rs
@@ -18,6 +18,8 @@
 // These are checking that enums are tracked; note that their output
 // paths include "downcasts" of the path to a particular enum.
 
+#![feature(rustc_attrs)]
+
 use self::Lonely::{Zero, One, Two};
 
 pub struct D { d: isize }
diff --git a/src/test/compile-fail/move-fragments-3.rs b/src/test/compile-fail/move-fragments-3.rs
index 24d73ec2274..b65921177ad 100644
--- a/src/test/compile-fail/move-fragments-3.rs
+++ b/src/test/compile-fail/move-fragments-3.rs
@@ -18,6 +18,8 @@
 // This checks the handling of `_` within variants, especially when mixed
 // with bindings.
 
+#![feature(rustc_attrs)]
+
 use self::Lonely::{Zero, One, Two};
 
 pub struct D { d: isize }
diff --git a/src/test/compile-fail/move-fragments-4.rs b/src/test/compile-fail/move-fragments-4.rs
index 97e8e45ed06..191e23a2863 100644
--- a/src/test/compile-fail/move-fragments-4.rs
+++ b/src/test/compile-fail/move-fragments-4.rs
@@ -19,6 +19,8 @@
 // early draft of the code did not properly traverse up through all of
 // the parents of the leaf fragment.)
 
+#![feature(rustc_attrs)]
+
 pub struct D { d: isize }
 impl Drop for D { fn drop(&mut self) { } }
 
diff --git a/src/test/compile-fail/move-fragments-5.rs b/src/test/compile-fail/move-fragments-5.rs
index 9f70421fa84..38a385eacac 100644
--- a/src/test/compile-fail/move-fragments-5.rs
+++ b/src/test/compile-fail/move-fragments-5.rs
@@ -17,6 +17,8 @@
 
 // This is the first test that checks moving into local variables.
 
+#![feature(rustc_attrs)]
+
 pub struct D { d: isize }
 impl Drop for D { fn drop(&mut self) { } }
 
diff --git a/src/test/compile-fail/move-fragments-6.rs b/src/test/compile-fail/move-fragments-6.rs
index b249d0d7397..122727c3f6b 100644
--- a/src/test/compile-fail/move-fragments-6.rs
+++ b/src/test/compile-fail/move-fragments-6.rs
@@ -18,6 +18,8 @@
 // Test that moving into a field (i.e. overwriting it) fragments the
 // receiver.
 
+#![feature(rustc_attrs)]
+
 use std::mem::drop;
 
 pub struct Pair<X,Y> { x: X, y: Y }
diff --git a/src/test/compile-fail/move-fragments-7.rs b/src/test/compile-fail/move-fragments-7.rs
index 2af2b2957f8..a2a37208cd6 100644
--- a/src/test/compile-fail/move-fragments-7.rs
+++ b/src/test/compile-fail/move-fragments-7.rs
@@ -19,6 +19,8 @@
 // both moving out of the structure (i.e. reading `*p.x`) and writing
 // into the container (i.e. writing `*p.x`).
 
+#![feature(rustc_attrs)]
+
 pub struct D { d: isize }
 impl Drop for D { fn drop(&mut self) { } }
 
diff --git a/src/test/compile-fail/move-fragments-8.rs b/src/test/compile-fail/move-fragments-8.rs
index 18bf4066076..e57268dbfa3 100644
--- a/src/test/compile-fail/move-fragments-8.rs
+++ b/src/test/compile-fail/move-fragments-8.rs
@@ -22,6 +22,8 @@
 // also that in this case we cannot do a move out of `&T`, so we only
 // test writing `*p.x` here.
 
+#![feature(rustc_attrs)]
+
 pub struct D { d: isize }
 impl Drop for D { fn drop(&mut self) { } }
 
diff --git a/src/test/compile-fail/move-fragments-9.rs b/src/test/compile-fail/move-fragments-9.rs
index 426d5fa29a0..350f4169034 100644
--- a/src/test/compile-fail/move-fragments-9.rs
+++ b/src/test/compile-fail/move-fragments-9.rs
@@ -14,6 +14,8 @@
 // Note also that the `test_move_array_then_overwrite` tests represent
 // cases that we probably should make illegal.
 
+#![feature(rustc_attrs)]
+
 pub struct D { d: isize }
 impl Drop for D { fn drop(&mut self) { } }
 
diff --git a/src/test/compile-fail/moves-based-on-type-capture-clause-bad.rs b/src/test/compile-fail/moves-based-on-type-capture-clause-bad.rs
index dc90994fcc1..32fa773ec80 100644
--- a/src/test/compile-fail/moves-based-on-type-capture-clause-bad.rs
+++ b/src/test/compile-fail/moves-based-on-type-capture-clause-bad.rs
@@ -8,11 +8,11 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-use std::thread::Thread;
+use std::thread;
 
 fn main() {
     let x = "Hello world!".to_string();
-    Thread::spawn(move|| {
+    thread::spawn(move|| {
         println!("{}", x);
     });
     println!("{}", x); //~ ERROR use of moved value
diff --git a/src/test/compile-fail/no-capture-arc.rs b/src/test/compile-fail/no-capture-arc.rs
index 939d7c7a534..7b7b3c414dd 100644
--- a/src/test/compile-fail/no-capture-arc.rs
+++ b/src/test/compile-fail/no-capture-arc.rs
@@ -11,13 +11,13 @@
 // error-pattern: use of moved value
 
 use std::sync::Arc;
-use std::thread::Thread;
+use std::thread;
 
 fn main() {
     let v = vec!(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
     let arc_v = Arc::new(v);
 
-    Thread::spawn(move|| {
+    thread::spawn(move|| {
         assert_eq!((*arc_v)[3], 4);
     });
 
diff --git a/src/test/compile-fail/no-reuse-move-arc.rs b/src/test/compile-fail/no-reuse-move-arc.rs
index 730ba9ab9ea..1720b40c83b 100644
--- a/src/test/compile-fail/no-reuse-move-arc.rs
+++ b/src/test/compile-fail/no-reuse-move-arc.rs
@@ -9,13 +9,13 @@
 // except according to those terms.
 
 use std::sync::Arc;
-use std::thread::Thread;
+use std::thread;
 
 fn main() {
     let v = vec!(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
     let arc_v = Arc::new(v);
 
-    Thread::spawn(move|| {
+    thread::spawn(move|| {
         assert_eq!((*arc_v)[3], 4);
     });
 
diff --git a/src/test/compile-fail/no-send-res-ports.rs b/src/test/compile-fail/no-send-res-ports.rs
index ae2847aab09..5ebc386109a 100644
--- a/src/test/compile-fail/no-send-res-ports.rs
+++ b/src/test/compile-fail/no-send-res-ports.rs
@@ -10,7 +10,7 @@
 
 #![feature(unsafe_destructor)]
 
-use std::thread::Thread;
+use std::thread;
 use std::rc::Rc;
 
 #[derive(Debug)]
@@ -35,7 +35,7 @@ fn main() {
 
     let x = foo(Port(Rc::new(())));
 
-    Thread::spawn(move|| {
+    thread::spawn(move|| {
         //~^ ERROR `core::marker::Send` is not implemented
         let y = x;
         println!("{:?}", y);
diff --git a/src/test/compile-fail/object-lifetime-default.rs b/src/test/compile-fail/object-lifetime-default.rs
index 73f71751ee8..ac03c085b7b 100644
--- a/src/test/compile-fail/object-lifetime-default.rs
+++ b/src/test/compile-fail/object-lifetime-default.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(rustc_attrs)]
+
 #[rustc_object_lifetime_default]
 struct A<T>(T); //~ ERROR None
 
diff --git a/src/test/compile-fail/region-object-lifetime-1.rs b/src/test/compile-fail/region-object-lifetime-1.rs
index bb37d55fb08..2095fb903b8 100644
--- a/src/test/compile-fail/region-object-lifetime-1.rs
+++ b/src/test/compile-fail/region-object-lifetime-1.rs
@@ -11,6 +11,7 @@
 // Various tests related to testing how region inference works
 // with respect to the object receivers.
 
+#![feature(rustc_attrs)]
 #![allow(warnings)]
 
 trait Foo {
diff --git a/src/test/compile-fail/region-object-lifetime-3.rs b/src/test/compile-fail/region-object-lifetime-3.rs
index 7f00334f67e..097053276c7 100644
--- a/src/test/compile-fail/region-object-lifetime-3.rs
+++ b/src/test/compile-fail/region-object-lifetime-3.rs
@@ -11,6 +11,7 @@
 // Various tests related to testing how region inference works
 // with respect to the object receivers.
 
+#![feature(rustc_attrs)]
 #![allow(warnings)]
 
 trait Foo {
diff --git a/src/test/compile-fail/regions-bounded-by-send.rs b/src/test/compile-fail/regions-bounded-by-send.rs
deleted file mode 100644
index 71254e15d32..00000000000
--- a/src/test/compile-fail/regions-bounded-by-send.rs
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright 2012 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.
-
-// Test which of the builtin types are considered sendable. The tests
-// in this file all test region bound and lifetime violations that are
-// detected during type check.
-
-extern crate core;
-use core::ptr::Unique;
-
-fn assert_send<T:Send>() { }
-trait Dummy:Send { }
-
-// lifetime pointers with 'static lifetime are ok
-
-fn static_lifime_ok<'a,T,U:Send>(_: &'a isize) {
-    assert_send::<&'static isize>();
-    assert_send::<&'static str>();
-    assert_send::<&'static [isize]>();
-
-    // whether or not they are mutable
-    assert_send::<&'static mut isize>();
-}
-
-// otherwise lifetime pointers are not ok
-
-fn param_not_ok<'a>(x: &'a isize) {
-    assert_send::<&'a isize>(); //~ ERROR does not fulfill the required lifetime
-}
-
-fn param_not_ok1<'a>(_: &'a isize) {
-    assert_send::<&'a str>(); //~ ERROR does not fulfill the required lifetime
-}
-
-fn param_not_ok2<'a>(_: &'a isize) {
-    assert_send::<&'a [isize]>(); //~ ERROR does not fulfill the required lifetime
-}
-
-// boxes are ok
-
-fn box_ok() {
-    assert_send::<Box<isize>>();
-    assert_send::<String>();
-    assert_send::<Vec<isize>>();
-}
-
-// but not if they own a bad thing
-
-fn box_with_region_not_ok<'a>() {
-    assert_send::<Box<&'a isize>>(); //~ ERROR does not fulfill the required lifetime
-}
-
-// objects with insufficient bounds no ok
-
-fn object_with_random_bound_not_ok<'a>() {
-    assert_send::<&'a (Dummy+'a)>();
-    //~^ ERROR reference has a longer lifetime
-}
-
-fn object_with_send_bound_not_ok<'a>() {
-    assert_send::<&'a (Dummy+Send)>();
-    //~^ ERROR does not fulfill the required lifetime
-}
-
-// unsafe pointers are ok unless they point at unsendable things
-
-struct UniqueUnsafePtr(Unique<*const isize>);
-
-unsafe impl Send for UniqueUnsafePtr {}
-
-fn unsafe_ok1<'a>(_: &'a isize) {
-    assert_send::<UniqueUnsafePtr>();
-}
-
-fn main() {
-}
diff --git a/src/test/compile-fail/regions-pattern-typing-issue-19552.rs b/src/test/compile-fail/regions-pattern-typing-issue-19552.rs
index 57ea607cbf6..3401dd1becd 100644
--- a/src/test/compile-fail/regions-pattern-typing-issue-19552.rs
+++ b/src/test/compile-fail/regions-pattern-typing-issue-19552.rs
@@ -8,11 +8,11 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-fn assert_send<T: Send>(_t: T) {}
+fn assert_static<T: 'static>(_t: T) {}
 
 fn main() {
     let line = String::new();
     match [&*line] { //~ ERROR `line` does not live long enough
-        [ word ] => { assert_send(word); }
+        [ word ] => { assert_static(word); }
     }
 }
diff --git a/src/test/compile-fail/rustc-error.rs b/src/test/compile-fail/rustc-error.rs
index 6497439c3dc..82f32cbcd14 100644
--- a/src/test/compile-fail/rustc-error.rs
+++ b/src/test/compile-fail/rustc-error.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(rustc_attrs)]
+
 #[rustc_error]
 fn main() {
     //~^ ERROR compilation successful
diff --git a/src/test/compile-fail/send-is-not-static-ensures-scoping.rs b/src/test/compile-fail/send-is-not-static-ensures-scoping.rs
new file mode 100755
index 00000000000..abbcd7e4590
--- /dev/null
+++ b/src/test/compile-fail/send-is-not-static-ensures-scoping.rs
@@ -0,0 +1,24 @@
+// Copyright 2014 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::thread;
+
+fn main() {
+    let bad = {
+        let x = 1;
+        let y = &x;
+
+        thread::scoped(|| { //~ ERROR cannot infer an appropriate lifetime
+            let _z = y;
+        })
+    };
+
+    bad.join();
+}
diff --git a/src/test/compile-fail/trace_macros-gate.rs b/src/test/compile-fail/trace_macros-gate.rs
new file mode 100644
index 00000000000..6473bcece91
--- /dev/null
+++ b/src/test/compile-fail/trace_macros-gate.rs
@@ -0,0 +1,30 @@
+// 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.
+
+// Test that the trace_macros feature gate is on.
+
+fn main() {
+    trace_macros!(); //~ ERROR `trace_macros` is not stable
+    trace_macros!(1); //~ ERROR `trace_macros` is not stable
+    trace_macros!(ident); //~ ERROR `trace_macros` is not stable
+    trace_macros!(for); //~ ERROR `trace_macros` is not stable
+    trace_macros!(true,); //~ ERROR `trace_macros` is not stable
+    trace_macros!(false 1); //~ ERROR `trace_macros` is not stable
+
+    // Errors are signalled early for the above, before expansion.
+    // See trace_macros-gate2 and trace_macros-gate3. for examples
+    // of the below being caught.
+
+    macro_rules! expando {
+        ($x: ident) => { trace_macros!($x) }
+    }
+
+    expando!(true);
+}
diff --git a/src/test/compile-fail/trace_macros-gate2.rs b/src/test/compile-fail/trace_macros-gate2.rs
new file mode 100644
index 00000000000..71cc45e132d
--- /dev/null
+++ b/src/test/compile-fail/trace_macros-gate2.rs
@@ -0,0 +1,20 @@
+// 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.
+
+// Test that the trace_macros feature gate is on.
+
+fn main() {
+    // (Infrastructure does not attempt to detect uses in macro definitions.)
+    macro_rules! expando {
+        ($x: ident) => { trace_macros!($x) }
+    }
+
+    expando!(true); //~ ERROR `trace_macros` is not stable
+}
diff --git a/src/test/compile-fail/trace_macros-gate3.rs b/src/test/compile-fail/trace_macros-gate3.rs
new file mode 100644
index 00000000000..66d03cf9d80
--- /dev/null
+++ b/src/test/compile-fail/trace_macros-gate3.rs
@@ -0,0 +1,20 @@
+// 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.
+
+// Test that the trace_macros feature gate is on.
+
+pub fn main() {
+    println!("arg: {}", trace_macros!()); //~ ERROR `trace_macros` is not stable
+    println!("arg: {}", trace_macros!(1)); //~ ERROR `trace_macros` is not stable
+    println!("arg: {}", trace_macros!(ident)); //~ ERROR `trace_macros` is not stable
+    println!("arg: {}", trace_macros!(for)); //~ ERROR `trace_macros` is not stable
+    println!("arg: {}", trace_macros!(true,)); //~ ERROR `trace_macros` is not stable
+    println!("arg: {}", trace_macros!(false 1)); //~ ERROR `trace_macros` is not stable
+}
diff --git a/src/test/compile-fail/trait-bounds-cant-coerce.rs b/src/test/compile-fail/trait-bounds-cant-coerce.rs
index 89e89cf8246..79174552ae0 100644
--- a/src/test/compile-fail/trait-bounds-cant-coerce.rs
+++ b/src/test/compile-fail/trait-bounds-cant-coerce.rs
@@ -22,7 +22,7 @@ fn c(x: Box<Foo+Sync+Send>) {
 fn d(x: Box<Foo>) {
     a(x); //~  ERROR mismatched types
           //~| expected `Box<Foo + Send>`
-          //~| found `Box<Foo + 'static>`
+          //~| found `Box<Foo>`
           //~| expected bounds `Send`
           //~| found no bounds
 }
diff --git a/src/test/compile-fail/unused-attr.rs b/src/test/compile-fail/unused-attr.rs
index 50217ff9e5d..2d4bc0c857a 100644
--- a/src/test/compile-fail/unused-attr.rs
+++ b/src/test/compile-fail/unused-attr.rs
@@ -7,9 +7,10 @@
 // <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.
+
 #![deny(unused_attributes)]
 #![allow(dead_code, unused_imports)]
-#![feature(core)]
+#![feature(core, custom_attribute)]
 
 #![foo] //~ ERROR unused attribute
 
diff --git a/src/test/compile-fail/variance-associated-types.rs b/src/test/compile-fail/variance-associated-types.rs
index ecb2287769b..0ed0861d34a 100644
--- a/src/test/compile-fail/variance-associated-types.rs
+++ b/src/test/compile-fail/variance-associated-types.rs
@@ -11,6 +11,8 @@
 // Test that the variance computation considers types/regions that
 // appear in projections to be invariant.
 
+#![feature(rustc_attrs)]
+
 trait Trait<'a> {
     type Type;
 
diff --git a/src/test/compile-fail/variance-object-types.rs b/src/test/compile-fail/variance-object-types.rs
index 972ec96f5f2..2b7b05970d9 100644
--- a/src/test/compile-fail/variance-object-types.rs
+++ b/src/test/compile-fail/variance-object-types.rs
@@ -11,6 +11,8 @@
 // Test that Cell is considered invariant with respect to its
 // type.
 
+#![feature(rustc_attrs)]
+
 use std::cell::Cell;
 
 // For better or worse, associated types are invariant, and hence we
diff --git a/src/test/compile-fail/variance-regions-direct.rs b/src/test/compile-fail/variance-regions-direct.rs
index 04389b67dba..d70305d1106 100644
--- a/src/test/compile-fail/variance-regions-direct.rs
+++ b/src/test/compile-fail/variance-regions-direct.rs
@@ -11,6 +11,8 @@
 // Test that we correctly infer variance for region parameters in
 // various self-contained types.
 
+#![feature(rustc_attrs)]
+
 // Regions that just appear in normal spots are contravariant:
 
 #[rustc_variance]
diff --git a/src/test/compile-fail/variance-regions-indirect.rs b/src/test/compile-fail/variance-regions-indirect.rs
index e2c7958b31d..4bb329d6304 100644
--- a/src/test/compile-fail/variance-regions-indirect.rs
+++ b/src/test/compile-fail/variance-regions-indirect.rs
@@ -12,6 +12,8 @@
 // case that involve multiple intricate types.
 // Try enums too.
 
+#![feature(rustc_attrs)]
+
 #[rustc_variance]
 enum Base<'a, 'b, 'c:'b, 'd> { //~ ERROR regions=[[+, -, o, *];[];[]]
     Test8A(extern "Rust" fn(&'a isize)),
diff --git a/src/test/compile-fail/variance-trait-object-bound.rs b/src/test/compile-fail/variance-trait-object-bound.rs
index c61f2ff79c0..965b9430a5e 100644
--- a/src/test/compile-fail/variance-trait-object-bound.rs
+++ b/src/test/compile-fail/variance-trait-object-bound.rs
@@ -14,6 +14,8 @@
 //
 // Issue #18262.
 
+#![feature(rustc_attrs)]
+
 use std::mem;
 
 trait T { fn foo(); }