mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 00:34:06 +00:00
Auto merge of #105554 - matthiaskrgr:rollup-ir60gc7, r=matthiaskrgr
Rollup of 6 pull requests Successful merges: - #105411 (Introduce `with_forced_trimmed_paths`) - #105532 (Document behaviour of `--remap-path-prefix` with several matches) - #105537 (compiler: remove unnecessary imports and qualified paths) - #105539 (rustdoc: Only hide lines starting with `#` in rust code blocks ) - #105546 (Add some regression tests for #44454) - #105547 (Add regression test for #104582) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
f34356eace
@ -1,6 +1,5 @@
|
||||
#![cfg_attr(feature = "nightly", feature(step_trait, rustc_attrs, min_specialization))]
|
||||
|
||||
use std::convert::{TryFrom, TryInto};
|
||||
use std::fmt;
|
||||
#[cfg(feature = "nightly")]
|
||||
use std::iter::Step;
|
||||
|
@ -2,7 +2,6 @@ use crate::{Category, ExpInt, IEK_INF, IEK_NAN, IEK_ZERO};
|
||||
use crate::{Float, FloatConvert, ParseError, Round, Status, StatusAnd};
|
||||
|
||||
use core::cmp::{self, Ordering};
|
||||
use core::convert::TryFrom;
|
||||
use core::fmt::{self, Write};
|
||||
use core::marker::PhantomData;
|
||||
use core::mem;
|
||||
|
@ -28,7 +28,7 @@ use smallvec::SmallVec;
|
||||
use std::alloc::Layout;
|
||||
use std::cell::{Cell, RefCell};
|
||||
use std::cmp;
|
||||
use std::marker::{PhantomData, Send};
|
||||
use std::marker::PhantomData;
|
||||
use std::mem::{self, MaybeUninit};
|
||||
use std::ptr::{self, NonNull};
|
||||
use std::slice;
|
||||
|
@ -33,7 +33,6 @@ use rustc_serialize::{Decodable, Decoder, Encodable, Encoder};
|
||||
use rustc_span::source_map::{respan, Spanned};
|
||||
use rustc_span::symbol::{kw, sym, Ident, Symbol};
|
||||
use rustc_span::{Span, DUMMY_SP};
|
||||
use std::convert::TryFrom;
|
||||
use std::fmt;
|
||||
use std::mem;
|
||||
use thin_vec::{thin_vec, ThinVec};
|
||||
|
@ -22,7 +22,6 @@
|
||||
//! Moreover, a switch to, e.g., `P<'a, T>` would be easy and mostly automated.
|
||||
|
||||
use std::fmt::{self, Debug, Display};
|
||||
use std::iter::FromIterator;
|
||||
use std::ops::{Deref, DerefMut};
|
||||
use std::{slice, vec};
|
||||
|
||||
|
@ -362,7 +362,7 @@ impl TokenStream {
|
||||
}
|
||||
}
|
||||
|
||||
impl iter::FromIterator<TokenTree> for TokenStream {
|
||||
impl FromIterator<TokenTree> for TokenStream {
|
||||
fn from_iter<I: IntoIterator<Item = TokenTree>>(iter: I) -> Self {
|
||||
TokenStream::new(iter.into_iter().collect::<Vec<TokenTree>>())
|
||||
}
|
||||
|
@ -456,8 +456,8 @@ pub fn lower_to_hir<'hir>(tcx: TyCtxt<'hir>, (): ()) -> hir::Crate<'hir> {
|
||||
}
|
||||
|
||||
// Drop AST to free memory
|
||||
std::mem::drop(ast_index);
|
||||
sess.time("drop_ast", || std::mem::drop(krate));
|
||||
drop(ast_index);
|
||||
sess.time("drop_ast", || drop(krate));
|
||||
|
||||
// Discard hygiene data, which isn't required after lowering to HIR.
|
||||
if !sess.opts.unstable_opts.keep_hygiene_data {
|
||||
|
@ -4,8 +4,6 @@ use rustc_expand::base::{self, DummyResult};
|
||||
use rustc_session::errors::report_lit_error;
|
||||
use rustc_span::symbol::Symbol;
|
||||
|
||||
use std::string::String;
|
||||
|
||||
pub fn expand_concat(
|
||||
cx: &mut base::ExtCtxt<'_>,
|
||||
sp: rustc_span::Span,
|
||||
|
@ -41,7 +41,6 @@ use rustc_span::{DebuggerVisualizerFile, DebuggerVisualizerType};
|
||||
use rustc_target::abi::{Align, Size, VariantIdx};
|
||||
|
||||
use std::collections::BTreeSet;
|
||||
use std::convert::TryFrom;
|
||||
use std::time::{Duration, Instant};
|
||||
|
||||
use itertools::Itertools;
|
||||
|
@ -1,5 +1,4 @@
|
||||
use std::borrow::Cow;
|
||||
use std::convert::TryInto;
|
||||
|
||||
use either::{Left, Right};
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
use std::assert_matches::assert_matches;
|
||||
use std::convert::TryFrom;
|
||||
|
||||
use rustc_apfloat::ieee::{Double, Single};
|
||||
use rustc_apfloat::{Float, FloatConvert};
|
||||
|
@ -2,8 +2,6 @@
|
||||
//! looking at their MIR. Intrinsics/functions supported here are shared by CTFE
|
||||
//! and miri.
|
||||
|
||||
use std::convert::TryFrom;
|
||||
|
||||
use rustc_hir::def_id::DefId;
|
||||
use rustc_middle::mir::{
|
||||
self,
|
||||
|
@ -1,5 +1,3 @@
|
||||
use std::convert::TryFrom;
|
||||
|
||||
use rustc_ast::Mutability;
|
||||
use rustc_hir::lang_items::LangItem;
|
||||
use rustc_middle::mir::TerminatorKind;
|
||||
|
@ -1,5 +1,3 @@
|
||||
use std::convert::TryFrom;
|
||||
|
||||
use rustc_apfloat::Float;
|
||||
use rustc_middle::mir;
|
||||
use rustc_middle::mir::interpret::{InterpResult, Scalar};
|
||||
|
@ -1,6 +1,5 @@
|
||||
use rustc_middle::mir::interpret::InterpResult;
|
||||
use rustc_middle::ty::{self, Ty, TyCtxt, TypeSuperVisitable, TypeVisitable, TypeVisitor};
|
||||
use std::convert::TryInto;
|
||||
use std::ops::ControlFlow;
|
||||
|
||||
/// Checks whether a type contains generic parameters which require substitution.
|
||||
|
@ -4,7 +4,6 @@
|
||||
//! That's useful because it means other passes (e.g. promotion) can rely on `const`s
|
||||
//! to be const-safe.
|
||||
|
||||
use std::convert::TryFrom;
|
||||
use std::fmt::{Display, Write};
|
||||
use std::num::NonZeroUsize;
|
||||
|
||||
|
@ -3,7 +3,6 @@ use rustc_middle::mir::*;
|
||||
use rustc_middle::ty::{Ty, TyCtxt};
|
||||
use rustc_target::abi::VariantIdx;
|
||||
|
||||
use std::convert::TryFrom;
|
||||
use std::iter::TrustedLen;
|
||||
|
||||
/// Expand `lhs = Rvalue::Aggregate(kind, operands)` into assignments to the fields.
|
||||
|
@ -1,6 +1,5 @@
|
||||
use crate::stable_hasher;
|
||||
use rustc_serialize::{Decodable, Decoder, Encodable, Encoder};
|
||||
use std::convert::TryInto;
|
||||
use std::hash::{Hash, Hasher};
|
||||
|
||||
#[cfg(test)]
|
||||
|
@ -9,7 +9,6 @@ use crate::fx::FxHashSet;
|
||||
use crate::graph::vec_graph::VecGraph;
|
||||
use crate::graph::{DirectedGraph, GraphSuccessors, WithNumEdges, WithNumNodes, WithSuccessors};
|
||||
use rustc_index::vec::{Idx, IndexVec};
|
||||
use std::cmp::Ord;
|
||||
use std::ops::Range;
|
||||
|
||||
#[cfg(test)]
|
||||
|
@ -1,5 +1,3 @@
|
||||
use std::cmp::Ord;
|
||||
|
||||
use crate::graph::{DirectedGraph, GraphSuccessors, WithNumEdges, WithNumNodes, WithSuccessors};
|
||||
use rustc_index::vec::{Idx, IndexVec};
|
||||
|
||||
|
@ -867,11 +867,9 @@ where
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
use std::borrow::Borrow;
|
||||
use std::cmp::{Eq, Ord, Ordering, PartialEq, PartialOrd};
|
||||
use std::convert::From;
|
||||
use std::cmp::Ordering;
|
||||
use std::fmt::{self, Debug};
|
||||
use std::hash::{Hash, Hasher};
|
||||
use std::marker::{Send, Sync};
|
||||
|
||||
impl<O, T: ?Sized> Deref for OwningRef<O, T> {
|
||||
type Target = T;
|
||||
@ -1096,7 +1094,6 @@ where
|
||||
// std types integration and convenience type defs
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
use std::boxed::Box;
|
||||
use std::cell::{Ref, RefCell, RefMut};
|
||||
use std::rc::Rc;
|
||||
use std::sync::Arc;
|
||||
|
@ -3,7 +3,7 @@
|
||||
mod owning_ref {
|
||||
use super::super::OwningRef;
|
||||
use super::super::{BoxRef, Erased, ErasedBoxRef, RcRef};
|
||||
use std::cmp::{Ord, Ordering, PartialEq, PartialOrd};
|
||||
use std::cmp::Ordering;
|
||||
use std::collections::hash_map::DefaultHasher;
|
||||
use std::collections::HashMap;
|
||||
use std::hash::{Hash, Hasher};
|
||||
@ -368,7 +368,7 @@ mod owning_handle {
|
||||
mod owning_ref_mut {
|
||||
use super::super::BoxRef;
|
||||
use super::super::{BoxRefMut, Erased, ErasedBoxRefMut, OwningRefMut};
|
||||
use std::cmp::{Ord, Ordering, PartialEq, PartialOrd};
|
||||
use std::cmp::Ordering;
|
||||
use std::collections::hash_map::DefaultHasher;
|
||||
use std::collections::HashMap;
|
||||
use std::hash::{Hash, Hasher};
|
||||
|
@ -86,7 +86,6 @@ use crate::fx::FxHashMap;
|
||||
|
||||
use std::borrow::Borrow;
|
||||
use std::collections::hash_map::Entry;
|
||||
use std::convert::Into;
|
||||
use std::error::Error;
|
||||
use std::fs;
|
||||
use std::path::Path;
|
||||
|
@ -1,7 +1,6 @@
|
||||
use crate::stable_hasher::{HashStable, StableHasher, StableOrd};
|
||||
use std::borrow::Borrow;
|
||||
use std::cmp::Ordering;
|
||||
use std::iter::FromIterator;
|
||||
use std::mem;
|
||||
use std::ops::{Bound, Index, IndexMut, RangeBounds};
|
||||
|
||||
|
@ -1,7 +1,6 @@
|
||||
//! A variant of `SortedMap` that preserves insertion order.
|
||||
|
||||
use std::hash::{Hash, Hasher};
|
||||
use std::iter::FromIterator;
|
||||
|
||||
use crate::stable_hasher::{HashStable, StableHasher};
|
||||
use rustc_index::vec::{Idx, IndexVec};
|
||||
|
@ -1,7 +1,5 @@
|
||||
use std::fmt;
|
||||
use std::iter::ExactSizeIterator;
|
||||
use std::iter::FusedIterator;
|
||||
use std::iter::Iterator;
|
||||
|
||||
/// Iterator which may contain instance of
|
||||
/// one of two specific implementations.
|
||||
|
@ -3,7 +3,6 @@ use crate::fx::FxHashMap;
|
||||
use arrayvec::ArrayVec;
|
||||
use std::fmt;
|
||||
use std::hash::Hash;
|
||||
use std::iter::FromIterator;
|
||||
use std::ops::Index;
|
||||
|
||||
// For pointer-sized arguments arrays
|
||||
|
@ -1,6 +1,5 @@
|
||||
use std::fmt;
|
||||
use std::hash::Hash;
|
||||
use std::iter::FromIterator;
|
||||
|
||||
use super::map::SsoHashMap;
|
||||
|
||||
|
@ -138,7 +138,7 @@ cfg_if! {
|
||||
}
|
||||
}
|
||||
|
||||
pub use std::iter::Iterator as ParallelIterator;
|
||||
pub use Iterator as ParallelIterator;
|
||||
|
||||
pub fn par_iter<T: IntoIterator>(t: T) -> T::IntoIter {
|
||||
t.into_iter()
|
||||
|
@ -76,7 +76,7 @@ where
|
||||
fn drop(&mut self) {
|
||||
// No need to drop the tag, as it's Copy
|
||||
unsafe {
|
||||
std::mem::drop(P::from_usize(self.raw.pointer_raw()));
|
||||
drop(P::from_usize(self.raw.pointer_raw()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
use std::borrow::Borrow;
|
||||
use std::fmt::Debug;
|
||||
use std::iter::FromIterator;
|
||||
use std::slice::Iter;
|
||||
use std::vec::IntoIter;
|
||||
|
||||
|
@ -45,7 +45,6 @@ use rustc_target::json::ToJson;
|
||||
|
||||
use std::borrow::Cow;
|
||||
use std::cmp::max;
|
||||
use std::default::Default;
|
||||
use std::env;
|
||||
use std::ffi::OsString;
|
||||
use std::fs;
|
||||
|
@ -55,7 +55,6 @@ wrapper:
|
||||
|
||||
```
|
||||
use std::cell::Cell;
|
||||
use std::marker::Sync;
|
||||
|
||||
struct NotThreadSafe<T> {
|
||||
value: Cell<T>,
|
||||
|
@ -59,7 +59,7 @@ into_diagnostic_arg_using_display!(
|
||||
i128,
|
||||
u128,
|
||||
std::io::Error,
|
||||
std::boxed::Box<dyn std::error::Error>,
|
||||
Box<dyn std::error::Error>,
|
||||
std::num::NonZeroU32,
|
||||
hir::Target,
|
||||
Edition,
|
||||
|
@ -34,7 +34,6 @@ use rustc_span::symbol::{kw, sym, Ident, Symbol};
|
||||
use rustc_span::{BytePos, FileName, RealFileName, Span, DUMMY_SP};
|
||||
use smallvec::{smallvec, SmallVec};
|
||||
|
||||
use std::default::Default;
|
||||
use std::iter;
|
||||
use std::path::PathBuf;
|
||||
use std::rc::Rc;
|
||||
|
@ -6,7 +6,7 @@ use rustc_span::hygiene::DesugaringKind;
|
||||
use rustc_span::symbol::Ident;
|
||||
use rustc_span::Span;
|
||||
|
||||
use std::iter::{Enumerate, ExactSizeIterator};
|
||||
use std::iter::Enumerate;
|
||||
|
||||
pub struct EnumerateAndAdjust<I> {
|
||||
enumerate: Enumerate<I>,
|
||||
|
@ -31,7 +31,6 @@ use rustc_trait_selection::traits::{
|
||||
};
|
||||
|
||||
use std::cell::LazyCell;
|
||||
use std::convert::TryInto;
|
||||
use std::iter;
|
||||
use std::ops::{ControlFlow, Deref};
|
||||
|
||||
|
@ -30,8 +30,6 @@ use rustc_middle::hir::nested_filter;
|
||||
use rustc_middle::ty::TyCtxt;
|
||||
use rustc_span::symbol::{sym, Symbol};
|
||||
use rustc_span::Span;
|
||||
use std::iter::FromIterator;
|
||||
use std::vec::Vec;
|
||||
|
||||
const LOADED_FROM_DISK: Symbol = sym::loaded_from_disk;
|
||||
const EXCEPT: Symbol = sym::except;
|
||||
|
@ -113,7 +113,6 @@ use rustc_span::Symbol;
|
||||
|
||||
use std::fs as std_fs;
|
||||
use std::io::{self, ErrorKind};
|
||||
use std::mem;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::time::{Duration, SystemTime, UNIX_EPOCH};
|
||||
|
||||
@ -305,7 +304,7 @@ pub fn prepare_session_directory(
|
||||
}
|
||||
|
||||
delete_session_dir_lock_file(sess, &lock_file_path);
|
||||
mem::drop(directory_lock);
|
||||
drop(directory_lock);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -864,7 +863,7 @@ pub fn garbage_collect_session_directories(sess: &Session) -> io::Result<()> {
|
||||
|
||||
// Let's make it explicit that the file lock is released at this point,
|
||||
// or rather, that we held on to it until here
|
||||
mem::drop(lock);
|
||||
drop(lock);
|
||||
}
|
||||
Err(_) => {
|
||||
debug!(
|
||||
@ -898,7 +897,7 @@ pub fn garbage_collect_session_directories(sess: &Session) -> io::Result<()> {
|
||||
|
||||
// Let's make it explicit that the file lock is released at this point,
|
||||
// or rather, that we held on to it until here
|
||||
mem::drop(lock);
|
||||
drop(lock);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
@ -4,7 +4,6 @@ use rustc_serialize::{Decodable, Decoder, Encodable, Encoder};
|
||||
use std::fmt;
|
||||
use std::fmt::Debug;
|
||||
use std::hash::Hash;
|
||||
use std::iter::FromIterator;
|
||||
use std::marker::PhantomData;
|
||||
use std::ops::{Index, IndexMut, RangeBounds};
|
||||
use std::slice;
|
||||
|
@ -25,7 +25,6 @@ use rustc_target::spec::{CodeModel, LinkerFlavorCli, MergeFunctions, PanicStrate
|
||||
use rustc_target::spec::{RelroLevel, SanitizerSet, SplitDebuginfo, StackProtector, TlsModel};
|
||||
|
||||
use std::collections::{BTreeMap, BTreeSet};
|
||||
use std::iter::FromIterator;
|
||||
use std::num::NonZeroUsize;
|
||||
use std::path::{Path, PathBuf};
|
||||
|
||||
|
@ -34,7 +34,6 @@ pub use crate::cursor::Cursor;
|
||||
use self::LiteralKind::*;
|
||||
use self::TokenKind::*;
|
||||
use crate::cursor::EOF_CHAR;
|
||||
use std::convert::TryFrom;
|
||||
|
||||
/// Parsed token.
|
||||
/// It doesn't contain information about data that has been parsed,
|
||||
|
@ -16,7 +16,6 @@ use rustc_target::abi::{Abi, Size, WrappingRange};
|
||||
use rustc_target::abi::{Integer, TagEncoding, Variants};
|
||||
use rustc_target::spec::abi::Abi as SpecAbi;
|
||||
|
||||
use std::cmp;
|
||||
use std::iter;
|
||||
use std::ops::ControlFlow;
|
||||
|
||||
@ -531,7 +530,7 @@ impl<'tcx> LateLintPass<'tcx> for TypeLimits {
|
||||
_ => {}
|
||||
};
|
||||
|
||||
fn is_valid<T: cmp::PartialOrd>(binop: hir::BinOp, v: T, min: T, max: T) -> bool {
|
||||
fn is_valid<T: PartialOrd>(binop: hir::BinOp, v: T, min: T, max: T) -> bool {
|
||||
match binop.node {
|
||||
hir::BinOpKind::Lt => v > min && v <= max,
|
||||
hir::BinOpKind::Le => v >= min && v < max,
|
||||
|
@ -7,7 +7,6 @@ use rustc_middle::ty::ParameterizedOverTcx;
|
||||
use rustc_serialize::opaque::FileEncoder;
|
||||
use rustc_serialize::Encoder as _;
|
||||
use rustc_span::hygiene::MacroKind;
|
||||
use std::convert::TryInto;
|
||||
use std::marker::PhantomData;
|
||||
use std::num::NonZeroUsize;
|
||||
|
||||
|
@ -3,7 +3,6 @@
|
||||
use rustc_macros::HashStable;
|
||||
use rustc_span::Symbol;
|
||||
|
||||
use std::cmp::Ord;
|
||||
use std::fmt::{self, Debug, Formatter};
|
||||
|
||||
rustc_index::newtype_index! {
|
||||
|
@ -95,7 +95,6 @@ mod pointer;
|
||||
mod queries;
|
||||
mod value;
|
||||
|
||||
use std::convert::TryFrom;
|
||||
use std::fmt;
|
||||
use std::io;
|
||||
use std::io::{Read, Write};
|
||||
|
@ -3,7 +3,6 @@ use super::{AllocId, InterpResult};
|
||||
use rustc_macros::HashStable;
|
||||
use rustc_target::abi::{HasDataLayout, Size};
|
||||
|
||||
use std::convert::{TryFrom, TryInto};
|
||||
use std::fmt;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -1,4 +1,3 @@
|
||||
use std::convert::{TryFrom, TryInto};
|
||||
use std::fmt;
|
||||
|
||||
use either::{Either, Left, Right};
|
||||
|
@ -36,7 +36,6 @@ use rustc_span::{Span, DUMMY_SP};
|
||||
use either::Either;
|
||||
|
||||
use std::borrow::Cow;
|
||||
use std::convert::TryInto;
|
||||
use std::fmt::{self, Debug, Display, Formatter, Write};
|
||||
use std::ops::{ControlFlow, Index, IndexMut};
|
||||
use std::{iter, mem};
|
||||
|
@ -12,7 +12,6 @@ use crate::ty::subst::{GenericArg, SubstsRef};
|
||||
use crate::ty::{self, Ty, TyCtxt};
|
||||
use rustc_hir::def_id::DefId;
|
||||
use rustc_span::source_map::Span;
|
||||
use std::iter::FromIterator;
|
||||
|
||||
pub mod type_op {
|
||||
use crate::ty::fold::TypeFoldable;
|
||||
|
@ -2,7 +2,6 @@ use rustc_apfloat::ieee::{Double, Single};
|
||||
use rustc_apfloat::Float;
|
||||
use rustc_serialize::{Decodable, Decoder, Encodable, Encoder};
|
||||
use rustc_target::abi::Size;
|
||||
use std::convert::{TryFrom, TryInto};
|
||||
use std::fmt;
|
||||
use std::num::NonZeroU8;
|
||||
|
||||
|
@ -1,5 +1,3 @@
|
||||
use std::convert::TryInto;
|
||||
|
||||
use super::Const;
|
||||
use crate::mir;
|
||||
use crate::mir::interpret::{AllocId, ConstValue, Scalar};
|
||||
|
@ -1,6 +1,6 @@
|
||||
use crate::traits::{ObligationCause, ObligationCauseCode};
|
||||
use crate::ty::diagnostics::suggest_constraining_type_param;
|
||||
use crate::ty::print::{FmtPrinter, Printer};
|
||||
use crate::ty::print::{with_forced_trimmed_paths, FmtPrinter, Printer};
|
||||
use crate::ty::{self, BoundRegionKind, Region, Ty, TyCtxt};
|
||||
use hir::def::DefKind;
|
||||
use rustc_errors::Applicability::{MachineApplicable, MaybeIncorrect};
|
||||
@ -162,17 +162,29 @@ impl<'tcx> fmt::Display for TypeError<'tcx> {
|
||||
),
|
||||
RegionsPlaceholderMismatch => write!(f, "one type is more general than the other"),
|
||||
ArgumentSorts(values, _) | Sorts(values) => ty::tls::with(|tcx| {
|
||||
report_maybe_different(
|
||||
f,
|
||||
&values.expected.sort_string(tcx),
|
||||
&values.found.sort_string(tcx),
|
||||
)
|
||||
let (mut expected, mut found) = with_forced_trimmed_paths!((
|
||||
values.expected.sort_string(tcx),
|
||||
values.found.sort_string(tcx),
|
||||
));
|
||||
if expected == found {
|
||||
expected = values.expected.sort_string(tcx);
|
||||
found = values.found.sort_string(tcx);
|
||||
}
|
||||
report_maybe_different(f, &expected, &found)
|
||||
}),
|
||||
Traits(values) => ty::tls::with(|tcx| {
|
||||
let (mut expected, mut found) = with_forced_trimmed_paths!((
|
||||
tcx.def_path_str(values.expected),
|
||||
tcx.def_path_str(values.found),
|
||||
));
|
||||
if expected == found {
|
||||
expected = tcx.def_path_str(values.expected);
|
||||
found = tcx.def_path_str(values.found);
|
||||
}
|
||||
report_maybe_different(
|
||||
f,
|
||||
&format!("trait `{}`", tcx.def_path_str(values.expected)),
|
||||
&format!("trait `{}`", tcx.def_path_str(values.found)),
|
||||
&format!("trait `{expected}`"),
|
||||
&format!("trait `{found}`"),
|
||||
)
|
||||
}),
|
||||
IntMismatch(ref values) => {
|
||||
@ -999,14 +1011,16 @@ fn foo(&self) -> Self::T { String::new() }
|
||||
let mut short;
|
||||
loop {
|
||||
// Look for the longest properly trimmed path that still fits in lenght_limit.
|
||||
short = FmtPrinter::new_with_limit(
|
||||
self,
|
||||
hir::def::Namespace::TypeNS,
|
||||
rustc_session::Limit(type_limit),
|
||||
)
|
||||
.pretty_print_type(ty)
|
||||
.expect("could not write to `String`")
|
||||
.into_buffer();
|
||||
short = with_forced_trimmed_paths!(
|
||||
FmtPrinter::new_with_limit(
|
||||
self,
|
||||
hir::def::Namespace::TypeNS,
|
||||
rustc_session::Limit(type_limit),
|
||||
)
|
||||
.pretty_print_type(ty)
|
||||
.expect("could not write to `String`")
|
||||
.into_buffer()
|
||||
);
|
||||
if short.len() <= length_limit || type_limit == 0 {
|
||||
break;
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ use rustc_data_structures::sso::SsoHashSet;
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::def::{self, CtorKind, DefKind, Namespace};
|
||||
use rustc_hir::def_id::{DefId, DefIdSet, CRATE_DEF_ID, LOCAL_CRATE};
|
||||
use rustc_hir::definitions::{DefPathData, DefPathDataName, DisambiguatedDefPathData};
|
||||
use rustc_hir::definitions::{DefKey, DefPathData, DefPathDataName, DisambiguatedDefPathData};
|
||||
use rustc_hir::LangItem;
|
||||
use rustc_session::config::TrimmedDefPaths;
|
||||
use rustc_session::cstore::{ExternCrate, ExternCrateSource};
|
||||
@ -23,7 +23,6 @@ use smallvec::SmallVec;
|
||||
use std::cell::Cell;
|
||||
use std::char;
|
||||
use std::collections::BTreeMap;
|
||||
use std::convert::TryFrom;
|
||||
use std::fmt::{self, Write as _};
|
||||
use std::iter;
|
||||
use std::ops::{ControlFlow, Deref, DerefMut};
|
||||
@ -63,6 +62,7 @@ thread_local! {
|
||||
static FORCE_IMPL_FILENAME_LINE: Cell<bool> = const { Cell::new(false) };
|
||||
static SHOULD_PREFIX_WITH_CRATE: Cell<bool> = const { Cell::new(false) };
|
||||
static NO_TRIMMED_PATH: Cell<bool> = const { Cell::new(false) };
|
||||
static FORCE_TRIMMED_PATH: Cell<bool> = const { Cell::new(false) };
|
||||
static NO_QUERIES: Cell<bool> = const { Cell::new(false) };
|
||||
static NO_VISIBLE_PATH: Cell<bool> = const { Cell::new(false) };
|
||||
}
|
||||
@ -116,6 +116,7 @@ define_helper!(
|
||||
/// of various rustc types, for example `std::vec::Vec` would be trimmed to `Vec`,
|
||||
/// if no other `Vec` is found.
|
||||
fn with_no_trimmed_paths(NoTrimmedGuard, NO_TRIMMED_PATH);
|
||||
fn with_forced_trimmed_paths(ForceTrimmedGuard, FORCE_TRIMMED_PATH);
|
||||
/// Prevent selection of visible paths. `Display` impl of DefId will prefer
|
||||
/// visible (public) reexports of types as paths.
|
||||
fn with_no_visible_paths(NoVisibleGuard, NO_VISIBLE_PATH);
|
||||
@ -295,11 +296,89 @@ pub trait PrettyPrinter<'tcx>:
|
||||
self.try_print_visible_def_path_recur(def_id, &mut callers)
|
||||
}
|
||||
|
||||
// Given a `DefId`, produce a short name. For types and traits, it prints *only* its name,
|
||||
// For associated items on traits it prints out the trait's name and the associated item's name.
|
||||
// For enum variants, if they have an unique name, then we only print the name, otherwise we
|
||||
// print the enum name and the variant name. Otherwise, we do not print anything and let the
|
||||
// caller use the `print_def_path` fallback.
|
||||
fn force_print_trimmed_def_path(
|
||||
mut self,
|
||||
def_id: DefId,
|
||||
) -> Result<(Self::Path, bool), Self::Error> {
|
||||
let key = self.tcx().def_key(def_id);
|
||||
let visible_parent_map = self.tcx().visible_parent_map(());
|
||||
let kind = self.tcx().def_kind(def_id);
|
||||
|
||||
let get_local_name = |this: &Self, name, def_id, key: DefKey| {
|
||||
if let Some(visible_parent) = visible_parent_map.get(&def_id)
|
||||
&& let actual_parent = this.tcx().opt_parent(def_id)
|
||||
&& let DefPathData::TypeNs(_) = key.disambiguated_data.data
|
||||
&& Some(*visible_parent) != actual_parent
|
||||
{
|
||||
this
|
||||
.tcx()
|
||||
.module_children(visible_parent)
|
||||
.iter()
|
||||
.filter(|child| child.res.opt_def_id() == Some(def_id))
|
||||
.find(|child| child.vis.is_public() && child.ident.name != kw::Underscore)
|
||||
.map(|child| child.ident.name)
|
||||
.unwrap_or(name)
|
||||
} else {
|
||||
name
|
||||
}
|
||||
};
|
||||
if let DefKind::Variant = kind
|
||||
&& let Some(symbol) = self.tcx().trimmed_def_paths(()).get(&def_id)
|
||||
{
|
||||
// If `Assoc` is unique, we don't want to talk about `Trait::Assoc`.
|
||||
self.write_str(get_local_name(&self, *symbol, def_id, key).as_str())?;
|
||||
return Ok((self, true));
|
||||
}
|
||||
if let Some(symbol) = key.get_opt_name() {
|
||||
if let DefKind::AssocConst | DefKind::AssocFn | DefKind::AssocTy = kind
|
||||
&& let Some(parent) = self.tcx().opt_parent(def_id)
|
||||
&& let parent_key = self.tcx().def_key(parent)
|
||||
&& let Some(symbol) = parent_key.get_opt_name()
|
||||
{
|
||||
// Trait
|
||||
self.write_str(get_local_name(&self, symbol, parent, parent_key).as_str())?;
|
||||
self.write_str("::")?;
|
||||
} else if let DefKind::Variant = kind
|
||||
&& let Some(parent) = self.tcx().opt_parent(def_id)
|
||||
&& let parent_key = self.tcx().def_key(parent)
|
||||
&& let Some(symbol) = parent_key.get_opt_name()
|
||||
{
|
||||
// Enum
|
||||
|
||||
// For associated items and variants, we want the "full" path, namely, include
|
||||
// the parent type in the path. For example, `Iterator::Item`.
|
||||
self.write_str(get_local_name(&self, symbol, parent, parent_key).as_str())?;
|
||||
self.write_str("::")?;
|
||||
} else if let DefKind::Struct | DefKind::Union | DefKind::Enum | DefKind::Trait
|
||||
| DefKind::TyAlias | DefKind::Fn | DefKind::Const | DefKind::Static(_) = kind
|
||||
{
|
||||
} else {
|
||||
// If not covered above, like for example items out of `impl` blocks, fallback.
|
||||
return Ok((self, false));
|
||||
}
|
||||
self.write_str(get_local_name(&self, symbol, def_id, key).as_str())?;
|
||||
return Ok((self, true));
|
||||
}
|
||||
Ok((self, false))
|
||||
}
|
||||
|
||||
/// Try to see if this path can be trimmed to a unique symbol name.
|
||||
fn try_print_trimmed_def_path(
|
||||
mut self,
|
||||
def_id: DefId,
|
||||
) -> Result<(Self::Path, bool), Self::Error> {
|
||||
if FORCE_TRIMMED_PATH.with(|flag| flag.get()) {
|
||||
let (s, trimmed) = self.force_print_trimmed_def_path(def_id)?;
|
||||
if trimmed {
|
||||
return Ok((s, true));
|
||||
}
|
||||
self = s;
|
||||
}
|
||||
if !self.tcx().sess.opts.unstable_opts.trim_diagnostic_paths
|
||||
|| matches!(self.tcx().sess.opts.trimmed_def_paths, TrimmedDefPaths::Never)
|
||||
|| NO_TRIMMED_PATH.with(|flag| flag.get())
|
||||
|
@ -1,4 +1,3 @@
|
||||
use std::convert::TryFrom;
|
||||
use std::fmt;
|
||||
|
||||
use crate::mir::interpret::{alloc_range, AllocId, Allocation, Pointer, Scalar};
|
||||
|
@ -30,7 +30,6 @@ mod test;
|
||||
mod util;
|
||||
|
||||
use std::borrow::Borrow;
|
||||
use std::convert::TryFrom;
|
||||
use std::mem;
|
||||
|
||||
impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||
|
@ -7,7 +7,6 @@ use rustc_middle::thir::*;
|
||||
use rustc_middle::ty;
|
||||
use rustc_middle::ty::TypeVisitable;
|
||||
use smallvec::SmallVec;
|
||||
use std::convert::TryInto;
|
||||
|
||||
impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||
pub(crate) fn field_match_pairs<'pat>(
|
||||
|
@ -45,7 +45,7 @@
|
||||
use std::cell::Cell;
|
||||
use std::cmp::{self, max, min, Ordering};
|
||||
use std::fmt;
|
||||
use std::iter::{once, IntoIterator};
|
||||
use std::iter::once;
|
||||
use std::ops::RangeInclusive;
|
||||
|
||||
use smallvec::{smallvec, SmallVec};
|
||||
|
@ -26,7 +26,7 @@
|
||||
//! ## `PartialOrd`
|
||||
//!
|
||||
//! Given that they represent partially ordered sets, you may be surprised that [`JoinSemiLattice`]
|
||||
//! and [`MeetSemiLattice`] do not have [`PartialOrd`][std::cmp::PartialOrd] as a supertrait. This
|
||||
//! and [`MeetSemiLattice`] do not have [`PartialOrd`] as a supertrait. This
|
||||
//! is because most standard library types use lexicographic ordering instead of set inclusion for
|
||||
//! their `PartialOrd` impl. Since we do not actually need to compare lattice elements to run a
|
||||
//! dataflow analysis, there's no need for a newtype wrapper with a custom `PartialOrd` impl. The
|
||||
|
@ -35,7 +35,6 @@ use rustc_middle::mir::visit::{MutVisitor, MutatingUseContext, PlaceContext, Vis
|
||||
use rustc_middle::mir::*;
|
||||
use rustc_middle::ty::TyCtxt;
|
||||
use smallvec::SmallVec;
|
||||
use std::convert::TryInto;
|
||||
|
||||
pub struct SimplifyCfg {
|
||||
label: String,
|
||||
|
@ -20,7 +20,6 @@ use rustc_middle::ty::{
|
||||
Const, Ty, TyCtxt,
|
||||
};
|
||||
use rustc_span::symbol::sym;
|
||||
use std::convert::TryInto;
|
||||
use std::ops::ControlFlow;
|
||||
|
||||
use crate::errors::UnusedGenericParams;
|
||||
|
@ -6,7 +6,6 @@ use rustc_ast::attr;
|
||||
use rustc_ast::token::{self, Delimiter, Nonterminal};
|
||||
use rustc_errors::{error_code, fluent, Diagnostic, IntoDiagnostic, PResult};
|
||||
use rustc_span::{sym, BytePos, Span};
|
||||
use std::convert::TryInto;
|
||||
|
||||
// Public for rustfmt usage
|
||||
#[derive(Debug)]
|
||||
|
@ -8,7 +8,6 @@ use rustc_errors::PResult;
|
||||
use rustc_session::parse::ParseSess;
|
||||
use rustc_span::{sym, Span, DUMMY_SP};
|
||||
|
||||
use std::convert::TryInto;
|
||||
use std::ops::Range;
|
||||
|
||||
/// A wrapper type to ensure that the parser handles outer attributes correctly.
|
||||
|
@ -21,7 +21,6 @@ use rustc_span::lev_distance::lev_distance;
|
||||
use rustc_span::source_map::{self, Span};
|
||||
use rustc_span::symbol::{kw, sym, Ident, Symbol};
|
||||
use rustc_span::DUMMY_SP;
|
||||
use std::convert::TryFrom;
|
||||
use std::mem;
|
||||
use thin_vec::ThinVec;
|
||||
use tracing::debug;
|
||||
|
@ -46,7 +46,7 @@ impl DepNodeIndex {
|
||||
pub const FOREVER_RED_NODE: DepNodeIndex = DepNodeIndex::from_u32(1);
|
||||
}
|
||||
|
||||
impl std::convert::From<DepNodeIndex> for QueryInvocationId {
|
||||
impl From<DepNodeIndex> for QueryInvocationId {
|
||||
#[inline]
|
||||
fn from(dep_node_index: DepNodeIndex) -> Self {
|
||||
QueryInvocationId(dep_node_index.as_u32())
|
||||
|
@ -22,7 +22,6 @@ use rustc_index::vec::{Idx, IndexVec};
|
||||
use rustc_serialize::opaque::{FileEncodeResult, FileEncoder, IntEncodedWithFixedSize, MemDecoder};
|
||||
use rustc_serialize::{Decodable, Decoder, Encodable};
|
||||
use smallvec::SmallVec;
|
||||
use std::convert::TryInto;
|
||||
|
||||
// The maximum value of `SerializedDepNodeIndex` leaves the upper two bits
|
||||
// unused so that we can store multiple index types in `CompressedHybridIndex`,
|
||||
|
@ -9,7 +9,6 @@ use rustc_data_structures::sharded::Sharded;
|
||||
use rustc_data_structures::sync::Lock;
|
||||
use rustc_data_structures::sync::WorkerLocal;
|
||||
use rustc_index::vec::{Idx, IndexVec};
|
||||
use std::default::Default;
|
||||
use std::fmt::Debug;
|
||||
use std::hash::Hash;
|
||||
use std::marker::PhantomData;
|
||||
|
@ -22,8 +22,8 @@ use {
|
||||
rustc_data_structures::{jobserver, OnDrop},
|
||||
rustc_rayon_core as rayon_core,
|
||||
rustc_span::DUMMY_SP,
|
||||
std::iter::{self, FromIterator},
|
||||
std::{mem, process},
|
||||
std::iter,
|
||||
std::process,
|
||||
};
|
||||
|
||||
/// Represents a span and a query key.
|
||||
@ -247,7 +247,7 @@ impl QueryLatch {
|
||||
jobserver::release_thread();
|
||||
waiter.condvar.wait(&mut info);
|
||||
// Release the lock before we potentially block in `acquire_thread`
|
||||
mem::drop(info);
|
||||
drop(info);
|
||||
jobserver::acquire_thread();
|
||||
}
|
||||
}
|
||||
|
@ -36,7 +36,6 @@ use rustc_span::symbol::Ident;
|
||||
use rustc_span::*;
|
||||
|
||||
use std::cell::Cell;
|
||||
use std::default::Default;
|
||||
use std::env;
|
||||
use std::fs::File;
|
||||
use std::io::BufWriter;
|
||||
|
@ -1,6 +1,5 @@
|
||||
use crate::leb128::{self, largest_max_leb128_len};
|
||||
use crate::serialize::{Decodable, Decoder, Encodable, Encoder};
|
||||
use std::convert::TryInto;
|
||||
use std::fs::File;
|
||||
use std::io::{self, Write};
|
||||
use std::mem::MaybeUninit;
|
||||
|
@ -32,7 +32,7 @@ use std::collections::btree_map::{
|
||||
use std::collections::{BTreeMap, BTreeSet};
|
||||
use std::fmt;
|
||||
use std::hash::Hash;
|
||||
use std::iter::{self, FromIterator};
|
||||
use std::iter;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::str::{self, FromStr};
|
||||
|
||||
|
@ -3,7 +3,6 @@
|
||||
use smallvec::{smallvec, SmallVec};
|
||||
use std::env;
|
||||
use std::fs;
|
||||
use std::iter::FromIterator;
|
||||
use std::path::{Path, PathBuf};
|
||||
|
||||
use crate::search_paths::{PathKind, SearchPath};
|
||||
|
@ -15,11 +15,10 @@ pub use crate::*;
|
||||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_data_structures::stable_hasher::StableHasher;
|
||||
use rustc_data_structures::sync::{AtomicU32, Lrc, MappedReadGuard, ReadGuard, RwLock};
|
||||
use std::cmp;
|
||||
use std::hash::Hash;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::sync::atomic::Ordering;
|
||||
use std::{clone::Clone, cmp};
|
||||
use std::{convert::TryFrom, unreachable};
|
||||
|
||||
use std::fs;
|
||||
use std::io;
|
||||
|
@ -9,7 +9,6 @@ use rustc_data_structures::sync::Lock;
|
||||
use rustc_macros::HashStable_Generic;
|
||||
use rustc_serialize::{Decodable, Decoder, Encodable, Encoder};
|
||||
|
||||
use std::cmp::{Ord, PartialEq, PartialOrd};
|
||||
use std::fmt;
|
||||
use std::hash::{Hash, Hasher};
|
||||
use std::str;
|
||||
@ -1974,7 +1973,6 @@ pub mod kw {
|
||||
/// For example `sym::rustfmt` or `sym::u8`.
|
||||
pub mod sym {
|
||||
use super::Symbol;
|
||||
use std::convert::TryInto;
|
||||
|
||||
#[doc(inline)]
|
||||
pub use super::sym_generated::*;
|
||||
|
@ -18,7 +18,6 @@
|
||||
#![deny(rustc::untranslatable_diagnostic)]
|
||||
#![deny(rustc::diagnostic_outside_of_impl)]
|
||||
|
||||
use std::iter::FromIterator;
|
||||
use std::path::{Path, PathBuf};
|
||||
|
||||
#[macro_use]
|
||||
|
@ -45,9 +45,7 @@ use rustc_span::symbol::{sym, Symbol};
|
||||
use serde_json::Value;
|
||||
use std::borrow::Cow;
|
||||
use std::collections::BTreeMap;
|
||||
use std::convert::TryFrom;
|
||||
use std::hash::{Hash, Hasher};
|
||||
use std::iter::FromIterator;
|
||||
use std::ops::{Deref, DerefMut};
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::str::FromStr;
|
||||
|
@ -36,7 +36,7 @@ use std::fmt;
|
||||
use super::InferCtxtPrivExt;
|
||||
use crate::infer::InferCtxtExt as _;
|
||||
use crate::traits::query::evaluate_obligation::InferCtxtExt as _;
|
||||
use rustc_middle::ty::print::with_no_trimmed_paths;
|
||||
use rustc_middle::ty::print::{with_forced_trimmed_paths, with_no_trimmed_paths};
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum GeneratorInteriorOrUpvar {
|
||||
@ -2412,6 +2412,7 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
||||
ObligationCauseCode::BindingObligation(item_def_id, span)
|
||||
| ObligationCauseCode::ExprBindingObligation(item_def_id, span, ..) => {
|
||||
let item_name = tcx.def_path_str(item_def_id);
|
||||
let short_item_name = with_forced_trimmed_paths!(tcx.def_path_str(item_def_id));
|
||||
let mut multispan = MultiSpan::from(span);
|
||||
let sm = tcx.sess.source_map();
|
||||
if let Some(ident) = tcx.opt_item_ident(item_def_id) {
|
||||
@ -2424,9 +2425,9 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
|
||||
multispan.push_span_label(ident.span, "required by a bound in this");
|
||||
}
|
||||
}
|
||||
let descr = format!("required by a bound in `{}`", item_name);
|
||||
let descr = format!("required by a bound in `{item_name}`");
|
||||
if span.is_visible(sm) {
|
||||
let msg = format!("required by this bound in `{}`", item_name);
|
||||
let msg = format!("required by this bound in `{short_item_name}`");
|
||||
multispan.push_span_label(span, msg);
|
||||
err.span_note(multispan, &descr);
|
||||
} else {
|
||||
|
@ -1,6 +1,6 @@
|
||||
#![allow(rustc::usage_of_ty_tykind)]
|
||||
|
||||
use std::cmp::{Eq, Ord, Ordering, PartialEq, PartialOrd};
|
||||
use std::cmp::Ordering;
|
||||
use std::{fmt, hash};
|
||||
|
||||
use crate::DebruijnIndex;
|
||||
|
@ -434,6 +434,9 @@ replacement is purely textual, with no consideration of the current system's
|
||||
pathname syntax. For example `--remap-path-prefix foo=bar` will match
|
||||
`foo/lib.rs` but not `./foo/lib.rs`.
|
||||
|
||||
When multiple remappings are given and several of them match, the **last**
|
||||
matching one is applied.
|
||||
|
||||
<a id="option-json"></a>
|
||||
## `--json`: configure json messages printed by the compiler
|
||||
|
||||
|
@ -246,8 +246,6 @@ impl<'a, I: Iterator<Item = Event<'a>>> Iterator for CodeBlocks<'_, 'a, I> {
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
let lines = origtext.lines().filter_map(|l| map_line(l).for_html());
|
||||
let text = lines.intersperse("\n".into()).collect::<String>();
|
||||
|
||||
let parse_result = match kind {
|
||||
CodeBlockKind::Fenced(ref lang) => {
|
||||
@ -260,7 +258,7 @@ impl<'a, I: Iterator<Item = Event<'a>>> Iterator for CodeBlocks<'_, 'a, I> {
|
||||
<pre class=\"language-{}\"><code>{}</code></pre>\
|
||||
</div>",
|
||||
lang,
|
||||
Escape(&text),
|
||||
Escape(&origtext),
|
||||
)
|
||||
.into(),
|
||||
));
|
||||
@ -270,6 +268,9 @@ impl<'a, I: Iterator<Item = Event<'a>>> Iterator for CodeBlocks<'_, 'a, I> {
|
||||
CodeBlockKind::Indented => Default::default(),
|
||||
};
|
||||
|
||||
let lines = origtext.lines().filter_map(|l| map_line(l).for_html());
|
||||
let text = lines.intersperse("\n".into()).collect::<String>();
|
||||
|
||||
compile_fail = parse_result.compile_fail;
|
||||
should_panic = parse_result.should_panic;
|
||||
ignore = parse_result.ignore;
|
||||
|
@ -309,3 +309,40 @@ fn test_find_testable_code_line() {
|
||||
t("```rust\n```\n```rust\n```", &[1, 3]);
|
||||
t("```rust\n```\n ```rust\n```", &[1, 3]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_ascii_with_prepending_hashtag() {
|
||||
fn t(input: &str, expect: &str) {
|
||||
let mut map = IdMap::new();
|
||||
let output = Markdown {
|
||||
content: input,
|
||||
links: &[],
|
||||
ids: &mut map,
|
||||
error_codes: ErrorCodes::Yes,
|
||||
edition: DEFAULT_EDITION,
|
||||
playground: &None,
|
||||
heading_offset: HeadingOffset::H2,
|
||||
}
|
||||
.into_string();
|
||||
assert_eq!(output, expect, "original: {}", input);
|
||||
}
|
||||
|
||||
t(
|
||||
r#"```ascii
|
||||
#..#.####.#....#.....##..
|
||||
#..#.#....#....#....#..#.
|
||||
####.###..#....#....#..#.
|
||||
#..#.#....#....#....#..#.
|
||||
#..#.#....#....#....#..#.
|
||||
#..#.####.####.####..##..
|
||||
```"#,
|
||||
"<div class=\"example-wrap\"><pre class=\"language-ascii\"><code>\
|
||||
#..#.####.#....#.....##..
|
||||
#..#.#....#....#....#..#.
|
||||
####.###..#....#....#..#.
|
||||
#..#.#....#....#....#..#.
|
||||
#..#.#....#....#....#..#.
|
||||
#..#.####.####.####..##..
|
||||
</code></pre></div>",
|
||||
);
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ note: required by a bound in `a::bar`
|
||||
--> $DIR/closure-return-type-must-be-sized.rs:14:19
|
||||
|
|
||||
LL | pub fn bar<F: FnOnce() -> R, R: ?Sized>() {}
|
||||
| ^^^^^^^^^^^^^ required by this bound in `a::bar`
|
||||
| ^^^^^^^^^^^^^ required by this bound in `bar`
|
||||
|
||||
error[E0277]: the size for values of type `dyn A` cannot be known at compilation time
|
||||
--> $DIR/closure-return-type-must-be-sized.rs:56:5
|
||||
@ -51,7 +51,7 @@ note: required by a bound in `b::bar`
|
||||
--> $DIR/closure-return-type-must-be-sized.rs:28:19
|
||||
|
|
||||
LL | pub fn bar<F: Fn() -> R, R: ?Sized>() {}
|
||||
| ^^^^^^^^^ required by this bound in `b::bar`
|
||||
| ^^^^^^^^^ required by this bound in `bar`
|
||||
|
||||
error[E0277]: the size for values of type `dyn A` cannot be known at compilation time
|
||||
--> $DIR/closure-return-type-must-be-sized.rs:63:5
|
||||
@ -83,7 +83,7 @@ note: required by a bound in `c::bar`
|
||||
--> $DIR/closure-return-type-must-be-sized.rs:42:19
|
||||
|
|
||||
LL | pub fn bar<F: FnMut() -> R, R: ?Sized>() {}
|
||||
| ^^^^^^^^^^^^ required by this bound in `c::bar`
|
||||
| ^^^^^^^^^^^^ required by this bound in `bar`
|
||||
|
||||
error[E0277]: the size for values of type `dyn A` cannot be known at compilation time
|
||||
--> $DIR/closure-return-type-must-be-sized.rs:70:5
|
||||
|
@ -14,7 +14,7 @@ note: required by a bound in `use_trait_impl::assert_impl`
|
||||
--> $DIR/abstract-const-as-cast-3.rs:14:23
|
||||
|
|
||||
LL | fn assert_impl<T: Trait>() {}
|
||||
| ^^^^^ required by this bound in `use_trait_impl::assert_impl`
|
||||
| ^^^^^ required by this bound in `assert_impl`
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/abstract-const-as-cast-3.rs:17:5
|
||||
@ -28,7 +28,7 @@ note: required by a bound in `use_trait_impl::assert_impl`
|
||||
--> $DIR/abstract-const-as-cast-3.rs:14:23
|
||||
|
|
||||
LL | fn assert_impl<T: Trait>() {}
|
||||
| ^^^^^ required by this bound in `use_trait_impl::assert_impl`
|
||||
| ^^^^^ required by this bound in `assert_impl`
|
||||
|
||||
error: unconstrained generic constant
|
||||
--> $DIR/abstract-const-as-cast-3.rs:20:19
|
||||
@ -46,7 +46,7 @@ note: required by a bound in `use_trait_impl::assert_impl`
|
||||
--> $DIR/abstract-const-as-cast-3.rs:14:23
|
||||
|
|
||||
LL | fn assert_impl<T: Trait>() {}
|
||||
| ^^^^^ required by this bound in `use_trait_impl::assert_impl`
|
||||
| ^^^^^ required by this bound in `assert_impl`
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/abstract-const-as-cast-3.rs:20:5
|
||||
@ -60,7 +60,7 @@ note: required by a bound in `use_trait_impl::assert_impl`
|
||||
--> $DIR/abstract-const-as-cast-3.rs:14:23
|
||||
|
|
||||
LL | fn assert_impl<T: Trait>() {}
|
||||
| ^^^^^ required by this bound in `use_trait_impl::assert_impl`
|
||||
| ^^^^^ required by this bound in `assert_impl`
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/abstract-const-as-cast-3.rs:23:5
|
||||
@ -74,7 +74,7 @@ note: required by a bound in `use_trait_impl::assert_impl`
|
||||
--> $DIR/abstract-const-as-cast-3.rs:14:23
|
||||
|
|
||||
LL | fn assert_impl<T: Trait>() {}
|
||||
| ^^^^^ required by this bound in `use_trait_impl::assert_impl`
|
||||
| ^^^^^ required by this bound in `assert_impl`
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/abstract-const-as-cast-3.rs:25:5
|
||||
@ -88,7 +88,7 @@ note: required by a bound in `use_trait_impl::assert_impl`
|
||||
--> $DIR/abstract-const-as-cast-3.rs:14:23
|
||||
|
|
||||
LL | fn assert_impl<T: Trait>() {}
|
||||
| ^^^^^ required by this bound in `use_trait_impl::assert_impl`
|
||||
| ^^^^^ required by this bound in `assert_impl`
|
||||
|
||||
error: unconstrained generic constant
|
||||
--> $DIR/abstract-const-as-cast-3.rs:35:19
|
||||
@ -106,7 +106,7 @@ note: required by a bound in `use_trait_impl_2::assert_impl`
|
||||
--> $DIR/abstract-const-as-cast-3.rs:32:23
|
||||
|
|
||||
LL | fn assert_impl<T: Trait>() {}
|
||||
| ^^^^^ required by this bound in `use_trait_impl_2::assert_impl`
|
||||
| ^^^^^ required by this bound in `assert_impl`
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/abstract-const-as-cast-3.rs:35:5
|
||||
@ -120,7 +120,7 @@ note: required by a bound in `use_trait_impl_2::assert_impl`
|
||||
--> $DIR/abstract-const-as-cast-3.rs:32:23
|
||||
|
|
||||
LL | fn assert_impl<T: Trait>() {}
|
||||
| ^^^^^ required by this bound in `use_trait_impl_2::assert_impl`
|
||||
| ^^^^^ required by this bound in `assert_impl`
|
||||
|
||||
error: unconstrained generic constant
|
||||
--> $DIR/abstract-const-as-cast-3.rs:38:19
|
||||
@ -138,7 +138,7 @@ note: required by a bound in `use_trait_impl_2::assert_impl`
|
||||
--> $DIR/abstract-const-as-cast-3.rs:32:23
|
||||
|
|
||||
LL | fn assert_impl<T: Trait>() {}
|
||||
| ^^^^^ required by this bound in `use_trait_impl_2::assert_impl`
|
||||
| ^^^^^ required by this bound in `assert_impl`
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/abstract-const-as-cast-3.rs:38:5
|
||||
@ -152,7 +152,7 @@ note: required by a bound in `use_trait_impl_2::assert_impl`
|
||||
--> $DIR/abstract-const-as-cast-3.rs:32:23
|
||||
|
|
||||
LL | fn assert_impl<T: Trait>() {}
|
||||
| ^^^^^ required by this bound in `use_trait_impl_2::assert_impl`
|
||||
| ^^^^^ required by this bound in `assert_impl`
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/abstract-const-as-cast-3.rs:41:5
|
||||
@ -166,7 +166,7 @@ note: required by a bound in `use_trait_impl_2::assert_impl`
|
||||
--> $DIR/abstract-const-as-cast-3.rs:32:23
|
||||
|
|
||||
LL | fn assert_impl<T: Trait>() {}
|
||||
| ^^^^^ required by this bound in `use_trait_impl_2::assert_impl`
|
||||
| ^^^^^ required by this bound in `assert_impl`
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/abstract-const-as-cast-3.rs:43:5
|
||||
@ -180,7 +180,7 @@ note: required by a bound in `use_trait_impl_2::assert_impl`
|
||||
--> $DIR/abstract-const-as-cast-3.rs:32:23
|
||||
|
|
||||
LL | fn assert_impl<T: Trait>() {}
|
||||
| ^^^^^ required by this bound in `use_trait_impl_2::assert_impl`
|
||||
| ^^^^^ required by this bound in `assert_impl`
|
||||
|
||||
error: aborting due to 12 previous errors
|
||||
|
||||
|
@ -1,9 +1,20 @@
|
||||
// compile-flags: --diagnostic-width=60
|
||||
// normalize-stderr-test: "long-type-\d+" -> "long-type-hash"
|
||||
|
||||
struct Atype<T, K>(T, K);
|
||||
struct Btype<T, K>(T, K);
|
||||
struct Ctype<T, K>(T, K);
|
||||
mod a {
|
||||
// Force the "short path for unique types" machinery to trip up
|
||||
pub struct Atype;
|
||||
pub struct Btype;
|
||||
pub struct Ctype;
|
||||
}
|
||||
|
||||
mod b {
|
||||
pub struct Atype<T, K>(T, K);
|
||||
pub struct Btype<T, K>(T, K);
|
||||
pub struct Ctype<T, K>(T, K);
|
||||
}
|
||||
|
||||
use b::*;
|
||||
|
||||
fn main() {
|
||||
let x: Atype<
|
||||
|
@ -1,5 +1,5 @@
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/long-E0308.rs:33:9
|
||||
--> $DIR/long-E0308.rs:44:9
|
||||
|
|
||||
LL | let x: Atype<
|
||||
| _____________-
|
||||
@ -24,7 +24,7 @@ LL | | ))))))))))))))))))))))))))))));
|
||||
the full type name has been written to '$TEST_BUILD_DIR/diagnostic-width/long-E0308/long-E0308.long-type-hash.txt'
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/long-E0308.rs:46:26
|
||||
--> $DIR/long-E0308.rs:57:26
|
||||
|
|
||||
LL | ))))))))))))))))) == Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(O...
|
||||
| __________________________^
|
||||
@ -40,7 +40,7 @@ LL | | ))))))))))))))))))))))));
|
||||
the full type name has been written to '$TEST_BUILD_DIR/diagnostic-width/long-E0308/long-E0308.long-type-hash.txt'
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/long-E0308.rs:77:9
|
||||
--> $DIR/long-E0308.rs:88:9
|
||||
|
|
||||
LL | let x: Atype<
|
||||
| ____________-
|
||||
@ -59,7 +59,7 @@ LL | | > = ();
|
||||
found unit type `()`
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/long-E0308.rs:80:17
|
||||
--> $DIR/long-E0308.rs:91:17
|
||||
|
|
||||
LL | let _: () = Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(Ok(O...
|
||||
| ____________--___^
|
||||
|
@ -2,7 +2,7 @@ error[E0308]: mismatched types
|
||||
--> $DIR/disambiguate-identical-names.rs:13:10
|
||||
|
|
||||
LL | test(&v);
|
||||
| ---- ^^ expected struct `std::vec::Vec`, found struct `HashMap`
|
||||
| ---- ^^ expected struct `Vec`, found struct `HashMap`
|
||||
| |
|
||||
| arguments to this function are incorrect
|
||||
|
|
||||
|
@ -2,7 +2,7 @@ error[E0308]: mismatched types
|
||||
--> $DIR/no-implicit-dyn-star.rs:6:48
|
||||
|
|
||||
LL | dyn_star_foreign::require_dyn_star_display(1usize);
|
||||
| ------------------------------------------ ^^^^^^ expected trait object `dyn std::fmt::Display`, found `usize`
|
||||
| ------------------------------------------ ^^^^^^ expected trait object `dyn Display`, found `usize`
|
||||
| |
|
||||
| arguments to this function are incorrect
|
||||
|
|
||||
|
@ -8,7 +8,7 @@ note: required by a bound in `foo_defn::Foo::Bar`
|
||||
--> $DIR/auxiliary/foo_defn.rs:4:15
|
||||
|
|
||||
LL | type Bar: AsRef<()>;
|
||||
| ^^^^^^^^^ required by this bound in `foo_defn::Foo::Bar`
|
||||
| ^^^^^^^^^ required by this bound in `Foo::Bar`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -4,7 +4,7 @@ error[E0308]: mismatched types
|
||||
LL | match [5..4, 99..105, 43..44] {
|
||||
| ----------------------- this expression has type `[std::ops::Range<{integer}>; 3]`
|
||||
LL | [_, 99.., _] => {},
|
||||
| ^^ expected struct `std::ops::Range`, found integer
|
||||
| ^^ expected struct `Range`, found integer
|
||||
|
|
||||
= note: expected struct `std::ops::Range<{integer}>`
|
||||
found type `{integer}`
|
||||
|
@ -10,7 +10,7 @@ error[E0308]: mismatched types
|
||||
LL | match [5..4, 99..105, 43..44] {
|
||||
| ----------------------- this expression has type `[std::ops::Range<{integer}>; 3]`
|
||||
LL | [_, 99..] => {},
|
||||
| ^^ expected struct `std::ops::Range`, found integer
|
||||
| ^^ expected struct `Range`, found integer
|
||||
|
|
||||
= note: expected struct `std::ops::Range<{integer}>`
|
||||
found type `{integer}`
|
||||
|
@ -4,7 +4,7 @@ error[E0308]: mismatched types
|
||||
LL | match [5..4, 99..105, 43..44] {
|
||||
| ----------------------- this expression has type `[std::ops::Range<{integer}>; 3]`
|
||||
LL | [..9, 99..100, _] => {},
|
||||
| ^ expected struct `std::ops::Range`, found integer
|
||||
| ^ expected struct `Range`, found integer
|
||||
|
|
||||
= note: expected struct `std::ops::Range<{integer}>`
|
||||
found type `{integer}`
|
||||
@ -17,7 +17,7 @@ LL | match [5..4, 99..105, 43..44] {
|
||||
LL | [..9, 99..100, _] => {},
|
||||
| ^^ --- this is of type `{integer}`
|
||||
| |
|
||||
| expected struct `std::ops::Range`, found integer
|
||||
| expected struct `Range`, found integer
|
||||
|
|
||||
= note: expected struct `std::ops::Range<{integer}>`
|
||||
found type `{integer}`
|
||||
@ -28,7 +28,7 @@ error[E0308]: mismatched types
|
||||
LL | match [5..4, 99..105, 43..44] {
|
||||
| ----------------------- this expression has type `[std::ops::Range<{integer}>; 3]`
|
||||
LL | [..9, 99..100, _] => {},
|
||||
| -- ^^^ expected struct `std::ops::Range`, found integer
|
||||
| -- ^^^ expected struct `Range`, found integer
|
||||
| |
|
||||
| this is of type `{integer}`
|
||||
|
|
||||
|
@ -15,7 +15,7 @@ LL | type Foo = impl PartialEq<(Foo, i32)>;
|
||||
LL | fn eq(&self, _other: &(Foo, i32)) -> bool {
|
||||
| ^^^^^^^^^^^
|
||||
| |
|
||||
| expected struct `a::Bar`, found opaque type
|
||||
| expected struct `Bar`, found opaque type
|
||||
| help: change the parameter type to match the trait: `&(a::Bar, i32)`
|
||||
|
|
||||
= note: expected fn pointer `fn(&a::Bar, &(a::Bar, i32)) -> _`
|
||||
@ -38,7 +38,7 @@ LL | type Foo = impl PartialEq<(Foo, i32)>;
|
||||
LL | fn eq(&self, _other: &(Bar, i32)) -> bool {
|
||||
| ^^^^^^^^^^^
|
||||
| |
|
||||
| expected opaque type, found struct `b::Bar`
|
||||
| expected opaque type, found struct `Bar`
|
||||
| help: change the parameter type to match the trait: `&(b::Foo, i32)`
|
||||
|
|
||||
= note: expected fn pointer `fn(&b::Bar, &(b::Foo, i32)) -> _`
|
||||
|
@ -11,7 +11,7 @@ note: required by a bound in `fold`
|
||||
--> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
|
||||
|
|
||||
LL | F: FnMut(B, Self::Item) -> B,
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `fold`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `Iterator::fold`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -18,7 +18,7 @@ note: required by a bound in `cloned`
|
||||
--> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
|
||||
|
|
||||
LL | Self: Sized + Iterator<Item = &'a T>,
|
||||
| ^^^^^^^^^^^^ required by this bound in `cloned`
|
||||
| ^^^^^^^^^^^^ required by this bound in `Iterator::cloned`
|
||||
|
||||
error[E0599]: the method `collect` exists for struct `Cloned<TakeWhile<&mut std::vec::IntoIter<u8>, [closure@$DIR/issue-31173.rs:8:21: 8:25]>>`, but its trait bounds were not satisfied
|
||||
--> $DIR/issue-31173.rs:13:10
|
||||
|
@ -12,7 +12,7 @@ note: required by a bound in `cloned`
|
||||
--> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
|
||||
|
|
||||
LL | Self: Sized + Iterator<Item = &'a T>,
|
||||
| ^^^^^^^^^^^^ required by this bound in `cloned`
|
||||
| ^^^^^^^^^^^^ required by this bound in `Iterator::cloned`
|
||||
|
||||
error[E0271]: expected `std::collections::hash_map::Iter<'_, _, _>` to be an iterator that yields `&_`, but it yields `(&_, &_)`
|
||||
--> $DIR/issue-33941.rs:6:14
|
||||
|
@ -26,7 +26,7 @@ note: required by a bound in `collect`
|
||||
--> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
|
||||
|
|
||||
LL | fn collect<B: FromIterator<Self::Item>>(self) -> B
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `collect`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `Iterator::collect`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
@ -12,7 +12,7 @@ note: required by a bound in `collect`
|
||||
--> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
|
||||
|
|
||||
LL | fn collect<B: FromIterator<Self::Item>>(self) -> B
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `collect`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `Iterator::collect`
|
||||
|
||||
error[E0277]: a value of type `Vec<f64>` cannot be built from an iterator over elements of type `&f64`
|
||||
--> $DIR/issue-66923-show-error-for-correct-call.rs:12:14
|
||||
@ -28,7 +28,7 @@ note: required by a bound in `collect`
|
||||
--> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
|
||||
|
|
||||
LL | fn collect<B: FromIterator<Self::Item>>(self) -> B
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `collect`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `Iterator::collect`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
@ -11,7 +11,7 @@ note: required by a bound in `collect`
|
||||
--> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
|
||||
|
|
||||
LL | fn collect<B: FromIterator<Self::Item>>(self) -> B
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `collect`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `Iterator::collect`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
@ -19,7 +19,7 @@ note: required by a bound in `collect`
|
||||
--> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
|
||||
|
|
||||
LL | fn collect<B: FromIterator<Self::Item>>(self) -> B
|
||||
| ^ required by this bound in `collect`
|
||||
| ^ required by this bound in `Iterator::collect`
|
||||
|
||||
error[E0277]: a slice of type `[i32]` cannot be built since `[i32]` has no definite size
|
||||
--> $DIR/collect-into-slice.rs:6:30
|
||||
@ -34,7 +34,7 @@ note: required by a bound in `collect`
|
||||
--> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
|
||||
|
|
||||
LL | fn collect<B: FromIterator<Self::Item>>(self) -> B
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `collect`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `Iterator::collect`
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
@ -11,7 +11,7 @@ note: required by a bound in `collect`
|
||||
--> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
|
||||
|
|
||||
LL | fn collect<B: FromIterator<Self::Item>>(self) -> B
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `collect`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `Iterator::collect`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user