Skip to content

Commit 6edb6d6

Browse files
committed
---
yaml --- r: 95610 b: refs/heads/dist-snap c: a3ae48c h: refs/heads/master v: v3
1 parent 3cc762e commit 6edb6d6

File tree

5 files changed

+51
-6
lines changed

5 files changed

+51
-6
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ refs/heads/try: c274a6888410ce3e357e014568b43310ed787d36
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: 147ecfdd8221e4a4d4e090486829a06da1e0ca3c
9-
refs/heads/dist-snap: f27dfa04e5535538f9ef389c29b814bcdfa91ba3
9+
refs/heads/dist-snap: a3ae48cb365f5d762265354e2dbdebfd757bd132
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503
1212
refs/heads/try3: 9387340aab40a73e8424c48fd42f0c521a4875c0

branches/dist-snap/src/librustc/middle/trans/intrinsic.rs

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,27 @@
1010

1111
#[allow(non_uppercase_pattern_statics)];
1212

13-
use back::abi;
13+
use back::{abi};
1414
use lib::llvm::{SequentiallyConsistent, Acquire, Release, Xchg};
1515
use lib::llvm::{ValueRef, Pointer, Array, Struct};
1616
use lib;
1717
use middle::trans::base::*;
1818
use middle::trans::build::*;
19+
use middle::trans::callee::*;
1920
use middle::trans::common::*;
2021
use middle::trans::datum::*;
2122
use middle::trans::type_of::*;
2223
use middle::trans::type_of;
24+
use middle::trans::expr::Ignore;
2325
use middle::trans::machine;
2426
use middle::trans::glue;
27+
use middle::ty::FnSig;
2528
use middle::ty;
2629
use syntax::ast;
2730
use syntax::ast_map;
2831
use syntax::attr;
29-
use util::ppaux::ty_to_str;
32+
use syntax::opt_vec;
33+
use util::ppaux::{ty_to_str};
3034
use middle::trans::machine::llsize_of;
3135
use middle::trans::type_::Type;
3236

@@ -383,6 +387,33 @@ pub fn trans_intrinsic(ccx: @mut CrateContext,
383387
abi::tydesc_field_visit_glue, None);
384388
RetVoid(bcx);
385389
}
390+
"frame_address" => {
391+
let frameaddress = ccx.intrinsics.get_copy(& &"llvm.frameaddress");
392+
let frameaddress_val = Call(bcx, frameaddress, [C_i32(0i32)], []);
393+
let star_u8 = ty::mk_imm_ptr(
394+
bcx.tcx(),
395+
ty::mk_mach_uint(ast::ty_u8));
396+
let fty = ty::mk_closure(bcx.tcx(), ty::ClosureTy {
397+
purity: ast::impure_fn,
398+
sigil: ast::BorrowedSigil,
399+
onceness: ast::Many,
400+
region: ty::re_bound(ty::br_anon(0)),
401+
bounds: ty::EmptyBuiltinBounds(),
402+
sig: FnSig {
403+
bound_lifetime_names: opt_vec::Empty,
404+
inputs: ~[ star_u8 ],
405+
output: ty::mk_nil()
406+
}
407+
});
408+
let datum = Datum {val: get_param(decl, first_real_arg),
409+
mode: ByRef(ZeroMem), ty: fty};
410+
let arg_vals = ~[frameaddress_val];
411+
bcx = trans_call_inner(
412+
bcx, None, fty, ty::mk_nil(),
413+
|bcx| Callee {bcx: bcx, data: Closure(datum)},
414+
ArgVals(arg_vals), Some(Ignore), DontAutorefArg).bcx;
415+
RetVoid(bcx);
416+
}
386417
"morestack_addr" => {
387418
// XXX This is a hack to grab the address of this particular
388419
// native function. There should be a general in-language

branches/dist-snap/src/librustc/middle/typeck/check/mod.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3645,6 +3645,21 @@ pub fn check_intrinsic_type(ccx: @mut CrateCtxt, it: @ast::foreign_item) {
36453645
});
36463646
(0, ~[ td_ptr, visitor_object_ty ], ty::mk_nil())
36473647
}
3648+
"frame_address" => {
3649+
let fty = ty::mk_closure(ccx.tcx, ty::ClosureTy {
3650+
purity: ast::impure_fn,
3651+
sigil: ast::BorrowedSigil,
3652+
onceness: ast::Many,
3653+
region: ty::re_bound(ty::br_anon(0)),
3654+
bounds: ty::EmptyBuiltinBounds(),
3655+
sig: ty::FnSig {
3656+
bound_lifetime_names: opt_vec::Empty,
3657+
inputs: ~[ty::mk_imm_ptr(ccx.tcx, ty::mk_mach_uint(ast::ty_u8))],
3658+
output: ty::mk_nil()
3659+
}
3660+
});
3661+
(0u, ~[fty], ty::mk_nil())
3662+
}
36483663
"morestack_addr" => {
36493664
(0u, ~[], ty::mk_nil_ptr(ccx.tcx))
36503665
}

branches/dist-snap/src/libstd/rt/borrowck.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ pub fn clear_task_borrow_list() {
5757
let _ = try_take_task_borrow_list();
5858
}
5959

60-
unsafe fn fail_borrowed(box: *mut raw::Box<()>, file: *c_char, line: size_t) {
60+
unsafe fn fail_borrowed(box: *mut raw::Box<()>, file: *c_char, line: size_t) -> ! {
6161
debug_borrow("fail_borrowed: ", box, 0, 0, file, line);
6262

6363
match try_take_task_borrow_list() {

branches/dist-snap/src/libstd/unstable/lang.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ pub fn fail_(expr: *c_char, file: *c_char, line: size_t) -> ! {
2222
}
2323

2424
#[lang="fail_bounds_check"]
25-
pub fn fail_bounds_check(file: *c_char, line: size_t,
26-
index: size_t, len: size_t) {
25+
pub fn fail_bounds_check(file: *c_char, line: size_t, index: size_t, len: size_t) -> ! {
2726
let msg = format!("index out of bounds: the len is {} but the index is {}",
2827
len as uint, index as uint);
2928
do msg.with_c_str |buf| {

0 commit comments

Comments
 (0)