about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2014-06-17 16:00:04 -0700
committerPatrick Walton <pcwalton@mimiga.net>2014-06-20 14:24:31 -0700
commitdcbf4ec2a1cfd9f521c96b9dab62a2d27ded1b24 (patch)
treec8a77671439e27d37b6432d25009a3549f02ec67 /src
parent6750eb5a05042fe3fb84708909074f33ad86d3ec (diff)
downloadrust-dcbf4ec2a1cfd9f521c96b9dab62a2d27ded1b24.tar.gz
rust-dcbf4ec2a1cfd9f521c96b9dab62a2d27ded1b24.zip
librustc: Put `#[unsafe_destructor]` behind a feature gate.
Closes #8142.

This is not the semantics we want long-term. You can continue to use
`#[unsafe_destructor]`, but you'll need to add
`#![feature(unsafe_destructor)]` to the crate attributes.

[breaking-change]
Diffstat (limited to 'src')
-rw-r--r--src/doc/guide-unsafe.md8
-rw-r--r--src/doc/rust.md5
-rw-r--r--src/liballoc/lib.rs3
-rw-r--r--src/libarena/lib.rs3
-rw-r--r--src/libcollections/lib.rs2
-rw-r--r--src/libcore/lib.rs3
-rw-r--r--src/libnative/lib.rs4
-rw-r--r--src/librustc/front/feature_gate.rs12
-rw-r--r--src/librustc/lib.rs5
-rw-r--r--src/librustrt/lib.rs6
-rw-r--r--src/librustuv/lib.rs2
-rw-r--r--src/libstd/lib.rs6
-rw-r--r--src/libsync/lib.rs3
-rw-r--r--src/libsyntax/lib.rs5
-rw-r--r--src/test/auxiliary/issue-2526.rs2
-rw-r--r--src/test/bench/task-perf-alloc-unwind.rs2
-rw-r--r--src/test/compile-fail/borrowck-borrowed-uniq-rvalue-2.rs2
-rw-r--r--src/test/compile-fail/no-send-res-ports.rs2
-rw-r--r--src/test/compile-fail/pinned-deep-copy.rs2
-rw-r--r--src/test/compile-fail/unique-vec-res.rs2
-rw-r--r--src/test/run-fail/unwind-resource-fail3.rs2
-rw-r--r--src/test/run-pass/attr-no-drop-flag-size.rs2
-rw-r--r--src/test/run-pass/drop-trait-generic.rs2
-rw-r--r--src/test/run-pass/init-res-into-things.rs2
-rw-r--r--src/test/run-pass/issue-2718.rs2
-rw-r--r--src/test/run-pass/issue-2735-2.rs2
-rw-r--r--src/test/run-pass/issue-2735-3.rs2
-rw-r--r--src/test/run-pass/issue-4252.rs2
-rw-r--r--src/test/run-pass/issue-979.rs2
-rw-r--r--src/test/run-pass/newtype-struct-drop-run.rs2
-rw-r--r--src/test/run-pass/option-unwrap.rs2
-rw-r--r--src/test/run-pass/resource-assign-is-not-copy.rs2
-rw-r--r--src/test/run-pass/resource-destruct.rs2
-rw-r--r--src/test/run-pass/resource-in-struct.rs2
-rw-r--r--src/test/run-pass/unwind-resource2.rs2
-rw-r--r--src/test/run-pass/vec-slice-drop.rs2
36 files changed, 78 insertions, 33 deletions
diff --git a/src/doc/guide-unsafe.md b/src/doc/guide-unsafe.md
index 1431c8a5c9a..def96c62deb 100644
--- a/src/doc/guide-unsafe.md
+++ b/src/doc/guide-unsafe.md
@@ -192,6 +192,8 @@ As an example, we give a reimplementation of owned boxes by wrapping
 reimplementation is as safe as the `Box` type.
 
 ```
+#![feature(unsafe_destructor)]
+
 extern crate libc;
 use libc::{c_void, size_t, malloc, free};
 use std::mem;
@@ -242,10 +244,12 @@ impl<T: Send> Unique<T> {
 // A key ingredient for safety, we associate a destructor with
 // Unique<T>, making the struct manage the raw pointer: when the
 // struct goes out of scope, it will automatically free the raw pointer.
+//
 // NB: This is an unsafe destructor, because rustc will not normally
-// allow destructors to be associated with parametrized types, due to
+// allow destructors to be associated with parameterized types, due to
 // bad interaction with managed boxes. (With the Send restriction,
-// we don't have this problem.)
+// we don't have this problem.) Note that the `#[unsafe_destructor]`
+// feature gate is required to use unsafe destructors.
 #[unsafe_destructor]
 impl<T: Send> Drop for Unique<T> {
     fn drop(&mut self) {
diff --git a/src/doc/rust.md b/src/doc/rust.md
index 7e5e5b2e67a..ca5ecc191cc 100644
--- a/src/doc/rust.md
+++ b/src/doc/rust.md
@@ -1940,12 +1940,13 @@ interpreted:
   enum representation in C is undefined, and this may be incorrect when the C
   code is compiled with certain flags.
 - `simd` - on certain tuple structs, derive the arithmetic operators, which
-  lower to the target's SIMD instructions, if any.
+  lower to the target's SIMD instructions, if any; the `simd` feature gate
+  is necessary to use this attribute.
 - `static_assert` - on statics whose type is `bool`, terminates compilation
   with an error if it is not initialized to `true`.
 - `unsafe_destructor` - allow implementations of the "drop" language item
   where the type it is implemented for does not implement the "send" language
-  item.
+  item; the `unsafe_destructor` feature gate is needed to use this attribute
 - `unsafe_no_drop_flag` - on structs, remove the flag that prevents
   destructors from being run twice. Destructors might be run multiple times on
   the same object with this attribute.
diff --git a/src/liballoc/lib.rs b/src/liballoc/lib.rs
index e578346861e..53a79217241 100644
--- a/src/liballoc/lib.rs
+++ b/src/liballoc/lib.rs
@@ -69,7 +69,8 @@
        html_root_url = "http://doc.rust-lang.org/")]
 
 #![no_std]
-#![feature(phase)]
+#![feature(phase, unsafe_destructor)]
+#![allow(unknown_features)] // NOTE: remove after a stage0 snap
 
 #[phase(plugin, link)]
 extern crate core;
diff --git a/src/libarena/lib.rs b/src/libarena/lib.rs
index 86babb7a3d2..5ddb088c8c8 100644
--- a/src/libarena/lib.rs
+++ b/src/libarena/lib.rs
@@ -27,7 +27,10 @@
 #![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
        html_favicon_url = "http://www.rust-lang.org/favicon.ico",
        html_root_url = "http://doc.rust-lang.org/")]
+
+#![feature(unsafe_destructor)]
 #![allow(missing_doc)]
+#![allow(unknown_features)] // NOTE: remove after a stage0 snap
 
 use std::cell::{Cell, RefCell};
 use std::cmp;
diff --git a/src/libcollections/lib.rs b/src/libcollections/lib.rs
index 3abecc3fc86..ca7de131dc2 100644
--- a/src/libcollections/lib.rs
+++ b/src/libcollections/lib.rs
@@ -22,7 +22,9 @@
        html_playground_url = "http://play.rust-lang.org/")]
 
 #![feature(macro_rules, managed_boxes, default_type_params, phase, globs)]
+#![feature(unsafe_destructor)]
 #![no_std]
+#![allow(unknown_features)] // NOTE: remove after a stage0 snap
 
 #[phase(plugin, link)] extern crate core;
 extern crate alloc;
diff --git a/src/libcore/lib.rs b/src/libcore/lib.rs
index 62c34912f66..3d2382e6208 100644
--- a/src/libcore/lib.rs
+++ b/src/libcore/lib.rs
@@ -55,8 +55,9 @@
        html_playground_url = "http://play.rust-lang.org/")]
 
 #![no_std]
-#![feature(globs, macro_rules, managed_boxes, phase, simd)]
+#![feature(globs, macro_rules, managed_boxes, phase, simd, unsafe_destructor)]
 #![deny(missing_doc)]
+#![allow(unknown_features)] // NOTE: remove after a stage0 snap
 
 #[cfg(test)] extern crate realcore = "core";
 #[cfg(test)] extern crate libc;
diff --git a/src/libnative/lib.rs b/src/libnative/lib.rs
index 24f1b9b9407..b44673a24ef 100644
--- a/src/libnative/lib.rs
+++ b/src/libnative/lib.rs
@@ -52,15 +52,17 @@
 #![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
        html_favicon_url = "http://www.rust-lang.org/favicon.ico",
        html_root_url = "http://doc.rust-lang.org/")]
+
 #![deny(unused_result, unused_must_use)]
 #![allow(non_camel_case_types)]
 #![allow(deprecated)]
+#![allow(unknown_features)] // NOTE: remove after a stage0 snap
 #![feature(default_type_params)]
 
 // NB this crate explicitly does *not* allow glob imports, please seriously
 //    consider whether they're needed before adding that feature here (the
 //    answer is that you don't need them)
-#![feature(macro_rules)]
+#![feature(macro_rules, unsafe_destructor)]
 
 extern crate alloc;
 extern crate libc;
diff --git a/src/librustc/front/feature_gate.rs b/src/librustc/front/feature_gate.rs
index 30d0c6d0564..07926ee112d 100644
--- a/src/librustc/front/feature_gate.rs
+++ b/src/librustc/front/feature_gate.rs
@@ -50,6 +50,7 @@ static KNOWN_FEATURES: &'static [(&'static str, Status)] = &[
     ("log_syntax", Active),
     ("trace_macros", Active),
     ("concat_idents", Active),
+    ("unsafe_destructor", Active),
 
     ("simd", Active),
     ("default_type_params", Active),
@@ -220,6 +221,17 @@ impl<'a> Visitor<()> for Context<'a> {
                 }
             }
 
+            ast::ItemImpl(..) => {
+                if attr::contains_name(i.attrs.as_slice(),
+                                       "unsafe_destructor") {
+                    self.gate_feature("unsafe_destructor",
+                                      i.span,
+                                      "`#[unsafe_destructor]` allows too \
+                                       many unsafe patterns and may be \
+                                       removed in the future");
+                }
+            }
+
             _ => {}
         }
 
diff --git a/src/librustc/lib.rs b/src/librustc/lib.rs
index 86529cf1987..fff0ae9e40c 100644
--- a/src/librustc/lib.rs
+++ b/src/librustc/lib.rs
@@ -29,8 +29,9 @@ This API is completely unstable and subject to change.
       html_root_url = "http://doc.rust-lang.org/")]
 
 #![allow(deprecated)]
-#![feature(macro_rules, globs, struct_variant, managed_boxes, quote,
-           default_type_params, phase)]
+#![allow(unknown_features)] // NOTE: remove after a stage0 snap
+#![feature(macro_rules, globs, struct_variant, managed_boxes, quote)]
+#![feature(default_type_params, phase, unsafe_destructor)]
 
 extern crate arena;
 extern crate debug;
diff --git a/src/librustrt/lib.rs b/src/librustrt/lib.rs
index c461dccceff..f5521886f52 100644
--- a/src/librustrt/lib.rs
+++ b/src/librustrt/lib.rs
@@ -15,10 +15,12 @@
 #![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
        html_favicon_url = "http://www.rust-lang.org/favicon.ico",
        html_root_url = "http://doc.rust-lang.org/")]
-#![feature(macro_rules, phase, globs, thread_local, managed_boxes, asm,
-           linkage)]
+
+#![feature(macro_rules, phase, globs, thread_local, managed_boxes, asm)]
+#![feature(linkage, unsafe_destructor)]
 #![no_std]
 #![experimental]
+#![allow(unknown_features)] // NOTE: remove after a stage0 snap
 
 #[phase(plugin, link)] extern crate core;
 extern crate alloc;
diff --git a/src/librustuv/lib.rs b/src/librustuv/lib.rs
index dae94acb6f0..74caf86a631 100644
--- a/src/librustuv/lib.rs
+++ b/src/librustuv/lib.rs
@@ -40,7 +40,7 @@ via `close` and `delete` methods.
 #![crate_type = "rlib"]
 #![crate_type = "dylib"]
 
-#![feature(macro_rules)]
+#![feature(macro_rules, unsafe_destructor)]
 #![deny(unused_result, unused_must_use)]
 #![allow(visible_private_types)]
 
diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs
index 695c61efcf0..a99fa016aef 100644
--- a/src/libstd/lib.rs
+++ b/src/libstd/lib.rs
@@ -103,14 +103,16 @@
        html_favicon_url = "http://www.rust-lang.org/favicon.ico",
        html_root_url = "http://doc.rust-lang.org/",
        html_playground_url = "http://play.rust-lang.org/")]
-#![feature(macro_rules, globs, managed_boxes,
-           linkage, default_type_params, phase)]
+
+#![feature(macro_rules, globs, managed_boxes)]
+#![feature(linkage, default_type_params, phase, unsafe_destructor)]
 
 // Don't link to std. We are std.
 #![no_std]
 
 #![allow(deprecated)]
 #![deny(missing_doc)]
+#![allow(unknown_features)] // NOTE: remove after a stage0 snap
 
 // When testing libstd, bring in libuv as the I/O backend so tests can print
 // things and all of the std::io tests have an I/O interface to run on top
diff --git a/src/libsync/lib.rs b/src/libsync/lib.rs
index 1336ea48d31..a2f22bcaa68 100644
--- a/src/libsync/lib.rs
+++ b/src/libsync/lib.rs
@@ -26,10 +26,11 @@
        html_favicon_url = "http://www.rust-lang.org/favicon.ico",
        html_root_url = "http://doc.rust-lang.org/",
        html_playground_url = "http://play.rust-lang.org/")]
-#![feature(phase, globs, macro_rules)]
 
+#![feature(phase, globs, macro_rules, unsafe_destructor)]
 #![deny(missing_doc)]
 #![no_std]
+#![allow(unknown_features)] // NOTE: remove after a stage0 snap
 
 #[phase(plugin, link)] extern crate core;
 extern crate alloc;
diff --git a/src/libsyntax/lib.rs b/src/libsyntax/lib.rs
index b18e3a221f9..1fbc6e41e55 100644
--- a/src/libsyntax/lib.rs
+++ b/src/libsyntax/lib.rs
@@ -27,9 +27,10 @@ This API is completely unstable and subject to change.
        html_favicon_url = "http://www.rust-lang.org/favicon.ico",
        html_root_url = "http://doc.rust-lang.org/")]
 
-#![feature(macro_rules, globs, managed_boxes, default_type_params, phase,
-           quote)]
+#![feature(macro_rules, globs, managed_boxes, default_type_params, phase)]
+#![feature(quote, unsafe_destructor)]
 #![allow(deprecated)]
+#![allow(unknown_features)] // NOTE: remove after a stage0 snap
 
 extern crate serialize;
 extern crate term;
diff --git a/src/test/auxiliary/issue-2526.rs b/src/test/auxiliary/issue-2526.rs
index 8d096a9b7e7..c6ca0f3ed7b 100644
--- a/src/test/auxiliary/issue-2526.rs
+++ b/src/test/auxiliary/issue-2526.rs
@@ -11,6 +11,8 @@
 #![crate_id="issue_2526#0.2"]
 #![crate_type = "lib"]
 
+#![feature(unsafe_destructor)]
+
 struct arc_destruct<T> {
   _data: int,
 }
diff --git a/src/test/bench/task-perf-alloc-unwind.rs b/src/test/bench/task-perf-alloc-unwind.rs
index 037a326880f..a3d78823816 100644
--- a/src/test/bench/task-perf-alloc-unwind.rs
+++ b/src/test/bench/task-perf-alloc-unwind.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(managed_boxes)]
+#![feature(managed_boxes, unsafe_destructor)]
 
 extern crate collections;
 extern crate time;
diff --git a/src/test/compile-fail/borrowck-borrowed-uniq-rvalue-2.rs b/src/test/compile-fail/borrowck-borrowed-uniq-rvalue-2.rs
index 6f385a8d1eb..081dc61d9fc 100644
--- a/src/test/compile-fail/borrowck-borrowed-uniq-rvalue-2.rs
+++ b/src/test/compile-fail/borrowck-borrowed-uniq-rvalue-2.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(unsafe_destructor)]
+
 extern crate debug;
 
 struct defer<'a> {
diff --git a/src/test/compile-fail/no-send-res-ports.rs b/src/test/compile-fail/no-send-res-ports.rs
index 20edd175560..c086f44d08b 100644
--- a/src/test/compile-fail/no-send-res-ports.rs
+++ b/src/test/compile-fail/no-send-res-ports.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(managed_boxes)]
+#![feature(managed_boxes, unsafe_destructor)]
 
 extern crate debug;
 
diff --git a/src/test/compile-fail/pinned-deep-copy.rs b/src/test/compile-fail/pinned-deep-copy.rs
index aaa09de826b..d6e8507d020 100644
--- a/src/test/compile-fail/pinned-deep-copy.rs
+++ b/src/test/compile-fail/pinned-deep-copy.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(managed_boxes)]
+#![feature(managed_boxes, unsafe_destructor)]
 
 extern crate debug;
 
diff --git a/src/test/compile-fail/unique-vec-res.rs b/src/test/compile-fail/unique-vec-res.rs
index 4d10537aa4d..a2adb55a2dd 100644
--- a/src/test/compile-fail/unique-vec-res.rs
+++ b/src/test/compile-fail/unique-vec-res.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(managed_boxes)]
+#![feature(managed_boxes, unsafe_destructor)]
 
 extern crate debug;
 use std::cell::Cell;
diff --git a/src/test/run-fail/unwind-resource-fail3.rs b/src/test/run-fail/unwind-resource-fail3.rs
index 6252944973d..8186c6263ca 100644
--- a/src/test/run-fail/unwind-resource-fail3.rs
+++ b/src/test/run-fail/unwind-resource-fail3.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(managed_boxes)]
+#![feature(managed_boxes, unsafe_destructor)]
 
 // error-pattern:quux
 
diff --git a/src/test/run-pass/attr-no-drop-flag-size.rs b/src/test/run-pass/attr-no-drop-flag-size.rs
index 48768a1c6fd..b3fb1627900 100644
--- a/src/test/run-pass/attr-no-drop-flag-size.rs
+++ b/src/test/run-pass/attr-no-drop-flag-size.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(unsafe_destructor)]
+
 use std::mem::size_of;
 
 #[unsafe_no_drop_flag]
diff --git a/src/test/run-pass/drop-trait-generic.rs b/src/test/run-pass/drop-trait-generic.rs
index 977bd474d17..4ba3aa70dfc 100644
--- a/src/test/run-pass/drop-trait-generic.rs
+++ b/src/test/run-pass/drop-trait-generic.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(unsafe_destructor)]
+
 struct S<T> {
     x: T
 }
diff --git a/src/test/run-pass/init-res-into-things.rs b/src/test/run-pass/init-res-into-things.rs
index 4c05103973f..5e0aeeb6bed 100644
--- a/src/test/run-pass/init-res-into-things.rs
+++ b/src/test/run-pass/init-res-into-things.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(managed_boxes)]
+#![feature(managed_boxes, unsafe_destructor)]
 
 use std::cell::Cell;
 use std::gc::{Gc, GC};
diff --git a/src/test/run-pass/issue-2718.rs b/src/test/run-pass/issue-2718.rs
index 5f180f13ffa..5eb9453134d 100644
--- a/src/test/run-pass/issue-2718.rs
+++ b/src/test/run-pass/issue-2718.rs
@@ -9,6 +9,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(unsafe_destructor)]
+
 pub type Task = int;
 
 // tjc: I don't know why
diff --git a/src/test/run-pass/issue-2735-2.rs b/src/test/run-pass/issue-2735-2.rs
index b62905634ad..744ab45adc4 100644
--- a/src/test/run-pass/issue-2735-2.rs
+++ b/src/test/run-pass/issue-2735-2.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(managed_boxes)]
+#![feature(managed_boxes, unsafe_destructor)]
 
 use std::cell::Cell;
 use std::gc::{Gc, GC};
diff --git a/src/test/run-pass/issue-2735-3.rs b/src/test/run-pass/issue-2735-3.rs
index f59c143c46f..a69ec1dac72 100644
--- a/src/test/run-pass/issue-2735-3.rs
+++ b/src/test/run-pass/issue-2735-3.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(managed_boxes)]
+#![feature(managed_boxes, unsafe_destructor)]
 
 use std::cell::Cell;
 use std::gc::{Gc, GC};
diff --git a/src/test/run-pass/issue-4252.rs b/src/test/run-pass/issue-4252.rs
index 151d00eb2d0..186dd0363ee 100644
--- a/src/test/run-pass/issue-4252.rs
+++ b/src/test/run-pass/issue-4252.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(unsafe_destructor)]
+
 extern crate debug;
 
 trait X {
diff --git a/src/test/run-pass/issue-979.rs b/src/test/run-pass/issue-979.rs
index 39b81d16519..fc29299a4a9 100644
--- a/src/test/run-pass/issue-979.rs
+++ b/src/test/run-pass/issue-979.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(managed_boxes)]
+#![feature(managed_boxes, unsafe_destructor)]
 
 use std::cell::Cell;
 use std::gc::{GC, Gc};
diff --git a/src/test/run-pass/newtype-struct-drop-run.rs b/src/test/run-pass/newtype-struct-drop-run.rs
index 3821efcb1bc..efa151c6606 100644
--- a/src/test/run-pass/newtype-struct-drop-run.rs
+++ b/src/test/run-pass/newtype-struct-drop-run.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(managed_boxes)]
+#![feature(managed_boxes, unsafe_destructor)]
 
 // Make sure the destructor is run for newtype structs.
 
diff --git a/src/test/run-pass/option-unwrap.rs b/src/test/run-pass/option-unwrap.rs
index eea5296d7e4..e9df731fbbf 100644
--- a/src/test/run-pass/option-unwrap.rs
+++ b/src/test/run-pass/option-unwrap.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(managed_boxes)]
+#![feature(managed_boxes, unsafe_destructor)]
 
 use std::cell::Cell;
 use std::gc::{GC, Gc};
diff --git a/src/test/run-pass/resource-assign-is-not-copy.rs b/src/test/run-pass/resource-assign-is-not-copy.rs
index 7f266ec912a..dc6dac15bb2 100644
--- a/src/test/run-pass/resource-assign-is-not-copy.rs
+++ b/src/test/run-pass/resource-assign-is-not-copy.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(managed_boxes)]
+#![feature(managed_boxes, unsafe_destructor)]
 
 extern crate debug;
 
diff --git a/src/test/run-pass/resource-destruct.rs b/src/test/run-pass/resource-destruct.rs
index 85750899259..60526faef50 100644
--- a/src/test/run-pass/resource-destruct.rs
+++ b/src/test/run-pass/resource-destruct.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(managed_boxes)]
+#![feature(managed_boxes, unsafe_destructor)]
 
 use std::cell::Cell;
 use std::gc::{GC, Gc};
diff --git a/src/test/run-pass/resource-in-struct.rs b/src/test/run-pass/resource-in-struct.rs
index 88edefdfe29..253a2c0c712 100644
--- a/src/test/run-pass/resource-in-struct.rs
+++ b/src/test/run-pass/resource-in-struct.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(managed_boxes)]
+#![feature(managed_boxes, unsafe_destructor)]
 
 // Ensures that class dtors run if the object is inside an enum
 // variant
diff --git a/src/test/run-pass/unwind-resource2.rs b/src/test/run-pass/unwind-resource2.rs
index b1669dea7b2..2739b898f9f 100644
--- a/src/test/run-pass/unwind-resource2.rs
+++ b/src/test/run-pass/unwind-resource2.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(managed_boxes)]
+#![feature(managed_boxes, unsafe_destructor)]
 
 use std::task;
 use std::gc::{Gc, GC};
diff --git a/src/test/run-pass/vec-slice-drop.rs b/src/test/run-pass/vec-slice-drop.rs
index 3c0a9abec14..9e5fc6d0518 100644
--- a/src/test/run-pass/vec-slice-drop.rs
+++ b/src/test/run-pass/vec-slice-drop.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-#![feature(managed_boxes)]
+#![feature(managed_boxes, unsafe_destructor)]
 
 use std::cell::Cell;
 use std::gc::{Gc, GC};