Replace absolute paths with relative ones
Modern compilers allow reaching external crates like std or core via relative paths in modules outside of lib.rs and main.rs.
This commit is contained in:
parent
f54072bb81
commit
a0fc455d30
@ -122,7 +122,7 @@ unsafe fn configure_llvm(sess: &Session) {
|
|||||||
|
|
||||||
llvm::LLVMInitializePasses();
|
llvm::LLVMInitializePasses();
|
||||||
|
|
||||||
::rustc_llvm::initialize_available_targets();
|
rustc_llvm::initialize_available_targets();
|
||||||
|
|
||||||
llvm::LLVMRustSetLLVMOptions(llvm_args.len() as c_int, llvm_args.as_ptr());
|
llvm::LLVMRustSetLLVMOptions(llvm_args.len() as c_int, llvm_args.as_ptr());
|
||||||
}
|
}
|
||||||
|
@ -1175,7 +1175,7 @@ fn start_executing_work<B: ExtraBackendMethods>(
|
|||||||
// necessary. There's already optimizations in place to avoid sending work
|
// necessary. There's already optimizations in place to avoid sending work
|
||||||
// back to the coordinator if LTO isn't requested.
|
// back to the coordinator if LTO isn't requested.
|
||||||
return thread::spawn(move || {
|
return thread::spawn(move || {
|
||||||
let max_workers = ::num_cpus::get();
|
let max_workers = num_cpus::get();
|
||||||
let mut worker_id_counter = 0;
|
let mut worker_id_counter = 0;
|
||||||
let mut free_worker_ids = Vec::new();
|
let mut free_worker_ids = Vec::new();
|
||||||
let mut get_worker_id = |free_worker_ids: &mut Vec<usize>| {
|
let mut get_worker_id = |free_worker_ids: &mut Vec<usize>| {
|
||||||
|
@ -695,7 +695,7 @@ pub fn codegen_crate<B: ExtraBackendMethods>(
|
|||||||
total_codegen_time.into_inner(),
|
total_codegen_time.into_inner(),
|
||||||
);
|
);
|
||||||
|
|
||||||
::rustc_incremental::assert_module_sources::assert_module_sources(tcx);
|
rustc_incremental::assert_module_sources::assert_module_sources(tcx);
|
||||||
|
|
||||||
symbol_names_test::report_symbol_names(tcx);
|
symbol_names_test::report_symbol_names(tcx);
|
||||||
|
|
||||||
@ -754,8 +754,8 @@ impl<B: ExtraBackendMethods> Drop for AbortCodegenOnDrop<B> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn finalize_tcx(tcx: TyCtxt<'_>) {
|
fn finalize_tcx(tcx: TyCtxt<'_>) {
|
||||||
tcx.sess.time("assert_dep_graph", || ::rustc_incremental::assert_dep_graph(tcx));
|
tcx.sess.time("assert_dep_graph", || rustc_incremental::assert_dep_graph(tcx));
|
||||||
tcx.sess.time("serialize_dep_graph", || ::rustc_incremental::save_dep_graph(tcx));
|
tcx.sess.time("serialize_dep_graph", || rustc_incremental::save_dep_graph(tcx));
|
||||||
|
|
||||||
// We assume that no queries are run past here. If there are new queries
|
// We assume that no queries are run past here. If there are new queries
|
||||||
// after this point, they'll show up as "<unknown>" in self-profiling data.
|
// after this point, they'll show up as "<unknown>" in self-profiling data.
|
||||||
|
@ -85,7 +85,7 @@ impl<'tcx, T> CodegenMethods<'tcx> for T where
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub trait HasCodegen<'tcx>:
|
pub trait HasCodegen<'tcx>:
|
||||||
Backend<'tcx> + ::std::ops::Deref<Target = <Self as HasCodegen<'tcx>>::CodegenCx>
|
Backend<'tcx> + std::ops::Deref<Target = <Self as HasCodegen<'tcx>>::CodegenCx>
|
||||||
{
|
{
|
||||||
type CodegenCx: CodegenMethods<'tcx>
|
type CodegenCx: CodegenMethods<'tcx>
|
||||||
+ BackendTypes<
|
+ BackendTypes<
|
||||||
|
@ -71,8 +71,8 @@ impl Fingerprint {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ::std::fmt::Display for Fingerprint {
|
impl std::fmt::Display for Fingerprint {
|
||||||
fn fmt(&self, formatter: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
|
fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
write!(formatter, "{:x}-{:x}", self.0, self.1)
|
write!(formatter, "{:x}-{:x}", self.0, self.1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -129,7 +129,7 @@ pub enum ProcessResult<O, E> {
|
|||||||
struct ObligationTreeId(usize);
|
struct ObligationTreeId(usize);
|
||||||
|
|
||||||
type ObligationTreeIdGenerator =
|
type ObligationTreeIdGenerator =
|
||||||
::std::iter::Map<::std::ops::RangeFrom<usize>, fn(usize) -> ObligationTreeId>;
|
std::iter::Map<std::ops::RangeFrom<usize>, fn(usize) -> ObligationTreeId>;
|
||||||
|
|
||||||
pub struct ObligationForest<O: ForestObligation> {
|
pub struct ObligationForest<O: ForestObligation> {
|
||||||
/// The list of obligations. In between calls to `process_obligations`,
|
/// The list of obligations. In between calls to `process_obligations`,
|
||||||
|
@ -93,7 +93,7 @@ impl<K: Ord, V> SortedMap<K, V> {
|
|||||||
|
|
||||||
/// Iterate over elements, sorted by key
|
/// Iterate over elements, sorted by key
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn iter(&self) -> ::std::slice::Iter<'_, (K, V)> {
|
pub fn iter(&self) -> std::slice::Iter<'_, (K, V)> {
|
||||||
self.data.iter()
|
self.data.iter()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,7 +134,7 @@ impl<K: Ord, V> SortedMap<K, V> {
|
|||||||
R: RangeBounds<K>,
|
R: RangeBounds<K>,
|
||||||
{
|
{
|
||||||
let (start, end) = self.range_slice_indices(range);
|
let (start, end) = self.range_slice_indices(range);
|
||||||
self.data.splice(start..end, ::std::iter::empty());
|
self.data.splice(start..end, std::iter::empty());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Mutate all keys with the given function `f`. This mutation must not
|
/// Mutate all keys with the given function `f`. This mutation must not
|
||||||
@ -241,7 +241,7 @@ impl<K: Ord, V> SortedMap<K, V> {
|
|||||||
|
|
||||||
impl<K: Ord, V> IntoIterator for SortedMap<K, V> {
|
impl<K: Ord, V> IntoIterator for SortedMap<K, V> {
|
||||||
type Item = (K, V);
|
type Item = (K, V);
|
||||||
type IntoIter = ::std::vec::IntoIter<(K, V)>;
|
type IntoIter = std::vec::IntoIter<(K, V)>;
|
||||||
|
|
||||||
fn into_iter(self) -> Self::IntoIter {
|
fn into_iter(self) -> Self::IntoIter {
|
||||||
self.data.into_iter()
|
self.data.into_iter()
|
||||||
|
@ -20,7 +20,7 @@ pub struct StableHasher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl ::std::fmt::Debug for StableHasher {
|
impl ::std::fmt::Debug for StableHasher {
|
||||||
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
write!(f, "{:?}", self.state)
|
write!(f, "{:?}", self.state)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -118,7 +118,7 @@ impl DefKey {
|
|||||||
|
|
||||||
let DisambiguatedDefPathData { ref data, disambiguator } = self.disambiguated_data;
|
let DisambiguatedDefPathData { ref data, disambiguator } = self.disambiguated_data;
|
||||||
|
|
||||||
::std::mem::discriminant(data).hash(&mut hasher);
|
std::mem::discriminant(data).hash(&mut hasher);
|
||||||
if let Some(name) = data.get_opt_name() {
|
if let Some(name) = data.get_opt_name() {
|
||||||
// Get a stable hash by considering the symbol chars rather than
|
// Get a stable hash by considering the symbol chars rather than
|
||||||
// the symbol index.
|
// the symbol index.
|
||||||
|
@ -341,7 +341,7 @@ where
|
|||||||
// been fully instantiated and hence the set of scopes we have
|
// been fully instantiated and hence the set of scopes we have
|
||||||
// doesn't matter -- just to be sure, put an empty vector
|
// doesn't matter -- just to be sure, put an empty vector
|
||||||
// in there.
|
// in there.
|
||||||
let old_a_scopes = ::std::mem::take(pair.vid_scopes(self));
|
let old_a_scopes = std::mem::take(pair.vid_scopes(self));
|
||||||
|
|
||||||
// Relate the generalized kind to the original one.
|
// Relate the generalized kind to the original one.
|
||||||
let result = pair.relate_generalized_ty(self, generalized_ty);
|
let result = pair.relate_generalized_ty(self, generalized_ty);
|
||||||
@ -680,7 +680,7 @@ where
|
|||||||
// itself occurs. Note that `'b` and `'c` must both
|
// itself occurs. Note that `'b` and `'c` must both
|
||||||
// include P. At the point, the call works because of
|
// include P. At the point, the call works because of
|
||||||
// subtyping (i.e., `&'b u32 <: &{P} u32`).
|
// subtyping (i.e., `&'b u32 <: &{P} u32`).
|
||||||
let variance = ::std::mem::replace(&mut self.ambient_variance, ty::Variance::Covariant);
|
let variance = std::mem::replace(&mut self.ambient_variance, ty::Variance::Covariant);
|
||||||
|
|
||||||
self.relate(a.skip_binder(), b.skip_binder())?;
|
self.relate(a.skip_binder(), b.skip_binder())?;
|
||||||
|
|
||||||
@ -709,7 +709,7 @@ where
|
|||||||
// Reset ambient variance to contravariance. See the
|
// Reset ambient variance to contravariance. See the
|
||||||
// covariant case above for an explanation.
|
// covariant case above for an explanation.
|
||||||
let variance =
|
let variance =
|
||||||
::std::mem::replace(&mut self.ambient_variance, ty::Variance::Contravariant);
|
std::mem::replace(&mut self.ambient_variance, ty::Variance::Contravariant);
|
||||||
|
|
||||||
self.relate(a.skip_binder(), b.skip_binder())?;
|
self.relate(a.skip_binder(), b.skip_binder())?;
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ impl<'cx, 'tcx> InferCtxt<'cx, 'tcx> {
|
|||||||
|
|
||||||
/// Trait queries just want to pass back type obligations "as is"
|
/// Trait queries just want to pass back type obligations "as is"
|
||||||
pub fn take_registered_region_obligations(&self) -> Vec<(hir::HirId, RegionObligation<'tcx>)> {
|
pub fn take_registered_region_obligations(&self) -> Vec<(hir::HirId, RegionObligation<'tcx>)> {
|
||||||
::std::mem::take(&mut self.inner.borrow_mut().region_obligations)
|
std::mem::take(&mut self.inner.borrow_mut().region_obligations)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Process the region obligations that must be proven (during
|
/// Process the region obligations that must be proven (during
|
||||||
|
@ -5,7 +5,7 @@ use crate::ich::StableHashingContext;
|
|||||||
|
|
||||||
use rustc_ast as ast;
|
use rustc_ast as ast;
|
||||||
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
||||||
use rustc_span::SourceFile;
|
use rustc_span::{BytePos, NormalizedPos, SourceFile};
|
||||||
|
|
||||||
use smallvec::SmallVec;
|
use smallvec::SmallVec;
|
||||||
|
|
||||||
@ -102,22 +102,19 @@ impl<'a> HashStable<StableHashingContext<'a>> for SourceFile {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn stable_byte_pos(pos: ::rustc_span::BytePos, source_file_start: ::rustc_span::BytePos) -> u32 {
|
fn stable_byte_pos(pos: BytePos, source_file_start: BytePos) -> u32 {
|
||||||
pos.0 - source_file_start.0
|
pos.0 - source_file_start.0
|
||||||
}
|
}
|
||||||
|
|
||||||
fn stable_multibyte_char(
|
fn stable_multibyte_char(mbc: rustc_span::MultiByteChar, source_file_start: BytePos) -> (u32, u32) {
|
||||||
mbc: ::rustc_span::MultiByteChar,
|
let rustc_span::MultiByteChar { pos, bytes } = mbc;
|
||||||
source_file_start: ::rustc_span::BytePos,
|
|
||||||
) -> (u32, u32) {
|
|
||||||
let ::rustc_span::MultiByteChar { pos, bytes } = mbc;
|
|
||||||
|
|
||||||
(pos.0 - source_file_start.0, bytes as u32)
|
(pos.0 - source_file_start.0, bytes as u32)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn stable_non_narrow_char(
|
fn stable_non_narrow_char(
|
||||||
swc: ::rustc_span::NonNarrowChar,
|
swc: rustc_span::NonNarrowChar,
|
||||||
source_file_start: ::rustc_span::BytePos,
|
source_file_start: BytePos,
|
||||||
) -> (u32, u32) {
|
) -> (u32, u32) {
|
||||||
let pos = swc.pos();
|
let pos = swc.pos();
|
||||||
let width = swc.width();
|
let width = swc.width();
|
||||||
@ -125,11 +122,8 @@ fn stable_non_narrow_char(
|
|||||||
(pos.0 - source_file_start.0, width as u32)
|
(pos.0 - source_file_start.0, width as u32)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn stable_normalized_pos(
|
fn stable_normalized_pos(np: NormalizedPos, source_file_start: BytePos) -> (u32, u32) {
|
||||||
np: ::rustc_span::NormalizedPos,
|
let NormalizedPos { pos, diff } = np;
|
||||||
source_file_start: ::rustc_span::BytePos,
|
|
||||||
) -> (u32, u32) {
|
|
||||||
let ::rustc_span::NormalizedPos { pos, diff } = np;
|
|
||||||
|
|
||||||
(pos.0 - source_file_start.0, diff)
|
(pos.0 - source_file_start.0, diff)
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,7 @@ pub struct Allocation<Tag = (), Extra = ()> {
|
|||||||
pub extra: Extra,
|
pub extra: Extra,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait AllocationExtra<Tag>: ::std::fmt::Debug + Clone {
|
pub trait AllocationExtra<Tag>: std::fmt::Debug + Clone {
|
||||||
// There is no constructor in here because the constructor's type depends
|
// There is no constructor in here because the constructor's type depends
|
||||||
// on `MemoryKind`, and making things sufficiently generic leads to painful
|
// on `MemoryKind`, and making things sufficiently generic leads to painful
|
||||||
// inference failure.
|
// inference failure.
|
||||||
|
@ -58,7 +58,7 @@ impl<'tcx> ConstValue<'tcx> {
|
|||||||
|
|
||||||
pub fn try_to_str_slice(&self) -> Option<&'tcx str> {
|
pub fn try_to_str_slice(&self) -> Option<&'tcx str> {
|
||||||
if let ConstValue::Slice { data, start, end } = *self {
|
if let ConstValue::Slice { data, start, end } = *self {
|
||||||
::std::str::from_utf8(data.inspect_with_uninit_and_ptr_outside_interpreter(start..end))
|
std::str::from_utf8(data.inspect_with_uninit_and_ptr_outside_interpreter(start..end))
|
||||||
.ok()
|
.ok()
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
@ -465,7 +465,7 @@ impl<'tcx, Tag> Scalar<Tag> {
|
|||||||
|
|
||||||
pub fn to_char(self) -> InterpResult<'tcx, char> {
|
pub fn to_char(self) -> InterpResult<'tcx, char> {
|
||||||
let val = self.to_u32()?;
|
let val = self.to_u32()?;
|
||||||
match ::std::char::from_u32(val) {
|
match std::char::from_u32(val) {
|
||||||
Some(c) => Ok(c),
|
Some(c) => Ok(c),
|
||||||
None => throw_ub!(InvalidChar(val)),
|
None => throw_ub!(InvalidChar(val)),
|
||||||
}
|
}
|
||||||
|
@ -775,7 +775,7 @@ mod binding_form_impl {
|
|||||||
impl<'a, 'tcx> HashStable<StableHashingContext<'a>> for super::BindingForm<'tcx> {
|
impl<'a, 'tcx> HashStable<StableHashingContext<'a>> for super::BindingForm<'tcx> {
|
||||||
fn hash_stable(&self, hcx: &mut StableHashingContext<'a>, hasher: &mut StableHasher) {
|
fn hash_stable(&self, hcx: &mut StableHashingContext<'a>, hasher: &mut StableHasher) {
|
||||||
use super::BindingForm::*;
|
use super::BindingForm::*;
|
||||||
::std::mem::discriminant(self).hash_stable(hcx, hasher);
|
std::mem::discriminant(self).hash_stable(hcx, hasher);
|
||||||
|
|
||||||
match self {
|
match self {
|
||||||
Var(binding) => binding.hash_stable(hcx, hasher),
|
Var(binding) => binding.hash_stable(hcx, hasher),
|
||||||
|
@ -1894,7 +1894,7 @@ impl<'tcx, T: HasTyCtxt<'tcx>> HasTyCtxt<'tcx> for LayoutCx<'tcx, T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type TyAndLayout<'tcx> = ::rustc_target::abi::TyAndLayout<'tcx, Ty<'tcx>>;
|
pub type TyAndLayout<'tcx> = rustc_target::abi::TyAndLayout<'tcx, Ty<'tcx>>;
|
||||||
|
|
||||||
impl<'tcx> LayoutOf for LayoutCx<'tcx, TyCtxt<'tcx>> {
|
impl<'tcx> LayoutOf for LayoutCx<'tcx, TyCtxt<'tcx>> {
|
||||||
type Ty = Ty<'tcx>;
|
type Ty = Ty<'tcx>;
|
||||||
|
@ -23,7 +23,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||||||
{
|
{
|
||||||
debug!(
|
debug!(
|
||||||
"normalize_erasing_regions::<{}>(value={:?}, param_env={:?})",
|
"normalize_erasing_regions::<{}>(value={:?}, param_env={:?})",
|
||||||
::std::any::type_name::<T>(),
|
std::any::type_name::<T>(),
|
||||||
value,
|
value,
|
||||||
param_env,
|
param_env,
|
||||||
);
|
);
|
||||||
|
@ -1142,7 +1142,7 @@ pub trait PrettyPrinter<'tcx>:
|
|||||||
// relocations (we have an active `str` reference here). We don't use this
|
// relocations (we have an active `str` reference here). We don't use this
|
||||||
// result to affect interpreter execution.
|
// result to affect interpreter execution.
|
||||||
let slice = data.inspect_with_uninit_and_ptr_outside_interpreter(start..end);
|
let slice = data.inspect_with_uninit_and_ptr_outside_interpreter(start..end);
|
||||||
let s = ::std::str::from_utf8(slice).expect("non utf8 str from miri");
|
let s = std::str::from_utf8(slice).expect("non utf8 str from miri");
|
||||||
p!(write("{:?}", s));
|
p!(write("{:?}", s));
|
||||||
Ok(self)
|
Ok(self)
|
||||||
}
|
}
|
||||||
|
@ -543,7 +543,7 @@ impl<'a, 'tcx> DecoderWithPosition for CacheDecoder<'a, 'tcx> {
|
|||||||
// tag matches and the correct amount of bytes was read.
|
// tag matches and the correct amount of bytes was read.
|
||||||
fn decode_tagged<D, T, V>(decoder: &mut D, expected_tag: T) -> Result<V, D::Error>
|
fn decode_tagged<D, T, V>(decoder: &mut D, expected_tag: T) -> Result<V, D::Error>
|
||||||
where
|
where
|
||||||
T: Decodable<D> + Eq + ::std::fmt::Debug,
|
T: Decodable<D> + Eq + std::fmt::Debug,
|
||||||
V: Decodable<D>,
|
V: Decodable<D>,
|
||||||
D: DecoderWithPosition,
|
D: DecoderWithPosition,
|
||||||
{
|
{
|
||||||
@ -1023,7 +1023,7 @@ where
|
|||||||
let _timer = tcx
|
let _timer = tcx
|
||||||
.sess
|
.sess
|
||||||
.prof
|
.prof
|
||||||
.extra_verbose_generic_activity("encode_query_results_for", ::std::any::type_name::<Q>());
|
.extra_verbose_generic_activity("encode_query_results_for", std::any::type_name::<Q>());
|
||||||
|
|
||||||
let state = Q::query_state(tcx);
|
let state = Q::query_state(tcx);
|
||||||
assert!(state.all_inactive());
|
assert!(state.all_inactive());
|
||||||
|
@ -646,8 +646,8 @@ impl<'tcx> ty::TyS<'tcx> {
|
|||||||
}
|
}
|
||||||
ty::Char => Some(std::char::MAX as u128),
|
ty::Char => Some(std::char::MAX as u128),
|
||||||
ty::Float(fty) => Some(match fty {
|
ty::Float(fty) => Some(match fty {
|
||||||
ast::FloatTy::F32 => ::rustc_apfloat::ieee::Single::INFINITY.to_bits(),
|
ast::FloatTy::F32 => rustc_apfloat::ieee::Single::INFINITY.to_bits(),
|
||||||
ast::FloatTy::F64 => ::rustc_apfloat::ieee::Double::INFINITY.to_bits(),
|
ast::FloatTy::F64 => rustc_apfloat::ieee::Double::INFINITY.to_bits(),
|
||||||
}),
|
}),
|
||||||
_ => None,
|
_ => None,
|
||||||
};
|
};
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
//! interpreting common C functions leak into CTFE.
|
//! interpreting common C functions leak into CTFE.
|
||||||
|
|
||||||
use std::borrow::{Borrow, Cow};
|
use std::borrow::{Borrow, Cow};
|
||||||
|
use std::fmt::Debug;
|
||||||
use std::hash::Hash;
|
use std::hash::Hash;
|
||||||
|
|
||||||
use rustc_middle::mir;
|
use rustc_middle::mir;
|
||||||
@ -79,19 +80,19 @@ pub trait AllocMap<K: Hash + Eq, V> {
|
|||||||
/// and some use case dependent behaviour can instead be applied.
|
/// and some use case dependent behaviour can instead be applied.
|
||||||
pub trait Machine<'mir, 'tcx>: Sized {
|
pub trait Machine<'mir, 'tcx>: Sized {
|
||||||
/// Additional memory kinds a machine wishes to distinguish from the builtin ones
|
/// Additional memory kinds a machine wishes to distinguish from the builtin ones
|
||||||
type MemoryKind: ::std::fmt::Debug + ::std::fmt::Display + MayLeak + Eq + 'static;
|
type MemoryKind: Debug + std::fmt::Display + MayLeak + Eq + 'static;
|
||||||
|
|
||||||
/// Tag tracked alongside every pointer. This is used to implement "Stacked Borrows"
|
/// Tag tracked alongside every pointer. This is used to implement "Stacked Borrows"
|
||||||
/// <https://www.ralfj.de/blog/2018/08/07/stacked-borrows.html>.
|
/// <https://www.ralfj.de/blog/2018/08/07/stacked-borrows.html>.
|
||||||
/// The `default()` is used for pointers to consts, statics, vtables and functions.
|
/// The `default()` is used for pointers to consts, statics, vtables and functions.
|
||||||
/// The `Debug` formatting is used for displaying pointers; we cannot use `Display`
|
/// The `Debug` formatting is used for displaying pointers; we cannot use `Display`
|
||||||
/// as `()` does not implement that, but it should be "nice" output.
|
/// as `()` does not implement that, but it should be "nice" output.
|
||||||
type PointerTag: ::std::fmt::Debug + Copy + Eq + Hash + 'static;
|
type PointerTag: Debug + Copy + Eq + Hash + 'static;
|
||||||
|
|
||||||
/// Machines can define extra (non-instance) things that represent values of function pointers.
|
/// Machines can define extra (non-instance) things that represent values of function pointers.
|
||||||
/// For example, Miri uses this to return a function pointer from `dlsym`
|
/// For example, Miri uses this to return a function pointer from `dlsym`
|
||||||
/// that can later be called to execute the right thing.
|
/// that can later be called to execute the right thing.
|
||||||
type ExtraFnVal: ::std::fmt::Debug + Copy;
|
type ExtraFnVal: Debug + Copy;
|
||||||
|
|
||||||
/// Extra data stored in every call frame.
|
/// Extra data stored in every call frame.
|
||||||
type FrameExtra;
|
type FrameExtra;
|
||||||
|
@ -133,7 +133,7 @@ impl<Tag: Copy> std::fmt::Display for ImmTy<'tcx, Tag> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx, Tag> ::std::ops::Deref for ImmTy<'tcx, Tag> {
|
impl<'tcx, Tag> std::ops::Deref for ImmTy<'tcx, Tag> {
|
||||||
type Target = Immediate<Tag>;
|
type Target = Immediate<Tag>;
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn deref(&self) -> &Immediate<Tag> {
|
fn deref(&self) -> &Immediate<Tag> {
|
||||||
@ -156,7 +156,7 @@ pub struct OpTy<'tcx, Tag = ()> {
|
|||||||
pub layout: TyAndLayout<'tcx>,
|
pub layout: TyAndLayout<'tcx>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx, Tag> ::std::ops::Deref for OpTy<'tcx, Tag> {
|
impl<'tcx, Tag> std::ops::Deref for OpTy<'tcx, Tag> {
|
||||||
type Target = Operand<Tag>;
|
type Target = Operand<Tag>;
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn deref(&self) -> &Operand<Tag> {
|
fn deref(&self) -> &Operand<Tag> {
|
||||||
@ -340,7 +340,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
|||||||
pub fn read_str(&self, mplace: MPlaceTy<'tcx, M::PointerTag>) -> InterpResult<'tcx, &str> {
|
pub fn read_str(&self, mplace: MPlaceTy<'tcx, M::PointerTag>) -> InterpResult<'tcx, &str> {
|
||||||
let len = mplace.len(self)?;
|
let len = mplace.len(self)?;
|
||||||
let bytes = self.memory.read_bytes(mplace.ptr, Size::from_bytes(len))?;
|
let bytes = self.memory.read_bytes(mplace.ptr, Size::from_bytes(len))?;
|
||||||
let str = ::std::str::from_utf8(bytes).map_err(|err| err_ub!(InvalidStr(err)))?;
|
let str = std::str::from_utf8(bytes).map_err(|err| err_ub!(InvalidStr(err)))?;
|
||||||
Ok(str)
|
Ok(str)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
//! All high-level functions to write to memory work on places as destinations.
|
//! All high-level functions to write to memory work on places as destinations.
|
||||||
|
|
||||||
use std::convert::TryFrom;
|
use std::convert::TryFrom;
|
||||||
|
use std::fmt::Debug;
|
||||||
use std::hash::Hash;
|
use std::hash::Hash;
|
||||||
|
|
||||||
use rustc_macros::HashStable;
|
use rustc_macros::HashStable;
|
||||||
@ -86,7 +87,7 @@ pub struct PlaceTy<'tcx, Tag = ()> {
|
|||||||
pub layout: TyAndLayout<'tcx>,
|
pub layout: TyAndLayout<'tcx>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx, Tag> ::std::ops::Deref for PlaceTy<'tcx, Tag> {
|
impl<'tcx, Tag> std::ops::Deref for PlaceTy<'tcx, Tag> {
|
||||||
type Target = Place<Tag>;
|
type Target = Place<Tag>;
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn deref(&self) -> &Place<Tag> {
|
fn deref(&self) -> &Place<Tag> {
|
||||||
@ -101,7 +102,7 @@ pub struct MPlaceTy<'tcx, Tag = ()> {
|
|||||||
pub layout: TyAndLayout<'tcx>,
|
pub layout: TyAndLayout<'tcx>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx, Tag> ::std::ops::Deref for MPlaceTy<'tcx, Tag> {
|
impl<'tcx, Tag> std::ops::Deref for MPlaceTy<'tcx, Tag> {
|
||||||
type Target = MemPlace<Tag>;
|
type Target = MemPlace<Tag>;
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn deref(&self) -> &MemPlace<Tag> {
|
fn deref(&self) -> &MemPlace<Tag> {
|
||||||
@ -226,7 +227,7 @@ impl<'tcx, Tag> MPlaceTy<'tcx, Tag> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// These are defined here because they produce a place.
|
// These are defined here because they produce a place.
|
||||||
impl<'tcx, Tag: ::std::fmt::Debug + Copy> OpTy<'tcx, Tag> {
|
impl<'tcx, Tag: Debug + Copy> OpTy<'tcx, Tag> {
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
/// Note: do not call `as_ref` on the resulting place. This function should only be used to
|
/// Note: do not call `as_ref` on the resulting place. This function should only be used to
|
||||||
/// read from the resulting mplace, not to get its address back.
|
/// read from the resulting mplace, not to get its address back.
|
||||||
@ -251,7 +252,7 @@ impl<'tcx, Tag: ::std::fmt::Debug + Copy> OpTy<'tcx, Tag> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<Tag: ::std::fmt::Debug> Place<Tag> {
|
impl<Tag: Debug> Place<Tag> {
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn assert_mem_place(self) -> MemPlace<Tag> {
|
pub fn assert_mem_place(self) -> MemPlace<Tag> {
|
||||||
match self {
|
match self {
|
||||||
@ -261,7 +262,7 @@ impl<Tag: ::std::fmt::Debug> Place<Tag> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx, Tag: ::std::fmt::Debug> PlaceTy<'tcx, Tag> {
|
impl<'tcx, Tag: Debug> PlaceTy<'tcx, Tag> {
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn assert_mem_place(self) -> MPlaceTy<'tcx, Tag> {
|
pub fn assert_mem_place(self) -> MPlaceTy<'tcx, Tag> {
|
||||||
MPlaceTy { mplace: self.place.assert_mem_place(), layout: self.layout }
|
MPlaceTy { mplace: self.place.assert_mem_place(), layout: self.layout }
|
||||||
@ -272,7 +273,7 @@ impl<'tcx, Tag: ::std::fmt::Debug> PlaceTy<'tcx, Tag> {
|
|||||||
impl<'mir, 'tcx: 'mir, Tag, M> InterpCx<'mir, 'tcx, M>
|
impl<'mir, 'tcx: 'mir, Tag, M> InterpCx<'mir, 'tcx, M>
|
||||||
where
|
where
|
||||||
// FIXME: Working around https://github.com/rust-lang/rust/issues/54385
|
// FIXME: Working around https://github.com/rust-lang/rust/issues/54385
|
||||||
Tag: ::std::fmt::Debug + Copy + Eq + Hash + 'static,
|
Tag: Debug + Copy + Eq + Hash + 'static,
|
||||||
M: Machine<'mir, 'tcx, PointerTag = Tag>,
|
M: Machine<'mir, 'tcx, PointerTag = Tag>,
|
||||||
// FIXME: Working around https://github.com/rust-lang/rust/issues/24159
|
// FIXME: Working around https://github.com/rust-lang/rust/issues/24159
|
||||||
M::MemoryMap: AllocMap<AllocId, (MemoryKind<M::MemoryKind>, Allocation<Tag, M::AllocExtra>)>,
|
M::MemoryMap: AllocMap<AllocId, (MemoryKind<M::MemoryKind>, Allocation<Tag, M::AllocExtra>)>,
|
||||||
|
@ -137,7 +137,7 @@ fn mir_keys(tcx: TyCtxt<'_>, krate: CrateNum) -> FxHashSet<LocalDefId> {
|
|||||||
/// Generates a default name for the pass based on the name of the
|
/// Generates a default name for the pass based on the name of the
|
||||||
/// type `T`.
|
/// type `T`.
|
||||||
pub fn default_name<T: ?Sized>() -> Cow<'static, str> {
|
pub fn default_name<T: ?Sized>() -> Cow<'static, str> {
|
||||||
let name = ::std::any::type_name::<T>();
|
let name = std::any::type_name::<T>();
|
||||||
if let Some(tail) = name.rfind(':') { Cow::from(&name[tail + 1..]) } else { Cow::from(name) }
|
if let Some(tail) = name.rfind(':') { Cow::from(&name[tail + 1..]) } else { Cow::from(name) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,14 +96,14 @@ impl PatCtxt<'_, '_> {
|
|||||||
}
|
}
|
||||||
PatternError::FloatBug => {
|
PatternError::FloatBug => {
|
||||||
// FIXME(#31407) this is only necessary because float parsing is buggy
|
// FIXME(#31407) this is only necessary because float parsing is buggy
|
||||||
::rustc_middle::mir::interpret::struct_error(
|
rustc_middle::mir::interpret::struct_error(
|
||||||
self.tcx.at(pat_span),
|
self.tcx.at(pat_span),
|
||||||
"could not evaluate float literal (see issue #31407)",
|
"could not evaluate float literal (see issue #31407)",
|
||||||
)
|
)
|
||||||
.emit();
|
.emit();
|
||||||
}
|
}
|
||||||
PatternError::NonConstPath(span) => {
|
PatternError::NonConstPath(span) => {
|
||||||
::rustc_middle::mir::interpret::struct_error(
|
rustc_middle::mir::interpret::struct_error(
|
||||||
self.tcx.at(span),
|
self.tcx.at(span),
|
||||||
"runtime values cannot be referenced in patterns",
|
"runtime values cannot be referenced in patterns",
|
||||||
)
|
)
|
||||||
|
@ -1060,13 +1060,13 @@ crate fn compare_const_vals<'tcx>(
|
|||||||
use rustc_apfloat::Float;
|
use rustc_apfloat::Float;
|
||||||
return match *ty.kind() {
|
return match *ty.kind() {
|
||||||
ty::Float(ast::FloatTy::F32) => {
|
ty::Float(ast::FloatTy::F32) => {
|
||||||
let l = ::rustc_apfloat::ieee::Single::from_bits(a);
|
let l = rustc_apfloat::ieee::Single::from_bits(a);
|
||||||
let r = ::rustc_apfloat::ieee::Single::from_bits(b);
|
let r = rustc_apfloat::ieee::Single::from_bits(b);
|
||||||
l.partial_cmp(&r)
|
l.partial_cmp(&r)
|
||||||
}
|
}
|
||||||
ty::Float(ast::FloatTy::F64) => {
|
ty::Float(ast::FloatTy::F64) => {
|
||||||
let l = ::rustc_apfloat::ieee::Double::from_bits(a);
|
let l = rustc_apfloat::ieee::Double::from_bits(a);
|
||||||
let r = ::rustc_apfloat::ieee::Double::from_bits(b);
|
let r = rustc_apfloat::ieee::Double::from_bits(b);
|
||||||
l.partial_cmp(&r)
|
l.partial_cmp(&r)
|
||||||
}
|
}
|
||||||
ty::Int(ity) => {
|
ty::Int(ity) => {
|
||||||
|
@ -107,7 +107,7 @@ impl serialize::Encoder for Encoder {
|
|||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn emit_i8(&mut self, v: i8) -> EncodeResult {
|
fn emit_i8(&mut self, v: i8) -> EncodeResult {
|
||||||
let as_u8: u8 = unsafe { ::std::mem::transmute(v) };
|
let as_u8: u8 = unsafe { std::mem::transmute(v) };
|
||||||
self.emit_u8(as_u8)
|
self.emit_u8(as_u8)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -300,13 +300,13 @@ impl<'a> serialize::Decoder for Decoder<'a> {
|
|||||||
#[inline]
|
#[inline]
|
||||||
fn read_char(&mut self) -> Result<char, Self::Error> {
|
fn read_char(&mut self) -> Result<char, Self::Error> {
|
||||||
let bits = self.read_u32()?;
|
let bits = self.read_u32()?;
|
||||||
Ok(::std::char::from_u32(bits).unwrap())
|
Ok(std::char::from_u32(bits).unwrap())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn read_str(&mut self) -> Result<Cow<'_, str>, Self::Error> {
|
fn read_str(&mut self) -> Result<Cow<'_, str>, Self::Error> {
|
||||||
let len = self.read_usize()?;
|
let len = self.read_usize()?;
|
||||||
let s = ::std::str::from_utf8(&self.data[self.position..self.position + len]).unwrap();
|
let s = std::str::from_utf8(&self.data[self.position..self.position + len]).unwrap();
|
||||||
self.position += len;
|
self.position += len;
|
||||||
Ok(Cow::Borrowed(s))
|
Ok(Cow::Borrowed(s))
|
||||||
}
|
}
|
||||||
|
@ -132,7 +132,7 @@ impl SymbolMangler<'tcx> {
|
|||||||
self.push("u");
|
self.push("u");
|
||||||
|
|
||||||
// FIXME(eddyb) we should probably roll our own punycode implementation.
|
// FIXME(eddyb) we should probably roll our own punycode implementation.
|
||||||
let mut punycode_bytes = match ::punycode::encode(ident) {
|
let mut punycode_bytes = match punycode::encode(ident) {
|
||||||
Ok(s) => s.into_bytes(),
|
Ok(s) => s.into_bytes(),
|
||||||
Err(()) => bug!("symbol_names: punycode encoding failed for ident {:?}", ident),
|
Err(()) => bug!("symbol_names: punycode encoding failed for ident {:?}", ident),
|
||||||
};
|
};
|
||||||
|
@ -22,6 +22,7 @@ use rustc_middle::ty::{
|
|||||||
use rustc_middle::ty::{TypeAndMut, TypeckResults};
|
use rustc_middle::ty::{TypeAndMut, TypeckResults};
|
||||||
use rustc_span::symbol::{kw, sym, Ident, Symbol};
|
use rustc_span::symbol::{kw, sym, Ident, Symbol};
|
||||||
use rustc_span::{MultiSpan, Span, DUMMY_SP};
|
use rustc_span::{MultiSpan, Span, DUMMY_SP};
|
||||||
|
use rustc_target::spec::abi;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
use super::InferCtxtPrivExt;
|
use super::InferCtxtPrivExt;
|
||||||
@ -1157,15 +1158,15 @@ impl<'a, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'a, 'tcx> {
|
|||||||
tcx.mk_ty_infer(ty::TyVar(ty::TyVid { index: 0 })),
|
tcx.mk_ty_infer(ty::TyVar(ty::TyVid { index: 0 })),
|
||||||
false,
|
false,
|
||||||
hir::Unsafety::Normal,
|
hir::Unsafety::Normal,
|
||||||
::rustc_target::spec::abi::Abi::Rust,
|
abi::Abi::Rust,
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
tcx.mk_fn_sig(
|
tcx.mk_fn_sig(
|
||||||
::std::iter::once(inputs),
|
std::iter::once(inputs),
|
||||||
tcx.mk_ty_infer(ty::TyVar(ty::TyVid { index: 0 })),
|
tcx.mk_ty_infer(ty::TyVar(ty::TyVid { index: 0 })),
|
||||||
false,
|
false,
|
||||||
hir::Unsafety::Normal,
|
hir::Unsafety::Normal,
|
||||||
::rustc_target::spec::abi::Abi::Rust,
|
abi::Abi::Rust,
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
ty::Binder::bind(sig).to_string()
|
ty::Binder::bind(sig).to_string()
|
||||||
|
@ -44,7 +44,7 @@ impl<'cx, 'tcx> AtExt<'tcx> for At<'cx, 'tcx> {
|
|||||||
{
|
{
|
||||||
debug!(
|
debug!(
|
||||||
"normalize::<{}>(value={:?}, param_env={:?})",
|
"normalize::<{}>(value={:?}, param_env={:?})",
|
||||||
::std::any::type_name::<T>(),
|
std::any::type_name::<T>(),
|
||||||
value,
|
value,
|
||||||
self.param_env,
|
self.param_env,
|
||||||
);
|
);
|
||||||
@ -65,13 +65,13 @@ impl<'cx, 'tcx> AtExt<'tcx> for At<'cx, 'tcx> {
|
|||||||
let result = value.fold_with(&mut normalizer);
|
let result = value.fold_with(&mut normalizer);
|
||||||
debug!(
|
debug!(
|
||||||
"normalize::<{}>: result={:?} with {} obligations",
|
"normalize::<{}>: result={:?} with {} obligations",
|
||||||
::std::any::type_name::<T>(),
|
std::any::type_name::<T>(),
|
||||||
result,
|
result,
|
||||||
normalizer.obligations.len(),
|
normalizer.obligations.len(),
|
||||||
);
|
);
|
||||||
debug!(
|
debug!(
|
||||||
"normalize::<{}>: obligations={:?}",
|
"normalize::<{}>: obligations={:?}",
|
||||||
::std::any::type_name::<T>(),
|
std::any::type_name::<T>(),
|
||||||
normalizer.obligations,
|
normalizer.obligations,
|
||||||
);
|
);
|
||||||
if normalizer.error {
|
if normalizer.error {
|
||||||
|
@ -204,8 +204,8 @@ macro_rules! int_module {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_from_str() {
|
fn test_from_str() {
|
||||||
fn from_str<T: ::std::str::FromStr>(t: &str) -> Option<T> {
|
fn from_str<T: std::str::FromStr>(t: &str) -> Option<T> {
|
||||||
::std::str::FromStr::from_str(t).ok()
|
std::str::FromStr::from_str(t).ok()
|
||||||
}
|
}
|
||||||
assert_eq!(from_str::<$T>("0"), Some(0 as $T));
|
assert_eq!(from_str::<$T>("0"), Some(0 as $T));
|
||||||
assert_eq!(from_str::<$T>("3"), Some(3 as $T));
|
assert_eq!(from_str::<$T>("3"), Some(3 as $T));
|
||||||
|
@ -182,8 +182,8 @@ impl<T: Write> OutputFormatter for JsonFormatter<T> {
|
|||||||
/// Base code taken form `libserialize::json::escape_str`
|
/// Base code taken form `libserialize::json::escape_str`
|
||||||
struct EscapedString<S: AsRef<str>>(S);
|
struct EscapedString<S: AsRef<str>>(S);
|
||||||
|
|
||||||
impl<S: AsRef<str>> ::std::fmt::Display for EscapedString<S> {
|
impl<S: AsRef<str>> std::fmt::Display for EscapedString<S> {
|
||||||
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> ::std::fmt::Result {
|
||||||
let mut start = 0;
|
let mut start = 0;
|
||||||
|
|
||||||
for (i, byte) in self.0.as_ref().bytes().enumerate() {
|
for (i, byte) in self.0.as_ref().bytes().enumerate() {
|
||||||
|
Loading…
Reference in New Issue
Block a user