mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-17 05:25:37 +03:00
Auto merge of #74388 - Manishearth:rollup-i7iueu8, r=Manishearth
Rollup of 7 pull requests Successful merges: - #73421 (Clarify effect of orphan rule changes on From/Into) - #74037 (Update reference to CONTRIBUTING.md) - #74203 (Enforce the static symbol order.) - #74295 (Add and fix BTreeMap comments) - #74352 (Use local links in the alloc docs.) - #74377 (Move libstd's default feature to libtest) - #74381 (Update docs for str::as_bytes_mut.) Failed merges: r? @ghost
This commit is contained in:
@@ -4,5 +4,12 @@ Thank you for your interest in contributing to Rust!
|
||||
|
||||
To get started, read the [Getting Started] guide in the [rustc-dev-guide].
|
||||
|
||||
## Bug reports
|
||||
|
||||
Did a compiler error message tell you to come here? If you want to create an ICE report,
|
||||
refer to [this section][contributing-bug-reports] and [open an issue][issue template].
|
||||
|
||||
[Getting Started]: https://rustc-dev-guide.rust-lang.org/getting-started.html
|
||||
[rustc-dev-guide]: https://rustc-dev-guide.rust-lang.org/
|
||||
[contributing-bug-reports]: https://rustc-dev-guide.rust-lang.org/contributing.html#bug-reports
|
||||
[issue template]: https://github.com/rust-lang/rust/issues/new/choose
|
||||
|
||||
@@ -773,7 +773,8 @@ pub fn cargo(
|
||||
let my_out = match mode {
|
||||
// This is the intended out directory for compiler documentation.
|
||||
Mode::Rustc | Mode::ToolRustc | Mode::Codegen => self.compiler_doc_out(target),
|
||||
_ => self.crate_doc_out(target),
|
||||
Mode::Std => out_dir.join(target).join("doc"),
|
||||
_ => panic!("doc mode {:?} not expected", mode),
|
||||
};
|
||||
let rustdoc = self.rustdoc(compiler);
|
||||
self.clear_if_dirty(&my_out, &rustdoc);
|
||||
|
||||
+15
-24
@@ -417,21 +417,6 @@ fn run(self, builder: &Builder<'_>) {
|
||||
builder.ensure(compile::Std { compiler, target });
|
||||
let out_dir = builder.stage_out(compiler, Mode::Std).join(target).join("doc");
|
||||
|
||||
// Here what we're doing is creating a *symlink* (directory junction on
|
||||
// Windows) to the final output location. This is not done as an
|
||||
// optimization but rather for correctness. We've got three trees of
|
||||
// documentation, one for std, one for test, and one for rustc. It's then
|
||||
// our job to merge them all together.
|
||||
//
|
||||
// Unfortunately rustbuild doesn't know nearly as well how to merge doc
|
||||
// trees as rustdoc does itself, so instead of actually having three
|
||||
// separate trees we just have rustdoc output to the same location across
|
||||
// all of them.
|
||||
//
|
||||
// This way rustdoc generates output directly into the output, and rustdoc
|
||||
// will also directly handle merging.
|
||||
let my_out = builder.crate_doc_out(target);
|
||||
t!(symlink_dir_force(&builder.config, &my_out, &out_dir));
|
||||
t!(fs::copy(builder.src.join("src/doc/rust.css"), out.join("rust.css")));
|
||||
|
||||
let run_cargo_rustdoc_for = |package: &str| {
|
||||
@@ -439,12 +424,9 @@ fn run(self, builder: &Builder<'_>) {
|
||||
builder.cargo(compiler, Mode::Std, SourceType::InTree, target, "rustdoc");
|
||||
compile::std_cargo(builder, target, compiler.stage, &mut cargo);
|
||||
|
||||
cargo.arg("-p").arg(package);
|
||||
// Create all crate output directories first to make sure rustdoc uses
|
||||
// relative links.
|
||||
// FIXME: Cargo should probably do this itself.
|
||||
t!(fs::create_dir_all(out_dir.join(package)));
|
||||
cargo
|
||||
.arg("-p")
|
||||
.arg(package)
|
||||
.arg("--")
|
||||
.arg("--markdown-css")
|
||||
.arg("rust.css")
|
||||
@@ -462,11 +444,17 @@ fn run(self, builder: &Builder<'_>) {
|
||||
// folder structure, that would also build internal crates that we do
|
||||
// not want to show in documentation. These crates will later be visited
|
||||
// by the rustc step, so internal documentation will show them.
|
||||
let krates = ["alloc", "core", "std", "proc_macro", "test"];
|
||||
//
|
||||
// Note that the order here is important! The crates need to be
|
||||
// processed starting from the leaves, otherwise rustdoc will not
|
||||
// create correct links between crates because rustdoc depends on the
|
||||
// existence of the output directories to know if it should be a local
|
||||
// or remote link.
|
||||
let krates = ["core", "alloc", "std", "proc_macro", "test"];
|
||||
for krate in &krates {
|
||||
run_cargo_rustdoc_for(krate);
|
||||
}
|
||||
builder.cp_r(&my_out, &out);
|
||||
builder.cp_r(&out_dir, &out);
|
||||
|
||||
// Look for src/libstd, src/libcore etc in the `x.py doc` arguments and
|
||||
// open the corresponding rendered docs.
|
||||
@@ -529,8 +517,11 @@ fn run(self, builder: &Builder<'_>) {
|
||||
// Build rustc.
|
||||
builder.ensure(compile::Rustc { compiler, target });
|
||||
|
||||
// We do not symlink to the same shared folder that already contains std library
|
||||
// documentation from previous steps as we do not want to include that.
|
||||
// This uses a shared directory so that librustdoc documentation gets
|
||||
// correctly built and merged with the rustc documentation. This is
|
||||
// needed because rustdoc is built in a different directory from
|
||||
// rustc. rustdoc needs to be able to see everything, for example when
|
||||
// merging the search index, or generating local (relative) links.
|
||||
let out_dir = builder.stage_out(compiler, Mode::Rustc).join(target).join("doc");
|
||||
t!(symlink_dir_force(&builder.config, &out, &out_dir));
|
||||
|
||||
|
||||
@@ -612,13 +612,6 @@ fn md_doc_out(&self, target: Interned<String>) -> Interned<PathBuf> {
|
||||
INTERNER.intern_path(self.out.join(&*target).join("md-doc"))
|
||||
}
|
||||
|
||||
/// Output directory for all crate documentation for a target (temporary)
|
||||
///
|
||||
/// The artifacts here are then copied into `doc_out` above.
|
||||
fn crate_doc_out(&self, target: Interned<String>) -> PathBuf {
|
||||
self.out.join(&*target).join("crate-docs")
|
||||
}
|
||||
|
||||
/// Returns `true` if no custom `llvm-config` is set for the specified target.
|
||||
///
|
||||
/// If no custom `llvm-config` was specified then Rust's llvm will be used.
|
||||
|
||||
@@ -1697,6 +1697,8 @@ pub struct DrainFilter<'a, K, V, F>
|
||||
pred: F,
|
||||
inner: DrainFilterInner<'a, K, V>,
|
||||
}
|
||||
/// Most of the implementation of DrainFilter, independent of the type
|
||||
/// of the predicate, thus also serving for BTreeSet::DrainFilter.
|
||||
pub(super) struct DrainFilterInner<'a, K: 'a, V: 'a> {
|
||||
length: &'a mut usize,
|
||||
cur_leaf_edge: Option<Handle<NodeRef<marker::Mut<'a>, K, V, marker::Leaf>, marker::Edge>>,
|
||||
|
||||
@@ -161,15 +161,16 @@ pub unsafe fn next_back_unchecked(&mut self) -> (&'a mut K, &'a mut V) {
|
||||
impl<K, V> Handle<NodeRef<marker::Owned, K, V, marker::Leaf>, marker::Edge> {
|
||||
/// Moves the leaf edge handle to the next leaf edge and returns the key and value
|
||||
/// in between, while deallocating any node left behind.
|
||||
/// Unsafe for three reasons:
|
||||
/// Unsafe for two reasons:
|
||||
/// - The caller must ensure that the leaf edge is not the last one in the tree
|
||||
/// and is not a handle previously resulting from counterpart `next_back_unchecked`.
|
||||
/// - If the leaf edge is the last edge of a node, that node and possibly ancestors
|
||||
/// - Further use of the updated leaf edge handle is very dangerous. In particular,
|
||||
/// if the leaf edge is the last edge of a node, that node and possibly ancestors
|
||||
/// will be deallocated, while the reference to those nodes in the surviving ancestor
|
||||
/// is left dangling; thus further use of the leaf edge handle is dangerous.
|
||||
/// It is, however, safe to call this method again on the updated handle.
|
||||
/// if the two preconditions above hold.
|
||||
/// - Using the updated handle may well invalidate the returned references.
|
||||
/// is left dangling.
|
||||
/// The only safe way to proceed with the updated handle is to compare it, drop it,
|
||||
/// call this method again subject to both preconditions listed in the first point,
|
||||
/// or call counterpart `next_back_unchecked` subject to its preconditions.
|
||||
pub unsafe fn next_unchecked(&mut self) -> (K, V) {
|
||||
unsafe {
|
||||
replace(self, |leaf_edge| {
|
||||
@@ -183,15 +184,16 @@ pub unsafe fn next_unchecked(&mut self) -> (K, V) {
|
||||
|
||||
/// Moves the leaf edge handle to the previous leaf edge and returns the key
|
||||
/// and value in between, while deallocating any node left behind.
|
||||
/// Unsafe for three reasons:
|
||||
/// Unsafe for two reasons:
|
||||
/// - The caller must ensure that the leaf edge is not the first one in the tree
|
||||
/// and is not a handle previously resulting from counterpart `next_unchecked`.
|
||||
/// - If the lead edge is the first edge of a node, that node and possibly ancestors
|
||||
/// - Further use of the updated leaf edge handle is very dangerous. In particular,
|
||||
/// if the leaf edge is the first edge of a node, that node and possibly ancestors
|
||||
/// will be deallocated, while the reference to those nodes in the surviving ancestor
|
||||
/// is left dangling; thus further use of the leaf edge handle is dangerous.
|
||||
/// It is, however, safe to call this method again on the updated handle.
|
||||
/// if the two preconditions above hold.
|
||||
/// - Using the updated handle may well invalidate the returned references.
|
||||
/// is left dangling.
|
||||
/// The only safe way to proceed with the updated handle is to compare it, drop it,
|
||||
/// call this method again subject to both preconditions listed in the first point,
|
||||
/// or call counterpart `next_unchecked` subject to its preconditions.
|
||||
pub unsafe fn next_back_unchecked(&mut self) -> (K, V) {
|
||||
unsafe {
|
||||
replace(self, |leaf_edge| {
|
||||
|
||||
@@ -94,7 +94,8 @@ struct InternalNode<K, V> {
|
||||
data: LeafNode<K, V>,
|
||||
|
||||
/// The pointers to the children of this node. `len + 1` of these are considered
|
||||
/// initialized and valid.
|
||||
/// initialized and valid. Although during the process of `into_iter` or `drop`,
|
||||
/// some pointers are dangling while others still need to be traversed.
|
||||
edges: [MaybeUninit<BoxedNode<K, V>>; 2 * B],
|
||||
}
|
||||
|
||||
@@ -408,7 +409,7 @@ pub unsafe fn deallocate_and_ascend(
|
||||
|
||||
impl<'a, K, V, Type> NodeRef<marker::Mut<'a>, K, V, Type> {
|
||||
/// Unsafely asserts to the compiler some static information about whether this
|
||||
/// node is a `Leaf`.
|
||||
/// node is a `Leaf` or an `Internal`.
|
||||
unsafe fn cast_unchecked<NewType>(&mut self) -> NodeRef<marker::Mut<'_>, K, V, NewType> {
|
||||
NodeRef { height: self.height, node: self.node, root: self.root, _marker: PhantomData }
|
||||
}
|
||||
@@ -515,7 +516,7 @@ fn into_slices_mut(mut self) -> (&'a mut [K], &'a mut [V]) {
|
||||
}
|
||||
|
||||
impl<'a, K, V> NodeRef<marker::Mut<'a>, K, V, marker::Leaf> {
|
||||
/// Adds a key/value pair the end of the node.
|
||||
/// Adds a key/value pair to the end of the node.
|
||||
pub fn push(&mut self, key: K, val: V) {
|
||||
assert!(self.len() < CAPACITY);
|
||||
|
||||
@@ -602,8 +603,10 @@ pub fn push_front(&mut self, key: K, val: V, edge: Root<K, V>) {
|
||||
}
|
||||
|
||||
impl<'a, K, V> NodeRef<marker::Mut<'a>, K, V, marker::LeafOrInternal> {
|
||||
/// Removes a key/value pair from the end of this node. If this is an internal node,
|
||||
/// also removes the edge that was to the right of that pair.
|
||||
/// Removes a key/value pair from the end of this node and returns the pair.
|
||||
/// If this is an internal node, also removes the edge that was to the right
|
||||
/// of that pair and returns the orphaned node that this edge owned with its
|
||||
/// parent erased.
|
||||
pub fn pop(&mut self) -> (K, V, Option<Root<K, V>>) {
|
||||
assert!(self.len() > 0);
|
||||
|
||||
@@ -883,7 +886,7 @@ fn correct_parent_link(mut self) {
|
||||
}
|
||||
|
||||
/// Unsafely asserts to the compiler some static information about whether the underlying
|
||||
/// node of this handle is a `Leaf`.
|
||||
/// node of this handle is a `Leaf` or an `Internal`.
|
||||
unsafe fn cast_unchecked<NewType>(
|
||||
&mut self,
|
||||
) -> Handle<NodeRef<marker::Mut<'_>, K, V, NewType>, marker::Edge> {
|
||||
|
||||
@@ -18,8 +18,9 @@
|
||||
//! [`TryFrom<T>`][`TryFrom`] rather than [`Into<U>`][`Into`] or [`TryInto<U>`][`TryInto`],
|
||||
//! as [`From`] and [`TryFrom`] provide greater flexibility and offer
|
||||
//! equivalent [`Into`] or [`TryInto`] implementations for free, thanks to a
|
||||
//! blanket implementation in the standard library. Only implement [`Into`] or [`TryInto`]
|
||||
//! when a conversion to a type outside the current crate is required.
|
||||
//! blanket implementation in the standard library. When targeting a version prior to Rust 1.41, it
|
||||
//! may be necessary to implement [`Into`] or [`TryInto`] directly when converting to a type
|
||||
//! outside the current crate.
|
||||
//!
|
||||
//! # Generic Implementations
|
||||
//!
|
||||
@@ -298,8 +299,10 @@ pub trait Into<T>: Sized {
|
||||
/// because implementing `From` automatically provides one with an implementation of [`Into`]
|
||||
/// thanks to the blanket implementation in the standard library.
|
||||
///
|
||||
/// Only implement [`Into`] if a conversion to a type outside the current crate is required.
|
||||
/// `From` cannot do these type of conversions because of Rust's orphaning rules.
|
||||
/// Only implement [`Into`] when targeting a version prior to Rust 1.41 and converting to a type
|
||||
/// outside the current crate.
|
||||
/// `From` was not able to do these types of conversions in earlier versions because of Rust's
|
||||
/// orphaning rules.
|
||||
/// See [`Into`] for more details.
|
||||
///
|
||||
/// Prefer using [`Into`] over using `From` when specifying trait bounds on a generic function.
|
||||
|
||||
@@ -2374,11 +2374,14 @@ union Slices<'a> {
|
||||
unsafe { Slices { str: self }.slice }
|
||||
}
|
||||
|
||||
/// Converts a mutable string slice to a mutable byte slice. To convert the
|
||||
/// mutable byte slice back into a mutable string slice, use the
|
||||
/// [`str::from_utf8_mut`] function.
|
||||
/// Converts a mutable string slice to a mutable byte slice.
|
||||
///
|
||||
/// [`str::from_utf8_mut`]: ./str/fn.from_utf8_mut.html
|
||||
/// # Safety
|
||||
///
|
||||
/// The caller must ensure that the content of the slice is valid UTF-8
|
||||
/// before the borrow ends and the underlying `str` is used.
|
||||
///
|
||||
/// Use of a `str` whose contents are not valid UTF-8 is undefined behavior.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
|
||||
@@ -65,8 +65,8 @@
|
||||
/// Exit status code used for compilation failures and invalid flags.
|
||||
pub const EXIT_FAILURE: i32 = 1;
|
||||
|
||||
const BUG_REPORT_URL: &str = "https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.\
|
||||
md#bug-reports";
|
||||
const BUG_REPORT_URL: &str = "https://github.com/rust-lang/rust/issues/new\
|
||||
?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md";
|
||||
|
||||
const ICE_REPORT_COMPILER_FLAGS: &[&str] = &["Z", "C", "crate-type"];
|
||||
|
||||
|
||||
@@ -87,18 +87,29 @@ pub fn symbols(input: TokenStream) -> TokenStream {
|
||||
let mut prefill_stream = quote! {};
|
||||
let mut counter = 0u32;
|
||||
let mut keys = HashSet::<String>::new();
|
||||
let mut prev_key: Option<String> = None;
|
||||
let mut errors = Vec::<String>::new();
|
||||
|
||||
let mut check_dup = |str: &str| {
|
||||
let mut check_dup = |str: &str, errors: &mut Vec<String>| {
|
||||
if !keys.insert(str.to_string()) {
|
||||
panic!("Symbol `{}` is duplicated", str);
|
||||
errors.push(format!("Symbol `{}` is duplicated", str));
|
||||
}
|
||||
};
|
||||
|
||||
let mut check_order = |str: &str, errors: &mut Vec<String>| {
|
||||
if let Some(ref prev_str) = prev_key {
|
||||
if str < prev_str {
|
||||
errors.push(format!("Symbol `{}` must precede `{}`", str, prev_str));
|
||||
}
|
||||
}
|
||||
prev_key = Some(str.to_string());
|
||||
};
|
||||
|
||||
// Generate the listed keywords.
|
||||
for keyword in &input.keywords.0 {
|
||||
let name = &keyword.name;
|
||||
let value = &keyword.value;
|
||||
check_dup(&value.value());
|
||||
check_dup(&value.value(), &mut errors);
|
||||
prefill_stream.extend(quote! {
|
||||
#value,
|
||||
});
|
||||
@@ -116,7 +127,8 @@ pub fn symbols(input: TokenStream) -> TokenStream {
|
||||
Some(value) => value.value(),
|
||||
None => name.to_string(),
|
||||
};
|
||||
check_dup(&value);
|
||||
check_dup(&value, &mut errors);
|
||||
check_order(&name.to_string(), &mut errors);
|
||||
prefill_stream.extend(quote! {
|
||||
#value,
|
||||
});
|
||||
@@ -131,7 +143,7 @@ pub fn symbols(input: TokenStream) -> TokenStream {
|
||||
// Generate symbols for the strings "0", "1", ..., "9".
|
||||
for n in 0..10 {
|
||||
let n = n.to_string();
|
||||
check_dup(&n);
|
||||
check_dup(&n, &mut errors);
|
||||
prefill_stream.extend(quote! {
|
||||
#n,
|
||||
});
|
||||
@@ -141,6 +153,13 @@ pub fn symbols(input: TokenStream) -> TokenStream {
|
||||
counter += 1;
|
||||
}
|
||||
|
||||
if !errors.is_empty() {
|
||||
for error in errors.into_iter() {
|
||||
eprintln!("error: {}", error)
|
||||
}
|
||||
panic!("errors in `Keywords` and/or `Symbols`");
|
||||
}
|
||||
|
||||
let tt = TokenStream::from(quote! {
|
||||
macro_rules! keywords {
|
||||
() => {
|
||||
|
||||
+123
-114
@@ -19,6 +19,7 @@
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
|
||||
// The proc macro code for this is in `src/librustc_macros/src/symbols.rs`.
|
||||
symbols! {
|
||||
// After modifying this list adjust `is_special`, `is_used_keyword`/`is_unused_keyword`,
|
||||
// this should be rarely necessary though if the keywords are kept in alphabetic order.
|
||||
@@ -113,8 +114,79 @@
|
||||
// As well as the symbols listed, there are symbols for the the strings
|
||||
// "0", "1", ..., "9", which are accessible via `sym::integer`.
|
||||
//
|
||||
// Keep this list in sorted order, as defined by the Unix `sort` utility.
|
||||
// The proc macro will abort if symbols are not in alphabetical order (as
|
||||
// defined by `impl Ord for str`) or if any symbols are duplicated. Vim
|
||||
// users can sort the list by selecting it and executing the command
|
||||
// `:'<,'>!LC_ALL=C sort`.
|
||||
//
|
||||
// There is currently no checking that all symbols are used; that would be
|
||||
// nice to have.
|
||||
Symbols {
|
||||
Arc,
|
||||
ArgumentV1,
|
||||
Arguments,
|
||||
C,
|
||||
Clone,
|
||||
Copy,
|
||||
Debug,
|
||||
Decodable,
|
||||
Default,
|
||||
Encodable,
|
||||
Eq,
|
||||
Equal,
|
||||
Err,
|
||||
From,
|
||||
Future,
|
||||
FxHashMap,
|
||||
FxHashSet,
|
||||
GlobalAlloc,
|
||||
Hash,
|
||||
HashMap,
|
||||
HashSet,
|
||||
Input,
|
||||
IntoIterator,
|
||||
ItemContext,
|
||||
Iterator,
|
||||
Layout,
|
||||
LintPass,
|
||||
None,
|
||||
Ok,
|
||||
Option,
|
||||
Ord,
|
||||
Ordering,
|
||||
Output,
|
||||
PartialEq,
|
||||
PartialOrd,
|
||||
Pending,
|
||||
Pin,
|
||||
Poll,
|
||||
ProcMacroHack,
|
||||
ProceduralMasqueradeDummyType,
|
||||
Range,
|
||||
RangeFrom,
|
||||
RangeFull,
|
||||
RangeInclusive,
|
||||
RangeTo,
|
||||
RangeToInclusive,
|
||||
Rc,
|
||||
Ready,
|
||||
Result,
|
||||
Return,
|
||||
RustcDecodable,
|
||||
RustcEncodable,
|
||||
Send,
|
||||
Some,
|
||||
Sync,
|
||||
Target,
|
||||
Try,
|
||||
Ty,
|
||||
TyCtxt,
|
||||
TyKind,
|
||||
Vec,
|
||||
Yield,
|
||||
_Self,
|
||||
__next,
|
||||
_task_context,
|
||||
aarch64_target_feature,
|
||||
abi,
|
||||
abi_amdgpu_kernel,
|
||||
@@ -131,8 +203,8 @@
|
||||
aborts,
|
||||
add,
|
||||
add_assign,
|
||||
address,
|
||||
add_with_overflow,
|
||||
address,
|
||||
advanced_slice_patterns,
|
||||
adx_target_feature,
|
||||
alias,
|
||||
@@ -141,28 +213,26 @@
|
||||
alignstack,
|
||||
all,
|
||||
alloc,
|
||||
allocator,
|
||||
allocator_internals,
|
||||
alloc_error_handler,
|
||||
alloc_layout,
|
||||
alloc_zeroed,
|
||||
allocator,
|
||||
allocator_internals,
|
||||
allow,
|
||||
allowed,
|
||||
allow_fail,
|
||||
allow_internal_unsafe,
|
||||
allow_internal_unstable,
|
||||
allow_internal_unstable_backcompat_hack,
|
||||
allowed,
|
||||
always,
|
||||
and,
|
||||
any,
|
||||
arbitrary_enum_discriminant,
|
||||
arbitrary_self_types,
|
||||
Arc,
|
||||
Arguments,
|
||||
ArgumentV1,
|
||||
arith_offset,
|
||||
arm_target_feature,
|
||||
array,
|
||||
as_str,
|
||||
asm,
|
||||
assert,
|
||||
assert_inhabited,
|
||||
@@ -173,16 +243,15 @@
|
||||
associated_type_bounds,
|
||||
associated_type_defaults,
|
||||
associated_types,
|
||||
as_str,
|
||||
assume,
|
||||
assume_init,
|
||||
async_await,
|
||||
async_closure,
|
||||
atomics,
|
||||
attr,
|
||||
attributes,
|
||||
attr_literals,
|
||||
att_syntax,
|
||||
attr,
|
||||
attr_literals,
|
||||
attributes,
|
||||
augmented_assignments,
|
||||
automatically_derived,
|
||||
avx512_target_feature,
|
||||
@@ -210,11 +279,11 @@
|
||||
braced_empty_structs,
|
||||
breakpoint,
|
||||
bswap,
|
||||
C,
|
||||
c_variadic,
|
||||
call,
|
||||
caller_location,
|
||||
call_mut,
|
||||
call_once,
|
||||
caller_location,
|
||||
cdylib,
|
||||
ceilf32,
|
||||
ceilf64,
|
||||
@@ -232,7 +301,6 @@
|
||||
char,
|
||||
clippy,
|
||||
clone,
|
||||
Clone,
|
||||
clone_closures,
|
||||
clone_from,
|
||||
closure_to_fn_coercion,
|
||||
@@ -274,7 +342,6 @@
|
||||
context,
|
||||
convert,
|
||||
copy,
|
||||
Copy,
|
||||
copy_closures,
|
||||
copy_nonoverlapping,
|
||||
copysignf32,
|
||||
@@ -303,18 +370,14 @@
|
||||
custom_derive,
|
||||
custom_inner_attributes,
|
||||
custom_test_frameworks,
|
||||
c_variadic,
|
||||
dead_code,
|
||||
dealloc,
|
||||
debug,
|
||||
Debug,
|
||||
debug_assertions,
|
||||
debug_trait,
|
||||
declare_lint_pass,
|
||||
decl_macro,
|
||||
Decodable,
|
||||
declare_lint_pass,
|
||||
decode,
|
||||
Default,
|
||||
default_lib_allocator,
|
||||
default_type_parameter_fallback,
|
||||
default_type_params,
|
||||
@@ -339,8 +402,8 @@
|
||||
doc_masked,
|
||||
doctest,
|
||||
document_private_items,
|
||||
dotdoteq_in_patterns,
|
||||
dotdot_in_tuple_patterns,
|
||||
dotdoteq_in_patterns,
|
||||
double_braced_closure: "{{closure}}",
|
||||
double_braced_constant: "{{constant}}",
|
||||
double_braced_constructor: "{{constructor}}",
|
||||
@@ -349,24 +412,20 @@
|
||||
double_braced_misc: "{{misc}}",
|
||||
double_braced_opaque: "{{opaque}}",
|
||||
drop,
|
||||
dropck_eyepatch,
|
||||
dropck_parametricity,
|
||||
drop_in_place,
|
||||
drop_types_in_const,
|
||||
dropck_eyepatch,
|
||||
dropck_parametricity,
|
||||
dylib,
|
||||
dyn_trait,
|
||||
eh_catch_typeinfo,
|
||||
eh_personality,
|
||||
enable,
|
||||
enclosing_scope,
|
||||
Encodable,
|
||||
encode,
|
||||
env,
|
||||
eq,
|
||||
Eq,
|
||||
Equal,
|
||||
err,
|
||||
Err,
|
||||
exact_div,
|
||||
except,
|
||||
exchange_malloc,
|
||||
@@ -382,12 +441,12 @@
|
||||
export_name,
|
||||
expr,
|
||||
extern_absolute_paths,
|
||||
external_doc,
|
||||
extern_crate_item_prelude,
|
||||
extern_crate_self,
|
||||
extern_in_paths,
|
||||
extern_prelude,
|
||||
extern_types,
|
||||
external_doc,
|
||||
f16c_target_feature,
|
||||
f32,
|
||||
f32_runtime,
|
||||
@@ -424,7 +483,6 @@
|
||||
freeze,
|
||||
frem_fast,
|
||||
from,
|
||||
From,
|
||||
from_desugaring,
|
||||
from_error,
|
||||
from_generator,
|
||||
@@ -436,29 +494,22 @@
|
||||
fsub_fast,
|
||||
fundamental,
|
||||
future,
|
||||
Future,
|
||||
future_trait,
|
||||
FxHashMap,
|
||||
FxHashSet,
|
||||
ge,
|
||||
generator,
|
||||
generators,
|
||||
generator_state,
|
||||
generic_associated_types,
|
||||
generic_param_attrs,
|
||||
gen_future,
|
||||
gen_kill,
|
||||
generator,
|
||||
generator_state,
|
||||
generators,
|
||||
generic_associated_types,
|
||||
generic_param_attrs,
|
||||
get_context,
|
||||
GlobalAlloc,
|
||||
global_allocator,
|
||||
global_asm,
|
||||
globs,
|
||||
gt,
|
||||
half_open_range_patterns,
|
||||
hash,
|
||||
Hash,
|
||||
HashMap,
|
||||
HashSet,
|
||||
hexagon_target_feature,
|
||||
hidden,
|
||||
homogeneous_aggregate,
|
||||
@@ -493,10 +544,8 @@
|
||||
inlateout,
|
||||
inline,
|
||||
inout,
|
||||
Input,
|
||||
intel,
|
||||
into_iter,
|
||||
IntoIterator,
|
||||
into_result,
|
||||
intrinsics,
|
||||
irrefutable_let_patterns,
|
||||
@@ -505,10 +554,8 @@
|
||||
issue_5723_bootstrap,
|
||||
issue_tracker_base_url,
|
||||
item,
|
||||
item_context: "ItemContext",
|
||||
item_like_imports,
|
||||
iter,
|
||||
Iterator,
|
||||
keyword,
|
||||
kind,
|
||||
label,
|
||||
@@ -516,7 +563,6 @@
|
||||
lang,
|
||||
lang_items,
|
||||
lateout,
|
||||
Layout,
|
||||
lazy_normalization_consts,
|
||||
le,
|
||||
let_chains,
|
||||
@@ -527,14 +573,13 @@
|
||||
likely,
|
||||
line,
|
||||
link,
|
||||
linkage,
|
||||
link_args,
|
||||
link_cfg,
|
||||
link_llvm_intrinsics,
|
||||
link_name,
|
||||
link_ordinal,
|
||||
link_section,
|
||||
LintPass,
|
||||
linkage,
|
||||
lint_reasons,
|
||||
literal,
|
||||
llvm_asm,
|
||||
@@ -543,9 +588,9 @@
|
||||
log10f64,
|
||||
log2f32,
|
||||
log2f64,
|
||||
log_syntax,
|
||||
logf32,
|
||||
logf64,
|
||||
log_syntax,
|
||||
loop_break_value,
|
||||
lt,
|
||||
macro_at_most_once_rep,
|
||||
@@ -554,9 +599,9 @@
|
||||
macro_lifetime_matcher,
|
||||
macro_literal_matcher,
|
||||
macro_reexport,
|
||||
macros_in_extern,
|
||||
macro_use,
|
||||
macro_vis_matcher,
|
||||
macros_in_extern,
|
||||
main,
|
||||
managed_boxes,
|
||||
manually_drop,
|
||||
@@ -567,23 +612,23 @@
|
||||
match_default_bindings,
|
||||
maxnumf32,
|
||||
maxnumf64,
|
||||
may_dangle,
|
||||
maybe_uninit,
|
||||
maybe_uninit_uninit,
|
||||
maybe_uninit_zeroed,
|
||||
may_dangle,
|
||||
member_constraints,
|
||||
memory,
|
||||
mem_uninitialized,
|
||||
mem_zeroed,
|
||||
member_constraints,
|
||||
memory,
|
||||
message,
|
||||
meta,
|
||||
min_align_of,
|
||||
min_align_of_val,
|
||||
min_const_fn,
|
||||
min_const_unsafe_fn,
|
||||
min_specialization,
|
||||
minnumf32,
|
||||
minnumf64,
|
||||
min_specialization,
|
||||
mips_target_feature,
|
||||
miri_start_panic,
|
||||
mmx_target_feature,
|
||||
@@ -615,7 +660,6 @@
|
||||
never_type,
|
||||
never_type_fallback,
|
||||
new,
|
||||
__next,
|
||||
next,
|
||||
nll,
|
||||
no,
|
||||
@@ -629,47 +673,41 @@
|
||||
no_link,
|
||||
no_main,
|
||||
no_mangle,
|
||||
nomem,
|
||||
non_ascii_idents,
|
||||
None,
|
||||
none_error,
|
||||
non_exhaustive,
|
||||
no_niche,
|
||||
non_modrs_mods,
|
||||
nontemporal_store,
|
||||
nontrapping_dash_fptoint: "nontrapping-fptoint",
|
||||
noreturn,
|
||||
no_sanitize,
|
||||
nostack,
|
||||
no_stack_check,
|
||||
no_start,
|
||||
no_std,
|
||||
nomem,
|
||||
non_ascii_idents,
|
||||
non_exhaustive,
|
||||
non_modrs_mods,
|
||||
none_error,
|
||||
nontemporal_store,
|
||||
nontrapping_dash_fptoint: "nontrapping-fptoint",
|
||||
noreturn,
|
||||
nostack,
|
||||
not,
|
||||
note,
|
||||
object_safe_for_dispatch,
|
||||
offset,
|
||||
Ok,
|
||||
omit_gdb_pretty_printer_section,
|
||||
on,
|
||||
on_unimplemented,
|
||||
oom,
|
||||
opaque,
|
||||
ops,
|
||||
opt_out_copy,
|
||||
optimize,
|
||||
optimize_attribute,
|
||||
optin_builtin_traits,
|
||||
option,
|
||||
Option,
|
||||
option_env,
|
||||
options,
|
||||
option_type,
|
||||
opt_out_copy,
|
||||
options,
|
||||
or,
|
||||
Ord,
|
||||
Ordering,
|
||||
or_patterns,
|
||||
out,
|
||||
Output,
|
||||
overlapping_marker_traits,
|
||||
owned_box,
|
||||
packed,
|
||||
@@ -686,17 +724,13 @@
|
||||
param_attrs,
|
||||
parent_trait,
|
||||
partial_cmp,
|
||||
PartialEq,
|
||||
partial_ord,
|
||||
PartialOrd,
|
||||
passes,
|
||||
pat,
|
||||
path,
|
||||
pattern_parentheses,
|
||||
Pending,
|
||||
phantom_data,
|
||||
pin,
|
||||
Pin,
|
||||
pinned,
|
||||
platform_intrinsics,
|
||||
plugin,
|
||||
@@ -704,15 +738,14 @@
|
||||
plugins,
|
||||
pointer,
|
||||
poll,
|
||||
Poll,
|
||||
post_dash_lto: "post-lto",
|
||||
powerpc_target_feature,
|
||||
powf32,
|
||||
powf64,
|
||||
powif32,
|
||||
powif64,
|
||||
precise_pointer_size_matching,
|
||||
pre_dash_lto: "pre-lto",
|
||||
precise_pointer_size_matching,
|
||||
pref_align_of,
|
||||
prefetch_read_data,
|
||||
prefetch_read_instruction,
|
||||
@@ -723,14 +756,12 @@
|
||||
preserves_flags,
|
||||
primitive,
|
||||
proc_dash_macro: "proc-macro",
|
||||
ProceduralMasqueradeDummyType,
|
||||
proc_macro,
|
||||
proc_macro_attribute,
|
||||
proc_macro_def_site,
|
||||
proc_macro_derive,
|
||||
proc_macro_expr,
|
||||
proc_macro_gen,
|
||||
ProcMacroHack,
|
||||
proc_macro_hygiene,
|
||||
proc_macro_internals,
|
||||
proc_macro_mod,
|
||||
@@ -747,18 +778,11 @@
|
||||
quad_precision_float,
|
||||
question_mark,
|
||||
quote,
|
||||
Range,
|
||||
RangeFrom,
|
||||
RangeFull,
|
||||
RangeInclusive,
|
||||
RangeTo,
|
||||
RangeToInclusive,
|
||||
raw_dylib,
|
||||
raw_identifiers,
|
||||
raw_ref_op,
|
||||
Rc,
|
||||
re_rebalance_coherence,
|
||||
readonly,
|
||||
Ready,
|
||||
realloc,
|
||||
reason,
|
||||
receiver,
|
||||
@@ -779,11 +803,8 @@
|
||||
repr_packed,
|
||||
repr_simd,
|
||||
repr_transparent,
|
||||
re_rebalance_coherence,
|
||||
result,
|
||||
Result,
|
||||
result_type,
|
||||
Return,
|
||||
rhs,
|
||||
rintf32,
|
||||
rintf64,
|
||||
@@ -799,6 +820,10 @@
|
||||
rust_2015_preview,
|
||||
rust_2018_preview,
|
||||
rust_begin_unwind,
|
||||
rust_eh_personality,
|
||||
rust_eh_register_frames,
|
||||
rust_eh_unregister_frames,
|
||||
rust_oom,
|
||||
rustc,
|
||||
rustc_allocator,
|
||||
rustc_allocator_nounwind,
|
||||
@@ -810,7 +835,6 @@
|
||||
rustc_const_stable,
|
||||
rustc_const_unstable,
|
||||
rustc_conversion_suggestion,
|
||||
RustcDecodable,
|
||||
rustc_def_path,
|
||||
rustc_deprecated,
|
||||
rustc_diagnostic_item,
|
||||
@@ -820,7 +844,6 @@
|
||||
rustc_dump_env_program_clauses,
|
||||
rustc_dump_program_clauses,
|
||||
rustc_dump_user_substs,
|
||||
RustcEncodable,
|
||||
rustc_error,
|
||||
rustc_expected_cgu_reuse,
|
||||
rustc_if_this_changed,
|
||||
@@ -857,19 +880,15 @@
|
||||
rustc_then_this_would_need,
|
||||
rustc_unsafe_specialization_marker,
|
||||
rustc_variance,
|
||||
rust_eh_personality,
|
||||
rustfmt,
|
||||
rust_oom,
|
||||
rvalue_static_promotion,
|
||||
sanitize,
|
||||
sanitizer_runtime,
|
||||
saturating_add,
|
||||
saturating_sub,
|
||||
_Self,
|
||||
self_in_typedefs,
|
||||
self_struct_ctor,
|
||||
semitransparent,
|
||||
Send,
|
||||
send_trait,
|
||||
shl,
|
||||
shl_assign,
|
||||
@@ -937,9 +956,9 @@
|
||||
sinf32,
|
||||
sinf64,
|
||||
size,
|
||||
sized,
|
||||
size_of,
|
||||
size_of_val,
|
||||
sized,
|
||||
slice,
|
||||
slice_alloc,
|
||||
slice_patterns,
|
||||
@@ -947,7 +966,6 @@
|
||||
slice_u8_alloc,
|
||||
slicing_syntax,
|
||||
soft,
|
||||
Some,
|
||||
specialization,
|
||||
speed,
|
||||
sqrtf32,
|
||||
@@ -957,9 +975,9 @@
|
||||
staged_api,
|
||||
start,
|
||||
static_in_const,
|
||||
staticlib,
|
||||
static_nobundle,
|
||||
static_recursion,
|
||||
staticlib,
|
||||
std,
|
||||
std_inject,
|
||||
stmt,
|
||||
@@ -970,10 +988,10 @@
|
||||
stringify,
|
||||
struct_field_attributes,
|
||||
struct_inherit,
|
||||
struct_variant,
|
||||
structural_match,
|
||||
structural_peq,
|
||||
structural_teq,
|
||||
struct_variant,
|
||||
sty,
|
||||
sub,
|
||||
sub_assign,
|
||||
@@ -981,9 +999,7 @@
|
||||
suggestion,
|
||||
sym,
|
||||
sync,
|
||||
Sync,
|
||||
sync_trait,
|
||||
Target,
|
||||
target_arch,
|
||||
target_endian,
|
||||
target_env,
|
||||
@@ -998,7 +1014,6 @@
|
||||
target_thread_local,
|
||||
target_vendor,
|
||||
task,
|
||||
_task_context,
|
||||
tbm_target_feature,
|
||||
termination,
|
||||
termination_trait,
|
||||
@@ -1024,7 +1039,6 @@
|
||||
trivial_bounds,
|
||||
truncf32,
|
||||
truncf64,
|
||||
Try,
|
||||
try_blocks,
|
||||
try_trait,
|
||||
tt,
|
||||
@@ -1032,9 +1046,6 @@
|
||||
tuple_indexing,
|
||||
two_phase,
|
||||
ty,
|
||||
Ty,
|
||||
TyCtxt,
|
||||
TyKind,
|
||||
type_alias_enum_variants,
|
||||
type_alias_impl_trait,
|
||||
type_ascription,
|
||||
@@ -1082,21 +1093,20 @@
|
||||
unwind,
|
||||
unwind_attributes,
|
||||
unwrap_or,
|
||||
used,
|
||||
use_extern_macros,
|
||||
use_nested_groups,
|
||||
used,
|
||||
usize,
|
||||
v1,
|
||||
va_arg,
|
||||
va_copy,
|
||||
va_end,
|
||||
val,
|
||||
va_list,
|
||||
va_start,
|
||||
val,
|
||||
var,
|
||||
variant_count,
|
||||
va_start,
|
||||
vec,
|
||||
Vec,
|
||||
vec_type,
|
||||
version,
|
||||
vis,
|
||||
@@ -1117,7 +1127,6 @@
|
||||
wrapping_mul,
|
||||
wrapping_sub,
|
||||
write_bytes,
|
||||
Yield,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -126,7 +126,7 @@ fn on_unimplemented_note(
|
||||
|
||||
let mut flags = vec![];
|
||||
flags.push((
|
||||
sym::item_context,
|
||||
sym::ItemContext,
|
||||
self.describe_enclosure(obligation.cause.body_id).map(|s| s.to_owned()),
|
||||
));
|
||||
|
||||
|
||||
@@ -286,7 +286,7 @@ fn verify(
|
||||
// `{from_desugaring}` is allowed
|
||||
Position::ArgumentNamed(s) if s == sym::from_desugaring => (),
|
||||
// `{ItemContext}` is allowed
|
||||
Position::ArgumentNamed(s) if s == sym::item_context => (),
|
||||
Position::ArgumentNamed(s) if s == sym::ItemContext => (),
|
||||
// So is `{A}` if A is a type parameter
|
||||
Position::ArgumentNamed(s) => {
|
||||
match generics.params.iter().find(|param| param.name == s) {
|
||||
@@ -350,7 +350,7 @@ pub fn format(
|
||||
|
||||
let s = self.0.as_str();
|
||||
let parser = Parser::new(&s, None, None, false, ParseMode::Format);
|
||||
let item_context = (options.get(&sym::item_context)).unwrap_or(&empty_string);
|
||||
let item_context = (options.get(&sym::ItemContext)).unwrap_or(&empty_string);
|
||||
parser
|
||||
.map(|p| match p {
|
||||
Piece::String(s) => s,
|
||||
@@ -364,7 +364,7 @@ pub fn format(
|
||||
} else if s == sym::from_desugaring || s == sym::from_method {
|
||||
// don't break messages using these two arguments incorrectly
|
||||
&empty_string
|
||||
} else if s == sym::item_context {
|
||||
} else if s == sym::ItemContext {
|
||||
&item_context
|
||||
} else {
|
||||
bug!(
|
||||
|
||||
@@ -47,8 +47,6 @@ hermit-abi = { version = "0.1.14", features = ['rustc-dep-of-std'] }
|
||||
wasi = { version = "0.9.0", features = ['rustc-dep-of-std'], default-features = false }
|
||||
|
||||
[features]
|
||||
default = ["std_detect_file_io", "std_detect_dlsym_getauxval", "panic-unwind"]
|
||||
|
||||
backtrace = [
|
||||
"backtrace_rs/dbghelp", # backtrace/symbolize on MSVC
|
||||
"backtrace_rs/libbacktrace", # symbolize on most platforms
|
||||
|
||||
+3
-2
@@ -85,8 +85,9 @@
|
||||
//! # Contributing changes to the documentation
|
||||
//!
|
||||
//! Check out the rust contribution guidelines [here](
|
||||
//! https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md).
|
||||
//! The source for this documentation can be found on [Github](https://github.com/rust-lang).
|
||||
//! https://rustc-dev-guide.rust-lang.org/getting-started.html).
|
||||
//! The source for this documentation can be found on
|
||||
//! [GitHub](https://github.com/rust-lang/rust).
|
||||
//! To contribute changes, make sure you read the guidelines first, then submit
|
||||
//! pull-requests for your suggested changes.
|
||||
//!
|
||||
|
||||
@@ -23,9 +23,12 @@ proc_macro = { path = "../libproc_macro" }
|
||||
|
||||
# Forward features to the `std` crate as necessary
|
||||
[features]
|
||||
default = ["std_detect_file_io", "std_detect_dlsym_getauxval", "panic-unwind"]
|
||||
backtrace = ["std/backtrace"]
|
||||
compiler-builtins-c = ["std/compiler-builtins-c"]
|
||||
llvm-libunwind = ["std/llvm-libunwind"]
|
||||
panic-unwind = ["std/panic_unwind"]
|
||||
panic_immediate_abort = ["std/panic_immediate_abort"]
|
||||
profiler = ["std/profiler"]
|
||||
std_detect_file_io = ["std/std_detect_file_io"]
|
||||
std_detect_dlsym_getauxval = ["std/std_detect_dlsym_getauxval"]
|
||||
|
||||
@@ -5,7 +5,7 @@ error: internal compiler error: unexpected panic
|
||||
|
||||
note: the compiler unexpectedly panicked. this is a bug.
|
||||
|
||||
note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports
|
||||
note: we would appreciate a bug report: https://github.com/rust-lang/rust/issues/new?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md
|
||||
|
||||
note: rustc VERSION running on TARGET
|
||||
|
||||
|
||||
Reference in New Issue
Block a user