Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
3041bc9e
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,发现更多精彩内容 >>
提交
3041bc9e
编写于
10月 13, 2022
作者:
N
Nathan Whitaker
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Don't consider `Let` exprs terminating scopes
上级
bf286a82
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
24 addition
and
8 deletion
+24
-8
compiler/rustc_hir_analysis/src/check/region.rs
compiler/rustc_hir_analysis/src/check/region.rs
+6
-2
src/test/ui/drop/drop_order.rs
src/test/ui/drop/drop_order.rs
+2
-2
src/test/ui/drop/issue-100276.rs
src/test/ui/drop/issue-100276.rs
+12
-0
src/test/ui/mir/mir_let_chains_drop_order.rs
src/test/ui/mir/mir_let_chains_drop_order.rs
+4
-4
未找到文件。
compiler/rustc_hir_analysis/src/check/region.rs
浏览文件 @
3041bc9e
...
...
@@ -252,9 +252,13 @@ fn resolve_expr<'tcx>(visitor: &mut RegionResolutionVisitor<'tcx>, expr: &'tcx h
)
=>
{
// For shortcircuiting operators, mark the RHS as a terminating
// scope since it only executes conditionally.
terminating
(
r
.hir_id.local_id
);
}
// `Let` expressions (in a let-chain) shouldn't be terminating, as their temporaries
// should live beyond the immediate expression
if
!
matches!
(
r
.kind
,
hir
::
ExprKind
::
Let
(
_
))
{
terminating
(
r
.hir_id.local_id
);
}
}
hir
::
ExprKind
::
If
(
_
,
ref
then
,
Some
(
ref
otherwise
))
=>
{
terminating
(
then
.hir_id.local_id
);
terminating
(
otherwise
.hir_id.local_id
);
...
...
src/test/ui/drop/drop_order.rs
浏览文件 @
3041bc9e
...
...
@@ -129,10 +129,10 @@ fn let_chain(&self) {
// take the "else" branch
if
self
.option_loud_drop
(
6
)
.is_some
()
// 2
&&
self
.option_loud_drop
(
5
)
.is_some
()
// 1
&&
let
None
=
self
.option_loud_drop
(
7
)
{
// 3
&&
let
None
=
self
.option_loud_drop
(
8
)
{
// 4
unreachable!
();
}
else
{
self
.print
(
8
);
// 4
self
.print
(
7
);
// 3
}
// let exprs interspersed
...
...
src/test/ui/drop/issue-100276.rs
0 → 100644
浏览文件 @
3041bc9e
// check-pass
// compile-flags: -Z validate-mir
#![feature(let_chains)]
fn
let_chains
(
entry
:
std
::
io
::
Result
<
std
::
fs
::
DirEntry
>
)
{
if
let
Ok
(
entry
)
=
entry
&&
let
Some
(
s
)
=
entry
.file_name
()
.to_str
()
&&
s
.contains
(
""
)
{}
}
fn
main
()
{}
src/test/ui/mir/mir_let_chains_drop_order.rs
浏览文件 @
3041bc9e
...
...
@@ -12,7 +12,7 @@
pub
struct
DropLogger
<
'a
,
T
>
{
extra
:
T
,
id
:
usize
,
log
:
&
'a
panic
::
AssertUnwindSafe
<
RefCell
<
Vec
<
usize
>>>
log
:
&
'a
panic
::
AssertUnwindSafe
<
RefCell
<
Vec
<
usize
>>>
,
}
impl
<
'a
,
T
>
Drop
for
DropLogger
<
'a
,
T
>
{
...
...
@@ -55,9 +55,9 @@ fn main() {
else
{
// 10 is not constructed
d
(
10
,
None
)
}
}
,
);
assert_eq!
(
get
(),
vec!
[
3
,
8
,
7
,
1
,
2
]);
assert_eq!
(
get
(),
vec!
[
8
,
7
,
1
,
3
,
2
]);
}
assert_eq!
(
get
(),
vec!
[
0
,
4
,
6
,
9
,
5
]);
...
...
@@ -89,5 +89,5 @@ fn main() {
panic
::
panic_any
(
InjectedFailure
)
);
});
assert_eq!
(
get
(),
vec!
[
14
,
19
,
20
,
17
,
15
,
11
,
18
,
16
,
12
,
13
]);
assert_eq!
(
get
(),
vec!
[
20
,
17
,
15
,
11
,
19
,
18
,
16
,
12
,
14
,
13
]);
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录