Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
9e4e6cdb
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,发现更多精彩内容 >>
提交
9e4e6cdb
编写于
3月 22, 2017
作者:
O
Oliver Schneider
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Dropping arrays works again
上级
7c12ebc7
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
23 addition
and
9 deletion
+23
-9
src/eval_context.rs
src/eval_context.rs
+3
-2
src/terminator/mod.rs
src/terminator/mod.rs
+20
-7
未找到文件。
src/eval_context.rs
浏览文件 @
9e4e6cdb
...
...
@@ -16,6 +16,7 @@
use
syntax
::
codemap
::{
self
,
DUMMY_SP
,
Span
};
use
syntax
::
ast
;
use
syntax
::
abi
::
Abi
;
use
syntax
::
symbol
::
Symbol
;
use
error
::{
EvalError
,
EvalResult
};
use
lvalue
::{
Global
,
GlobalId
,
Lvalue
,
LvalueExtra
};
...
...
@@ -231,7 +232,7 @@ pub fn new(tcx: TyCtxt<'a, 'tcx, 'tcx>, limits: ResourceLimits) -> Self {
span
:
DUMMY_SP
,
ty
:
tcx
.types.usize
,
literal
:
mir
::
Literal
::
Value
{
value
:
ConstVal
::
Integral
(
ConstInt
::
Usize
(
ConstUsize
::
new
(
0
,
tcx
.sess.target.uint_type
)
.unwrap
())),
value
:
ConstVal
::
Integral
(
ConstInt
::
Usize
(
ConstUsize
::
new
(
1
,
tcx
.sess.target.uint_type
)
.unwrap
())),
},
}),
)
...
...
@@ -262,7 +263,7 @@ pub fn new(tcx: TyCtxt<'a, 'tcx, 'tcx>, limits: ResourceLimits) -> Self {
},
mir
::
LocalDecl
{
mutability
:
mir
::
Mutability
::
Mut
,
ty
:
tcx
.mk_mut_ptr
(
tcx
.mk_s
elf_type
(
)),
ty
:
tcx
.mk_mut_ptr
(
tcx
.mk_s
lice
(
tcx
.mk_param
(
0
,
Symbol
::
intern
(
"T"
))
)),
name
:
None
,
source_info
:
None
,
},
...
...
src/terminator/mod.rs
浏览文件 @
9e4e6cdb
...
...
@@ -2,6 +2,7 @@
use
rustc
::
mir
;
use
rustc
::
ty
::{
self
,
Ty
};
use
rustc
::
ty
::
layout
::
Layout
;
use
rustc
::
ty
::
subst
::
Kind
;
use
syntax
::
codemap
::
Span
;
use
syntax
::
attr
;
use
syntax
::
abi
::
Abi
;
...
...
@@ -76,24 +77,36 @@ pub(super) fn eval_terminator(
}
Drop
{
ref
location
,
target
,
..
}
=>
{
trace!
(
"TerminatorKind::drop: {:?}, {:?}"
,
location
,
self
.substs
());
let
lval
=
self
.eval_lvalue
(
location
)
?
;
trace!
(
"drop lval: {:#?}"
,
lval
);
let
src_ptr
=
self
.force_allocation
(
lval
)
?
.to_ptr
();
let
ty
=
self
.lvalue_ty
(
location
);
self
.goto_block
(
target
);
let
ty
=
::
eval_context
::
apply_param_substs
(
self
.tcx
,
self
.substs
(),
&
ty
);
self
.goto_block
(
target
);
let
instance
=
::
eval_context
::
resolve_drop_in_place
(
self
.tcx
,
ty
);
let
mut
instance
=
::
eval_context
::
resolve_drop_in_place
(
self
.tcx
,
ty
);
if
let
ty
::
InstanceDef
::
DropGlue
(
_
,
None
)
=
instance
.def
{
// we don't actually need to drop anything
return
Ok
(());
}
let
arg
;
let
mir
=
match
ty
.sty
{
ty
::
TyDynamic
(
..
)
=>
unimplemented!
(),
ty
::
TyArray
(
..
)
|
ty
::
TySlice
(
..
)
=>
::
eval_context
::
MirRef
::
clone
(
&
self
.seq_drop_glue
),
_
=>
self
.load_mir
(
instance
.def
)
?
,
ty
::
TyArray
(
elem
,
n
)
=>
{
instance
.substs
=
self
.tcx
.mk_substs
([
Kind
::
from
(
elem
),
]
.iter
()
.cloned
());
arg
=
Value
::
ByValPair
(
PrimVal
::
Ptr
(
src_ptr
),
PrimVal
::
Bytes
(
n
as
u128
));
::
eval_context
::
MirRef
::
clone
(
&
self
.seq_drop_glue
)
},
ty
::
TySlice
(
ref
elem
)
=>
unimplemented!
(),
_
=>
{
arg
=
Value
::
ByVal
(
PrimVal
::
Ptr
(
src_ptr
));
self
.load_mir
(
instance
.def
)
?
},
};
self
.push_stack_frame
(
...
...
@@ -109,7 +122,7 @@ pub(super) fn eval_terminator(
let
arg_local
=
arg_locals
.next
()
.unwrap
();
let
dest
=
self
.eval_lvalue
(
&
mir
::
Lvalue
::
Local
(
arg_local
))
?
;
let
arg_ty
=
self
.tcx
.mk_mut_ptr
(
ty
);
self
.write_value
(
Value
::
ByVal
(
PrimVal
::
Ptr
(
src_ptr
))
,
dest
,
arg_ty
)
?
;
self
.write_value
(
arg
,
dest
,
arg_ty
)
?
;
}
Assert
{
ref
cond
,
expected
,
ref
msg
,
target
,
..
}
=>
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录