Forward attributes of translated function/closure to trans_fn/trans_closure.
This commit is contained in:
parent
a06bb977d8
commit
e3c89943ac
7 changed files with 42 additions and 13 deletions
|
|
@ -31,6 +31,7 @@ use session::config::FullDebugInfo;
|
|||
|
||||
use syntax::abi::RustCall;
|
||||
use syntax::ast;
|
||||
use syntax::attr::{ThinAttributes, ThinAttributesExt};
|
||||
|
||||
use rustc_front::hir;
|
||||
|
||||
|
|
@ -176,7 +177,8 @@ pub fn trans_closure_expr<'a, 'tcx>(dest: Dest<'a, 'tcx>,
|
|||
body: &hir::Block,
|
||||
id: ast::NodeId,
|
||||
closure_def_id: DefId, // (*)
|
||||
closure_substs: &'tcx ty::ClosureSubsts<'tcx>)
|
||||
closure_substs: &'tcx ty::ClosureSubsts<'tcx>,
|
||||
closure_expr_attrs: &ThinAttributes)
|
||||
-> Option<Block<'a, 'tcx>>
|
||||
{
|
||||
// (*) Note that in the case of inlined functions, the `closure_def_id` will be the
|
||||
|
|
@ -218,7 +220,7 @@ pub fn trans_closure_expr<'a, 'tcx>(dest: Dest<'a, 'tcx>,
|
|||
llfn,
|
||||
param_substs,
|
||||
id,
|
||||
&[],
|
||||
closure_expr_attrs.as_attr_slice(),
|
||||
sig.output,
|
||||
function_type.abi,
|
||||
ClosureEnv::Closure(closure_def_id, &freevars));
|
||||
|
|
|
|||
|
|
@ -1019,8 +1019,13 @@ fn const_expr_unadjusted<'a, 'tcx>(cx: &CrateContext<'a, 'tcx>,
|
|||
hir::ExprClosure(_, ref decl, ref body) => {
|
||||
match ety.sty {
|
||||
ty::TyClosure(def_id, ref substs) => {
|
||||
closure::trans_closure_expr(closure::Dest::Ignore(cx), decl,
|
||||
body, e.id, def_id, substs);
|
||||
closure::trans_closure_expr(closure::Dest::Ignore(cx),
|
||||
decl,
|
||||
body,
|
||||
e.id,
|
||||
def_id,
|
||||
substs,
|
||||
&e.attrs);
|
||||
}
|
||||
_ =>
|
||||
cx.sess().span_bug(
|
||||
|
|
|
|||
|
|
@ -1196,7 +1196,13 @@ fn trans_rvalue_dps_unadjusted<'blk, 'tcx>(bcx: Block<'blk, 'tcx>,
|
|||
&format!("closure expr without closure type: {:?}", t)),
|
||||
};
|
||||
|
||||
closure::trans_closure_expr(dest, decl, body, expr.id, def_id, substs).unwrap_or(bcx)
|
||||
closure::trans_closure_expr(dest,
|
||||
decl,
|
||||
body,
|
||||
expr.id,
|
||||
def_id,
|
||||
substs,
|
||||
&expr.attrs).unwrap_or(bcx)
|
||||
}
|
||||
hir::ExprCall(ref f, ref args) => {
|
||||
if bcx.tcx().is_method_call(expr.id) {
|
||||
|
|
|
|||
|
|
@ -639,7 +639,7 @@ pub fn trans_rust_fn_with_foreign_abi<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx>,
|
|||
|
||||
let llfn = declare::define_internal_rust_fn(ccx, &ps, t);
|
||||
attributes::from_fn_attrs(ccx, attrs, llfn);
|
||||
base::trans_fn(ccx, decl, body, llfn, param_substs, id, &[]);
|
||||
base::trans_fn(ccx, decl, body, llfn, param_substs, id, attrs);
|
||||
llfn
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -165,7 +165,7 @@ fn instantiate_inline(ccx: &CrateContext, fn_id: DefId)
|
|||
llfn,
|
||||
empty_substs,
|
||||
impl_item.id,
|
||||
&[]);
|
||||
&impl_item.attrs);
|
||||
// See linkage comments on items.
|
||||
if ccx.sess().opts.cg.codegen_units == 1 {
|
||||
SetLinkage(llfn, InternalLinkage);
|
||||
|
|
|
|||
|
|
@ -74,8 +74,13 @@ pub fn trans_impl(ccx: &CrateContext,
|
|||
for (ref ccx, is_origin) in ccx.maybe_iter(trans_everywhere) {
|
||||
let llfn = get_item_val(ccx, impl_item.id);
|
||||
let empty_substs = tcx.mk_substs(Substs::trans_empty());
|
||||
trans_fn(ccx, &sig.decl, body, llfn,
|
||||
empty_substs, impl_item.id, &[]);
|
||||
trans_fn(ccx,
|
||||
&sig.decl,
|
||||
body,
|
||||
llfn,
|
||||
empty_substs,
|
||||
impl_item.id,
|
||||
&impl_item.attrs);
|
||||
update_linkage(ccx,
|
||||
llfn,
|
||||
Some(impl_item.id),
|
||||
|
|
|
|||
|
|
@ -185,7 +185,13 @@ pub fn monomorphic_fn<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx>,
|
|||
ccx, &**decl, &**body, &[], d, psubsts, fn_node_id,
|
||||
Some(&hash[..]));
|
||||
} else {
|
||||
trans_fn(ccx, &**decl, &**body, d, psubsts, fn_node_id, &[]);
|
||||
trans_fn(ccx,
|
||||
&**decl,
|
||||
&**body,
|
||||
d,
|
||||
psubsts,
|
||||
fn_node_id,
|
||||
&i.attrs);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -216,7 +222,7 @@ pub fn monomorphic_fn<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx>,
|
|||
d,
|
||||
psubsts,
|
||||
impl_item.id,
|
||||
&[]);
|
||||
&impl_item.attrs);
|
||||
}
|
||||
d
|
||||
}
|
||||
|
|
@ -232,8 +238,13 @@ pub fn monomorphic_fn<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx>,
|
|||
let d = mk_lldecl(abi::Rust);
|
||||
let needs_body = setup_lldecl(d, &trait_item.attrs);
|
||||
if needs_body {
|
||||
trans_fn(ccx, &sig.decl, body, d,
|
||||
psubsts, trait_item.id, &[]);
|
||||
trans_fn(ccx,
|
||||
&sig.decl,
|
||||
body,
|
||||
d,
|
||||
psubsts,
|
||||
trait_item.id,
|
||||
&trait_item.attrs);
|
||||
}
|
||||
d
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue