Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
489ad8b8
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,发现更多精彩内容 >>
提交
489ad8b8
编写于
6月 08, 2021
作者:
B
bjorn3
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Revert "Revert "Merge CrateDisambiguator into StableCrateId""
This reverts commit
8176ab8b
.
上级
9a27044f
变更
28
显示空白变更内容
内联
并排
Showing
28 changed file
with
116 addition
and
193 deletion
+116
-193
compiler/rustc_hir/src/definitions.rs
compiler/rustc_hir/src/definitions.rs
+1
-3
compiler/rustc_incremental/src/persist/fs.rs
compiler/rustc_incremental/src/persist/fs.rs
+6
-13
compiler/rustc_interface/src/passes.rs
compiler/rustc_interface/src/passes.rs
+8
-4
compiler/rustc_interface/src/util.rs
compiler/rustc_interface/src/util.rs
+0
-36
compiler/rustc_metadata/src/creader.rs
compiler/rustc_metadata/src/creader.rs
+7
-12
compiler/rustc_metadata/src/locator.rs
compiler/rustc_metadata/src/locator.rs
+4
-4
compiler/rustc_metadata/src/rmeta/decoder.rs
compiler/rustc_metadata/src/rmeta/decoder.rs
+2
-6
compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs
compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs
+3
-4
compiler/rustc_metadata/src/rmeta/encoder.rs
compiler/rustc_metadata/src/rmeta/encoder.rs
+0
-1
compiler/rustc_metadata/src/rmeta/mod.rs
compiler/rustc_metadata/src/rmeta/mod.rs
+0
-2
compiler/rustc_middle/src/hir/map/mod.rs
compiler/rustc_middle/src/hir/map/mod.rs
+6
-6
compiler/rustc_middle/src/middle/cstore.rs
compiler/rustc_middle/src/middle/cstore.rs
+2
-2
compiler/rustc_middle/src/middle/exported_symbols.rs
compiler/rustc_middle/src/middle/exported_symbols.rs
+2
-2
compiler/rustc_middle/src/mir/mono.rs
compiler/rustc_middle/src/mir/mono.rs
+8
-5
compiler/rustc_middle/src/query/mod.rs
compiler/rustc_middle/src/query/mod.rs
+0
-4
compiler/rustc_middle/src/ty/context.rs
compiler/rustc_middle/src/ty/context.rs
+6
-6
compiler/rustc_middle/src/ty/query/mod.rs
compiler/rustc_middle/src/ty/query/mod.rs
+0
-1
compiler/rustc_resolve/src/lib.rs
compiler/rustc_resolve/src/lib.rs
+1
-1
compiler/rustc_save_analysis/src/dump_visitor.rs
compiler/rustc_save_analysis/src/dump_visitor.rs
+1
-6
compiler/rustc_save_analysis/src/lib.rs
compiler/rustc_save_analysis/src/lib.rs
+4
-1
compiler/rustc_session/src/session.rs
compiler/rustc_session/src/session.rs
+13
-13
compiler/rustc_span/src/crate_disambiguator.rs
compiler/rustc_span/src/crate_disambiguator.rs
+0
-35
compiler/rustc_span/src/def_id.rs
compiler/rustc_span/src/def_id.rs
+32
-8
compiler/rustc_span/src/lib.rs
compiler/rustc_span/src/lib.rs
+0
-2
compiler/rustc_symbol_mangling/src/legacy.rs
compiler/rustc_symbol_mangling/src/legacy.rs
+3
-2
compiler/rustc_symbol_mangling/src/lib.rs
compiler/rustc_symbol_mangling/src/lib.rs
+4
-4
compiler/rustc_symbol_mangling/src/v0.rs
compiler/rustc_symbol_mangling/src/v0.rs
+2
-2
compiler/rustc_ty_utils/src/ty.rs
compiler/rustc_ty_utils/src/ty.rs
+1
-8
未找到文件。
compiler/rustc_hir/src/definitions.rs
浏览文件 @
489ad8b8
...
...
@@ -14,7 +14,6 @@
use
rustc_data_structures
::
stable_hasher
::
StableHasher
;
use
rustc_data_structures
::
unhash
::
UnhashMap
;
use
rustc_index
::
vec
::
IndexVec
;
use
rustc_span
::
crate_disambiguator
::
CrateDisambiguator
;
use
rustc_span
::
hygiene
::
ExpnId
;
use
rustc_span
::
symbol
::{
kw
,
sym
,
Symbol
};
...
...
@@ -330,7 +329,7 @@ pub fn opt_hir_id_to_local_def_id(&self, hir_id: hir::HirId) -> Option<LocalDefI
}
/// Adds a root definition (no parent) and a few other reserved definitions.
pub
fn
new
(
crate_name
:
&
str
,
crate_disambiguator
:
CrateDisambiguator
)
->
Definitions
{
pub
fn
new
(
stable_crate_id
:
StableCrateId
)
->
Definitions
{
let
key
=
DefKey
{
parent
:
None
,
disambiguated_data
:
DisambiguatedDefPathData
{
...
...
@@ -339,7 +338,6 @@ pub fn new(crate_name: &str, crate_disambiguator: CrateDisambiguator) -> Definit
},
};
let
stable_crate_id
=
StableCrateId
::
new
(
crate_name
,
crate_disambiguator
);
let
parent_hash
=
DefPathHash
::
new
(
stable_crate_id
,
0
);
let
def_path_hash
=
key
.compute_stable_hash
(
parent_hash
);
...
...
compiler/rustc_incremental/src/persist/fs.rs
浏览文件 @
489ad8b8
...
...
@@ -108,7 +108,7 @@
use
rustc_data_structures
::{
base_n
,
flock
};
use
rustc_errors
::
ErrorReported
;
use
rustc_fs_util
::{
link_or_copy
,
LinkOrCopy
};
use
rustc_session
::{
CrateDisambiguator
,
Session
};
use
rustc_session
::{
Session
,
StableCrateId
};
use
std
::
fs
as
std_fs
;
use
std
::
io
;
...
...
@@ -189,7 +189,7 @@ pub fn in_incr_comp_dir(incr_comp_session_dir: &Path, file_name: &str) -> PathBu
pub
fn
prepare_session_directory
(
sess
:
&
Session
,
crate_name
:
&
str
,
crate_disambiguator
:
CrateDisambiguator
,
stable_crate_id
:
StableCrateId
,
)
->
Result
<
(),
ErrorReported
>
{
if
sess
.opts.incremental
.is_none
()
{
return
Ok
(());
...
...
@@ -200,7 +200,7 @@ pub fn prepare_session_directory(
debug!
(
"prepare_session_directory"
);
// {incr-comp-dir}/{crate-name-and-disambiguator}
let
crate_dir
=
crate_path
(
sess
,
crate_name
,
crate_disambiguator
);
let
crate_dir
=
crate_path
(
sess
,
crate_name
,
stable_crate_id
);
debug!
(
"crate-dir: {}"
,
crate_dir
.display
());
create_dir
(
sess
,
&
crate_dir
,
"crate"
)
?
;
...
...
@@ -648,19 +648,12 @@ fn string_to_timestamp(s: &str) -> Result<SystemTime, ()> {
Ok
(
UNIX_EPOCH
+
duration
)
}
fn
crate_path
(
sess
:
&
Session
,
crate_name
:
&
str
,
crate_disambiguator
:
CrateDisambiguator
,
)
->
PathBuf
{
fn
crate_path
(
sess
:
&
Session
,
crate_name
:
&
str
,
stable_crate_id
:
StableCrateId
)
->
PathBuf
{
let
incr_dir
=
sess
.opts.incremental
.as_ref
()
.unwrap
()
.clone
();
// The full crate disambiguator is really long. 64 bits of it should be
// sufficient.
let
crate_disambiguator
=
crate_disambiguator
.to_fingerprint
()
.to_smaller_hash
();
let
crate_disambiguator
=
base_n
::
encode
(
crate_disambiguator
as
u128
,
INT_ENCODE_BASE
);
let
stable_crate_id
=
base_n
::
encode
(
stable_crate_id
.to_u64
()
as
u128
,
INT_ENCODE_BASE
);
let
crate_name
=
format!
(
"{}-{}"
,
crate_name
,
crate_disambiguator
);
let
crate_name
=
format!
(
"{}-{}"
,
crate_name
,
stable_crate_id
);
incr_dir
.join
(
crate_name
)
}
...
...
compiler/rustc_interface/src/passes.rs
浏览文件 @
489ad8b8
...
...
@@ -11,7 +11,7 @@
use
rustc_data_structures
::
temp_dir
::
MaybeTempDir
;
use
rustc_errors
::{
ErrorReported
,
PResult
};
use
rustc_expand
::
base
::
ExtCtxt
;
use
rustc_hir
::
def_id
::
LOCAL_CRATE
;
use
rustc_hir
::
def_id
::
{
StableCrateId
,
LOCAL_CRATE
}
;
use
rustc_hir
::
Crate
;
use
rustc_lint
::
LintStore
;
use
rustc_metadata
::
creader
::
CStore
;
...
...
@@ -195,9 +195,13 @@ pub fn register_plugins<'a>(
let
crate_types
=
util
::
collect_crate_types
(
sess
,
&
krate
.attrs
);
sess
.init_crate_types
(
crate_types
);
let
disambiguator
=
util
::
compute_crate_disambiguator
(
sess
);
sess
.crate_disambiguator
.set
(
disambiguator
)
.expect
(
"not yet initialized"
);
rustc_incremental
::
prepare_session_directory
(
sess
,
&
crate_name
,
disambiguator
)
?
;
let
stable_crate_id
=
StableCrateId
::
new
(
crate_name
,
sess
.crate_types
()
.contains
(
&
CrateType
::
Executable
),
sess
.opts.cg.metadata
.clone
(),
);
sess
.stable_crate_id
.set
(
stable_crate_id
)
.expect
(
"not yet initialized"
);
rustc_incremental
::
prepare_session_directory
(
sess
,
&
crate_name
,
stable_crate_id
)
?
;
if
sess
.opts.incremental
.is_some
()
{
sess
.time
(
"incr_comp_garbage_collect_session_directories"
,
||
{
...
...
compiler/rustc_interface/src/util.rs
浏览文件 @
489ad8b8
...
...
@@ -2,11 +2,9 @@
use
rustc_ast
::
ptr
::
P
;
use
rustc_ast
::{
self
as
ast
,
AttrVec
,
BlockCheckMode
};
use
rustc_codegen_ssa
::
traits
::
CodegenBackend
;
use
rustc_data_structures
::
fingerprint
::
Fingerprint
;
use
rustc_data_structures
::
fx
::{
FxHashMap
,
FxHashSet
};
#[cfg(parallel_compiler)]
use
rustc_data_structures
::
jobserver
;
use
rustc_data_structures
::
stable_hasher
::
StableHasher
;
use
rustc_data_structures
::
sync
::
Lrc
;
use
rustc_errors
::
registry
::
Registry
;
use
rustc_metadata
::
dynamic_lib
::
DynamicLibrary
;
...
...
@@ -18,7 +16,6 @@
use
rustc_session
::
config
::{
ErrorOutputType
,
Input
,
OutputFilenames
};
use
rustc_session
::
lint
::{
self
,
BuiltinLintDiagnostics
,
LintBuffer
};
use
rustc_session
::
parse
::
CrateConfig
;
use
rustc_session
::
CrateDisambiguator
;
use
rustc_session
::{
early_error
,
filesearch
,
output
,
DiagnosticOutput
,
Session
};
use
rustc_span
::
edition
::
Edition
;
use
rustc_span
::
lev_distance
::
find_best_match_for_name
;
...
...
@@ -487,39 +484,6 @@ pub fn get_codegen_sysroot(
}
}
pub
(
crate
)
fn
compute_crate_disambiguator
(
session
:
&
Session
)
->
CrateDisambiguator
{
use
std
::
hash
::
Hasher
;
// The crate_disambiguator is a 128 bit hash. The disambiguator is fed
// into various other hashes quite a bit (symbol hashes, incr. comp. hashes,
// debuginfo type IDs, etc), so we don't want it to be too wide. 128 bits
// should still be safe enough to avoid collisions in practice.
let
mut
hasher
=
StableHasher
::
new
();
let
mut
metadata
=
session
.opts.cg.metadata
.clone
();
// We don't want the crate_disambiguator to dependent on the order
// -C metadata arguments, so sort them:
metadata
.sort
();
// Every distinct -C metadata value is only incorporated once:
metadata
.dedup
();
hasher
.write
(
b
"metadata"
);
for
s
in
&
metadata
{
// Also incorporate the length of a metadata string, so that we generate
// different values for `-Cmetadata=ab -Cmetadata=c` and
// `-Cmetadata=a -Cmetadata=bc`
hasher
.write_usize
(
s
.len
());
hasher
.write
(
s
.as_bytes
());
}
// Also incorporate crate type, so that we don't get symbol conflicts when
// linking against a library of the same name, if this is an executable.
let
is_exe
=
session
.crate_types
()
.contains
(
&
CrateType
::
Executable
);
hasher
.write
(
if
is_exe
{
b
"exe"
}
else
{
b
"lib"
});
CrateDisambiguator
::
from
(
hasher
.finish
::
<
Fingerprint
>
())
}
pub
(
crate
)
fn
check_attr_crate_type
(
sess
:
&
Session
,
attrs
:
&
[
ast
::
Attribute
],
...
...
compiler/rustc_metadata/src/creader.rs
浏览文件 @
489ad8b8
...
...
@@ -21,7 +21,7 @@
use
rustc_session
::
lint
::{
self
,
BuiltinLintDiagnostics
,
ExternDepSpec
};
use
rustc_session
::
output
::
validate_crate_name
;
use
rustc_session
::
search_paths
::
PathKind
;
use
rustc_session
::
{
CrateDisambiguator
,
Session
}
;
use
rustc_session
::
Session
;
use
rustc_span
::
edition
::
Edition
;
use
rustc_span
::
symbol
::{
sym
,
Symbol
};
use
rustc_span
::{
Span
,
DUMMY_SP
};
...
...
@@ -222,10 +222,8 @@ pub fn new(
metadata_loader
:
Box
<
MetadataLoaderDyn
>
,
local_crate_name
:
&
str
,
)
->
Self
{
let
local_crate_stable_id
=
StableCrateId
::
new
(
local_crate_name
,
sess
.local_crate_disambiguator
());
let
mut
stable_crate_ids
=
FxHashMap
::
default
();
stable_crate_ids
.insert
(
local_crate_stable_id
,
LOCAL_CRATE
);
stable_crate_ids
.insert
(
sess
.local_stable_crate_id
()
,
LOCAL_CRATE
);
CrateLoader
{
sess
,
...
...
@@ -327,17 +325,14 @@ fn existing_match(&self, name: Symbol, hash: Option<Svh>, kind: PathKind) -> Opt
fn
verify_no_symbol_conflicts
(
&
self
,
root
:
&
CrateRoot
<
'_
>
)
->
Result
<
(),
CrateError
>
{
// Check for (potential) conflicts with the local crate
if
self
.local_crate_name
==
root
.name
()
&&
self
.sess
.local_crate_disambiguator
()
==
root
.disambiguator
()
{
if
self
.sess
.local_stable_crate_id
()
==
root
.stable_crate_id
()
{
return
Err
(
CrateError
::
SymbolConflictsCurrent
(
root
.name
()));
}
// Check for conflicts with any crate loaded so far
let
mut
res
=
Ok
(());
self
.cstore
.iter_crate_data
(|
_
,
other
|
{
if
other
.name
()
==
root
.name
()
&&
// same crate-name
other
.disambiguator
()
==
root
.disambiguator
()
&&
// same crate-disambiguator
if
other
.stable_crate_id
()
==
root
.stable_crate_id
()
&&
// same stable crate id
other
.hash
()
!=
root
.hash
()
{
// but different SVH
...
...
@@ -411,7 +406,7 @@ fn register_crate(
None
=>
(
&
source
,
&
crate_root
),
};
let
dlsym_dylib
=
dlsym_source
.dylib
.as_ref
()
.expect
(
"no dylib for a proc-macro crate"
);
Some
(
self
.dlsym_proc_macros
(
&
dlsym_dylib
.0
,
dlsym_root
.
disambiguator
())
?
)
Some
(
self
.dlsym_proc_macros
(
&
dlsym_dylib
.0
,
dlsym_root
.
stable_crate_id
())
?
)
}
else
{
None
};
...
...
@@ -664,7 +659,7 @@ fn resolve_crate_deps(
fn
dlsym_proc_macros
(
&
self
,
path
:
&
Path
,
disambiguator
:
CrateDisambiguator
,
stable_crate_id
:
StableCrateId
,
)
->
Result
<&
'static
[
ProcMacro
],
CrateError
>
{
// Make sure the path contains a / or the linker will search for it.
let
path
=
env
::
current_dir
()
.unwrap
()
.join
(
path
);
...
...
@@ -673,7 +668,7 @@ fn dlsym_proc_macros(
Err
(
s
)
=>
return
Err
(
CrateError
::
DlOpen
(
s
)),
};
let
sym
=
self
.sess
.generate_proc_macro_decls_symbol
(
disambiguator
);
let
sym
=
self
.sess
.generate_proc_macro_decls_symbol
(
stable_crate_id
);
let
decls
=
unsafe
{
let
sym
=
match
lib
.symbol
(
&
sym
)
{
Ok
(
f
)
=>
f
,
...
...
compiler/rustc_metadata/src/locator.rs
浏览文件 @
489ad8b8
...
...
@@ -226,7 +226,7 @@
use
rustc_session
::
filesearch
::{
FileDoesntMatch
,
FileMatches
,
FileSearch
};
use
rustc_session
::
search_paths
::
PathKind
;
use
rustc_session
::
utils
::
CanonicalizedPath
;
use
rustc_session
::{
CrateDisambiguator
,
Session
};
use
rustc_session
::{
Session
,
StableCrateId
};
use
rustc_span
::
symbol
::{
sym
,
Symbol
};
use
rustc_span
::
Span
;
use
rustc_target
::
spec
::{
Target
,
TargetTriple
};
...
...
@@ -787,7 +787,7 @@ pub fn find_plugin_registrar(
metadata_loader
:
&
dyn
MetadataLoader
,
span
:
Span
,
name
:
Symbol
,
)
->
(
PathBuf
,
CrateDisambiguator
)
{
)
->
(
PathBuf
,
StableCrateId
)
{
match
find_plugin_registrar_impl
(
sess
,
metadata_loader
,
name
)
{
Ok
(
res
)
=>
res
,
// `core` is always available if we got as far as loading plugins.
...
...
@@ -799,7 +799,7 @@ fn find_plugin_registrar_impl<'a>(
sess
:
&
'a
Session
,
metadata_loader
:
&
dyn
MetadataLoader
,
name
:
Symbol
,
)
->
Result
<
(
PathBuf
,
CrateDisambiguator
),
CrateError
>
{
)
->
Result
<
(
PathBuf
,
StableCrateId
),
CrateError
>
{
info!
(
"find plugin registrar `{}`"
,
name
);
let
mut
locator
=
CrateLocator
::
new
(
sess
,
...
...
@@ -816,7 +816,7 @@ fn find_plugin_registrar_impl<'a>(
match
locator
.maybe_load_library_crate
()
?
{
Some
(
library
)
=>
match
library
.source.dylib
{
Some
(
dylib
)
=>
Ok
((
dylib
.0
,
library
.metadata
.get_root
()
.
disambiguator
())),
Some
(
dylib
)
=>
Ok
((
dylib
.0
,
library
.metadata
.get_root
()
.
stable_crate_id
())),
None
=>
Err
(
CrateError
::
NonDylibPlugin
(
name
)),
},
None
=>
Err
(
locator
.into_error
()),
...
...
compiler/rustc_metadata/src/rmeta/decoder.rs
浏览文件 @
489ad8b8
...
...
@@ -633,10 +633,6 @@ impl CrateRoot<'_> {
self
.name
}
crate
fn
disambiguator
(
&
self
)
->
CrateDisambiguator
{
self
.disambiguator
}
crate
fn
hash
(
&
self
)
->
Svh
{
self
.hash
}
...
...
@@ -1940,8 +1936,8 @@ impl CrateMetadata {
self
.root.name
}
crate
fn
disambiguator
(
&
self
)
->
CrateDisambiguator
{
self
.root.
disambiguator
crate
fn
stable_crate_id
(
&
self
)
->
StableCrateId
{
self
.root.
stable_crate_id
}
crate
fn
hash
(
&
self
)
->
Svh
{
...
...
compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs
浏览文件 @
489ad8b8
...
...
@@ -18,7 +18,7 @@
use
rustc_middle
::
ty
::
query
::
Providers
;
use
rustc_middle
::
ty
::{
self
,
TyCtxt
,
Visibility
};
use
rustc_session
::
utils
::
NativeLibKind
;
use
rustc_session
::{
CrateDisambiguator
,
Session
};
use
rustc_session
::{
Session
,
StableCrateId
};
use
rustc_span
::
source_map
::{
Span
,
Spanned
};
use
rustc_span
::
symbol
::
Symbol
;
...
...
@@ -185,7 +185,6 @@ fn into_args(self) -> (DefId, DefId) {
}
native_libraries
=>
{
Lrc
::
new
(
cdata
.get_native_libraries
(
tcx
.sess
))
}
foreign_modules
=>
{
cdata
.get_foreign_modules
(
tcx
)
}
crate_disambiguator
=>
{
cdata
.root.disambiguator
}
crate_hash
=>
{
cdata
.root.hash
}
crate_host_hash
=>
{
cdata
.host_hash
}
crate_name
=>
{
cdata
.root.name
}
...
...
@@ -489,8 +488,8 @@ fn crate_name_untracked(&self, cnum: CrateNum) -> Symbol {
self
.get_crate_data
(
cnum
)
.root.name
}
fn
crate_disambiguator_untracked
(
&
self
,
cnum
:
CrateNum
)
->
CrateDisambiguator
{
self
.get_crate_data
(
cnum
)
.root.
disambiguator
fn
stable_crate_id_untracked
(
&
self
,
cnum
:
CrateNum
)
->
StableCrateId
{
self
.get_crate_data
(
cnum
)
.root.
stable_crate_id
}
fn
crate_hash_untracked
(
&
self
,
cnum
:
CrateNum
)
->
Svh
{
...
...
compiler/rustc_metadata/src/rmeta/encoder.rs
浏览文件 @
489ad8b8
...
...
@@ -671,7 +671,6 @@ fn encode_crate_root(&mut self) -> Lazy<CrateRoot<'tcx>> {
extra_filename
:
tcx
.sess.opts.cg.extra_filename
.clone
(),
triple
:
tcx
.sess.opts.target_triple
.clone
(),
hash
:
tcx
.crate_hash
(
LOCAL_CRATE
),
disambiguator
:
tcx
.sess
.local_crate_disambiguator
(),
stable_crate_id
:
tcx
.def_path_hash
(
LOCAL_CRATE
.as_def_id
())
.stable_crate_id
(),
panic_strategy
:
tcx
.sess
.panic_strategy
(),
edition
:
tcx
.sess
.edition
(),
...
...
compiler/rustc_metadata/src/rmeta/mod.rs
浏览文件 @
489ad8b8
...
...
@@ -18,7 +18,6 @@
use
rustc_middle
::
ty
::{
self
,
ReprOptions
,
Ty
};
use
rustc_serialize
::
opaque
::
Encoder
;
use
rustc_session
::
config
::
SymbolManglingVersion
;
use
rustc_session
::
CrateDisambiguator
;
use
rustc_span
::
edition
::
Edition
;
use
rustc_span
::
hygiene
::
MacroKind
;
use
rustc_span
::
symbol
::{
Ident
,
Symbol
};
...
...
@@ -202,7 +201,6 @@ enum LazyState {
triple
:
TargetTriple
,
extra_filename
:
String
,
hash
:
Svh
,
disambiguator
:
CrateDisambiguator
,
stable_crate_id
:
StableCrateId
,
panic_strategy
:
PanicStrategy
,
edition
:
Edition
,
...
...
compiler/rustc_middle/src/hir/map/mod.rs
浏览文件 @
489ad8b8
...
...
@@ -15,6 +15,7 @@
use
rustc_hir
::
itemlikevisit
::
ItemLikeVisitor
;
use
rustc_hir
::
*
;
use
rustc_index
::
vec
::
Idx
;
use
rustc_span
::
def_id
::
StableCrateId
;
use
rustc_span
::
hygiene
::
MacroKind
;
use
rustc_span
::
source_map
::
Spanned
;
use
rustc_span
::
symbol
::{
kw
,
Ident
,
Symbol
};
...
...
@@ -990,25 +991,24 @@ pub(super) fn crate_hash(tcx: TyCtxt<'_>, crate_num: CrateNum) -> Svh {
upstream_crates
.hash_stable
(
&
mut
hcx
,
&
mut
stable_hasher
);
source_file_names
.hash_stable
(
&
mut
hcx
,
&
mut
stable_hasher
);
tcx
.sess.opts
.dep_tracking_hash
(
true
)
.hash_stable
(
&
mut
hcx
,
&
mut
stable_hasher
);
tcx
.sess
.local_
crate_disambiguator
()
.to_fingerprint
()
.hash_stable
(
&
mut
hcx
,
&
mut
stable_hasher
);
tcx
.sess
.local_
stable_crate_id
()
.hash_stable
(
&
mut
hcx
,
&
mut
stable_hasher
);
tcx
.untracked_crate.non_exported_macro_attrs
.hash_stable
(
&
mut
hcx
,
&
mut
stable_hasher
);
let
crate_hash
:
Fingerprint
=
stable_hasher
.finish
();
Svh
::
new
(
crate_hash
.to_smaller_hash
())
}
fn
upstream_crates
(
cstore
:
&
dyn
CrateStore
)
->
Vec
<
(
S
ymbol
,
Fingerprint
,
Svh
)
>
{
fn
upstream_crates
(
cstore
:
&
dyn
CrateStore
)
->
Vec
<
(
S
tableCrateId
,
Svh
)
>
{
let
mut
upstream_crates
:
Vec
<
_
>
=
cstore
.crates_untracked
()
.iter
()
.map
(|
&
cnum
|
{
let
name
=
cstore
.crate_name_untracked
(
cnum
);
let
disambiguator
=
cstore
.crate_disambiguator_untracked
(
cnum
)
.to_fingerprint
();
let
stable_crate_id
=
cstore
.stable_crate_id_untracked
(
cnum
);
let
hash
=
cstore
.crate_hash_untracked
(
cnum
);
(
name
,
disambiguator
,
hash
)
(
stable_crate_id
,
hash
)
})
.collect
();
upstream_crates
.sort_unstable_by_key
(|
&
(
name
,
dis
,
_
)|
(
name
.as_str
(),
dis
)
);
upstream_crates
.sort_unstable_by_key
(|
&
(
stable_crate_id
,
_
)|
stable_crate_id
);
upstream_crates
}
...
...
compiler/rustc_middle/src/middle/cstore.rs
浏览文件 @
489ad8b8
...
...
@@ -13,7 +13,7 @@
use
rustc_macros
::
HashStable
;
use
rustc_session
::
search_paths
::
PathKind
;
use
rustc_session
::
utils
::
NativeLibKind
;
use
rustc_session
::
CrateDisambiguator
;
use
rustc_session
::
StableCrateId
;
use
rustc_span
::
symbol
::
Symbol
;
use
rustc_span
::
Span
;
use
rustc_target
::
spec
::
Target
;
...
...
@@ -185,7 +185,7 @@ fn def_path_hash_to_def_id(
// "queries" used in resolve that aren't tracked for incremental compilation
fn
crate_name_untracked
(
&
self
,
cnum
:
CrateNum
)
->
Symbol
;
fn
crate_disambiguator_untracked
(
&
self
,
cnum
:
CrateNum
)
->
CrateDisambiguator
;
fn
stable_crate_id_untracked
(
&
self
,
cnum
:
CrateNum
)
->
StableCrateId
;
fn
crate_hash_untracked
(
&
self
,
cnum
:
CrateNum
)
->
Svh
;
// This is basically a 1-based range of ints, which is a little
...
...
compiler/rustc_middle/src/middle/exported_symbols.rs
浏览文件 @
489ad8b8
...
...
@@ -48,8 +48,8 @@ pub fn symbol_name_for_local_instance(&self, tcx: TyCtxt<'tcx>) -> ty::SymbolNam
pub
fn
metadata_symbol_name
(
tcx
:
TyCtxt
<
'_
>
)
->
String
{
format!
(
"rust_metadata_{}_{}"
,
"rust_metadata_{}_{
:08x
}"
,
tcx
.crate_name
(
LOCAL_CRATE
),
tcx
.
crate_disambiguator
(
LOCAL_CRATE
)
.to_fingerprint
()
.to_hex
()
tcx
.
sess
.local_stable_crate_id
()
.to_u64
(),
)
}
compiler/rustc_middle/src/mir/mono.rs
浏览文件 @
489ad8b8
...
...
@@ -490,15 +490,18 @@ pub fn build_cgu_name_no_mangle<I, C, S>(
// local crate's ID. Otherwise there can be collisions between CGUs
// instantiating stuff for upstream crates.
let
local_crate_id
=
if
cnum
!=
LOCAL_CRATE
{
let
local_crate_disambiguator
=
format!
(
"{}"
,
tcx
.crate_disambiguator
(
LOCAL_CRATE
));
format!
(
"-in-{}.{}"
,
tcx
.crate_name
(
LOCAL_CRATE
),
&
local_crate_disambiguator
[
0
..
8
])
let
local_stable_crate_id
=
tcx
.sess
.local_stable_crate_id
();
format!
(
"-in-{}.{:08x}"
,
tcx
.crate_name
(
LOCAL_CRATE
),
local_stable_crate_id
.to_u64
()
)
}
else
{
String
::
new
()
};
let
crate_disambiguator
=
tcx
.crate_disambiguator
(
cnum
)
.to_string
();
// Using a shortened disambiguator of about 40 bits
format!
(
"{}.{}{}"
,
tcx
.crate_name
(
cnum
),
&
crate_disambiguator
[
0
..
8
],
local_crate_id
)
let
stable_crate_id
=
tcx
.sess
.local_stable_crate_id
();
format!
(
"{}.{:08x}{}"
,
tcx
.crate_name
(
cnum
),
stable_crate_id
.to_u64
(),
local_crate_id
)
});
write!
(
cgu_name
,
"{}"
,
crate_prefix
)
.unwrap
();
...
...
compiler/rustc_middle/src/query/mod.rs
浏览文件 @
489ad8b8
...
...
@@ -1233,10 +1233,6 @@
query
proc_macro_decls_static
(
_
:
())
->
Option
<
LocalDefId
>
{
desc
{
"looking up the derive registrar for a crate"
}
}
query
crate_disambiguator
(
_
:
CrateNum
)
->
CrateDisambiguator
{
eval_always
desc
{
"looking up the disambiguator a crate"
}
}
// The macro which defines `rustc_metadata::provide_extern` depends on this query's name.
// Changing the name should cause a compiler error, but in case that changes, be aware.
query
crate_hash
(
_
:
CrateNum
)
->
Svh
{
...
...
compiler/rustc_middle/src/ty/context.rs
浏览文件 @
489ad8b8
...
...
@@ -1305,24 +1305,24 @@ pub fn stable_crate_id(self, cnum: CrateNum) -> StableCrateId {
pub
fn
def_path_debug_str
(
self
,
def_id
:
DefId
)
->
String
{
// We are explicitly not going through queries here in order to get
// crate name and
disambiguator
since this code is called from debug!()
// crate name and
stable crate id
since this code is called from debug!()
// statements within the query system and we'd run into endless
// recursion otherwise.
let
(
crate_name
,
crate_disambiguator
)
=
if
def_id
.is_local
()
{
(
self
.crate_name
,
self
.sess
.local_
crate_disambiguator
())
let
(
crate_name
,
stable_crate_id
)
=
if
def_id
.is_local
()
{
(
self
.crate_name
,
self
.sess
.local_
stable_crate_id
())
}
else
{
(
self
.cstore
.crate_name_untracked
(
def_id
.krate
),
self
.
cstore
.crate_disambiguator_untracked
(
def_id
.krate
),
self
.
def_path_hash
(
def_id
.krate
.as_def_id
())
.stable_crate_id
(
),
)
};
format!
(
"{}[{}]{}"
,
crate_name
,
// Don't print the whole
crate disambiguator
. That's just
// Don't print the whole
stable crate id
. That's just
// annoying in debug output.
&
(
crate_disambiguator
.to_fingerprint
()
.to_hex
(
))[
..
4
],
&
(
format!
(
"{:08x}"
,
stable_crate_id
.to_u64
()
))[
..
4
],
self
.def_path
(
def_id
)
.to_string_no_crate_verbose
()
)
}
...
...
compiler/rustc_middle/src/ty/query/mod.rs
浏览文件 @
489ad8b8
...
...
@@ -48,7 +48,6 @@
use
rustc_serialize
::
opaque
;
use
rustc_session
::
config
::{
EntryFnType
,
OptLevel
,
OutputFilenames
,
SymbolManglingVersion
};
use
rustc_session
::
utils
::
NativeLibKind
;
use
rustc_session
::
CrateDisambiguator
;
use
rustc_session
::
Limits
;
use
rustc_target
::
spec
::
PanicStrategy
;
...
...
compiler/rustc_resolve/src/lib.rs
浏览文件 @
489ad8b8
...
...
@@ -1221,7 +1221,7 @@ pub fn new(
let
mut
module_map
=
FxHashMap
::
default
();
module_map
.insert
(
root_local_def_id
,
graph_root
);
let
definitions
=
Definitions
::
new
(
crate_name
,
session
.local_crate_disambiguator
());
let
definitions
=
Definitions
::
new
(
session
.local_stable_crate_id
());
let
root
=
definitions
.get_root_def
();
let
mut
visibilities
=
FxHashMap
::
default
();
...
...
compiler/rustc_save_analysis/src/dump_visitor.rs
浏览文件 @
489ad8b8
...
...
@@ -142,12 +142,7 @@ pub fn dump_crate_info(&mut self, name: &str, krate: &hir::Crate<'_>) {
let
data
=
CratePreludeData
{
crate_id
:
GlobalCrateId
{
name
:
name
.into
(),
disambiguator
:
self
.tcx
.sess
.local_crate_disambiguator
()
.to_fingerprint
()
.as_value
(),
disambiguator
:
(
self
.tcx.sess
.local_stable_crate_id
()
.to_u64
(),
0
),
},
crate_root
:
crate_root
.unwrap_or_else
(||
"<no source>"
.to_owned
()),
external_crates
:
self
.save_ctxt
.get_external_crates
(),
...
...
compiler/rustc_save_analysis/src/lib.rs
浏览文件 @
489ad8b8
...
...
@@ -127,7 +127,10 @@ pub fn get_external_crates(&self) -> Vec<ExternalCrateData> {
num
:
n
.as_u32
(),
id
:
GlobalCrateId
{
name
:
self
.tcx
.crate_name
(
n
)
.to_string
(),
disambiguator
:
self
.tcx
.crate_disambiguator
(
n
)
.to_fingerprint
()
.as_value
(),
disambiguator
:
(
self
.tcx
.def_path_hash
(
n
.as_def_id
())
.stable_crate_id
()
.to_u64
(),
0
,
),
},
});
}
...
...
compiler/rustc_session/src/session.rs
浏览文件 @
489ad8b8
...
...
@@ -23,7 +23,7 @@
use
rustc_errors
::{
Diagnostic
,
DiagnosticBuilder
,
DiagnosticId
,
ErrorReported
};
use
rustc_lint_defs
::
FutureBreakage
;
use
rustc_macros
::
HashStable_Generic
;
pub
use
rustc_span
::
crate_disambiguator
::
CrateDisambiguator
;
pub
use
rustc_span
::
def_id
::
StableCrateId
;
use
rustc_span
::
source_map
::{
FileLoader
,
MultiSpan
,
RealFileLoader
,
SourceMap
,
Span
};
use
rustc_span
::{
edition
::
Edition
,
RealFileName
};
use
rustc_span
::{
sym
,
SourceFileHashAlgorithm
,
Symbol
};
...
...
@@ -148,12 +148,12 @@ pub struct Session {
/// in order to avoid redundantly verbose output (Issue #24690, #44953).
pub
one_time_diagnostics
:
Lock
<
FxHashSet
<
(
DiagnosticMessageId
,
Option
<
Span
>
,
String
)
>>
,
crate_types
:
OnceCell
<
Vec
<
CrateType
>>
,
/// The `
crate_disambiguator` is constructed out of all the `-C metadata`
///
arguments passed to the compiler. Its value together with the crate-nam
e
///
forms a unique global identifier for the crate. It is used to allow
///
multiple crates
with the same name to coexist. See the
/// The `
stable_crate_id` is constructed out of the crate name and all the
///
`-C metadata` arguments passed to the compiler. Its value forms a uniqu
e
///
global identifier for the crate. It is used to allow multiple crates
/// with the same name to coexist. See the
/// `rustc_codegen_llvm::back::symbol_names` module for more information.
pub
crate_disambiguator
:
OnceCell
<
CrateDisambiguator
>
,
pub
stable_crate_id
:
OnceCell
<
StableCrateId
>
,
features
:
OnceCell
<
rustc_feature
::
Features
>
,
...
...
@@ -336,8 +336,8 @@ fn emit_future_breakage(&self) {
self
.parse_sess.span_diagnostic
.emit_future_breakage_report
(
diags_and_breakage
);
}
pub
fn
local_
crate_disambiguator
(
&
self
)
->
CrateDisambiguator
{
self
.
crate_disambiguator
.get
()
.copied
()
.unwrap
()
pub
fn
local_
stable_crate_id
(
&
self
)
->
StableCrateId
{
self
.
stable_crate_id
.get
()
.copied
()
.unwrap
()
}
pub
fn
crate_types
(
&
self
)
->
&
[
CrateType
]
{
...
...
@@ -803,12 +803,12 @@ pub fn must_emit_unwind_tables(&self) -> bool {
/// Returns the symbol name for the registrar function,
/// given the crate `Svh` and the function `DefIndex`.
pub
fn
generate_plugin_registrar_symbol
(
&
self
,
disambiguator
:
CrateDisambiguator
)
->
String
{
format!
(
"__rustc_plugin_registrar_{
}__"
,
disambiguator
.to_fingerprint
()
.to_hex
())
pub
fn
generate_plugin_registrar_symbol
(
&
self
,
stable_crate_id
:
StableCrateId
)
->
String
{
format!
(
"__rustc_plugin_registrar_{
:08x}__"
,
stable_crate_id
.to_u64
())
}
pub
fn
generate_proc_macro_decls_symbol
(
&
self
,
disambiguator
:
CrateDisambiguator
)
->
String
{
format!
(
"__rustc_proc_macro_decls_{
}__"
,
disambiguator
.to_fingerprint
()
.to_hex
())
pub
fn
generate_proc_macro_decls_symbol
(
&
self
,
stable_crate_id
:
StableCrateId
)
->
String
{
format!
(
"__rustc_proc_macro_decls_{
:08x}__"
,
stable_crate_id
.to_u64
())
}
pub
fn
target_filesearch
(
&
self
,
kind
:
PathKind
)
->
filesearch
::
FileSearch
<
'_
>
{
...
...
@@ -1370,7 +1370,7 @@ pub fn build_session(
working_dir
,
one_time_diagnostics
:
Default
::
default
(),
crate_types
:
OnceCell
::
new
(),
crate_disambiguator
:
OnceCell
::
new
(),
stable_crate_id
:
OnceCell
::
new
(),
features
:
OnceCell
::
new
(),
lint_store
:
OnceCell
::
new
(),
incr_comp_session
:
OneThread
::
new
(
RefCell
::
new
(
IncrCompSession
::
NotInitialized
)),
...
...
compiler/rustc_span/src/crate_disambiguator.rs
已删除
100644 → 0
浏览文件 @
9a27044f
// This is here because `rustc_session` wants to refer to it,
// and so does `rustc_hir`, but `rustc_hir` shouldn't refer to `rustc_session`.
use
rustc_data_structures
::
fingerprint
::
Fingerprint
;
use
rustc_data_structures
::{
base_n
,
impl_stable_hash_via_hash
};
use
std
::
fmt
;
/// Hash value constructed out of all the `-C metadata` arguments passed to the
/// compiler. Together with the crate-name forms a unique global identifier for
/// the crate.
#[derive(Eq,
PartialEq,
Ord,
PartialOrd,
Hash,
Debug,
Clone,
Copy,
Encodable,
Decodable)]
pub
struct
CrateDisambiguator
(
Fingerprint
);
impl
CrateDisambiguator
{
pub
fn
to_fingerprint
(
self
)
->
Fingerprint
{
self
.0
}
}
impl
fmt
::
Display
for
CrateDisambiguator
{
fn
fmt
(
&
self
,
f
:
&
mut
fmt
::
Formatter
<
'_
>
)
->
Result
<
(),
fmt
::
Error
>
{
let
(
a
,
b
)
=
self
.0
.as_value
();
let
as_u128
=
a
as
u128
|
((
b
as
u128
)
<<
64
);
f
.write_str
(
&
base_n
::
encode
(
as_u128
,
base_n
::
CASE_INSENSITIVE
))
}
}
impl
From
<
Fingerprint
>
for
CrateDisambiguator
{
fn
from
(
fingerprint
:
Fingerprint
)
->
CrateDisambiguator
{
CrateDisambiguator
(
fingerprint
)
}
}
impl_stable_hash_via_hash!
(
CrateDisambiguator
);
compiler/rustc_span/src/def_id.rs
浏览文件 @
489ad8b8
use
crate
::
crate_disambiguator
::
CrateDisambiguator
;
use
crate
::
HashStableContext
;
use
rustc_data_structures
::
fingerprint
::
Fingerprint
;
use
rustc_data_structures
::
stable_hasher
::{
HashStable
,
StableHasher
,
ToStableHashKey
};
...
...
@@ -127,26 +126,51 @@ fn borrow(&self) -> &Fingerprint {
}
}
/// A [StableCrateId] is a 64 bit hash of
`(crate-name, crate-disambiguator)`. It
///
is to [CrateNum] what [DefPathHash] is to [DefId]. It is stable across
/// compilation sessions.
/// A [StableCrateId] is a 64 bit hash of
the crate name combined with all
///
`-Cmetadata` arguments. It is to [CrateNum] what [DefPathHash] is to
///
[DefId]. It is stable across
compilation sessions.
///
/// Since the ID is a hash value there is a (very small) chance that two crates
/// end up with the same [StableCrateId]. The compiler will check for such
/// collisions when loading crates and abort compilation in order to avoid
/// further trouble.
#[derive(Copy,
Clone,
Hash,
PartialEq,
Eq,
PartialOrd,
Ord,
Debug,
Encodable,
Decodable)]
#[derive(Copy,
Clone,
Hash,
PartialEq,
Eq,
PartialOrd,
Ord,
Debug)]
#[derive(HashStable_Generic,
Encodable,
Decodable)]
pub
struct
StableCrateId
(
u64
);
impl
StableCrateId
{
pub
fn
to_u64
(
self
)
->
u64
{
self
.0
}
/// Computes the stable ID for a crate with the given name and
///
disambiguator
.
pub
fn
new
(
crate_name
:
&
str
,
crate_disambiguator
:
CrateDisambiguator
)
->
StableCrateId
{
///
`-Cmetadata` arguments
.
pub
fn
new
(
crate_name
:
&
str
,
is_exe
:
bool
,
mut
metadata
:
Vec
<
String
>
)
->
StableCrateId
{
use
std
::
hash
::
Hash
;
use
std
::
hash
::
Hasher
;
let
mut
hasher
=
StableHasher
::
new
();
crate_name
.hash
(
&
mut
hasher
);
crate_disambiguator
.hash
(
&
mut
hasher
);
// We don't want the stable crate id to dependent on the order
// -C metadata arguments, so sort them:
metadata
.sort
();
// Every distinct -C metadata value is only incorporated once:
metadata
.dedup
();
hasher
.write
(
b
"metadata"
);
for
s
in
&
metadata
{
// Also incorporate the length of a metadata string, so that we generate
// different values for `-Cmetadata=ab -Cmetadata=c` and
// `-Cmetadata=a -Cmetadata=bc`
hasher
.write_usize
(
s
.len
());
hasher
.write
(
s
.as_bytes
());
}
// Also incorporate crate type, so that we don't get symbol conflicts when
// linking against a library of the same name, if this is an executable.
hasher
.write
(
if
is_exe
{
b
"exe"
}
else
{
b
"lib"
});
StableCrateId
(
hasher
.finish
())
}
}
...
...
compiler/rustc_span/src/lib.rs
浏览文件 @
489ad8b8
...
...
@@ -45,8 +45,6 @@
mod
span_encoding
;
pub
use
span_encoding
::{
Span
,
DUMMY_SP
};
pub
mod
crate_disambiguator
;
pub
mod
symbol
;
pub
use
symbol
::{
sym
,
Symbol
};
...
...
compiler/rustc_symbol_mangling/src/legacy.rs
浏览文件 @
489ad8b8
...
...
@@ -126,8 +126,9 @@ fn get_symbol_hash<'tcx>(
substs
.hash_stable
(
&
mut
hcx
,
&
mut
hasher
);
if
let
Some
(
instantiating_crate
)
=
instantiating_crate
{
tcx
.crate_name
(
instantiating_crate
)
.as_str
()
.hash_stable
(
&
mut
hcx
,
&
mut
hasher
);
tcx
.crate_disambiguator
(
instantiating_crate
)
.hash_stable
(
&
mut
hcx
,
&
mut
hasher
);
tcx
.def_path_hash
(
instantiating_crate
.as_def_id
())
.stable_crate_id
()
.hash_stable
(
&
mut
hcx
,
&
mut
hasher
);
}
// We want to avoid accidental collision between different types of instances.
...
...
compiler/rustc_symbol_mangling/src/lib.rs
浏览文件 @
489ad8b8
...
...
@@ -165,12 +165,12 @@ fn compute_symbol_name(
// FIXME(eddyb) Precompute a custom symbol name based on attributes.
let
is_foreign
=
if
let
Some
(
def_id
)
=
def_id
.as_local
()
{
if
tcx
.plugin_registrar_fn
(())
==
Some
(
def_id
)
{
let
disambiguator
=
tcx
.sess
.local_crate_disambiguator
();
return
tcx
.sess
.generate_plugin_registrar_symbol
(
disambiguator
);
let
stable_crate_id
=
tcx
.sess
.local_stable_crate_id
();
return
tcx
.sess
.generate_plugin_registrar_symbol
(
stable_crate_id
);
}
if
tcx
.proc_macro_decls_static
(())
==
Some
(
def_id
)
{
let
disambiguator
=
tcx
.sess
.local_crate_disambiguator
();
return
tcx
.sess
.generate_proc_macro_decls_symbol
(
disambiguator
);
let
stable_crate_id
=
tcx
.sess
.local_stable_crate_id
();
return
tcx
.sess
.generate_proc_macro_decls_symbol
(
stable_crate_id
);
}
let
hir_id
=
tcx
.hir
()
.local_def_id_to_hir_id
(
def_id
);
matches!
(
tcx
.hir
()
.get
(
hir_id
),
Node
::
ForeignItem
(
_
))
...
...
compiler/rustc_symbol_mangling/src/v0.rs
浏览文件 @
489ad8b8
...
...
@@ -592,8 +592,8 @@ fn print_const(mut self, ct: &'tcx ty::Const<'tcx>) -> Result<Self::Const, Self:
fn
path_crate
(
mut
self
,
cnum
:
CrateNum
)
->
Result
<
Self
::
Path
,
Self
::
Error
>
{
self
.push
(
"C"
);
let
fingerprint
=
self
.tcx
.crate_disambiguator
(
cnum
)
.to_fingerprint
();
self
.push_disambiguator
(
fingerprint
.to_smaller_hash
());
let
stable_crate_id
=
self
.tcx
.def_path_hash
(
cnum
.as_def_id
())
.stable_crate_id
();
self
.push_disambiguator
(
stable_crate_id
.to_u64
());
let
name
=
self
.tcx
.crate_name
(
cnum
)
.as_str
();
self
.push_ident
(
&
name
);
Ok
(
self
)
...
...
compiler/rustc_ty_utils/src/ty.rs
浏览文件 @
489ad8b8
use
rustc_data_structures
::
fx
::
FxIndexSet
;
use
rustc_hir
as
hir
;
use
rustc_hir
::
def_id
::{
CrateNum
,
DefId
,
LocalDefId
,
LOCAL_CRATE
};
use
rustc_hir
::
def_id
::{
DefId
,
LocalDefId
};
use
rustc_middle
::
hir
::
map
as
hir_map
;
use
rustc_middle
::
ty
::
subst
::
Subst
;
use
rustc_middle
::
ty
::{
self
,
Binder
,
Predicate
,
PredicateKind
,
ToPredicate
,
Ty
,
TyCtxt
,
WithConstness
,
};
use
rustc_session
::
CrateDisambiguator
;
use
rustc_span
::
Span
;
use
rustc_trait_selection
::
traits
;
...
...
@@ -388,11 +387,6 @@ fn param_env_reveal_all_normalized(tcx: TyCtxt<'_>, def_id: DefId) -> ty::ParamE
tcx
.param_env
(
def_id
)
.with_reveal_all_normalized
(
tcx
)
}
fn
crate_disambiguator
(
tcx
:
TyCtxt
<
'_
>
,
crate_num
:
CrateNum
)
->
CrateDisambiguator
{
assert_eq!
(
crate_num
,
LOCAL_CRATE
);
tcx
.sess
.local_crate_disambiguator
()
}
fn
instance_def_size_estimate
<
'tcx
>
(
tcx
:
TyCtxt
<
'tcx
>
,
instance_def
:
ty
::
InstanceDef
<
'tcx
>
,
...
...
@@ -538,7 +532,6 @@ pub fn provide(providers: &mut ty::query::Providers) {
param_env
,
param_env_reveal_all_normalized
,
trait_of_item
,
crate_disambiguator
,
instance_def_size_estimate
,
issue33140_self_ty
,
impl_defaultness
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录