Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
d31cbb51
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,发现更多精彩内容 >>
提交
d31cbb51
编写于
7月 02, 2022
作者:
R
Ralf Jung
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
make AllocRef APIs more consistent
上级
c36572c1
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
13 addition
and
11 deletion
+13
-11
compiler/rustc_const_eval/src/interpret/memory.rs
compiler/rustc_const_eval/src/interpret/memory.rs
+8
-6
compiler/rustc_const_eval/src/interpret/traits.rs
compiler/rustc_const_eval/src/interpret/traits.rs
+5
-5
未找到文件。
compiler/rustc_const_eval/src/interpret/memory.rs
浏览文件 @
d31cbb51
...
...
@@ -857,6 +857,7 @@ fn write_allocation_track_relocs<'tcx, Tag: Provenance, Extra>(
/// Reading and writing.
impl
<
'tcx
,
'a
,
Tag
:
Provenance
,
Extra
>
AllocRefMut
<
'a
,
'tcx
,
Tag
,
Extra
>
{
/// `range` is relative to this allocation reference, not the base of the allocation.
pub
fn
write_scalar
(
&
mut
self
,
range
:
AllocRange
,
...
...
@@ -870,6 +871,7 @@ pub fn write_scalar(
.map_err
(|
e
|
e
.to_interp_error
(
self
.alloc_id
))
?
)
}
/// `offset` is relative to this allocation reference, not the base of the allocation.
pub
fn
write_ptr_sized
(
&
mut
self
,
offset
:
Size
,
...
...
@@ -888,6 +890,7 @@ pub fn write_uninit(&mut self) -> InterpResult<'tcx> {
}
impl
<
'tcx
,
'a
,
Tag
:
Provenance
,
Extra
>
AllocRef
<
'a
,
'tcx
,
Tag
,
Extra
>
{
/// `range` is relative to this allocation reference, not the base of the allocation.
pub
fn
read_scalar
(
&
self
,
range
:
AllocRange
,
...
...
@@ -902,14 +905,12 @@ pub fn read_scalar(
Ok
(
res
)
}
pub
fn
read_integer
(
&
self
,
offset
:
Size
,
size
:
Size
,
)
->
InterpResult
<
'tcx
,
ScalarMaybeUninit
<
Tag
>>
{
self
.read_scalar
(
alloc_range
(
offset
,
size
),
/*read_provenance*/
false
)
/// `range` is relative to this allocation reference, not the base of the allocation.
pub
fn
read_integer
(
&
self
,
range
:
AllocRange
)
->
InterpResult
<
'tcx
,
ScalarMaybeUninit
<
Tag
>>
{
self
.read_scalar
(
range
,
/*read_provenance*/
false
)
}
/// `offset` is relative to this allocation reference, not the base of the allocation.
pub
fn
read_pointer
(
&
self
,
offset
:
Size
)
->
InterpResult
<
'tcx
,
ScalarMaybeUninit
<
Tag
>>
{
self
.read_scalar
(
alloc_range
(
offset
,
self
.tcx
.data_layout
()
.pointer_size
),
...
...
@@ -917,6 +918,7 @@ pub fn read_pointer(&self, offset: Size) -> InterpResult<'tcx, ScalarMaybeUninit
)
}
/// `range` is relative to this allocation reference, not the base of the allocation.
pub
fn
check_bytes
(
&
self
,
range
:
AllocRange
,
...
...
compiler/rustc_const_eval/src/interpret/traits.rs
浏览文件 @
d31cbb51
use
std
::
convert
::
TryFrom
;
use
rustc_middle
::
mir
::
interpret
::{
InterpResult
,
Pointer
,
PointerArithmetic
};
use
rustc_middle
::
mir
::
interpret
::{
alloc_range
,
InterpResult
,
Pointer
,
PointerArithmetic
};
use
rustc_middle
::
ty
::{
self
,
Ty
,
TyCtxt
,
COMMON_VTABLE_ENTRIES_ALIGN
,
COMMON_VTABLE_ENTRIES_DROPINPLACE
,
COMMON_VTABLE_ENTRIES_SIZE
,
...
...
@@ -102,18 +102,18 @@ pub fn read_size_and_align_from_vtable(
)
?
.expect
(
"cannot be a ZST"
);
let
size
=
vtable
.read_integer
(
.read_integer
(
alloc_range
(
pointer_size
*
u64
::
try_from
(
COMMON_VTABLE_ENTRIES_SIZE
)
.unwrap
(),
pointer_size
,
)
?
)
)
?
.check_init
()
?
;
let
size
=
size
.to_machine_usize
(
self
)
?
;
let
size
=
Size
::
from_bytes
(
size
);
let
align
=
vtable
.read_integer
(
.read_integer
(
alloc_range
(
pointer_size
*
u64
::
try_from
(
COMMON_VTABLE_ENTRIES_ALIGN
)
.unwrap
(),
pointer_size
,
)
?
)
)
?
.check_init
()
?
;
let
align
=
align
.to_machine_usize
(
self
)
?
;
let
align
=
Align
::
from_bytes
(
align
)
.map_err
(|
e
|
err_ub!
(
InvalidVtableAlignment
(
e
)))
?
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录