Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
b8ed1368
R
Rust
项目概览
int
/
Rust
11 个月 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
b8ed1368
编写于
3月 24, 2014
作者:
C
Corey Richardson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Address review
上级
7febdb7b
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
9 addition
and
9 deletion
+9
-9
src/librustc/middle/trans/base.rs
src/librustc/middle/trans/base.rs
+3
-3
src/librustc/middle/trans/callee.rs
src/librustc/middle/trans/callee.rs
+6
-6
未找到文件。
src/librustc/middle/trans/base.rs
浏览文件 @
b8ed1368
...
...
@@ -246,7 +246,8 @@ fn get_extern_rust_fn(ccx: &CrateContext, inputs: &[ty::t], output: ty::t,
pub
fn
decl_rust_fn
(
ccx
:
&
CrateContext
,
has_env
:
bool
,
inputs
:
&
[
ty
::
t
],
output
:
ty
::
t
,
name
:
&
str
)
->
ValueRef
{
use
middle
::
ty
::{
FreeRegion
,
BrAnon
,
ReFree
,
ReLateBound
};
use
middle
::
ty
::{
BrAnon
,
ReLateBound
};
let
llfty
=
type_of_rust_fn
(
ccx
,
has_env
,
inputs
,
output
);
let
llfn
=
decl_cdecl_fn
(
ccx
.llmod
,
name
,
llfty
,
output
);
...
...
@@ -270,8 +271,7 @@ pub fn decl_rust_fn(ccx: &CrateContext, has_env: bool,
// When a reference in an argument has no named lifetime, it's
// impossible for that reference to escape this function(ie, be
// returned).
ty
::
ty_rptr
(
ReFree
(
FreeRegion
{
scope_id
:
_
,
bound_region
:
BrAnon
(
_
)
}),
_
)
|
ty
::
ty_rptr
(
ReLateBound
(
_
,
BrAnon
(
_
)),
_
)
=>
{
ty
::
ty_rptr
(
ReLateBound
(
_
,
BrAnon
(
_
)),
_
)
=>
{
debug!
(
"marking argument of {} as nocapture because of anonymous lifetime"
,
name
);
unsafe
{
llvm
::
LLVMAddAttribute
(
llarg
,
lib
::
llvm
::
NoCaptureAttribute
as
c_uint
);
...
...
src/librustc/middle/trans/callee.rs
浏览文件 @
b8ed1368
...
...
@@ -708,8 +708,9 @@ pub fn trans_call_inner<'a>(
debug!
(
"trans_callee_inner: first_arg_offset={}"
,
first_arg_offset
);
for
(
idx
,
&
t
)
in
ty
::
ty_fn_args
(
callee_ty
)
.iter
()
.enumerate
()
.map
(|(
i
,
v
)|
(
i
+
first_arg_offset
,
v
))
{
use
middle
::
ty
::{
FreeRegion
,
BrAnon
,
ReFree
,
ReLateBound
};
for
(
idx
,
&
t
)
in
ty
::
ty_fn_args
(
callee_ty
)
.iter
()
.enumerate
()
.map
(|(
i
,
v
)|
(
i
+
first_arg_offset
,
v
))
{
use
middle
::
ty
::{
BrAnon
,
ReLateBound
};
if
!
type_is_immediate
(
ccx
,
t
)
{
// if it's not immediate, we have a program-invisible pointer,
// which it can't possibly capture
...
...
@@ -720,10 +721,9 @@ pub fn trans_call_inner<'a>(
let
t_
=
ty
::
get
(
t
);
match
t_
.sty
{
ty
::
ty_rptr
(
ReFree
(
FreeRegion
{
scope_id
:
_
,
bound_region
:
BrAnon
(
_
)
}),
_
)
|
ty
::
ty_rptr
(
ReLateBound
(
_
,
BrAnon
(
_
)),
_
)
=>
{
debug!
(
"trans_callee_inner: argument {} nocapture because of anonymous lifetime"
,
idx
);
ty
::
ty_rptr
(
ReLateBound
(
_
,
BrAnon
(
_
)),
_
)
=>
{
debug!
(
"trans_callee_inner: argument {} nocapture because
\
of anonymous lifetime"
,
idx
);
attrs
.push
((
idx
,
NoCaptureAttribute
));
},
_
=>
{
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录