Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
fff06e5e
R
Rust
项目概览
int
/
Rust
12 个月 前同步成功
通知
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,发现更多精彩内容 >>
提交
fff06e5e
编写于
2月 09, 2022
作者:
B
b-naber
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
use AllocId and Ty in ExprKind::StaticRef and delay ConstValue construction
上级
54ff25e4
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
16 addition
and
18 deletion
+16
-18
compiler/rustc_middle/src/thir.rs
compiler/rustc_middle/src/thir.rs
+8
-2
compiler/rustc_middle/src/thir/visit.rs
compiler/rustc_middle/src/thir/visit.rs
+1
-1
compiler/rustc_mir_build/src/build/expr/as_constant.rs
compiler/rustc_mir_build/src/build/expr/as_constant.rs
+5
-5
compiler/rustc_mir_build/src/thir/cx/expr.rs
compiler/rustc_mir_build/src/thir/cx/expr.rs
+2
-10
未找到文件。
compiler/rustc_middle/src/thir.rs
浏览文件 @
fff06e5e
...
...
@@ -17,6 +17,7 @@
use
rustc_index
::
vec
::
IndexVec
;
use
rustc_middle
::
infer
::
canonical
::
Canonical
;
use
rustc_middle
::
middle
::
region
;
use
rustc_middle
::
mir
::
interpret
::
AllocId
;
use
rustc_middle
::
mir
::{
BinOp
,
BorrowKind
,
FakeReadCause
,
Field
,
Mutability
,
UnOp
,
UserTypeProjection
,
};
...
...
@@ -419,7 +420,8 @@ pub enum ExprKind<'tcx> {
/// This is only distinguished from `Literal` so that we can register some
/// info for diagnostics.
StaticRef
{
literal
:
Const
<
'tcx
>
,
alloc_id
:
AllocId
,
ty
:
Ty
<
'tcx
>
,
def_id
:
DefId
,
},
/// Inline assembly, i.e. `asm!()`.
...
...
@@ -715,7 +717,11 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
Some
(
&
adt_def
.variants
[
variant_index
])
}
_
=>
self
.ty
.ty_adt_def
()
.and_then
(|
adt
|
{
if
!
adt
.is_enum
()
{
Some
(
adt
.non_enum_variant
())
}
else
{
None
}
if
!
adt
.is_enum
()
{
Some
(
adt
.non_enum_variant
())
}
else
{
None
}
}),
};
...
...
compiler/rustc_middle/src/thir/visit.rs
浏览文件 @
fff06e5e
...
...
@@ -123,7 +123,7 @@ pub fn walk_expr<'a, 'tcx: 'a, V: Visitor<'a, 'tcx>>(visitor: &mut V, expr: &Exp
}
Closure
{
closure_id
:
_
,
substs
:
_
,
upvars
:
_
,
movability
:
_
,
fake_reads
:
_
}
=>
{}
Literal
{
literal
,
user_ty
:
_
,
const_id
:
_
}
=>
visitor
.visit_const
(
literal
),
StaticRef
{
literal
,
def_id
:
_
}
=>
visitor
.visit_const
(
literal
),
StaticRef
{
..
}
=>
{}
InlineAsm
{
ref
operands
,
template
:
_
,
options
:
_
,
line_spans
:
_
}
=>
{
for
op
in
&**
operands
{
use
InlineAsmOperand
::
*
;
...
...
compiler/rustc_mir_build/src/build/expr/as_constant.rs
浏览文件 @
fff06e5e
//! See docs in build/expr/mod.rs
use
crate
::
build
::
Builder
;
use
rustc_middle
::
mir
::
interpret
::{
ConstValue
,
Scalar
};
use
rustc_middle
::
mir
::
*
;
use
rustc_middle
::
thir
::
*
;
use
rustc_middle
::
ty
::
CanonicalUserTypeAnnotation
;
...
...
@@ -26,11 +27,10 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
assert_eq!
(
literal
.ty
(),
ty
);
Constant
{
span
,
user_ty
,
literal
:
literal
.into
()
}
}
ExprKind
::
StaticRef
{
literal
,
..
}
=>
{
let
const_val
=
literal
.val
.try_to_value
()
.unwrap_or_else
(||
{
bug!
(
"expected `ConstKind::Value`, but found {:?}"
,
literal
.val
)
});
let
literal
=
ConstantKind
::
Val
(
const_val
,
literal
.ty
);
ExprKind
::
StaticRef
{
alloc_id
,
ty
,
..
}
=>
{
let
const_val
=
ConstValue
::
Scalar
(
Scalar
::
from_pointer
(
alloc_id
.into
(),
&
this
.tcx
));
let
literal
=
ConstantKind
::
Val
(
const_val
,
ty
);
Constant
{
span
,
user_ty
:
None
,
literal
}
}
...
...
compiler/rustc_mir_build/src/thir/cx/expr.rs
浏览文件 @
fff06e5e
...
...
@@ -8,7 +8,6 @@
use
rustc_middle
::
hir
::
place
::
PlaceBase
as
HirPlaceBase
;
use
rustc_middle
::
hir
::
place
::
ProjectionKind
as
HirProjectionKind
;
use
rustc_middle
::
middle
::
region
;
use
rustc_middle
::
mir
::
interpret
::
Scalar
;
use
rustc_middle
::
mir
::{
BinOp
,
BorrowKind
,
Field
,
UnOp
};
use
rustc_middle
::
thir
::
*
;
use
rustc_middle
::
ty
::
adjustment
::{
...
...
@@ -943,15 +942,8 @@ fn convert_path_expr(&mut self, expr: &'tcx hir::Expr<'tcx>, res: Res) -> ExprKi
let
kind
=
if
self
.tcx
.is_thread_local_static
(
id
)
{
ExprKind
::
ThreadLocalRef
(
id
)
}
else
{
let
ptr
=
self
.tcx
.create_static_alloc
(
id
);
ExprKind
::
StaticRef
{
literal
:
ty
::
Const
::
from_scalar
(
self
.tcx
,
Scalar
::
from_pointer
(
ptr
.into
(),
&
self
.tcx
),
ty
,
),
def_id
:
id
,
}
let
alloc_id
=
self
.tcx
.create_static_alloc
(
id
);
ExprKind
::
StaticRef
{
alloc_id
,
ty
,
def_id
:
id
}
};
ExprKind
::
Deref
{
arg
:
self
.thir.exprs
.push
(
Expr
{
ty
,
temp_lifetime
,
span
:
expr
.span
,
kind
}),
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录