Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
4e50c5b6
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,发现更多精彩内容 >>
提交
4e50c5b6
编写于
8月 11, 2018
作者:
N
Niko Matsakis
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add tests for assigning fields without initializing var
We did not seem to have any!
上级
78e987ab
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
234 addition
and
0 deletion
+234
-0
src/test/ui/nll/assign_mutable_fields.rs
src/test/ui/nll/assign_mutable_fields.rs
+34
-0
src/test/ui/nll/assign_mutable_fields.stderr
src/test/ui/nll/assign_mutable_fields.stderr
+9
-0
src/test/ui/nll/reassignment_immutable_fields.rs
src/test/ui/nll/reassignment_immutable_fields.rs
+32
-0
src/test/ui/nll/reassignment_immutable_fields.stderr
src/test/ui/nll/reassignment_immutable_fields.stderr
+44
-0
src/test/ui/nll/reassignment_immutable_fields_overlapping.rs
src/test/ui/nll/reassignment_immutable_fields_overlapping.rs
+28
-0
src/test/ui/nll/reassignment_immutable_fields_overlapping.stderr
...t/ui/nll/reassignment_immutable_fields_overlapping.stderr
+20
-0
src/test/ui/nll/reassignment_immutable_fields_twice.rs
src/test/ui/nll/reassignment_immutable_fields_twice.rs
+29
-0
src/test/ui/nll/reassignment_immutable_fields_twice.stderr
src/test/ui/nll/reassignment_immutable_fields_twice.stderr
+38
-0
未找到文件。
src/test/ui/nll/assign_mutable_fields.rs
0 → 100644
浏览文件 @
4e50c5b6
// Copyright 2017 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.
// Currently, we permit you to assign to individual fields of a mut
// var, but we do not permit you to use the complete var afterwards.
// We hope to fix this at some point.
//
// FIXME(#21232)
#![feature(nll)]
fn
assign_both_fields_and_use
()
{
let
mut
x
:
(
u32
,
u32
);
x
.0
=
1
;
x
.1
=
22
;
drop
(
x
.0
);
drop
(
x
.1
);
}
fn
assign_both_fields_the_use_var
()
{
let
mut
x
:
(
u32
,
u32
);
x
.0
=
1
;
x
.1
=
22
;
drop
(
x
);
//~ ERROR
}
fn
main
()
{
}
src/test/ui/nll/assign_mutable_fields.stderr
0 → 100644
浏览文件 @
4e50c5b6
error[E0381]: use of possibly uninitialized variable: `x`
--> $DIR/assign_mutable_fields.rs:31:10
|
LL | drop(x); //~ ERROR
| ^ use of possibly uninitialized `x`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0381`.
src/test/ui/nll/reassignment_immutable_fields.rs
0 → 100644
浏览文件 @
4e50c5b6
// Copyright 2017 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.
// This test is currently disallowed, but we hope someday to support it.
//
// FIXME(#21232)
#![feature(nll)]
fn
assign_both_fields_and_use
()
{
let
x
:
(
u32
,
u32
);
x
.0
=
1
;
//~ ERROR
x
.1
=
22
;
//~ ERROR
drop
(
x
.0
);
drop
(
x
.1
);
}
fn
assign_both_fields_the_use_var
()
{
let
x
:
(
u32
,
u32
);
x
.0
=
1
;
//~ ERROR
x
.1
=
22
;
//~ ERROR
drop
(
x
);
//~ ERROR
}
fn
main
()
{
}
src/test/ui/nll/reassignment_immutable_fields.stderr
0 → 100644
浏览文件 @
4e50c5b6
error[E0594]: cannot assign to `x.0`, as `x` is not declared as mutable
--> $DIR/reassignment_immutable_fields.rs:19:5
|
LL | let x: (u32, u32);
| - help: consider changing this to be mutable: `mut x`
LL | x.0 = 1; //~ ERROR
| ^^^^^^^ cannot assign
error[E0594]: cannot assign to `x.1`, as `x` is not declared as mutable
--> $DIR/reassignment_immutable_fields.rs:20:5
|
LL | let x: (u32, u32);
| - help: consider changing this to be mutable: `mut x`
LL | x.0 = 1; //~ ERROR
LL | x.1 = 22; //~ ERROR
| ^^^^^^^^ cannot assign
error[E0594]: cannot assign to `x.0`, as `x` is not declared as mutable
--> $DIR/reassignment_immutable_fields.rs:27:5
|
LL | let x: (u32, u32);
| - help: consider changing this to be mutable: `mut x`
LL | x.0 = 1; //~ ERROR
| ^^^^^^^ cannot assign
error[E0594]: cannot assign to `x.1`, as `x` is not declared as mutable
--> $DIR/reassignment_immutable_fields.rs:28:5
|
LL | let x: (u32, u32);
| - help: consider changing this to be mutable: `mut x`
LL | x.0 = 1; //~ ERROR
LL | x.1 = 22; //~ ERROR
| ^^^^^^^^ cannot assign
error[E0381]: use of possibly uninitialized variable: `x`
--> $DIR/reassignment_immutable_fields.rs:29:10
|
LL | drop(x); //~ ERROR
| ^ use of possibly uninitialized `x`
error: aborting due to 5 previous errors
Some errors occurred: E0381, E0594.
For more information about an error, try `rustc --explain E0381`.
src/test/ui/nll/reassignment_immutable_fields_overlapping.rs
0 → 100644
浏览文件 @
4e50c5b6
// Copyright 2017 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.
// This should never be allowed -- `foo.a` and `foo.b` are
// overlapping, so since `x` is not `mut` we should not permit
// reassignment.
#![feature(nll)]
union
Foo
{
a
:
u32
,
b
:
u32
,
}
unsafe
fn
overlapping_fields
()
{
let
x
:
Foo
;
x
.a
=
1
;
//~ ERROR
x
.b
=
22
;
//~ ERROR
}
fn
main
()
{
}
src/test/ui/nll/reassignment_immutable_fields_overlapping.stderr
0 → 100644
浏览文件 @
4e50c5b6
error[E0594]: cannot assign to `x.a`, as `x` is not declared as mutable
--> $DIR/reassignment_immutable_fields_overlapping.rs:24:5
|
LL | let x: Foo;
| - help: consider changing this to be mutable: `mut x`
LL | x.a = 1; //~ ERROR
| ^^^^^^^ cannot assign
error[E0594]: cannot assign to `x.b`, as `x` is not declared as mutable
--> $DIR/reassignment_immutable_fields_overlapping.rs:25:5
|
LL | let x: Foo;
| - help: consider changing this to be mutable: `mut x`
LL | x.a = 1; //~ ERROR
LL | x.b = 22; //~ ERROR
| ^^^^^^^^ cannot assign
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0594`.
src/test/ui/nll/reassignment_immutable_fields_twice.rs
0 → 100644
浏览文件 @
4e50c5b6
// Copyright 2017 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.
// This should never be allowed -- since `x` is not `mut`, so `x.0`
// cannot be assigned twice.
#![feature(nll)]
fn
var_then_field
()
{
let
x
:
(
u32
,
u32
);
x
=
(
22
,
44
);
x
.0
=
1
;
//~ ERROR
}
fn
same_field_twice
()
{
let
x
:
(
u32
,
u32
);
x
.0
=
1
;
//~ ERROR
x
.0
=
22
;
//~ ERROR
x
.1
=
44
;
//~ ERROR
}
fn
main
()
{
}
src/test/ui/nll/reassignment_immutable_fields_twice.stderr
0 → 100644
浏览文件 @
4e50c5b6
error[E0594]: cannot assign to `x.0`, as `x` is not declared as mutable
--> $DIR/reassignment_immutable_fields_twice.rs:19:5
|
LL | let x: (u32, u32);
| - help: consider changing this to be mutable: `mut x`
LL | x = (22, 44);
LL | x.0 = 1; //~ ERROR
| ^^^^^^^ cannot assign
error[E0594]: cannot assign to `x.0`, as `x` is not declared as mutable
--> $DIR/reassignment_immutable_fields_twice.rs:24:5
|
LL | let x: (u32, u32);
| - help: consider changing this to be mutable: `mut x`
LL | x.0 = 1; //~ ERROR
| ^^^^^^^ cannot assign
error[E0594]: cannot assign to `x.0`, as `x` is not declared as mutable
--> $DIR/reassignment_immutable_fields_twice.rs:25:5
|
LL | let x: (u32, u32);
| - help: consider changing this to be mutable: `mut x`
LL | x.0 = 1; //~ ERROR
LL | x.0 = 22; //~ ERROR
| ^^^^^^^^ cannot assign
error[E0594]: cannot assign to `x.1`, as `x` is not declared as mutable
--> $DIR/reassignment_immutable_fields_twice.rs:26:5
|
LL | let x: (u32, u32);
| - help: consider changing this to be mutable: `mut x`
...
LL | x.1 = 44; //~ ERROR
| ^^^^^^^^ cannot assign
error: aborting due to 4 previous errors
For more information about this error, try `rustc --explain E0594`.
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录