Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
2d5c4196
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,发现更多精彩内容 >>
提交
2d5c4196
编写于
7月 18, 2017
作者:
O
Oliver Schneider
提交者:
GitHub
7月 18, 2017
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #254 from RalfJung/dangling
Remove reundant dangling checks in {r,d}eallocate
上级
824438bd
ff9192e3
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
20 addition
and
3 deletion
+20
-3
src/memory.rs
src/memory.rs
+2
-2
tests/compile-fail/deallocate-twice.rs
tests/compile-fail/deallocate-twice.rs
+1
-1
tests/compile-fail/reallocate-dangling.rs
tests/compile-fail/reallocate-dangling.rs
+17
-0
未找到文件。
src/memory.rs
浏览文件 @
2d5c4196
...
...
@@ -230,7 +230,7 @@ pub fn allocate(&mut self, size: u64, align: u64, kind: Kind) -> EvalResult<'tcx
pub
fn
reallocate
(
&
mut
self
,
ptr
:
MemoryPointer
,
old_size
:
u64
,
old_align
:
u64
,
new_size
:
u64
,
new_align
:
u64
,
kind
:
Kind
)
->
EvalResult
<
'tcx
,
MemoryPointer
>
{
use
std
::
cmp
::
min
;
if
ptr
.offset
!=
0
||
self
.get
(
ptr
.alloc_id
)
.is_err
()
{
if
ptr
.offset
!=
0
{
return
Err
(
EvalError
::
ReallocateNonBasePtr
);
}
if
let
Ok
(
alloc
)
=
self
.get
(
ptr
.alloc_id
)
{
...
...
@@ -248,7 +248,7 @@ pub fn reallocate(&mut self, ptr: MemoryPointer, old_size: u64, old_align: u64,
}
pub
fn
deallocate
(
&
mut
self
,
ptr
:
MemoryPointer
,
size_and_align
:
Option
<
(
u64
,
u64
)
>
,
kind
:
Kind
)
->
EvalResult
<
'tcx
>
{
if
ptr
.offset
!=
0
||
self
.get
(
ptr
.alloc_id
)
.is_err
()
{
if
ptr
.offset
!=
0
{
return
Err
(
EvalError
::
DeallocateNonBasePtr
);
}
...
...
tests/compile-fail/deallocate-twice.rs
浏览文件 @
2d5c4196
...
...
@@ -5,7 +5,7 @@
use
alloc
::
heap
::
Heap
;
use
alloc
::
allocator
::
*
;
// error-pattern: tried to deallocate
with a pointer not to the beginning of an existing object
// error-pattern: tried to deallocate
dangling pointer
use
alloc
::
heap
::
*
;
fn
main
()
{
...
...
tests/compile-fail/reallocate-dangling.rs
0 → 100644
浏览文件 @
2d5c4196
#![feature(alloc,
allocator_api)]
extern
crate
alloc
;
use
alloc
::
heap
::
Heap
;
use
alloc
::
allocator
::
*
;
// error-pattern: dangling pointer was dereferenced
use
alloc
::
heap
::
*
;
fn
main
()
{
unsafe
{
let
x
=
Heap
.alloc
(
Layout
::
from_size_align_unchecked
(
1
,
1
))
.unwrap
();
Heap
.dealloc
(
x
,
Layout
::
from_size_align_unchecked
(
1
,
1
));
Heap
.realloc
(
x
,
Layout
::
from_size_align_unchecked
(
1
,
1
),
Layout
::
from_size_align_unchecked
(
1
,
1
));
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录