Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
e79bb42a
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,发现更多精彩内容 >>
提交
e79bb42a
编写于
7月 20, 2017
作者:
E
Eduard-Mihai Burtescu
提交者:
GitHub
7月 20, 2017
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #262 from RalfJung/never
remove ad-hoc 'never' type check in read_lvalue
上级
f02d9e63
3b19c83c
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
4 addition
and
9 deletion
+4
-9
src/lvalue.rs
src/lvalue.rs
+3
-8
tests/compile-fail/never_say_never.rs
tests/compile-fail/never_say_never.rs
+1
-1
未找到文件。
src/lvalue.rs
浏览文件 @
e79bb42a
...
...
@@ -182,7 +182,6 @@ fn try_read_lvalue_projection(&mut self, proj: &mir::LvalueProjection<'tcx>) ->
/// Returns a value and (in case of a ByRef) if we are supposed to use aligned accesses.
pub
(
super
)
fn
eval_and_read_lvalue
(
&
mut
self
,
lvalue
:
&
mir
::
Lvalue
<
'tcx
>
)
->
EvalResult
<
'tcx
,
Value
>
{
let
ty
=
self
.lvalue_ty
(
lvalue
);
// Shortcut for things like accessing a fat pointer's field,
// which would otherwise (in the `eval_lvalue` path) require moving a `ByValPair` to memory
// and returning an `Lvalue::Ptr` to it
...
...
@@ -190,14 +189,10 @@ pub(super) fn eval_and_read_lvalue(&mut self, lvalue: &mir::Lvalue<'tcx>) -> Eva
return
Ok
(
val
);
}
let
lvalue
=
self
.eval_lvalue
(
lvalue
)
?
;
self
.read_lvalue
(
lvalue
,
ty
)
self
.read_lvalue
(
lvalue
)
}
pub
fn
read_lvalue
(
&
self
,
lvalue
:
Lvalue
<
'tcx
>
,
ty
:
Ty
<
'tcx
>
)
->
EvalResult
<
'tcx
,
Value
>
{
if
ty
.is_never
()
{
return
Err
(
EvalError
::
Unreachable
);
}
pub
fn
read_lvalue
(
&
self
,
lvalue
:
Lvalue
<
'tcx
>
)
->
EvalResult
<
'tcx
,
Value
>
{
match
lvalue
{
Lvalue
::
Ptr
{
ptr
,
extra
,
aligned
}
=>
{
assert_eq!
(
extra
,
LvalueExtra
::
None
);
...
...
@@ -382,7 +377,7 @@ fn eval_lvalue_projection(
}
Deref
=>
{
let
val
=
self
.read_lvalue
(
base
,
base_ty
)
?
;
let
val
=
self
.read_lvalue
(
base
)
?
;
let
pointee_type
=
match
base_ty
.sty
{
ty
::
TyRawPtr
(
ref
tam
)
|
...
...
tests/compile-fail/never_say_never.rs
浏览文件 @
e79bb42a
...
...
@@ -4,7 +4,7 @@
fn
main
()
{
let
y
=
&
5
;
let
x
:
!
=
unsafe
{
*
(
y
as
*
const
_
as
*
const
!
)
//~ ERROR
entered unreachable cod
e
*
(
y
as
*
const
_
as
*
const
!
)
//~ ERROR
tried to access a dead local variabl
e
};
f
(
x
)
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录