Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
dfa98318
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,发现更多精彩内容 >>
提交
dfa98318
编写于
5月 12, 2018
作者:
E
est31
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add feature gate label_break_value
上级
128f2b58
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
54 addition
and
10 deletion
+54
-10
src/librustc_passes/diagnostics.rs
src/librustc_passes/diagnostics.rs
+1
-0
src/libsyntax/feature_gate.rs
src/libsyntax/feature_gate.rs
+9
-0
src/test/run-pass/label_break_value.rs
src/test/run-pass/label_break_value.rs
+2
-0
src/test/ui/feature-gate-label_break_value.rs
src/test/ui/feature-gate-label_break_value.rs
+15
-0
src/test/ui/feature-gate-label_break_value.stderr
src/test/ui/feature-gate-label_break_value.stderr
+11
-0
src/test/ui/label_break_value_continue.rs
src/test/ui/label_break_value_continue.rs
+2
-0
src/test/ui/label_break_value_continue.stderr
src/test/ui/label_break_value_continue.stderr
+4
-4
src/test/ui/label_break_value_illegal_uses.rs
src/test/ui/label_break_value_illegal_uses.rs
+2
-0
src/test/ui/label_break_value_illegal_uses.stderr
src/test/ui/label_break_value_illegal_uses.stderr
+4
-4
src/test/ui/label_break_value_unlabeled_break.rs
src/test/ui/label_break_value_unlabeled_break.rs
+2
-0
src/test/ui/label_break_value_unlabeled_break.stderr
src/test/ui/label_break_value_unlabeled_break.stderr
+2
-2
未找到文件。
src/librustc_passes/diagnostics.rs
浏览文件 @
dfa98318
...
...
@@ -278,6 +278,7 @@ fn foo() {}
Make sure to always label the `break`:
```
# #![feature(label_break_value)]
'l: loop {
'a: {
break 'l;
...
...
src/libsyntax/feature_gate.rs
浏览文件 @
dfa98318
...
...
@@ -466,6 +466,9 @@ pub fn walk_feature_fields<F>(&self, mut f: F)
// inconsistent bounds in where clauses
(
active
,
trivial_bounds
,
"1.28.0"
,
Some
(
48214
),
None
),
// 'a: { break 'a; }
(
active
,
label_break_value
,
"1.28.0"
,
Some
(
48594
),
None
),
);
declare_features!
(
...
...
@@ -1696,6 +1699,12 @@ fn visit_expr(&mut self, e: &'a ast::Expr) {
"multiple patterns in `if let` and `while let` are unstable"
);
}
}
ast
::
ExprKind
::
Block
(
_
,
opt_label
)
=>
{
if
let
Some
(
label
)
=
opt_label
{
gate_feature_post!
(
&
self
,
label_break_value
,
label
.ident.span
,
"labels on blocks are unstable"
);
}
}
_
=>
{}
}
visit
::
walk_expr
(
self
,
e
);
...
...
src/test/run-pass/label_break_value.rs
浏览文件 @
dfa98318
...
...
@@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![feature(label_break_value)]
// Test control flow to follow label_break_value semantics
fn
label_break
(
a
:
bool
,
b
:
bool
)
->
u32
{
let
mut
v
=
0
;
...
...
src/test/ui/feature-gate-label_break_value.rs
0 → 100644
浏览文件 @
dfa98318
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
pub
fn
main
()
{
'a
:
{
//~ ERROR labels on blocks are unstable
break
'a
;
}
}
src/test/ui/feature-gate-label_break_value.stderr
0 → 100644
浏览文件 @
dfa98318
error[E0658]: labels on blocks are unstable (see issue #48594)
--> $DIR/feature-gate-label_break_value.rs:12:5
|
LL | 'a: { //~ ERROR labels on blocks are unstable
| ^^
|
= help: add #![feature(label_break_value)] to the crate attributes to enable
error: aborting due to previous error
For more information about this error, try `rustc --explain E0658`.
src/test/ui/label_break_value_continue.rs
浏览文件 @
dfa98318
...
...
@@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![feature(label_break_value)]
// Simple continue pointing to an unlabeled break should yield in an error
fn
continue_simple
()
{
'b
:
{
...
...
src/test/ui/label_break_value_continue.stderr
浏览文件 @
dfa98318
error[E0695]: unlabeled `continue` inside of a labeled block
--> $DIR/label_break_value_continue.rs:1
4
:9
--> $DIR/label_break_value_continue.rs:1
6
:9
|
LL | continue; //~ ERROR unlabeled `continue` inside of a labeled block
| ^^^^^^^^ `continue` statements that would diverge to or through a labeled block need to bear a label
error[E0696]: `continue` pointing to a labeled block
--> $DIR/label_break_value_continue.rs:2
1
:9
--> $DIR/label_break_value_continue.rs:2
3
:9
|
LL | continue 'b; //~ ERROR `continue` pointing to a labeled block
| ^^^^^^^^^^^ labeled blocks cannot be `continue`'d
|
note: labeled block the continue points to
--> $DIR/label_break_value_continue.rs:2
0
:5
--> $DIR/label_break_value_continue.rs:2
2
:5
|
LL | / 'b: {
LL | | continue 'b; //~ ERROR `continue` pointing to a labeled block
...
...
@@ -19,7 +19,7 @@ LL | | }
| |_____^
error[E0695]: unlabeled `continue` inside of a labeled block
--> $DIR/label_break_value_continue.rs:
29
:13
--> $DIR/label_break_value_continue.rs:
31
:13
|
LL | continue; //~ ERROR unlabeled `continue` inside of a labeled block
| ^^^^^^^^ `continue` statements that would diverge to or through a labeled block need to bear a label
...
...
src/test/ui/label_break_value_illegal_uses.rs
浏览文件 @
dfa98318
...
...
@@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![feature(label_break_value)]
// These are forbidden occurences of label-break-value
fn
labeled_unsafe
()
{
...
...
src/test/ui/label_break_value_illegal_uses.stderr
浏览文件 @
dfa98318
error: expected one of `extern`, `fn`, or `{`, found `'b`
--> $DIR/label_break_value_illegal_uses.rs:1
4
:12
--> $DIR/label_break_value_illegal_uses.rs:1
6
:12
|
LL | unsafe 'b: {} //~ ERROR expected one of `extern`, `fn`, or `{`
| ^^ expected one of `extern`, `fn`, or `{` here
error: expected `{`, found `'b`
--> $DIR/label_break_value_illegal_uses.rs:
18
:13
--> $DIR/label_break_value_illegal_uses.rs:
20
:13
|
LL | if true 'b: {} //~ ERROR expected `{`, found `'b`
| -- ^^----
...
...
@@ -14,7 +14,7 @@ LL | if true 'b: {} //~ ERROR expected `{`, found `'b`
| this `if` statement has a condition, but no block
error: expected `{`, found `'b`
--> $DIR/label_break_value_illegal_uses.rs:2
2
:21
--> $DIR/label_break_value_illegal_uses.rs:2
4
:21
|
LL | if true {} else 'b: {} //~ ERROR expected `{`, found `'b`
| ^^----
...
...
@@ -22,7 +22,7 @@ LL | if true {} else 'b: {} //~ ERROR expected `{`, found `'b`
| help: try placing this code inside a block: `{ 'b: { } }`
error: expected one of `.`, `?`, `{`, or an operator, found `'b`
--> $DIR/label_break_value_illegal_uses.rs:2
6
:17
--> $DIR/label_break_value_illegal_uses.rs:2
8
:17
|
LL | match false 'b: {} //~ ERROR expected one of `.`, `?`, `{`, or an operator
| ^^ expected one of `.`, `?`, `{`, or an operator here
...
...
src/test/ui/label_break_value_unlabeled_break.rs
浏览文件 @
dfa98318
...
...
@@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![feature(label_break_value)]
// Simple unlabeled break should yield in an error
fn
unlabeled_break_simple
()
{
'b
:
{
...
...
src/test/ui/label_break_value_unlabeled_break.stderr
浏览文件 @
dfa98318
error[E0695]: unlabeled `break` inside of a labeled block
--> $DIR/label_break_value_unlabeled_break.rs:1
4
:9
--> $DIR/label_break_value_unlabeled_break.rs:1
6
:9
|
LL | break; //~ ERROR unlabeled `break` inside of a labeled block
| ^^^^^ `break` statements that would diverge to or through a labeled block need to bear a label
error[E0695]: unlabeled `break` inside of a labeled block
--> $DIR/label_break_value_unlabeled_break.rs:2
2
:13
--> $DIR/label_break_value_unlabeled_break.rs:2
4
:13
|
LL | break; //~ ERROR unlabeled `break` inside of a labeled block
| ^^^^^ `break` statements that would diverge to or through a labeled block need to bear a label
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录