Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
34685044
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,发现更多精彩内容 >>
提交
34685044
编写于
8月 09, 2017
作者:
R
Ralf Jung
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add a bunch of compile-fail tests for validation
上级
5e018b1d
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
115 addition
and
0 deletion
+115
-0
tests/compile-fail/validation_aliasing_mut4.rs
tests/compile-fail/validation_aliasing_mut4.rs
+13
-0
tests/compile-fail/validation_buggy_split_at_mut.rs
tests/compile-fail/validation_buggy_split_at_mut.rs
+22
-0
tests/compile-fail/validation_illegal_write.rs
tests/compile-fail/validation_illegal_write.rs
+15
-0
tests/compile-fail/validation_pointer_smuggling.rs
tests/compile-fail/validation_pointer_smuggling.rs
+20
-0
tests/compile-fail/validation_recover1.rs
tests/compile-fail/validation_recover1.rs
+16
-0
tests/compile-fail/validation_recover2.rs
tests/compile-fail/validation_recover2.rs
+14
-0
tests/compile-fail/validation_recover3.rs
tests/compile-fail/validation_recover3.rs
+15
-0
未找到文件。
tests/compile-fail/validation_aliasing_mut4.rs
0 → 100644
浏览文件 @
34685044
#![allow(unused_variables)]
mod
safe
{
use
std
::
cell
::
Cell
;
// Make sure &mut UnsafeCell also has a lock to it
pub
fn
safe
(
x
:
&
mut
Cell
<
i32
>
,
y
:
&
i32
)
{}
//~ ERROR: in conflict with lock WriteLock
}
fn
main
()
{
let
x
=
&
mut
0
as
*
mut
_
;
unsafe
{
safe
::
safe
(
&
mut
*
(
x
as
*
mut
_
),
&*
x
)
};
}
tests/compile-fail/validation_buggy_split_at_mut.rs
0 → 100644
浏览文件 @
34685044
#![allow(unused_variables)]
mod
safe
{
use
std
::
slice
::
from_raw_parts_mut
;
pub
fn
split_at_mut
<
T
>
(
self_
:
&
mut
[
T
],
mid
:
usize
)
->
(
&
mut
[
T
],
&
mut
[
T
])
{
let
len
=
self_
.len
();
let
ptr
=
self_
.as_mut_ptr
();
unsafe
{
assert
!
(
mid
<=
len
);
(
from_raw_parts_mut
(
ptr
,
len
-
mid
),
// BUG: should be "mid" instead of "len - mid"
from_raw_parts_mut
(
ptr
.offset
(
mid
as
isize
),
len
-
mid
))
}
}
}
fn
main
()
{
let
mut
array
=
[
1
,
2
,
3
,
4
];
let
_
x
=
safe
::
split_at_mut
(
&
mut
array
,
0
);
//~ ERROR: in conflict with lock WriteLock
}
tests/compile-fail/validation_illegal_write.rs
0 → 100644
浏览文件 @
34685044
#![allow(unused_variables)]
mod
safe
{
pub
(
crate
)
fn
safe
(
x
:
&
u32
)
{
let
x
:
&
mut
u32
=
unsafe
{
&
mut
*
(
x
as
*
const
_
as
*
mut
_
)
};
*
x
=
42
;
//~ ERROR: in conflict with lock ReadLock
}
}
fn
main
()
{
let
target
=
&
mut
42
;
let
target_ref
=
&
target
;
// do a reborrow, but we keep the lock
safe
::
safe
(
&*
target
);
}
tests/compile-fail/validation_pointer_smuggling.rs
0 → 100644
浏览文件 @
34685044
#![allow(unused_variables)]
static
mut
PTR
:
*
mut
u8
=
0
as
*
mut
_
;
fn
fun1
(
x
:
&
mut
u8
)
{
unsafe
{
PTR
=
x
;
}
}
fn
fun2
()
{
// Now we use a pointer we are not allowed to use
let
_
x
=
unsafe
{
*
PTR
};
//~ ERROR: in conflict with lock WriteLock
}
fn
main
()
{
let
mut
val
=
0
;
fun1
(
&
mut
val
);
fun2
();
}
tests/compile-fail/validation_recover1.rs
0 → 100644
浏览文件 @
34685044
#![allow(unused_variables)]
#[repr(u32)]
enum
Bool
{
True
}
mod
safe
{
pub
(
crate
)
fn
safe
(
x
:
&
mut
super
::
Bool
)
{
let
x
=
x
as
*
mut
_
as
*
mut
u32
;
unsafe
{
*
x
=
44
;
}
// out-of-bounds enum discriminant
}
}
fn
main
()
{
let
mut
x
=
Bool
::
True
;
safe
::
safe
(
&
mut
x
);
//~ ERROR: invalid enum discriminant
}
tests/compile-fail/validation_recover2.rs
0 → 100644
浏览文件 @
34685044
#![allow(unused_variables)]
mod
safe
{
// This makes a ref that was passed to us via &mut alias with things it should not alias with
pub
(
crate
)
fn
safe
(
x
:
&
mut
&
u32
,
target
:
&
mut
u32
)
{
unsafe
{
*
x
=
&
mut
*
(
target
as
*
mut
_
);
}
}
}
fn
main
()
{
let
target
=
&
mut
42
;
let
mut
target_alias
=
&
42
;
// initial dummy value
safe
::
safe
(
&
mut
target_alias
,
target
);
//~ ERROR: in conflict with lock ReadLock
}
tests/compile-fail/validation_recover3.rs
0 → 100644
浏览文件 @
34685044
#![allow(unused_variables)]
mod
safe
{
pub
(
crate
)
fn
safe
(
x
:
*
mut
u32
)
{
unsafe
{
*
x
=
42
;
}
//~ ERROR: in conflict with lock WriteLock
}
}
fn
main
()
{
let
target
=
&
mut
42u32
;
let
target2
=
target
as
*
mut
_
;
drop
(
&
mut
*
target
);
// reborrow
// Now make sure we still got the lock
safe
::
safe
(
target2
);
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录