Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
1c2483eb
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,发现更多精彩内容 >>
提交
1c2483eb
编写于
12月 06, 2019
作者:
A
Adam Perry
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Address review feedback.
上级
99165ce1
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
10 addition
and
17 deletion
+10
-17
src/librustc_codegen_ssa/mir/block.rs
src/librustc_codegen_ssa/mir/block.rs
+2
-2
src/librustc_codegen_ssa/mir/mod.rs
src/librustc_codegen_ssa/mir/mod.rs
+2
-2
src/librustc_mir/interpret/intrinsics.rs
src/librustc_mir/interpret/intrinsics.rs
+1
-1
src/librustc_mir/interpret/intrinsics/caller_location.rs
src/librustc_mir/interpret/intrinsics/caller_location.rs
+5
-12
未找到文件。
src/librustc_codegen_ssa/mir/block.rs
浏览文件 @
1c2483eb
...
...
@@ -771,14 +771,14 @@ fn codegen_call_terminator(
}
let
needs_location
=
instance
.map
(|
i
|
i
.def
.requires_caller_location
(
self
.cx
.tcx
()))
.unwrap_or_default
(
);
instance
.map
_or
(
false
,
|
i
|
i
.def
.requires_caller_location
(
self
.cx
.tcx
())
);
if
needs_location
{
assert_eq!
(
fn_abi
.args
.len
(),
args
.len
()
+
1
,
"#[track_caller] fn's must have 1 more argument in their ABI than in their MIR"
,
);
let
location
=
self
.get_caller_location
(
&
mut
bx
,
span
);
let
last_arg
=
&
fn_abi
.args
.last
()
.unwrap
();
let
last_arg
=
fn_abi
.args
.last
()
.unwrap
();
self
.codegen_argument
(
&
mut
bx
,
location
,
&
mut
llargs
,
last_arg
);
}
...
...
src/librustc_codegen_ssa/mir/mod.rs
浏览文件 @
1c2483eb
...
...
@@ -435,10 +435,10 @@ fn arg_local_refs<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>(
"#[track_caller] fn's must have 1 more argument in their ABI than in their MIR"
,
);
let
arg
=
&
fx
.fn_abi.args
.last
()
.unwrap
();
let
arg
=
fx
.fn_abi.args
.last
()
.unwrap
();
match
arg
.mode
{
PassMode
::
Direct
(
_
)
=>
(),
_
=>
panic
!
(
"caller location must be PassMode::Direct, found {:?}"
,
arg
.mode
),
_
=>
bug
!
(
"caller location must be PassMode::Direct, found {:?}"
,
arg
.mode
),
}
fx
.caller_location
=
Some
(
OperandRef
{
...
...
src/librustc_mir/interpret/intrinsics.rs
浏览文件 @
1c2483eb
...
...
@@ -112,7 +112,7 @@ pub fn emulate_intrinsic(
// `src/librustc/ty/constness.rs`
match
intrinsic_name
{
sym
::
caller_location
=>
{
let
span
=
self
.find_closest_untracked_caller_location
(
span
);
let
span
=
self
.find_closest_untracked_caller_location
(
)
.unwrap_or
(
span
);
let
location
=
self
.alloc_caller_location_for_span
(
span
);
self
.write_scalar
(
location
.ptr
,
dest
)
?
;
}
...
...
src/librustc_mir/interpret/intrinsics/caller_location.rs
浏览文件 @
1c2483eb
...
...
@@ -7,24 +7,17 @@
impl
<
'mir
,
'tcx
,
M
:
Machine
<
'mir
,
'tcx
>>
InterpCx
<
'mir
,
'tcx
,
M
>
{
/// Walks up the callstack from the intrinsic's callsite, searching for the first frame which is
/// not `#[track_caller]`. Returns the (passed) span of the intrinsic's callsite if the first
/// frame in the stack is untracked so that we can display the callsite of the intrinsic within
/// that function.
crate
fn
find_closest_untracked_caller_location
(
&
self
,
intrinsic_loc
:
Span
,
)
->
Span
{
debug!
(
"finding closest untracked caller relative to {:?}"
,
intrinsic_loc
);
let
mut
caller_span
=
intrinsic_loc
;
/// not `#[track_caller]`.
crate
fn
find_closest_untracked_caller_location
(
&
self
)
->
Option
<
Span
>
{
let
mut
caller_span
=
None
;
for
next_caller
in
self
.stack
.iter
()
.rev
()
{
if
!
next_caller
.instance.def
.requires_caller_location
(
*
self
.tcx
)
{
return
caller_span
;
}
caller_span
=
next_caller
.span
;
caller_span
=
Some
(
next_caller
.span
)
;
}
intrinsic_loc
caller_span
}
/// Allocate a `const core::panic::Location` with the provided filename and line/column numbers.
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录