Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
7d8dc7a9
R
Rust
项目概览
int
/
Rust
大约 1 年 前同步成功
通知
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,发现更多精彩内容 >>
提交
7d8dc7a9
编写于
8月 01, 2017
作者:
R
Ralf Jung
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
also release-validate return value before a call
上级
321a72c1
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
16 addition
and
11 deletion
+16
-11
src/librustc_mir/transform/add_validation.rs
src/librustc_mir/transform/add_validation.rs
+13
-8
src/test/mir-opt/validate_1.rs
src/test/mir-opt/validate_1.rs
+1
-1
src/test/mir-opt/validate_3.rs
src/test/mir-opt/validate_3.rs
+1
-1
src/test/mir-opt/validate_5.rs
src/test/mir-opt/validate_5.rs
+1
-1
未找到文件。
src/librustc_mir/transform/add_validation.rs
浏览文件 @
7d8dc7a9
...
@@ -248,18 +248,23 @@ fn run_pass<'a, 'tcx>(&self,
...
@@ -248,18 +248,23 @@ fn run_pass<'a, 'tcx>(&self,
match
block_data
.terminator
{
match
block_data
.terminator
{
Some
(
Terminator
{
kind
:
TerminatorKind
::
Call
{
ref
args
,
ref
destination
,
..
},
Some
(
Terminator
{
kind
:
TerminatorKind
::
Call
{
ref
args
,
ref
destination
,
..
},
source_info
})
=>
{
source_info
})
=>
{
// Before the call: Release all arguments
// Before the call: Release all arguments *and* the return value.
// The callee may write into the return value! Note that this relies
// on "release of uninitialized" to be a NOP.
if
!
restricted_validation
{
if
!
restricted_validation
{
let
release_stmt
=
Statement
{
let
release_stmt
=
Statement
{
source_info
,
source_info
,
kind
:
StatementKind
::
Validate
(
ValidationOp
::
Release
,
kind
:
StatementKind
::
Validate
(
ValidationOp
::
Release
,
destination
.iter
()
.map
(|
dest
|
lval_to_operand
(
dest
.0
.clone
()))
.chain
(
args
.iter
()
.filter_map
(|
op
|
{
args
.iter
()
.filter_map
(|
op
|
{
match
op
{
match
op
{
&
Operand
::
Consume
(
ref
lval
)
=>
&
Operand
::
Consume
(
ref
lval
)
=>
Some
(
lval_to_operand
(
lval
.clone
())),
Some
(
lval_to_operand
(
lval
.clone
())),
&
Operand
::
Constant
(
..
)
=>
{
None
},
&
Operand
::
Constant
(
..
)
=>
{
None
},
}
}
})
.collect
())
})
)
.collect
())
};
};
block_data
.statements
.push
(
release_stmt
);
block_data
.statements
.push
(
release_stmt
);
}
}
...
...
src/test/mir-opt/validate_1.rs
浏览文件 @
7d8dc7a9
...
@@ -46,7 +46,7 @@ fn main() {
...
@@ -46,7 +46,7 @@ fn main() {
// Validate(Suspend(ReScope(Misc(NodeId(34)))), [(*_6): i32/ReScope(Misc(NodeId(34)))]);
// Validate(Suspend(ReScope(Misc(NodeId(34)))), [(*_6): i32/ReScope(Misc(NodeId(34)))]);
// _5 = &ReErased mut (*_6);
// _5 = &ReErased mut (*_6);
// Validate(Acquire, [(*_5): i32/ReScope(Misc(NodeId(34)))]);
// Validate(Acquire, [(*_5): i32/ReScope(Misc(NodeId(34)))]);
// Validate(Release, [_3: &ReScope(Misc(NodeId(34))) Test, _5: &ReScope(Misc(NodeId(34))) mut i32]);
// Validate(Release, [_
2: (), _
3: &ReScope(Misc(NodeId(34))) Test, _5: &ReScope(Misc(NodeId(34))) mut i32]);
// _2 = const Test::foo(_3, _5) -> bb1;
// _2 = const Test::foo(_3, _5) -> bb1;
// }
// }
//
//
...
...
src/test/mir-opt/validate_3.rs
浏览文件 @
7d8dc7a9
...
@@ -38,7 +38,7 @@ fn _unused2(x: *const i32) -> i32 { unsafe { *x }}
...
@@ -38,7 +38,7 @@ fn _unused2(x: *const i32) -> i32 { unsafe { *x }}
// Validate(Suspend(ReScope(Misc(NodeId(46)))), [(*_5): i32/ReScope(Misc(NodeId(46))) (imm)]);
// Validate(Suspend(ReScope(Misc(NodeId(46)))), [(*_5): i32/ReScope(Misc(NodeId(46))) (imm)]);
// _4 = &ReErased (*_5);
// _4 = &ReErased (*_5);
// Validate(Acquire, [(*_4): i32/ReScope(Misc(NodeId(46))) (imm)]);
// Validate(Acquire, [(*_4): i32/ReScope(Misc(NodeId(46))) (imm)]);
// Validate(Release, [_4: &ReScope(Misc(NodeId(46))) i32]);
// Validate(Release, [_
3: (), _
4: &ReScope(Misc(NodeId(46))) i32]);
// _3 = const foo(_4) -> bb1;
// _3 = const foo(_4) -> bb1;
// }
// }
// bb1: {
// bb1: {
...
...
src/test/mir-opt/validate_5.rs
浏览文件 @
7d8dc7a9
...
@@ -37,7 +37,7 @@ fn main() {
...
@@ -37,7 +37,7 @@ fn main() {
// fn test(_1: &ReErased mut i32) -> () {
// fn test(_1: &ReErased mut i32) -> () {
// bb0: {
// bb0: {
// Validate(Acquire, [_1: &ReFree(DefId { krate: CrateNum(0), node: DefIndex(4) => validate_5/8cd878b::test[0] }, BrAnon(0)) mut i32]);
// Validate(Acquire, [_1: &ReFree(DefId { krate: CrateNum(0), node: DefIndex(4) => validate_5/8cd878b::test[0] }, BrAnon(0)) mut i32]);
// Validate(Release, [_4: *mut i32]);
// Validate(Release, [_
3: bool, _
4: *mut i32]);
// _3 = const write_42(_4) -> bb1;
// _3 = const write_42(_4) -> bb1;
// }
// }
// }
// }
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录