about summary refs log tree commit diff
path: root/src/libarena/lib.rs
diff options
context:
space:
mode:
authorFelix S. Klock II <pnkfelix@pnkfx.org>2015-07-17 16:12:35 +0200
committerFelix S. Klock II <pnkfelix@pnkfx.org>2015-10-06 14:16:49 +0200
commitd778e57bf61b2284f33d28486f2ac63faa0422cf (patch)
treec6b40557ab5e5f1d9de0724c3926bfd0abb5a28e /src/libarena/lib.rs
parent9868df2fd5d9364a1a1d8b22847c7b442a77a88b (diff)
downloadrust-d778e57bf61b2284f33d28486f2ac63faa0422cf.tar.gz
rust-d778e57bf61b2284f33d28486f2ac63faa0422cf.zip
Add RFC 1238's `unsafe_destructor_blind_to_params` (UGEH) where needed.
I needed it in `RawVec`, `Vec`, and `TypedArena` for `rustc` to
bootstrap; but of course that alone was not sufficient for `make
check`.

Later I added `unsafe_destructor_blind_to_params` to collections, in
particular `LinkedList` and `RawTable` (the backing representation for
`HashMap` and `HashSet`), to get the regression tests exercising
cyclic structure from PR #27185 building.

----

Note that the feature is `dropck_parametricity` (which is not the same
as the attribute's name). We will almost certainly vary our strategy
here in the future, so it makes some sense to have a not-as-ugly name
for the feature gate. (The attribute name was deliberately selected to
be ugly looking.)
Diffstat (limited to 'src/libarena/lib.rs')
-rw-r--r--src/libarena/lib.rs7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/libarena/lib.rs b/src/libarena/lib.rs
index 57e82720e8b..62463ecabbf 100644
--- a/src/libarena/lib.rs
+++ b/src/libarena/lib.rs
@@ -38,8 +38,14 @@
 #![feature(ptr_as_ref)]
 #![feature(raw)]
 #![feature(staged_api)]
+#![feature(dropck_parametricity)]
 #![cfg_attr(test, feature(test))]
 
+// SNAP 1af31d4
+#![allow(unused_features)]
+// SNAP 1af31d4
+#![allow(unused_attributes)]
+
 extern crate alloc;
 
 use std::cell::{Cell, RefCell};
@@ -510,6 +516,7 @@ impl<T> TypedArena<T> {
 }
 
 impl<T> Drop for TypedArena<T> {
+    #[unsafe_destructor_blind_to_params]
     fn drop(&mut self) {
         unsafe {
             // Determine how much was filled.