Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
69785311
R
Rust
项目概览
int
/
Rust
11 个月 前同步成功
通知
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,发现更多精彩内容 >>
提交
69785311
编写于
11月 29, 2019
作者:
M
Mark Mansi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix imports
上级
52a9eff7
变更
24
隐藏空白更改
内联
并排
Showing
24 changed file
with
187 addition
and
129 deletion
+187
-129
src/librustc_mir/borrow_check/constraint_generation.rs
src/librustc_mir/borrow_check/constraint_generation.rs
+9
-6
src/librustc_mir/borrow_check/constraints/graph.rs
src/librustc_mir/borrow_check/constraints/graph.rs
+6
-3
src/librustc_mir/borrow_check/constraints/mod.rs
src/librustc_mir/borrow_check/constraints/mod.rs
+2
-1
src/librustc_mir/borrow_check/diagnostics/explain_borrow.rs
src/librustc_mir/borrow_check/diagnostics/explain_borrow.rs
+9
-4
src/librustc_mir/borrow_check/diagnostics/find_use.rs
src/librustc_mir/borrow_check/diagnostics/find_use.rs
+1
-2
src/librustc_mir/borrow_check/diagnostics/outlives_suggestion.rs
...rustc_mir/borrow_check/diagnostics/outlives_suggestion.rs
+1
-1
src/librustc_mir/borrow_check/diagnostics/region_errors.rs
src/librustc_mir/borrow_check/diagnostics/region_errors.rs
+13
-7
src/librustc_mir/borrow_check/diagnostics/region_name.rs
src/librustc_mir/borrow_check/diagnostics/region_name.rs
+3
-4
src/librustc_mir/borrow_check/diagnostics/var_name.rs
src/librustc_mir/borrow_check/diagnostics/var_name.rs
+1
-2
src/librustc_mir/borrow_check/invalidation.rs
src/librustc_mir/borrow_check/invalidation.rs
+11
-11
src/librustc_mir/borrow_check/mod.rs
src/librustc_mir/borrow_check/mod.rs
+15
-6
src/librustc_mir/borrow_check/nll.rs
src/librustc_mir/borrow_check/nll.rs
+17
-25
src/librustc_mir/borrow_check/region_infer/graphviz.rs
src/librustc_mir/borrow_check/region_infer/graphviz.rs
+3
-2
src/librustc_mir/borrow_check/region_infer/mod.rs
src/librustc_mir/borrow_check/region_infer/mod.rs
+13
-16
src/librustc_mir/borrow_check/type_check/constraint_conversion.rs
...ustc_mir/borrow_check/type_check/constraint_conversion.rs
+8
-5
src/librustc_mir/borrow_check/type_check/free_region_relations.rs
...ustc_mir/borrow_check/type_check/free_region_relations.rs
+8
-4
src/librustc_mir/borrow_check/type_check/input_output.rs
src/librustc_mir/borrow_check/type_check/input_output.rs
+2
-1
src/librustc_mir/borrow_check/type_check/liveness/local_use_map.rs
...stc_mir/borrow_check/type_check/liveness/local_use_map.rs
+4
-2
src/librustc_mir/borrow_check/type_check/liveness/mod.rs
src/librustc_mir/borrow_check/type_check/liveness/mod.rs
+13
-9
src/librustc_mir/borrow_check/type_check/liveness/trace.rs
src/librustc_mir/borrow_check/type_check/liveness/trace.rs
+12
-8
src/librustc_mir/borrow_check/type_check/mod.rs
src/librustc_mir/borrow_check/type_check/mod.rs
+24
-1
src/librustc_mir/borrow_check/type_check/relate_tys.rs
src/librustc_mir/borrow_check/type_check/relate_tys.rs
+3
-2
src/librustc_mir/borrow_check/universal_regions.rs
src/librustc_mir/borrow_check/universal_regions.rs
+1
-1
src/librustc_mir/dataflow/impls/borrows.rs
src/librustc_mir/dataflow/impls/borrows.rs
+8
-6
未找到文件。
src/librustc_mir/borrow_check/constraint_generation.rs
浏览文件 @
69785311
use
crate
::
borrow_check
::
borrow_set
::
BorrowSet
;
use
crate
::
borrow_check
::
location
::
LocationTable
;
use
crate
::
borrow_check
::
nll
::
ToRegionVid
;
use
crate
::
borrow_check
::
nll
::
facts
::
AllFacts
;
use
crate
::
borrow_check
::
nll
::
region_infer
::
values
::
LivenessValues
;
use
crate
::
borrow_check
::
places_conflict
;
use
rustc
::
infer
::
InferCtxt
;
use
rustc
::
mir
::
visit
::
TyContext
;
use
rustc
::
mir
::
visit
::
Visitor
;
...
...
@@ -15,6 +9,15 @@
use
rustc
::
ty
::{
self
,
RegionVid
,
Ty
};
use
rustc
::
ty
::
subst
::
SubstsRef
;
use
crate
::
borrow_check
::{
borrow_set
::
BorrowSet
,
location
::
LocationTable
,
nll
::
ToRegionVid
,
facts
::
AllFacts
,
region_infer
::
values
::
LivenessValues
,
places_conflict
,
};
pub
(
super
)
fn
generate_constraints
<
'cx
,
'tcx
>
(
infcx
:
&
InferCtxt
<
'cx
,
'tcx
>
,
param_env
:
ty
::
ParamEnv
<
'tcx
>
,
...
...
src/librustc_mir/borrow_check/constraints/graph.rs
浏览文件 @
69785311
use
crate
::
borrow_check
::
nll
::
type_check
::
Locations
;
use
crate
::
borrow_check
::
nll
::
constraints
::
OutlivesConstraintIndex
;
use
crate
::
borrow_check
::
nll
::
constraints
::{
OutlivesConstraintSet
,
OutlivesConstraint
};
use
rustc
::
mir
::
ConstraintCategory
;
use
rustc
::
ty
::
RegionVid
;
use
rustc_data_structures
::
graph
;
use
rustc_index
::
vec
::
IndexVec
;
use
syntax_pos
::
DUMMY_SP
;
use
crate
::
borrow_check
::{
type_check
::
Locations
,
constraints
::
OutlivesConstraintIndex
,
constraints
::{
OutlivesConstraintSet
,
OutlivesConstraint
},
};
/// The construct graph organizes the constraints by their end-points.
/// It can be used to view a `R1: R2` constraint as either an edge `R1
/// -> R2` or `R2 -> R1` depending on the direction type `D`.
...
...
src/librustc_mir/borrow_check/constraints/mod.rs
浏览文件 @
69785311
use
crate
::
borrow_check
::
nll
::
type_check
::
Locations
;
use
rustc
::
mir
::
ConstraintCategory
;
use
rustc
::
ty
::
RegionVid
;
use
rustc_data_structures
::
graph
::
scc
::
Sccs
;
...
...
@@ -6,6 +5,8 @@
use
std
::
fmt
;
use
std
::
ops
::
Index
;
use
crate
::
borrow_check
::
type_check
::
Locations
;
crate
mod
graph
;
/// A set of NLL region constraints. These include "outlives"
...
...
src/librustc_mir/borrow_check/diagnostics/explain_borrow.rs
浏览文件 @
69785311
//! Print diagnostics to explain why values are borrowed.
use
std
::
collections
::
VecDeque
;
use
crate
::
borrow_check
::
borrow_set
::
BorrowData
;
use
crate
::
borrow_check
::
nll
::
region_infer
::
Cause
;
use
crate
::
borrow_check
::
nll
::
ConstraintDescription
;
use
crate
::
borrow_check
::{
MirBorrowckCtxt
,
WriteKind
};
use
rustc
::
mir
::{
CastKind
,
ConstraintCategory
,
FakeReadCause
,
Local
,
Location
,
Body
,
Operand
,
Place
,
Rvalue
,
Statement
,
StatementKind
,
TerminatorKind
,
...
...
@@ -16,6 +14,13 @@
use
syntax_pos
::
Span
;
use
syntax_pos
::
symbol
::
Symbol
;
use
crate
::
borrow_check
::{
borrow_set
::
BorrowData
,
region_infer
::
Cause
,
nll
::
ConstraintDescription
,
MirBorrowckCtxt
,
WriteKind
,
};
use
super
::{
UseSpans
,
find_use
,
RegionName
};
#[derive(Debug)]
...
...
src/librustc_mir/borrow_check/diagnostics/find_use.rs
浏览文件 @
69785311
use
std
::
collections
::
VecDeque
;
use
std
::
rc
::
Rc
;
use
crate
::
borrow_check
::
nll
::
region_infer
::{
Cause
,
RegionInferenceContext
};
use
crate
::
borrow_check
::
nll
::
ToRegionVid
;
use
crate
::
borrow_check
::{
nll
::
ToRegionVid
,
region_infer
::{
Cause
,
RegionInferenceContext
}};
use
crate
::
util
::
liveness
::{
self
,
DefUse
};
use
rustc
::
mir
::
visit
::{
MirVisitable
,
PlaceContext
,
Visitor
};
use
rustc
::
mir
::{
Local
,
Location
,
Body
};
...
...
src/librustc_mir/borrow_check/diagnostics/outlives_suggestion.rs
浏览文件 @
69785311
...
...
@@ -13,7 +13,7 @@
use
smallvec
::
SmallVec
;
use
crate
::
borrow_check
::
nll
::
region_infer
::
RegionInferenceContext
;
use
crate
::
borrow_check
::
region_infer
::
RegionInferenceContext
;
use
super
::{
RegionName
,
RegionNameSource
,
ErrorConstraintInfo
,
ErrorReportingCtx
,
RegionErrorNamingCtx
,
...
...
src/librustc_mir/borrow_check/diagnostics/region_errors.rs
浏览文件 @
69785311
use
crate
::
borrow_check
::
nll
::
constraints
::
OutlivesConstraint
;
use
crate
::
borrow_check
::
nll
::
region_infer
::
RegionInferenceContext
;
use
crate
::
borrow_check
::
nll
::
type_check
::
Locations
;
use
crate
::
borrow_check
::
nll
::
universal_regions
::
DefiningTy
;
use
crate
::
borrow_check
::
nll
::
ConstraintDescription
;
use
crate
::
borrow_check
::
Upvar
;
use
crate
::
util
::
borrowck_errors
;
//! Error reporting machinery for lifetime errors.
use
rustc
::
hir
::
def_id
::
DefId
;
use
rustc
::
infer
::
error_reporting
::
nice_region_error
::
NiceRegionError
;
use
rustc
::
infer
::
InferCtxt
;
...
...
@@ -19,6 +14,17 @@
use
syntax_pos
::
Span
;
use
syntax_pos
::
symbol
::
Symbol
;
use
crate
::
util
::
borrowck_errors
;
use
crate
::
borrow_check
::{
constraints
::
OutlivesConstraint
,
region_infer
::
RegionInferenceContext
,
type_check
::
Locations
,
universal_regions
::
DefiningTy
,
nll
::
ConstraintDescription
,
Upvar
,
};
use
super
::{
OutlivesSuggestionBuilder
,
RegionName
,
RegionNameSource
,
RegionErrorNamingCtx
};
impl
ConstraintDescription
for
ConstraintCategory
{
...
...
src/librustc_mir/borrow_check/diagnostics/region_name.rs
浏览文件 @
69785311
...
...
@@ -15,14 +15,13 @@
use
syntax_pos
::{
Span
,
symbol
::
Symbol
,
DUMMY_SP
};
use
crate
::
borrow_check
::{
nll
::
region_infer
::
RegionInferenceContext
,
nll
::
universal_regions
::
DefiningTy
,
diagnostics
::
region_errors
::
ErrorReportingCtx
,
region_infer
::
RegionInferenceContext
,
universal_regions
::
DefiningTy
,
nll
::
ToRegionVid
,
Upvar
,
};
use
super
::
region_errors
::
ErrorReportingCtx
;
/// A name for a particular region used in emitting diagnostics. This name could be a generated
/// name like `'1`, a name used by the user like `'a`, or a name like `'static`.
#[derive(Debug,
Clone)]
...
...
src/librustc_mir/borrow_check/diagnostics/var_name.rs
浏览文件 @
69785311
use
crate
::
borrow_check
::
nll
::
region_infer
::
RegionInferenceContext
;
use
crate
::
borrow_check
::
nll
::
ToRegionVid
;
use
crate
::
borrow_check
::{
nll
::
ToRegionVid
,
region_infer
::
RegionInferenceContext
};
use
crate
::
borrow_check
::
Upvar
;
use
rustc
::
mir
::{
Local
,
Body
};
use
rustc
::
ty
::{
RegionVid
,
TyCtxt
};
...
...
src/librustc_mir/borrow_check/invalidation.rs
浏览文件 @
69785311
use
crate
::
borrow_check
::
borrow_set
::
BorrowSet
;
use
crate
::
borrow_check
::
location
::
LocationTable
;
use
crate
::
borrow_check
::{
JustWrite
,
WriteAndRead
};
use
crate
::
borrow_check
::{
AccessDepth
,
Deep
,
Shallow
};
use
crate
::
borrow_check
::{
ReadOrWrite
,
Activation
,
Read
,
Reservation
,
Write
};
use
crate
::
borrow_check
::{
LocalMutationIsAllowed
,
MutateMode
};
use
crate
::
borrow_check
::
ArtificialField
;
use
crate
::
borrow_check
::{
ReadKind
,
WriteKind
};
use
crate
::
borrow_check
::
nll
::
facts
::
AllFacts
;
use
crate
::
borrow_check
::
path_utils
::
*
;
use
crate
::
dataflow
::
indexes
::
BorrowIndex
;
use
rustc
::
ty
::{
self
,
TyCtxt
};
use
rustc
::
mir
::
visit
::
Visitor
;
use
rustc
::
mir
::{
BasicBlock
,
Location
,
Body
,
Place
,
ReadOnlyBodyAndCache
,
Rvalue
};
...
...
@@ -17,6 +6,17 @@
use
rustc
::
mir
::{
Operand
,
BorrowKind
};
use
rustc_data_structures
::
graph
::
dominators
::
Dominators
;
use
crate
::
dataflow
::
indexes
::
BorrowIndex
;
use
crate
::
borrow_check
::{
borrow_set
::
BorrowSet
,
location
::
LocationTable
,
facts
::
AllFacts
,
path_utils
::
*
,
JustWrite
,
WriteAndRead
,
AccessDepth
,
Deep
,
Shallow
,
ReadOrWrite
,
Activation
,
Read
,
Reservation
,
Write
,
LocalMutationIsAllowed
,
MutateMode
,
ArtificialField
,
ReadKind
,
WriteKind
,
};
pub
(
super
)
fn
generate_invalidates
<
'tcx
>
(
tcx
:
TyCtxt
<
'tcx
>
,
param_env
:
ty
::
ParamEnv
<
'tcx
>
,
...
...
src/librustc_mir/borrow_check/mod.rs
浏览文件 @
69785311
//! This query borrow-checks the MIR to (further) ensure it is not broken.
use
crate
::
borrow_check
::
nll
::
region_infer
::
RegionInferenceContext
;
use
rustc
::
hir
::{
self
,
HirId
};
use
rustc
::
hir
::
Node
;
use
rustc
::
hir
::
def_id
::
DefId
;
...
...
@@ -47,20 +46,30 @@
use
self
::
prefixes
::
PrefixSet
;
use
self
::
MutateMode
::{
JustWrite
,
WriteAndRead
};
use
self
::
diagnostics
::
AccessKind
;
use
self
::
region_infer
::
RegionInferenceContext
;
use
self
::
path_utils
::
*
;
crate
mod
borrow_set
;
mod
diagnostics
;
mod
flows
;
mod
location
;
mod
path_utils
;
crate
mod
place_ext
;
crate
mod
places_conflict
;
mod
prefixes
;
mod
used_muts
;
pub
(
crate
)
mod
nll
;
mod
constraint_generation
;
mod
facts
;
mod
invalidation
;
mod
renumber
;
mod
member_constraints
;
crate
mod
constraints
;
crate
mod
universal_regions
;
crate
mod
type_check
;
crate
mod
region_infer
;
crate
mod
borrow_set
;
crate
mod
place_ext
;
crate
mod
places_conflict
;
crate
mod
nll
;
// FIXME(eddyb) perhaps move this somewhere more centrally.
#[derive(Debug)]
...
...
src/librustc_mir/borrow_check/nll.rs
浏览文件 @
69785311
use
crate
::
borrow_check
::
borrow_set
::
BorrowSet
;
use
crate
::
borrow_check
::
location
::
LocationTable
;
use
crate
::
borrow_check
::
nll
::
facts
::
AllFactsExt
;
use
crate
::
borrow_check
::
nll
::
type_check
::{
MirTypeckResults
,
MirTypeckRegionConstraints
};
use
crate
::
borrow_check
::
nll
::
region_infer
::
values
::
RegionValueElements
;
use
crate
::
dataflow
::
move_paths
::{
InitLocation
,
MoveData
,
InitKind
};
use
crate
::
dataflow
::
FlowAtLocation
;
use
crate
::
dataflow
::
MaybeInitializedPlaces
;
use
crate
::
transform
::
MirSource
;
use
crate
::
borrow_check
::
Upvar
;
//! The entry point of the NLL borrow checker.
use
rustc
::
hir
::
def_id
::
DefId
;
use
rustc
::
infer
::
InferCtxt
;
use
rustc
::
mir
::{
ClosureOutlivesSubject
,
ClosureRegionRequirements
,
...
...
@@ -27,24 +19,24 @@
use
self
::
mir_util
::
PassWhere
;
use
polonius_engine
::{
Algorithm
,
Output
};
use
crate
::
util
as
mir_util
;
use
crate
::
util
::
pretty
;
use
crate
::
dataflow
::
indexes
::
BorrowIndex
;
use
crate
::
dataflow
::
move_paths
::{
InitLocation
,
MoveData
,
MovePathIndex
,
InitKind
};
use
crate
::
dataflow
::
FlowAtLocation
;
use
crate
::
dataflow
::
MaybeInitializedPlaces
;
use
crate
::
transform
::
MirSource
;
mod
constraint_generation
;
mod
facts
;
mod
invalidation
;
mod
renumber
;
mod
member_constraints
;
crate
mod
constraints
;
crate
mod
universal_regions
;
crate
mod
type_check
;
crate
mod
region_infer
;
use
self
::
facts
::{
AllFacts
,
RustcFacts
};
use
self
::
region_infer
::
RegionInferenceContext
;
use
self
::
universal_regions
::
UniversalRegions
;
use
crate
::
borrow_check
::{
borrow_set
::
BorrowSet
,
location
::{
LocationIndex
,
LocationTable
},
facts
::{
AllFacts
,
AllFactsExt
,
RustcFacts
},
region_infer
::{
RegionInferenceContext
,
values
::
RegionValueElements
},
universal_regions
::
UniversalRegions
,
type_check
::{
self
,
MirTypeckResults
,
MirTypeckRegionConstraints
},
Upvar
,
renumber
,
constraint_generation
,
invalidation
,
};
crate
type
PoloniusOutput
=
Output
<
RustcFacts
>
;
...
...
src/librustc_mir/borrow_check/region_infer/graphviz.rs
浏览文件 @
69785311
...
...
@@ -2,11 +2,12 @@
//! libgraphviz traits, specialized to attaching borrowck analysis
//! data to rendered labels.
use
super
::
*
;
use
crate
::
borrow_check
::
nll
::
constraints
::
OutlivesConstraint
;
use
std
::
borrow
::
Cow
;
use
std
::
io
::{
self
,
Write
};
use
super
::
*
;
use
crate
::
borrow_check
::
constraints
::
OutlivesConstraint
;
impl
<
'tcx
>
RegionInferenceContext
<
'tcx
>
{
/// Write out the region constraint graph.
crate
fn
dump_graphviz_raw_constraints
(
&
self
,
mut
w
:
&
mut
dyn
Write
)
->
io
::
Result
<
()
>
{
...
...
src/librustc_mir/borrow_check/region_infer/mod.rs
浏览文件 @
69785311
...
...
@@ -23,29 +23,26 @@
use
syntax_pos
::
symbol
::
Symbol
;
use
crate
::
borrow_check
::{
nll
::{
constraints
::{
graph
::
NormalConstraintGraph
,
ConstraintSccIndex
,
OutlivesConstraint
,
OutlivesConstraintSet
,
},
member_constraints
::{
MemberConstraintSet
,
NllMemberConstraintIndex
},
region_infer
::
values
::{
PlaceholderIndices
,
RegionElement
,
ToElementIndex
},
type_check
::{
free_region_relations
::
UniversalRegionRelations
,
Locations
},
constraints
::{
graph
::
NormalConstraintGraph
,
ConstraintSccIndex
,
OutlivesConstraint
,
OutlivesConstraintSet
,
},
member_constraints
::{
MemberConstraintSet
,
NllMemberConstraintIndex
},
region_infer
::
values
::{
PlaceholderIndices
,
RegionElement
,
ToElementIndex
,
LivenessValues
,
RegionValueElements
,
RegionValues
,
},
type_check
::{
free_region_relations
::
UniversalRegionRelations
,
Locations
},
diagnostics
::{
OutlivesSuggestionBuilder
,
RegionErrorNamingCtx
,
},
nll
::{
ToRegionVid
,
PoloniusOutput
},
universal_regions
::
UniversalRegions
,
Upvar
,
};
use
self
::
values
::{
LivenessValues
,
RegionValueElements
,
RegionValues
};
use
super
::
universal_regions
::
UniversalRegions
;
use
super
::{
PoloniusOutput
,
ToRegionVid
};
mod
dump_mir
;
mod
graphviz
;
...
...
src/librustc_mir/borrow_check/type_check/constraint_conversion.rs
浏览文件 @
69785311
use
crate
::
borrow_check
::
nll
::
constraints
::
OutlivesConstraint
;
use
crate
::
borrow_check
::
nll
::
region_infer
::
TypeTest
;
use
crate
::
borrow_check
::
nll
::
type_check
::{
Locations
,
MirTypeckRegionConstraints
};
use
crate
::
borrow_check
::
nll
::
universal_regions
::
UniversalRegions
;
use
crate
::
borrow_check
::
nll
::
ToRegionVid
;
use
rustc
::
infer
::
canonical
::
QueryRegionConstraints
;
use
rustc
::
infer
::
canonical
::
QueryOutlivesConstraint
;
use
rustc
::
infer
::
outlives
::
env
::
RegionBoundPairs
;
...
...
@@ -14,6 +9,14 @@
use
rustc
::
ty
::{
self
,
TyCtxt
};
use
syntax_pos
::
DUMMY_SP
;
use
crate
::
borrow_check
::{
constraints
::
OutlivesConstraint
,
region_infer
::
TypeTest
,
type_check
::{
Locations
,
MirTypeckRegionConstraints
},
universal_regions
::
UniversalRegions
,
nll
::
ToRegionVid
,
};
crate
struct
ConstraintConversion
<
'a
,
'tcx
>
{
infcx
:
&
'a
InferCtxt
<
'a
,
'tcx
>
,
tcx
:
TyCtxt
<
'tcx
>
,
...
...
src/librustc_mir/borrow_check/type_check/free_region_relations.rs
浏览文件 @
69785311
use
crate
::
borrow_check
::
nll
::
type_check
::
constraint_conversion
;
use
crate
::
borrow_check
::
nll
::
type_check
::{
Locations
,
MirTypeckRegionConstraints
};
use
crate
::
borrow_check
::
nll
::
universal_regions
::
UniversalRegions
;
use
crate
::
borrow_check
::
nll
::
ToRegionVid
;
use
rustc
::
infer
::
canonical
::
QueryRegionConstraints
;
use
rustc
::
infer
::
outlives
::
free_region_map
::
FreeRegionRelations
;
use
rustc
::
infer
::
region_constraints
::
GenericKind
;
...
...
@@ -14,6 +11,13 @@
use
std
::
rc
::
Rc
;
use
syntax_pos
::
DUMMY_SP
;
use
crate
::
borrow_check
::{
type_check
::
constraint_conversion
,
type_check
::{
Locations
,
MirTypeckRegionConstraints
},
universal_regions
::
UniversalRegions
,
nll
::
ToRegionVid
,
};
#[derive(Debug)]
crate
struct
UniversalRegionRelations
<
'tcx
>
{
universal_regions
:
Rc
<
UniversalRegions
<
'tcx
>>
,
...
...
src/librustc_mir/borrow_check/type_check/input_output.rs
浏览文件 @
69785311
...
...
@@ -7,7 +7,6 @@
//! `RETURN_PLACE` the MIR arguments) are always fully normalized (and
//! contain revealed `impl Trait` values).
use
crate
::
borrow_check
::
nll
::
universal_regions
::
UniversalRegions
;
use
rustc
::
infer
::
LateBoundRegionConversionTime
;
use
rustc
::
mir
::
*
;
use
rustc
::
ty
::
Ty
;
...
...
@@ -15,6 +14,8 @@
use
rustc_index
::
vec
::
Idx
;
use
syntax_pos
::
Span
;
use
crate
::
borrow_check
::
universal_regions
::
UniversalRegions
;
use
super
::{
Locations
,
TypeChecker
};
impl
<
'a
,
'tcx
>
TypeChecker
<
'a
,
'tcx
>
{
...
...
src/librustc_mir/borrow_check/type_check/liveness/local_use_map.rs
浏览文件 @
69785311
use
crate
::
borrow_check
::
nll
::
region_infer
::
values
::{
PointIndex
,
RegionValueElements
};
use
crate
::
util
::
liveness
::{
categorize
,
DefUse
};
use
rustc
::
mir
::
visit
::{
PlaceContext
,
Visitor
};
use
rustc
::
mir
::{
Local
,
Location
,
ReadOnlyBodyAndCache
};
use
rustc_index
::
vec
::{
Idx
,
IndexVec
};
use
rustc_data_structures
::
vec_linked_list
as
vll
;
use
crate
::
util
::
liveness
::{
categorize
,
DefUse
};
use
crate
::
borrow_check
::
region_infer
::
values
::{
PointIndex
,
RegionValueElements
};
/// A map that cross references each local with the locations where it
/// is defined (assigned), used, or dropped. Used during liveness
/// computation.
...
...
src/librustc_mir/borrow_check/type_check/liveness/mod.rs
浏览文件 @
69785311
use
crate
::
borrow_check
::
location
::
LocationTable
;
use
crate
::
borrow_check
::
nll
::
constraints
::
OutlivesConstraintSet
;
use
crate
::
borrow_check
::
nll
::
facts
::{
AllFacts
,
AllFactsExt
};
use
crate
::
borrow_check
::
nll
::
region_infer
::
values
::
RegionValueElements
;
use
crate
::
borrow_check
::
nll
::
universal_regions
::
UniversalRegions
;
use
crate
::
borrow_check
::
nll
::
ToRegionVid
;
use
crate
::
dataflow
::
move_paths
::
MoveData
;
use
crate
::
dataflow
::
FlowAtLocation
;
use
crate
::
dataflow
::
MaybeInitializedPlaces
;
use
rustc
::
mir
::{
Body
,
Local
,
ReadOnlyBodyAndCache
};
use
rustc
::
ty
::{
RegionVid
,
TyCtxt
};
use
rustc_data_structures
::
fx
::
FxHashSet
;
use
std
::
rc
::
Rc
;
use
crate
::
dataflow
::
move_paths
::
MoveData
;
use
crate
::
dataflow
::
FlowAtLocation
;
use
crate
::
dataflow
::
MaybeInitializedPlaces
;
use
crate
::
borrow_check
::{
location
::
LocationTable
,
constraints
::
OutlivesConstraintSet
,
facts
::{
AllFacts
,
AllFactsExt
},
region_infer
::
values
::
RegionValueElements
,
universal_regions
::
UniversalRegions
,
nll
::
ToRegionVid
,
};
use
super
::
TypeChecker
;
mod
local_use_map
;
...
...
src/librustc_mir/borrow_check/type_check/liveness/trace.rs
浏览文件 @
69785311
use
crate
::
borrow_check
::
nll
::
region_infer
::
values
::{
self
,
PointIndex
,
RegionValueElements
};
use
crate
::
borrow_check
::
nll
::
type_check
::
liveness
::
local_use_map
::
LocalUseMap
;
use
crate
::
borrow_check
::
nll
::
type_check
::
liveness
::
polonius
;
use
crate
::
borrow_check
::
nll
::
type_check
::
NormalizeLocation
;
use
crate
::
borrow_check
::
nll
::
type_check
::
TypeChecker
;
use
crate
::
dataflow
::
indexes
::
MovePathIndex
;
use
crate
::
dataflow
::
move_paths
::
MoveData
;
use
crate
::
dataflow
::{
FlowAtLocation
,
FlowsAtLocation
,
MaybeInitializedPlaces
};
use
rustc
::
infer
::
canonical
::
QueryRegionConstraints
;
use
rustc
::
mir
::{
BasicBlock
,
ConstraintCategory
,
Local
,
Location
,
ReadOnlyBodyAndCache
};
use
rustc
::
traits
::
query
::
dropck_outlives
::
DropckOutlivesResult
;
...
...
@@ -16,6 +8,18 @@
use
rustc_data_structures
::
fx
::{
FxHashMap
,
FxHashSet
};
use
std
::
rc
::
Rc
;
use
crate
::
dataflow
::
indexes
::
MovePathIndex
;
use
crate
::
dataflow
::
move_paths
::
MoveData
;
use
crate
::
dataflow
::{
FlowAtLocation
,
FlowsAtLocation
,
MaybeInitializedPlaces
};
use
crate
::
borrow_check
::{
region_infer
::
values
::{
self
,
PointIndex
,
RegionValueElements
},
type_check
::
liveness
::
local_use_map
::
LocalUseMap
,
type_check
::
liveness
::
polonius
,
type_check
::
NormalizeLocation
,
type_check
::
TypeChecker
,
};
/// This is the heart of the liveness computation. For each variable X
/// that requires a liveness computation, it walks over all the uses
/// of X and does a reverse depth-first search ("trace") through the
...
...
src/librustc_mir/borrow_check/type_check/mod.rs
浏览文件 @
69785311
...
...
@@ -55,9 +55,32 @@
use
crate
::
dataflow
::
move_paths
::
MoveData
;
use
crate
::
transform
::
promote_consts
::
should_suggest_const_in_array_repeat_expressions_attribute
;
use
crate
::
transform
::
promote_consts
::
should_suggest_const_in_array_repeat_expressions_attribute
;
use
crate
::
dataflow
::
move_paths
::
MoveData
;
use
crate
::
dataflow
::
FlowAtLocation
;
use
crate
::
dataflow
::
MaybeInitializedPlaces
;
use
crate
::
borrow_check
::{
borrow_set
::
BorrowSet
,
location
::
LocationTable
,
constraints
::{
OutlivesConstraintSet
,
OutlivesConstraint
},
member_constraints
::
MemberConstraintSet
,
facts
::
AllFacts
,
region_infer
::
values
::{
LivenessValues
,
PlaceholderIndex
,
PlaceholderIndices
,
RegionValueElements
,
},
region_infer
::{
ClosureRegionRequirementsExt
,
TypeTest
},
type_check
::
free_region_relations
::{
CreateResult
,
UniversalRegionRelations
,
},
universal_regions
::{
DefiningTy
,
UniversalRegions
},
nll
::
ToRegionVid
,
renumber
,
};
macro_rules!
span_mirbug
{
(
$context:expr
,
$elem:expr
,
$
(
$message:tt
)
*
)
=>
({
$crate
::
borrow_check
::
nll
::
type_check
::
mirbug
(
$crate
::
borrow_check
::
type_check
::
mirbug
(
$context
.tcx
(),
$context
.last_span
,
&
format!
(
...
...
src/librustc_mir/borrow_check/type_check/relate_tys.rs
浏览文件 @
69785311
use
crate
::
borrow_check
::
nll
::
constraints
::
OutlivesConstraint
;
use
crate
::
borrow_check
::
nll
::
type_check
::{
BorrowCheckContext
,
Locations
};
use
rustc
::
infer
::
nll_relate
::{
TypeRelating
,
TypeRelatingDelegate
,
NormalizationStrategy
};
use
rustc
::
infer
::{
InferCtxt
,
NLLRegionVariableOrigin
};
use
rustc
::
mir
::
ConstraintCategory
;
...
...
@@ -8,6 +6,9 @@
use
rustc
::
ty
::
relate
::
TypeRelation
;
use
rustc
::
ty
::{
self
,
Ty
};
use
crate
::
borrow_check
::
constraints
::
OutlivesConstraint
;
use
crate
::
borrow_check
::
type_check
::{
BorrowCheckContext
,
Locations
};
/// Adds sufficient constraints to ensure that `a R b` where `R` depends on `v`:
///
/// - "Covariant" `a <: b`
...
...
src/librustc_mir/borrow_check/universal_regions.rs
浏览文件 @
69785311
...
...
@@ -25,7 +25,7 @@
use
rustc_errors
::
DiagnosticBuilder
;
use
std
::
iter
;
use
super
::
ToRegionVid
;
use
crate
::
borrow_check
::
nll
::
ToRegionVid
;
#[derive(Debug)]
pub
struct
UniversalRegions
<
'tcx
>
{
...
...
src/librustc_mir/dataflow/impls/borrows.rs
浏览文件 @
69785311
use
crate
::
borrow_check
::
borrow_set
::{
BorrowSet
,
BorrowData
};
use
crate
::
borrow_check
::
place_ext
::
PlaceExt
;
use
rustc
::
mir
::{
self
,
Location
,
Place
,
PlaceBase
,
Body
};
use
rustc
::
ty
::{
self
,
TyCtxt
};
use
rustc
::
ty
::
RegionVid
;
...
...
@@ -10,9 +7,14 @@
use
rustc_index
::
vec
::{
Idx
,
IndexVec
};
use
crate
::
dataflow
::{
BitDenotation
,
BottomValue
,
GenKillSet
};
use
crate
::
borrow_check
::
nll
::
region_infer
::
RegionInferenceContext
;
use
crate
::
borrow_check
::
nll
::
ToRegionVid
;
use
crate
::
borrow_check
::
places_conflict
;
use
crate
::
borrow_check
::{
borrow_set
::{
BorrowSet
,
BorrowData
},
place_ext
::
PlaceExt
,
region_infer
::
RegionInferenceContext
,
nll
::
ToRegionVid
,
places_conflict
,
};
use
std
::
rc
::
Rc
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录