about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2014-02-23 02:21:53 -0800
committerbors <bors@rust-lang.org>2014-02-23 02:21:53 -0800
commit551da0615764853153db944063ae2e271414a71b (patch)
tree9086a265aa3f85969eb6180566e71a9d991d9e70 /src/libstd
parentc250c16f81f82a21295e421be7bd47c91d64cb2a (diff)
parentdb111846b58253c723750be280a478ed7d27d879 (diff)
downloadrust-551da0615764853153db944063ae2e271414a71b.tar.gz
rust-551da0615764853153db944063ae2e271414a71b.zip
auto merge of #12311 : brson/rust/unstable, r=alexcrichton
With the stability attributes we can put public-but unstable modules next to others, so this moves `intrinsics` and `raw` out of the `unstable` module (and marks both as `#[experimental]`).
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/any.rs4
-rw-r--r--src/libstd/c_str.rs2
-rw-r--r--src/libstd/cast.rs4
-rw-r--r--src/libstd/cleanup.rs2
-rw-r--r--src/libstd/intrinsics.rs (renamed from src/libstd/unstable/intrinsics.rs)4
-rw-r--r--src/libstd/lib.rs5
-rw-r--r--src/libstd/local_data.rs2
-rw-r--r--src/libstd/managed.rs2
-rw-r--r--src/libstd/mem.rs4
-rw-r--r--src/libstd/num/f32.rs2
-rw-r--r--src/libstd/num/f64.rs2
-rw-r--r--src/libstd/num/i16.rs2
-rw-r--r--src/libstd/num/i32.rs2
-rw-r--r--src/libstd/num/i64.rs2
-rw-r--r--src/libstd/num/i8.rs2
-rw-r--r--src/libstd/num/int.rs2
-rw-r--r--src/libstd/num/u16.rs2
-rw-r--r--src/libstd/num/u32.rs2
-rw-r--r--src/libstd/num/u64.rs2
-rw-r--r--src/libstd/num/u8.rs2
-rw-r--r--src/libstd/num/uint.rs2
-rw-r--r--src/libstd/ptr.rs2
-rw-r--r--src/libstd/raw.rs (renamed from src/libstd/unstable/raw.rs)2
-rw-r--r--src/libstd/reflect.rs4
-rw-r--r--src/libstd/repr.rs4
-rw-r--r--src/libstd/rt/global_heap.rs4
-rw-r--r--src/libstd/rt/local_heap.rs21
-rw-r--r--src/libstd/rt/mod.rs3
-rw-r--r--src/libstd/rt/stack.rs (renamed from src/libstd/unstable/stack.rs)2
-rw-r--r--src/libstd/rt/thread.rs6
-rw-r--r--src/libstd/rt/unwind.rs22
-rw-r--r--src/libstd/rt/util.rs2
-rw-r--r--src/libstd/str.rs4
-rw-r--r--src/libstd/sync/atomics.rs2
-rw-r--r--src/libstd/unstable/lang.rs52
-rw-r--r--src/libstd/unstable/mod.rs5
-rw-r--r--src/libstd/vec.rs4
-rw-r--r--src/libstd/vec_ng.rs2
38 files changed, 91 insertions, 103 deletions
diff --git a/src/libstd/any.rs b/src/libstd/any.rs
index 3f14db14882..06ae20d60bc 100644
--- a/src/libstd/any.rs
+++ b/src/libstd/any.rs
@@ -25,8 +25,8 @@ use fmt;
 use option::{Option, Some, None};
 use result::{Result, Ok, Err};
 use to_str::ToStr;
-use unstable::intrinsics::TypeId;
-use unstable::intrinsics;
+use intrinsics::TypeId;
+use intrinsics;
 
 /// A type with no inhabitants
 pub enum Void { }
diff --git a/src/libstd/c_str.rs b/src/libstd/c_str.rs
index e6b0958617e..af5d9838186 100644
--- a/src/libstd/c_str.rs
+++ b/src/libstd/c_str.rs
@@ -79,7 +79,7 @@ use str;
 use vec::{ImmutableVector, MutableVector};
 use vec;
 use rt::global_heap::malloc_raw;
-use unstable::raw::Slice;
+use raw::Slice;
 
 /// The representation of a C String.
 ///
diff --git a/src/libstd/cast.rs b/src/libstd/cast.rs
index ffdd70a6c14..8280553c1a3 100644
--- a/src/libstd/cast.rs
+++ b/src/libstd/cast.rs
@@ -11,7 +11,7 @@
 //! Unsafe casting functions
 
 use mem;
-use unstable::intrinsics;
+use intrinsics;
 use ptr::copy_nonoverlapping_memory;
 
 /// Casts the value at `src` to U. The two types must have the same length.
@@ -113,7 +113,7 @@ pub unsafe fn copy_lifetime_vec<'a,S,T>(_ptr: &'a [S], ptr: &T) -> &'a T {
 #[cfg(test)]
 mod tests {
     use cast::{bump_box_refcount, transmute};
-    use unstable::raw;
+    use raw;
 
     #[test]
     fn test_transmute_copy() {
diff --git a/src/libstd/cleanup.rs b/src/libstd/cleanup.rs
index dd43d8e2971..39c7932cdc8 100644
--- a/src/libstd/cleanup.rs
+++ b/src/libstd/cleanup.rs
@@ -11,7 +11,7 @@
 #[doc(hidden)];
 
 use ptr;
-use unstable::raw;
+use raw;
 
 static RC_IMMORTAL : uint = 0x77777777;
 
diff --git a/src/libstd/unstable/intrinsics.rs b/src/libstd/intrinsics.rs
index c983d82563c..b386335a428 100644
--- a/src/libstd/unstable/intrinsics.rs
+++ b/src/libstd/intrinsics.rs
@@ -41,9 +41,11 @@ A quick refresher on memory ordering:
 
 */
 
+#[allow(missing_doc)];
+
 // This is needed to prevent duplicate lang item definitions.
 #[cfg(test)]
-pub use realstd::unstable::intrinsics::{TyDesc, Opaque, TyVisitor, TypeId};
+pub use realstd::intrinsics::{TyDesc, Opaque, TyVisitor, TypeId};
 
 pub type GlueFn = extern "Rust" fn(*i8);
 
diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs
index d855aebdf3f..638f7b89469 100644
--- a/src/libstd/lib.rs
+++ b/src/libstd/lib.rs
@@ -194,7 +194,10 @@ pub mod reflect;
 // Private APIs
 #[unstable]
 pub mod unstable;
-
+#[experimental]
+pub mod intrinsics;
+#[experimental]
+pub mod raw;
 
 /* For internal use, not exported */
 
diff --git a/src/libstd/local_data.rs b/src/libstd/local_data.rs
index 043da46ba5e..6b854daabda 100644
--- a/src/libstd/local_data.rs
+++ b/src/libstd/local_data.rs
@@ -281,7 +281,7 @@ fn get_with<T:'static,
 }
 
 fn abort() -> ! {
-    use std::unstable::intrinsics;
+    use intrinsics;
     unsafe { intrinsics::abort() }
 }
 
diff --git a/src/libstd/managed.rs b/src/libstd/managed.rs
index 63196cd4f16..4cd99492ee4 100644
--- a/src/libstd/managed.rs
+++ b/src/libstd/managed.rs
@@ -15,7 +15,7 @@
 /// Returns the refcount of a shared box (as just before calling this)
 #[inline]
 pub fn refcount<T>(t: @T) -> uint {
-    use unstable::raw::Repr;
+    use raw::Repr;
     unsafe { (*t.repr()).ref_count - 1 }
 }
 
diff --git a/src/libstd/mem.rs b/src/libstd/mem.rs
index 11053f01ded..603f2b80eea 100644
--- a/src/libstd/mem.rs
+++ b/src/libstd/mem.rs
@@ -17,8 +17,8 @@
 
 use cast;
 use ptr;
-use unstable::intrinsics;
-use unstable::intrinsics::{bswap16, bswap32, bswap64};
+use intrinsics;
+use intrinsics::{bswap16, bswap32, bswap64};
 
 /// Returns the size of a type in bytes.
 #[inline]
diff --git a/src/libstd/num/f32.rs b/src/libstd/num/f32.rs
index da3f2c1636f..7b1fe949199 100644
--- a/src/libstd/num/f32.rs
+++ b/src/libstd/num/f32.rs
@@ -20,7 +20,7 @@ use num::{FPCategory, FPNaN, FPInfinite , FPZero, FPSubnormal, FPNormal};
 use num::{Zero, One, Bounded, strconv};
 use num;
 use to_str;
-use unstable::intrinsics;
+use intrinsics;
 
 macro_rules! delegate(
     (
diff --git a/src/libstd/num/f64.rs b/src/libstd/num/f64.rs
index 24165cbef50..d5a571cdd23 100644
--- a/src/libstd/num/f64.rs
+++ b/src/libstd/num/f64.rs
@@ -21,7 +21,7 @@ use num::{FPCategory, FPNaN, FPInfinite , FPZero, FPSubnormal, FPNormal};
 use num::{Zero, One, Bounded, strconv};
 use num;
 use to_str;
-use unstable::intrinsics;
+use intrinsics;
 
 pub use cmp::{min, max};
 
diff --git a/src/libstd/num/i16.rs b/src/libstd/num/i16.rs
index cbeff5d4aa2..141626ed98a 100644
--- a/src/libstd/num/i16.rs
+++ b/src/libstd/num/i16.rs
@@ -20,7 +20,7 @@ use num::{CheckedDiv, Zero, One, strconv};
 use num::{ToStrRadix, FromStrRadix};
 use option::{Option, Some, None};
 use str;
-use unstable::intrinsics;
+use intrinsics;
 
 int_module!(i16, 16)
 
diff --git a/src/libstd/num/i32.rs b/src/libstd/num/i32.rs
index 9afc1a14545..a43a6e6a288 100644
--- a/src/libstd/num/i32.rs
+++ b/src/libstd/num/i32.rs
@@ -20,7 +20,7 @@ use num::{CheckedDiv, Zero, One, strconv};
 use num::{ToStrRadix, FromStrRadix};
 use option::{Option, Some, None};
 use str;
-use unstable::intrinsics;
+use intrinsics;
 
 int_module!(i32, 32)
 
diff --git a/src/libstd/num/i64.rs b/src/libstd/num/i64.rs
index f1e9f5a4fdc..e8503d808a7 100644
--- a/src/libstd/num/i64.rs
+++ b/src/libstd/num/i64.rs
@@ -22,7 +22,7 @@ use num::{CheckedDiv, Zero, One, strconv};
 use num::{ToStrRadix, FromStrRadix};
 use option::{Option, Some, None};
 use str;
-use unstable::intrinsics;
+use intrinsics;
 
 int_module!(i64, 64)
 
diff --git a/src/libstd/num/i8.rs b/src/libstd/num/i8.rs
index e0e549b731a..9f857ff40ff 100644
--- a/src/libstd/num/i8.rs
+++ b/src/libstd/num/i8.rs
@@ -20,7 +20,7 @@ use num::{CheckedDiv, Zero, One, strconv};
 use num::{ToStrRadix, FromStrRadix};
 use option::{Option, Some, None};
 use str;
-use unstable::intrinsics;
+use intrinsics;
 
 int_module!(i8, 8)
 
diff --git a/src/libstd/num/int.rs b/src/libstd/num/int.rs
index d525639045e..6d1a50b724f 100644
--- a/src/libstd/num/int.rs
+++ b/src/libstd/num/int.rs
@@ -20,7 +20,7 @@ use num::{CheckedDiv, Zero, One, strconv};
 use num::{ToStrRadix, FromStrRadix};
 use option::{Option, Some, None};
 use str;
-use unstable::intrinsics;
+use intrinsics;
 
 #[cfg(target_word_size = "32")] int_module!(int, 32)
 #[cfg(target_word_size = "64")] int_module!(int, 64)
diff --git a/src/libstd/num/u16.rs b/src/libstd/num/u16.rs
index 770db889af5..da0293b3418 100644
--- a/src/libstd/num/u16.rs
+++ b/src/libstd/num/u16.rs
@@ -21,7 +21,7 @@ use num::{CheckedDiv, Zero, One, strconv};
 use num::{ToStrRadix, FromStrRadix};
 use option::{Option, Some, None};
 use str;
-use unstable::intrinsics;
+use intrinsics;
 
 uint_module!(u16, i16, 16)
 
diff --git a/src/libstd/num/u32.rs b/src/libstd/num/u32.rs
index 9e08ffed3b7..b103e18f701 100644
--- a/src/libstd/num/u32.rs
+++ b/src/libstd/num/u32.rs
@@ -21,7 +21,7 @@ use num::{CheckedDiv, Zero, One, strconv};
 use num::{ToStrRadix, FromStrRadix};
 use option::{Option, Some, None};
 use str;
-use unstable::intrinsics;
+use intrinsics;
 
 uint_module!(u32, i32, 32)
 
diff --git a/src/libstd/num/u64.rs b/src/libstd/num/u64.rs
index 17eebed967c..f7956f0128e 100644
--- a/src/libstd/num/u64.rs
+++ b/src/libstd/num/u64.rs
@@ -23,7 +23,7 @@ use num::{CheckedDiv, Zero, One, strconv};
 use num::{ToStrRadix, FromStrRadix};
 use option::{Option, Some, None};
 use str;
-use unstable::intrinsics;
+use intrinsics;
 
 uint_module!(u64, i64, 64)
 
diff --git a/src/libstd/num/u8.rs b/src/libstd/num/u8.rs
index 4aa34b6d880..e6ce9c72e96 100644
--- a/src/libstd/num/u8.rs
+++ b/src/libstd/num/u8.rs
@@ -21,7 +21,7 @@ use num::{CheckedDiv, Zero, One, strconv};
 use num::{ToStrRadix, FromStrRadix};
 use option::{Option, Some, None};
 use str;
-use unstable::intrinsics;
+use intrinsics;
 
 uint_module!(u8, i8, 8)
 
diff --git a/src/libstd/num/uint.rs b/src/libstd/num/uint.rs
index 1811ebc7acc..a8c85787f7e 100644
--- a/src/libstd/num/uint.rs
+++ b/src/libstd/num/uint.rs
@@ -21,7 +21,7 @@ use num::{CheckedDiv, Zero, One, strconv};
 use num::{ToStrRadix, FromStrRadix};
 use option::{Option, Some, None};
 use str;
-use unstable::intrinsics;
+use intrinsics;
 
 uint_module!(uint, int, ::int::BITS)
 
diff --git a/src/libstd/ptr.rs b/src/libstd/ptr.rs
index 193e9ea7052..86264c1ca55 100644
--- a/src/libstd/ptr.rs
+++ b/src/libstd/ptr.rs
@@ -17,7 +17,7 @@ use cmp::Equiv;
 use iter::{range, Iterator};
 use mem;
 use option::{Option, Some, None};
-use unstable::intrinsics;
+use intrinsics;
 
 #[cfg(not(test))] use cmp::{Eq, Ord};
 
diff --git a/src/libstd/unstable/raw.rs b/src/libstd/raw.rs
index c25422d24e9..c7ba2ad3932 100644
--- a/src/libstd/unstable/raw.rs
+++ b/src/libstd/raw.rs
@@ -8,6 +8,8 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#[allow(missing_doc)];
+
 use cast;
 
 /// The representation of a Rust managed box
diff --git a/src/libstd/reflect.rs b/src/libstd/reflect.rs
index f88da60ae9b..a9e70bd3c63 100644
--- a/src/libstd/reflect.rs
+++ b/src/libstd/reflect.rs
@@ -16,9 +16,9 @@ Runtime type reflection
 
 #[allow(missing_doc)];
 
-use unstable::intrinsics::{Disr, Opaque, TyDesc, TyVisitor};
+use intrinsics::{Disr, Opaque, TyDesc, TyVisitor};
 use mem;
-use unstable::raw;
+use raw;
 
 /**
  * Trait for visitor that wishes to reflect on data. To use this, create a
diff --git a/src/libstd/repr.rs b/src/libstd/repr.rs
index 680ac112300..c1b276899d5 100644
--- a/src/libstd/repr.rs
+++ b/src/libstd/repr.rs
@@ -29,8 +29,8 @@ use result::{Ok, Err};
 use str::StrSlice;
 use to_str::ToStr;
 use vec::OwnedVector;
-use unstable::intrinsics::{Disr, Opaque, TyDesc, TyVisitor, get_tydesc, visit_tydesc};
-use unstable::raw;
+use intrinsics::{Disr, Opaque, TyDesc, TyVisitor, get_tydesc, visit_tydesc};
+use raw;
 
 macro_rules! try( ($me:expr, $e:expr) => (
     match $e {
diff --git a/src/libstd/rt/global_heap.rs b/src/libstd/rt/global_heap.rs
index 8128bb02148..23b23cf8af0 100644
--- a/src/libstd/rt/global_heap.rs
+++ b/src/libstd/rt/global_heap.rs
@@ -10,8 +10,8 @@
 
 use libc::{c_void, size_t, free, malloc, realloc};
 use ptr::{RawPtr, mut_null};
-use unstable::intrinsics::abort;
-use unstable::raw;
+use intrinsics::abort;
+use raw;
 use mem::size_of;
 
 #[inline]
diff --git a/src/libstd/rt/local_heap.rs b/src/libstd/rt/local_heap.rs
index 8a42cd73565..29b3dcaa4f2 100644
--- a/src/libstd/rt/local_heap.rs
+++ b/src/libstd/rt/local_heap.rs
@@ -20,7 +20,7 @@ use ptr::RawPtr;
 use rt::global_heap;
 use rt::local::Local;
 use rt::task::Task;
-use unstable::raw;
+use raw;
 use vec::ImmutableVector;
 use vec_ng::Vec;
 
@@ -276,6 +276,14 @@ impl Drop for MemoryRegion {
     }
 }
 
+
+#[cfg(not(test))]
+#[lang="malloc"]
+#[inline]
+pub unsafe fn local_malloc_(drop_glue: fn(*mut u8), size: uint, align: uint) -> *u8 {
+    local_malloc(drop_glue, size, align)
+}
+
 #[inline]
 pub unsafe fn local_malloc(drop_glue: fn(*mut u8), size: uint, align: uint) -> *u8 {
     // FIXME: Unsafe borrow for speed. Lame.
@@ -288,7 +296,16 @@ pub unsafe fn local_malloc(drop_glue: fn(*mut u8), size: uint, align: uint) -> *
     }
 }
 
-// A little compatibility function
+#[cfg(not(test))]
+#[lang="free"]
+#[inline]
+pub unsafe fn local_free_(ptr: *u8) {
+    local_free(ptr)
+}
+
+// NB: Calls to free CANNOT be allowed to fail, as throwing an exception from
+// inside a landing pad may corrupt the state of the exception handler. If a
+// problem occurs, call exit instead.
 #[inline]
 pub unsafe fn local_free(ptr: *u8) {
     // FIXME: Unsafe borrow for speed. Lame.
diff --git a/src/libstd/rt/mod.rs b/src/libstd/rt/mod.rs
index b751c57c0fa..2f1a6989092 100644
--- a/src/libstd/rt/mod.rs
+++ b/src/libstd/rt/mod.rs
@@ -128,6 +128,9 @@ pub mod args;
 // Support for running procedures when a program has exited.
 mod at_exit_imp;
 
+// Stack overflow protection
+pub mod stack;
+
 /// The default error code of the rust runtime if the main task fails instead
 /// of exiting cleanly.
 pub static DEFAULT_ERROR_CODE: int = 101;
diff --git a/src/libstd/unstable/stack.rs b/src/libstd/rt/stack.rs
index 90c7888973a..655c209fec8 100644
--- a/src/libstd/unstable/stack.rs
+++ b/src/libstd/rt/stack.rs
@@ -40,7 +40,7 @@ pub extern "C" fn rust_stack_exhausted() {
     use rt::local::Local;
     use rt::task::Task;
     use str::Str;
-    use unstable::intrinsics;
+    use intrinsics;
 
     unsafe {
         // We're calling this function because the stack just ran out. We need
diff --git a/src/libstd/rt/thread.rs b/src/libstd/rt/thread.rs
index b443182c157..7b24c94b518 100644
--- a/src/libstd/rt/thread.rs
+++ b/src/libstd/rt/thread.rs
@@ -41,7 +41,7 @@ static DEFAULT_STACK_SIZE: uint = 1024 * 1024;
 // and invoke it.
 #[no_split_stack]
 extern fn thread_start(main: *libc::c_void) -> imp::rust_thread_return {
-    use unstable::stack;
+    use rt::stack;
     unsafe {
         stack::record_stack_bounds(0, uint::MAX);
         let f: ~proc() = cast::transmute(main);
@@ -150,7 +150,7 @@ mod imp {
     use libc::types::os::arch::extra::{LPSECURITY_ATTRIBUTES, SIZE_T, BOOL,
                                        LPVOID, DWORD, LPDWORD, HANDLE};
     use ptr;
-    use unstable::stack::RED_ZONE;
+    use rt::stack::RED_ZONE;
 
     pub type rust_thread = HANDLE;
     pub type rust_thread_return = DWORD;
@@ -208,7 +208,7 @@ mod imp {
     use mem;
     use os;
     use ptr;
-    use unstable::stack::RED_ZONE;
+    use rt::stack::RED_ZONE;
 
     pub type rust_thread = libc::pthread_t;
     pub type rust_thread_return = *u8;
diff --git a/src/libstd/rt/unwind.rs b/src/libstd/rt/unwind.rs
index ef8bd94c897..b9459aed582 100644
--- a/src/libstd/rt/unwind.rs
+++ b/src/libstd/rt/unwind.rs
@@ -69,7 +69,7 @@ use rt::local::Local;
 use rt::task::Task;
 use str::Str;
 use task::TaskResult;
-use unstable::intrinsics;
+use intrinsics;
 
 use uw = self::libunwind;
 
@@ -177,7 +177,7 @@ impl Unwinder {
     }
 
     pub fn try(&mut self, f: ||) {
-        use unstable::raw::Closure;
+        use raw::Closure;
         use libc::{c_void};
 
         unsafe {
@@ -376,6 +376,24 @@ pub mod eabi {
     }
 }
 
+#[cold]
+#[lang="fail_"]
+#[cfg(not(test))]
+pub fn fail_(expr: *u8, file: *u8, line: uint) -> ! {
+    begin_unwind_raw(expr, file, line);
+}
+
+#[cold]
+#[lang="fail_bounds_check"]
+#[cfg(not(test))]
+pub fn fail_bounds_check(file: *u8, line: uint, index: uint, len: uint) -> ! {
+    use c_str::ToCStr;
+
+    let msg = format!("index out of bounds: the len is {} but the index is {}",
+                      len as uint, index as uint);
+    msg.with_c_str(|buf| fail_(buf as *u8, file, line))
+}
+
 /// This is the entry point of unwinding for things like lang items and such.
 /// The arguments are normally generated by the compiler, and need to
 /// have static lifetimes.
diff --git a/src/libstd/rt/util.rs b/src/libstd/rt/util.rs
index 69e240f30bc..408f51f2017 100644
--- a/src/libstd/rt/util.rs
+++ b/src/libstd/rt/util.rs
@@ -143,7 +143,7 @@ memory and partly incapable of presentation to others.",
     abort();
 
     fn abort() -> ! {
-        use std::unstable::intrinsics;
+        use intrinsics;
         unsafe { intrinsics::abort() }
     }
 }
diff --git a/src/libstd/str.rs b/src/libstd/str.rs
index 1c1b10bb14c..4d5eabbed10 100644
--- a/src/libstd/str.rs
+++ b/src/libstd/str.rs
@@ -104,7 +104,7 @@ use vec::{OwnedVector, OwnedCloneableVector, ImmutableVector, MutableVector};
 use vec_ng::Vec;
 use default::Default;
 use to_bytes::{IterBytes, Cb};
-use unstable::raw::Repr;
+use raw::Repr;
 
 /*
 Section: Creating a string
@@ -1386,7 +1386,7 @@ pub mod raw {
     use str::{is_utf8, OwnedStr, StrSlice};
     use vec;
     use vec::{MutableVector, ImmutableVector, OwnedVector};
-    use unstable::raw::Slice;
+    use raw::Slice;
 
     /// Create a Rust string from a *u8 buffer of the given length
     pub unsafe fn from_buf_len(buf: *u8, len: uint) -> ~str {
diff --git a/src/libstd/sync/atomics.rs b/src/libstd/sync/atomics.rs
index 00ce07d747f..b4d465c0397 100644
--- a/src/libstd/sync/atomics.rs
+++ b/src/libstd/sync/atomics.rs
@@ -21,7 +21,7 @@
 
 #[allow(missing_doc)];
 
-use unstable::intrinsics;
+use intrinsics;
 use cast;
 use std::kinds::marker;
 use option::{Option,Some,None};
diff --git a/src/libstd/unstable/lang.rs b/src/libstd/unstable/lang.rs
deleted file mode 100644
index 8818cb0d270..00000000000
--- a/src/libstd/unstable/lang.rs
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2012-2013 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.
-
-//! Runtime calls emitted by the compiler.
-
-use c_str::CString;
-use libc::c_char;
-use cast;
-use option::Some;
-
-#[cold]
-#[lang="fail_"]
-pub fn fail_(expr: *u8, file: *u8, line: uint) -> ! {
-    ::rt::begin_unwind_raw(expr, file, line);
-}
-
-#[cold]
-#[lang="fail_bounds_check"]
-pub fn fail_bounds_check(file: *u8, line: uint, index: uint, len: uint) -> ! {
-    let msg = format!("index out of bounds: the len is {} but the index is {}",
-                      len as uint, index as uint);
-
-    let file_str = match unsafe { CString::new(file as *c_char, false) }.as_str() {
-        // This transmute is safe because `file` is always stored in rodata.
-        Some(s) => unsafe { cast::transmute::<&str, &'static str>(s) },
-        None    => "file wasn't UTF-8 safe"
-    };
-
-    ::rt::begin_unwind(msg, file_str, line)
-}
-
-#[lang="malloc"]
-#[inline]
-pub unsafe fn local_malloc(drop_glue: fn(*mut u8), size: uint, align: uint) -> *u8 {
-    ::rt::local_heap::local_malloc(drop_glue, size, align)
-}
-
-// NB: Calls to free CANNOT be allowed to fail, as throwing an exception from
-// inside a landing pad may corrupt the state of the exception handler. If a
-// problem occurs, call exit instead.
-#[lang="free"]
-#[inline]
-pub unsafe fn local_free(ptr: *u8) {
-    ::rt::local_heap::local_free(ptr);
-}
diff --git a/src/libstd/unstable/mod.rs b/src/libstd/unstable/mod.rs
index 87870ef0331..7bee0cf48ee 100644
--- a/src/libstd/unstable/mod.rs
+++ b/src/libstd/unstable/mod.rs
@@ -16,14 +16,9 @@ use libc::uintptr_t;
 pub mod dynamic_lib;
 
 pub mod finally;
-pub mod intrinsics;
 pub mod simd;
-#[cfg(not(test))]
-pub mod lang;
 pub mod sync;
 pub mod mutex;
-pub mod raw;
-pub mod stack;
 
 /**
 
diff --git a/src/libstd/vec.rs b/src/libstd/vec.rs
index b4764f577cb..d8cb8bf3ed1 100644
--- a/src/libstd/vec.rs
+++ b/src/libstd/vec.rs
@@ -122,7 +122,7 @@ use mem::size_of;
 use kinds::marker;
 use uint;
 use unstable::finally::try_finally;
-use unstable::raw::{Repr, Slice, Vec};
+use raw::{Repr, Slice, Vec};
 
 /**
  * Creates and initializes an owned vector.
@@ -2488,7 +2488,7 @@ pub mod raw {
     use ptr;
     use ptr::RawPtr;
     use vec::{with_capacity, MutableVector, OwnedVector};
-    use unstable::raw::Slice;
+    use raw::Slice;
 
     /**
      * Form a slice from a pointer and length (as a number of units,
diff --git a/src/libstd/vec_ng.rs b/src/libstd/vec_ng.rs
index 114f34963e2..3532e7b26a4 100644
--- a/src/libstd/vec_ng.rs
+++ b/src/libstd/vec_ng.rs
@@ -24,7 +24,7 @@ use option::{None, Option, Some};
 use ptr::RawPtr;
 use ptr;
 use rt::global_heap::{malloc_raw, realloc_raw};
-use unstable::raw::Slice;
+use raw::Slice;
 use vec::{ImmutableVector, Items, MutItems, MutableVector, RevItems};
 
 pub struct Vec<T> {