Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
60603703
R
Rust
项目概览
int
/
Rust
12 个月 前同步成功
通知
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,发现更多精彩内容 >>
提交
60603703
编写于
6月 20, 2012
作者:
N
Niko Matsakis
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
handle moves in let initializers and allow moves from unsafe ptrs
Related to issue #2657, but this is not a complete fix.
上级
f9afce31
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
57 addition
and
0 deletion
+57
-0
src/rustc/middle/borrowck/check_loans.rs
src/rustc/middle/borrowck/check_loans.rs
+16
-0
src/test/compile-fail/borrowck-issue-2657-1.rs
src/test/compile-fail/borrowck-issue-2657-1.rs
+9
-0
src/test/compile-fail/borrowck-issue-2657-2.rs
src/test/compile-fail/borrowck-issue-2657-2.rs
+14
-0
src/test/compile-fail/borrowck-move-from-unsafe-ptr.rs
src/test/compile-fail/borrowck-move-from-unsafe-ptr.rs
+7
-0
src/test/run-pass/borrowck-move-from-unsafe-ptr-ok.rs
src/test/run-pass/borrowck-move-from-unsafe-ptr-ok.rs
+11
-0
未找到文件。
src/rustc/middle/borrowck/check_loans.rs
浏览文件 @
60603703
...
...
@@ -47,6 +47,7 @@ fn check_loans(bccx: borrowck_ctxt,
mut
declared_purity
:
ast
::
impure_fn
,
mut
fn_args
:
@
[]});
let
vt
=
visit
::
mk_vt
(
@
{
visit_expr
:
check_loans_in_expr
,
visit_local
:
check_loans_in_local
,
visit_block
:
check_loans_in_block
,
visit_fn
:
check_loans_in_fn
with
*
visit
::
default_visitor
()});
...
...
@@ -419,6 +420,9 @@ fn check_move_out_from_cmt(cmt: cmt) {
// rvalues, I guess.
cat_special
(
sk_static_item
)
{
}
cat_deref
(
_
,
_
,
unsafe_ptr
)
{
}
// Nothing else.
_
{
self
.bccx
.span_err
(
...
...
@@ -542,6 +546,18 @@ fn check_loans_in_fn(fk: visit::fn_kind, decl: ast::fn_decl, body: ast::blk,
#
debug
[
"purity on exit=%?"
,
copy
self
.declared_purity
];
}
fn
check_loans_in_local
(
local
:
@
ast
::
local
,
&&
self
:
check_loan_ctxt
,
vt
:
visit
::
vt
<
check_loan_ctxt
>
)
{
alt
local
.node.init
{
some
({
op
:
ast
::
init_move
,
expr
:
expr
})
{
self
.check_move_out
(
expr
);
}
some
({
op
:
ast
::
init_assign
,
_
})
|
none
{}
}
visit
::
visit_local
(
local
,
self
,
vt
);
}
fn
check_loans_in_expr
(
expr
:
@
ast
::
expr
,
&&
self
:
check_loan_ctxt
,
vt
:
visit
::
vt
<
check_loan_ctxt
>
)
{
...
...
src/test/compile-fail/borrowck-issue-2657-1.rs
0 → 100644
浏览文件 @
60603703
fn
main
()
{
let
x
=
some
(
~
1
);
alt
x
{
//! NOTE loan of immutable local variable granted here
some
(
y
)
{
let
_
a
<-
x
;
//! ERROR moving out of immutable local variable prohibited due to outstanding loan
}
_
{}
}
}
src/test/compile-fail/borrowck-issue-2657-2.rs
0 → 100644
浏览文件 @
60603703
//xfail-test
// this should be illegal but borrowck is not handling
// pattern bindings correctly right now
fn
main
()
{
let
x
=
some
(
~
1
);
alt
x
{
some
(
y
)
{
let
b
<-
y
;
}
_
{}
}
}
src/test/compile-fail/borrowck-move-from-unsafe-ptr.rs
0 → 100644
浏览文件 @
60603703
fn
foo
(
x
:
*~
int
)
->
~
int
{
let
y
<-
*
x
;
//! ERROR dereference of unsafe pointer requires unsafe function or block
ret
y
;
}
fn
main
()
{
}
\ No newline at end of file
src/test/run-pass/borrowck-move-from-unsafe-ptr-ok.rs
0 → 100644
浏览文件 @
60603703
// just make sure this compiles:
fn
bar
(
x
:
*~
int
)
->
~
int
{
unsafe
{
let
y
<-
*
x
;
ret
y
;
}
}
fn
main
()
{
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录