]> git.lizzy.rs Git - rust.git/commitdiff
Remove the return_address intrinsic.
authorEduard Burtescu <edy.burt@gmail.com>
Sun, 26 Jun 2016 22:47:28 +0000 (01:47 +0300)
committerEduard Burtescu <edy.burt@gmail.com>
Sun, 26 Jun 2016 22:47:28 +0000 (01:47 +0300)
src/libcore/intrinsics.rs
src/librustc_trans/diagnostics.rs
src/librustc_trans/intrinsic.rs
src/librustc_typeck/check/intrinsic.rs
src/test/compile-fail/intrinsic-return-address.rs [deleted file]
src/test/run-pass/intrinsic-return-address.rs [deleted file]

index 94baf188bcaeea9d28f582e6071fed9eb30c8afc..edb965c1962e3bf6433b487165f8d164c39616e4 100644 (file)
     #[stable(feature = "rust1", since = "1.0.0")]
     pub fn transmute<T, U>(e: T) -> U;
 
-    /// Gives the address for the return value of the enclosing function.
-    ///
-    /// Using this intrinsic in a function that does not use an out pointer
-    /// will trigger a compiler error.
-    pub fn return_address() -> *const u8;
-
     /// Returns `true` if the actual type given as `T` requires drop
     /// glue; returns `false` if the actual type provided for `T`
     /// implements `Copy`.
index d36878b03322a30fbe24c4c98c66bdaed168a242..f7f065a3562ed2bb8223a1741af97490884abd47 100644 (file)
 
 register_long_diagnostics! {
 
-E0510: r##"
-`return_address` was used in an invalid context. Erroneous code example:
-
-```ignore
-#![feature(intrinsics)]
-
-extern "rust-intrinsic" {
-    fn return_address() -> *const u8;
-}
-
-unsafe fn by_value() -> i32 {
-    let _ = return_address();
-    // error: invalid use of `return_address` intrinsic: function does
-    //        not use out pointer
-    0
-}
-```
-
-Return values may be stored in a return register(s) or written into a so-called
-out pointer. In case the returned value is too big (this is
-target-ABI-dependent and generally not portable or future proof) to fit into
-the return register(s), the compiler will return the value by writing it into
-space allocated in the caller's stack frame. Example:
-
-```
-#![feature(intrinsics)]
-
-extern "rust-intrinsic" {
-    fn return_address() -> *const u8;
-}
-
-unsafe fn by_pointer() -> String {
-    let _ = return_address();
-    String::new() // ok!
-}
-```
-"##,
-
 E0511: r##"
 Invalid monomorphization of an intrinsic function was used. Erroneous code
 example:
index 54c825fa5faceb73de37c113333640b154f50cc0..f2793c5e18a896894b51b40920a1561544b59657 100644 (file)
@@ -617,18 +617,6 @@ pub fn trans_intrinsic_call<'a, 'blk, 'tcx>(mut bcx: Block<'blk, 'tcx>,
 
         },
 
-
-        (_, "return_address") => {
-            if !fcx.fn_ty.ret.is_indirect() {
-                span_err!(tcx.sess, span, E0510,
-                          "invalid use of `return_address` intrinsic: function \
-                           does not use out pointer");
-                C_null(Type::i8p(ccx))
-            } else {
-                PointerCast(bcx, llvm::get_param(fcx.llfn, 0), Type::i8p(ccx))
-            }
-        }
-
         (_, "discriminant_value") => {
             let val_ty = substs.types.get(FnSpace, 0);
             match val_ty.sty {
index f120e38630b8a4ba486bc855d5df4d3d30bf1000..9148d68f39e0b633dcdd1cca3c5770fc8c632da5 100644 (file)
@@ -275,8 +275,6 @@ fn param<'a, 'tcx>(ccx: &CrateCtxt<'a, 'tcx>, n: u32) -> Ty<'tcx> {
             "fadd_fast" | "fsub_fast" | "fmul_fast" | "fdiv_fast" | "frem_fast" =>
                 (1, vec![param(ccx, 0), param(ccx, 0)], param(ccx, 0)),
 
-            "return_address" => (0, vec![], tcx.mk_imm_ptr(tcx.types.u8)),
-
             "assume" => (0, vec![tcx.types.bool], tcx.mk_nil()),
 
             "discriminant_value" => (1, vec![
diff --git a/src/test/compile-fail/intrinsic-return-address.rs b/src/test/compile-fail/intrinsic-return-address.rs
deleted file mode 100644 (file)
index 9060568..0000000
+++ /dev/null
@@ -1,24 +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.
-
-#![allow(warnings)]
-#![feature(intrinsics)]
-
-extern "rust-intrinsic" {
-    fn return_address() -> *const u8;
-}
-
-unsafe fn f() { let _ = return_address(); }
-//~^ ERROR invalid use of `return_address` intrinsic: function does not use out pointer
-
-unsafe fn g() -> isize { let _ = return_address(); 0 }
-//~^ ERROR invalid use of `return_address` intrinsic: function does not use out pointer
-
-fn main() {}
diff --git a/src/test/run-pass/intrinsic-return-address.rs b/src/test/run-pass/intrinsic-return-address.rs
deleted file mode 100644 (file)
index 63aed3f..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2012-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.
-
-
-#![feature(intrinsics)]
-
-use std::ptr;
-
-struct Point {
-    x: f32,
-    y: f32,
-    z: f32,
-}
-
-extern "rust-intrinsic" {
-    fn return_address() -> *const u8;
-}
-
-fn f(result: &mut usize) -> Point {
-    unsafe {
-        *result = return_address() as usize;
-        Point {
-            x: 1.0,
-            y: 2.0,
-            z: 3.0,
-        }
-    }
-
-}
-
-fn main() {
-    let mut intrinsic_reported_address = 0;
-    let pt = f(&mut intrinsic_reported_address);
-    let actual_address = &pt as *const Point as usize;
-    assert_eq!(intrinsic_reported_address, actual_address);
-}