2016-11-16 08:21:52 +00:00
|
|
|
//! An "interner" is a data structure that associates values with usize tags and
|
2018-11-27 02:59:49 +00:00
|
|
|
//! allows bidirectional lookup; i.e., given a value, one can easily find the
|
2016-11-16 08:21:52 +00:00
|
|
|
//! type, and vice versa.
|
|
|
|
|
2018-03-18 02:57:23 +03:00
|
|
|
use std::hash::{Hash, Hasher};
|
|
|
|
use std::{fmt, str};
|
2024-07-29 08:13:50 +10:00
|
|
|
|
2020-06-02 20:19:49 +03:00
|
|
|
use rustc_arena::DroplessArena;
|
2023-11-02 17:02:36 +11:00
|
|
|
use rustc_data_structures::fx::FxIndexSet;
|
2023-12-21 10:27:34 +01:00
|
|
|
use rustc_data_structures::stable_hasher::{
|
|
|
|
HashStable, StableCompare, StableHasher, ToStableHashKey,
|
|
|
|
};
|
2021-09-15 18:33:41 +02:00
|
|
|
use rustc_data_structures::sync::Lock;
|
2024-04-29 08:53:45 +10:00
|
|
|
use rustc_macros::{symbols, Decodable, Encodable, HashStable_Generic};
|
2018-11-27 02:59:49 +00:00
|
|
|
|
2021-05-05 21:31:25 +02:00
|
|
|
use crate::{with_session_globals, Edition, Span, DUMMY_SP};
|
2018-11-27 02:59:49 +00:00
|
|
|
|
2019-08-01 03:20:23 +03:00
|
|
|
#[cfg(test)]
|
|
|
|
mod tests;
|
|
|
|
|
2021-03-04 10:13:53 -08:00
|
|
|
// The proc macro code for this is in `compiler/rustc_macros/src/symbols.rs`.
|
2019-04-03 02:43:49 +02:00
|
|
|
symbols! {
|
2024-09-02 12:43:35 -04:00
|
|
|
// If you modify this list, adjust `is_special`, `is_used_keyword`/`is_unused_keyword`
|
|
|
|
// and `AllKeywords`.
|
2023-11-02 15:31:51 +11:00
|
|
|
// But this should rarely be necessary if the keywords are kept in alphabetic order.
|
2019-04-03 02:43:49 +02:00
|
|
|
Keywords {
|
|
|
|
// Special reserved identifiers used internally for elided lifetimes,
|
|
|
|
// unnamed method parameters, crate root module, error recovery etc.
|
2020-12-29 20:28:08 -05:00
|
|
|
Empty: "",
|
2019-04-09 09:39:48 +02:00
|
|
|
PathRoot: "{{root}}",
|
|
|
|
DollarCrate: "$crate",
|
|
|
|
Underscore: "_",
|
2019-04-03 02:43:49 +02:00
|
|
|
|
|
|
|
// Keywords that are used in stable Rust.
|
2019-04-09 09:39:48 +02:00
|
|
|
As: "as",
|
|
|
|
Break: "break",
|
|
|
|
Const: "const",
|
|
|
|
Continue: "continue",
|
|
|
|
Crate: "crate",
|
|
|
|
Else: "else",
|
|
|
|
Enum: "enum",
|
|
|
|
Extern: "extern",
|
|
|
|
False: "false",
|
|
|
|
Fn: "fn",
|
|
|
|
For: "for",
|
|
|
|
If: "if",
|
|
|
|
Impl: "impl",
|
|
|
|
In: "in",
|
|
|
|
Let: "let",
|
|
|
|
Loop: "loop",
|
|
|
|
Match: "match",
|
|
|
|
Mod: "mod",
|
|
|
|
Move: "move",
|
|
|
|
Mut: "mut",
|
|
|
|
Pub: "pub",
|
|
|
|
Ref: "ref",
|
|
|
|
Return: "return",
|
|
|
|
SelfLower: "self",
|
|
|
|
SelfUpper: "Self",
|
|
|
|
Static: "static",
|
|
|
|
Struct: "struct",
|
|
|
|
Super: "super",
|
|
|
|
Trait: "trait",
|
|
|
|
True: "true",
|
|
|
|
Type: "type",
|
|
|
|
Unsafe: "unsafe",
|
|
|
|
Use: "use",
|
|
|
|
Where: "where",
|
|
|
|
While: "while",
|
2019-04-03 02:43:49 +02:00
|
|
|
|
|
|
|
// Keywords that are used in unstable Rust or reserved for future use.
|
2019-04-09 09:39:48 +02:00
|
|
|
Abstract: "abstract",
|
|
|
|
Become: "become",
|
2019-05-15 16:22:39 +03:00
|
|
|
Box: "box",
|
2019-04-09 09:39:48 +02:00
|
|
|
Do: "do",
|
|
|
|
Final: "final",
|
|
|
|
Macro: "macro",
|
|
|
|
Override: "override",
|
|
|
|
Priv: "priv",
|
|
|
|
Typeof: "typeof",
|
|
|
|
Unsized: "unsized",
|
|
|
|
Virtual: "virtual",
|
|
|
|
Yield: "yield",
|
2019-04-03 02:43:49 +02:00
|
|
|
|
|
|
|
// Edition-specific keywords that are used in stable Rust.
|
2019-09-28 09:15:06 -07:00
|
|
|
Async: "async", // >= 2018 Edition only
|
|
|
|
Await: "await", // >= 2018 Edition only
|
2019-04-09 09:39:48 +02:00
|
|
|
Dyn: "dyn", // >= 2018 Edition only
|
2019-04-03 02:43:49 +02:00
|
|
|
|
|
|
|
// Edition-specific keywords that are used in unstable Rust or reserved for future use.
|
2019-04-09 09:39:48 +02:00
|
|
|
Try: "try", // >= 2018 Edition only
|
2019-04-03 02:43:49 +02:00
|
|
|
|
|
|
|
// Special lifetime names
|
2019-04-09 09:39:48 +02:00
|
|
|
UnderscoreLifetime: "'_",
|
|
|
|
StaticLifetime: "'static",
|
2019-04-03 02:43:49 +02:00
|
|
|
|
|
|
|
// Weak keywords, have special meaning only in specific contexts.
|
2019-04-09 09:39:48 +02:00
|
|
|
Auto: "auto",
|
2023-01-19 10:24:17 +01:00
|
|
|
Builtin: "builtin",
|
2019-04-09 09:39:48 +02:00
|
|
|
Catch: "catch",
|
|
|
|
Default: "default",
|
2023-10-05 11:30:55 +00:00
|
|
|
Gen: "gen",
|
2020-02-15 15:46:25 +03:00
|
|
|
MacroRules: "macro_rules",
|
2019-11-23 14:22:00 +00:00
|
|
|
Raw: "raw",
|
2023-11-26 15:57:31 +03:00
|
|
|
Reuse: "reuse",
|
2024-05-23 10:01:05 -03:00
|
|
|
Safe: "safe",
|
2019-04-09 09:39:48 +02:00
|
|
|
Union: "union",
|
2022-03-25 23:43:54 -07:00
|
|
|
Yeet: "yeet",
|
2019-04-03 02:43:49 +02:00
|
|
|
}
|
|
|
|
|
2020-07-08 11:54:27 +10:00
|
|
|
// Pre-interned symbols that can be referred to with `rustc_span::sym::*`.
|
|
|
|
//
|
|
|
|
// The symbol is the stringified identifier unless otherwise specified, in
|
|
|
|
// which case the name should mention the non-identifier punctuation.
|
|
|
|
// E.g. `sym::proc_dash_macro` represents "proc-macro", and it shouldn't be
|
|
|
|
// called `sym::proc_macro` because then it's easy to mistakenly think it
|
|
|
|
// represents "proc_macro".
|
2019-05-22 19:25:39 +10:00
|
|
|
//
|
2020-09-21 12:14:28 +09:00
|
|
|
// As well as the symbols listed, there are symbols for the strings
|
2019-05-22 19:25:39 +10:00
|
|
|
// "0", "1", ..., "9", which are accessible via `sym::integer`.
|
2020-07-08 11:07:24 +10:00
|
|
|
//
|
2020-07-10 09:46:38 +10:00
|
|
|
// 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.
|
2019-05-07 09:55:12 +10:00
|
|
|
Symbols {
|
2023-11-09 00:00:00 +00:00
|
|
|
Abi,
|
2020-12-02 15:16:12 -08:00
|
|
|
AcqRel,
|
|
|
|
Acquire,
|
2021-07-15 23:51:34 +02:00
|
|
|
Any,
|
2020-07-10 09:46:38 +10:00
|
|
|
Arc,
|
2023-09-26 23:56:38 -04:00
|
|
|
ArcWeak,
|
2020-07-14 15:05:26 +10:00
|
|
|
Argument,
|
2023-04-20 19:53:16 +02:00
|
|
|
ArgumentMethods,
|
2023-09-26 23:56:38 -04:00
|
|
|
ArrayIntoIter,
|
2021-07-15 23:51:34 +02:00
|
|
|
AsMut,
|
|
|
|
AsRef,
|
2022-06-22 16:34:43 +10:00
|
|
|
AssertParamIsClone,
|
|
|
|
AssertParamIsCopy,
|
|
|
|
AssertParamIsEq,
|
2023-11-28 18:18:19 +00:00
|
|
|
AsyncGenFinished,
|
|
|
|
AsyncGenPending,
|
|
|
|
AsyncGenReady,
|
2020-12-02 15:16:12 -08:00
|
|
|
AtomicBool,
|
|
|
|
AtomicI128,
|
|
|
|
AtomicI16,
|
|
|
|
AtomicI32,
|
|
|
|
AtomicI64,
|
|
|
|
AtomicI8,
|
|
|
|
AtomicIsize,
|
|
|
|
AtomicPtr,
|
|
|
|
AtomicU128,
|
|
|
|
AtomicU16,
|
|
|
|
AtomicU32,
|
|
|
|
AtomicU64,
|
|
|
|
AtomicU8,
|
|
|
|
AtomicUsize,
|
2021-07-15 23:51:34 +02:00
|
|
|
BTreeEntry,
|
2021-02-26 21:23:42 -06:00
|
|
|
BTreeMap,
|
|
|
|
BTreeSet,
|
|
|
|
BinaryHeap,
|
2021-01-05 16:46:50 +01:00
|
|
|
Borrow,
|
2022-08-23 01:58:33 +00:00
|
|
|
BorrowMut,
|
2021-04-15 00:33:55 -07:00
|
|
|
Break,
|
2020-07-10 09:46:38 +10:00
|
|
|
C,
|
2021-05-18 15:33:38 +02:00
|
|
|
CStr,
|
2024-06-22 14:42:26 -07:00
|
|
|
C_dash_unwind: "C-unwind",
|
2024-01-24 22:27:25 +00:00
|
|
|
CallOnceFuture,
|
2024-02-13 15:29:50 +00:00
|
|
|
CallRefFuture,
|
2022-06-15 07:37:40 -03:00
|
|
|
Capture,
|
2020-07-14 15:05:26 +10:00
|
|
|
Center,
|
2023-11-09 00:00:00 +00:00
|
|
|
Cleanup,
|
2020-07-10 09:46:38 +10:00
|
|
|
Clone,
|
2024-05-26 17:57:13 +08:00
|
|
|
CoerceUnsized,
|
2023-09-26 23:56:38 -04:00
|
|
|
Command,
|
2023-05-16 19:40:02 +02:00
|
|
|
ConstParamTy,
|
2024-07-14 13:38:51 +01:00
|
|
|
ConstParamTy_,
|
2022-12-20 15:15:29 +01:00
|
|
|
Context,
|
2021-04-15 00:33:55 -07:00
|
|
|
Continue,
|
2020-07-10 09:46:38 +10:00
|
|
|
Copy,
|
2021-07-15 23:51:34 +02:00
|
|
|
Cow,
|
2020-07-10 09:46:38 +10:00
|
|
|
Debug,
|
2023-09-26 23:56:38 -04:00
|
|
|
DebugStruct,
|
2020-07-10 09:46:38 +10:00
|
|
|
Decodable,
|
2020-07-14 15:05:26 +10:00
|
|
|
Decoder,
|
2020-07-10 09:46:38 +10:00
|
|
|
Default,
|
2021-02-16 22:39:05 +01:00
|
|
|
Deref,
|
2024-02-29 11:58:51 +11:00
|
|
|
DiagMessage,
|
2024-03-06 11:02:56 +11:00
|
|
|
Diagnostic,
|
2021-07-15 23:51:34 +02:00
|
|
|
DirBuilder,
|
2024-05-26 17:57:13 +08:00
|
|
|
DispatchFromDyn,
|
2021-10-02 18:51:01 -05:00
|
|
|
Display,
|
2021-07-15 23:51:34 +02:00
|
|
|
DoubleEndedIterator,
|
|
|
|
Duration,
|
2024-06-14 12:16:15 +00:00
|
|
|
EffectsCompat,
|
2024-06-26 16:36:42 +00:00
|
|
|
EffectsIntersection,
|
|
|
|
EffectsIntersectionOutput,
|
2024-06-14 12:16:15 +00:00
|
|
|
EffectsMaybe,
|
|
|
|
EffectsNoRuntime,
|
|
|
|
EffectsRuntime,
|
|
|
|
EffectsTyCompat,
|
|
|
|
Effects__,
|
2020-07-10 09:46:38 +10:00
|
|
|
Encodable,
|
2020-07-14 15:05:26 +10:00
|
|
|
Encoder,
|
2024-04-23 14:38:29 -05:00
|
|
|
Enumerate,
|
2020-07-10 09:46:38 +10:00
|
|
|
Eq,
|
|
|
|
Equal,
|
|
|
|
Err,
|
2020-07-14 15:05:26 +10:00
|
|
|
Error,
|
2021-07-15 23:51:34 +02:00
|
|
|
File,
|
|
|
|
FileType,
|
2023-10-27 19:51:51 +00:00
|
|
|
Fn,
|
|
|
|
FnMut,
|
|
|
|
FnOnce,
|
2020-07-14 15:05:26 +10:00
|
|
|
Formatter,
|
2020-07-10 09:46:38 +10:00
|
|
|
From,
|
2021-07-06 13:41:22 +00:00
|
|
|
FromIterator,
|
2021-12-09 22:42:17 +08:00
|
|
|
FromResidual,
|
2023-09-26 23:56:38 -04:00
|
|
|
FsOpenOptions,
|
|
|
|
FsPermissions,
|
2024-03-22 00:48:36 +09:00
|
|
|
FusedIterator,
|
2020-07-10 09:46:38 +10:00
|
|
|
Future,
|
|
|
|
GlobalAlloc,
|
|
|
|
Hash,
|
|
|
|
HashMap,
|
2021-07-17 12:20:43 +02:00
|
|
|
HashMapEntry,
|
2020-07-10 09:46:38 +10:00
|
|
|
HashSet,
|
2020-07-14 15:05:26 +10:00
|
|
|
Hasher,
|
|
|
|
Implied,
|
2023-11-09 00:00:00 +00:00
|
|
|
InCleanup,
|
2023-04-18 18:55:17 +00:00
|
|
|
IndexOutput,
|
2020-07-10 09:46:38 +10:00
|
|
|
Input,
|
2023-09-26 23:56:38 -04:00
|
|
|
Instant,
|
2021-10-02 18:51:01 -05:00
|
|
|
Into,
|
2023-04-25 19:48:59 +00:00
|
|
|
IntoFuture,
|
2020-07-10 09:46:38 +10:00
|
|
|
IntoIterator,
|
2023-09-26 23:56:38 -04:00
|
|
|
IoLines,
|
2021-07-15 23:51:34 +02:00
|
|
|
IoRead,
|
2023-09-26 23:56:38 -04:00
|
|
|
IoSeek,
|
2021-07-15 23:51:34 +02:00
|
|
|
IoWrite,
|
2022-09-12 19:03:24 +02:00
|
|
|
IpAddr,
|
2022-05-26 20:22:28 -07:00
|
|
|
IrTyKind,
|
2020-07-14 15:05:26 +10:00
|
|
|
Is,
|
2023-10-20 22:48:37 +00:00
|
|
|
Item,
|
2020-07-10 10:14:55 +10:00
|
|
|
ItemContext,
|
2023-09-26 23:56:38 -04:00
|
|
|
IterEmpty,
|
|
|
|
IterOnce,
|
|
|
|
IterPeekable,
|
2020-07-10 09:46:38 +10:00
|
|
|
Iterator,
|
2022-12-26 17:44:16 -08:00
|
|
|
IteratorItem,
|
2020-07-10 09:46:38 +10:00
|
|
|
Layout,
|
2020-07-14 15:05:26 +10:00
|
|
|
Left,
|
2021-02-26 21:23:42 -06:00
|
|
|
LinkedList,
|
2024-03-08 12:03:51 +11:00
|
|
|
LintDiagnostic,
|
2020-07-10 09:46:38 +10:00
|
|
|
LintPass,
|
2022-09-26 00:55:35 +02:00
|
|
|
LocalKey,
|
2021-10-02 18:51:01 -05:00
|
|
|
Mutex,
|
2022-06-04 22:27:32 -04:00
|
|
|
MutexGuard,
|
2022-01-10 17:08:21 +01:00
|
|
|
N,
|
2023-09-26 23:56:38 -04:00
|
|
|
NonNull,
|
2024-01-20 18:25:52 +01:00
|
|
|
NonZero,
|
2020-07-10 09:46:38 +10:00
|
|
|
None,
|
2023-11-09 00:00:00 +00:00
|
|
|
Normal,
|
2020-07-10 09:46:38 +10:00
|
|
|
Ok,
|
|
|
|
Option,
|
|
|
|
Ord,
|
|
|
|
Ordering,
|
2021-02-16 02:32:21 +00:00
|
|
|
OsStr,
|
2021-02-15 22:58:03 +00:00
|
|
|
OsString,
|
2020-07-10 09:46:38 +10:00
|
|
|
Output,
|
2020-07-14 15:05:26 +10:00
|
|
|
Param,
|
2020-07-10 09:46:38 +10:00
|
|
|
PartialEq,
|
|
|
|
PartialOrd,
|
2021-02-16 02:32:21 +00:00
|
|
|
Path,
|
2021-02-15 22:58:03 +00:00
|
|
|
PathBuf,
|
2020-07-10 09:46:38 +10:00
|
|
|
Pending,
|
2024-05-13 03:16:31 +08:00
|
|
|
PinCoerceUnsized,
|
2021-10-02 18:51:01 -05:00
|
|
|
Pointer,
|
2020-07-10 09:46:38 +10:00
|
|
|
Poll,
|
2020-07-14 15:05:26 +10:00
|
|
|
ProcMacro,
|
2020-07-10 09:46:38 +10:00
|
|
|
ProceduralMasqueradeDummyType,
|
|
|
|
Range,
|
2023-09-26 23:56:38 -04:00
|
|
|
RangeBounds,
|
2020-07-10 09:46:38 +10:00
|
|
|
RangeFrom,
|
|
|
|
RangeFull,
|
|
|
|
RangeInclusive,
|
|
|
|
RangeTo,
|
|
|
|
RangeToInclusive,
|
|
|
|
Rc,
|
2023-09-26 23:56:38 -04:00
|
|
|
RcWeak,
|
2020-07-10 09:46:38 +10:00
|
|
|
Ready,
|
2021-02-26 21:17:29 -06:00
|
|
|
Receiver,
|
2022-09-26 00:55:35 +02:00
|
|
|
RefCell,
|
2023-09-26 23:56:38 -04:00
|
|
|
RefCellRef,
|
|
|
|
RefCellRefMut,
|
2020-12-02 15:16:12 -08:00
|
|
|
Relaxed,
|
|
|
|
Release,
|
2020-07-10 09:46:38 +10:00
|
|
|
Result,
|
2022-12-19 11:24:59 -08:00
|
|
|
ResumeTy,
|
2020-07-10 09:46:38 +10:00
|
|
|
Return,
|
2020-07-14 15:05:26 +10:00
|
|
|
Right,
|
2022-07-18 14:25:34 +09:00
|
|
|
Rust,
|
2020-07-10 09:46:38 +10:00
|
|
|
RustcDecodable,
|
|
|
|
RustcEncodable,
|
2022-09-27 13:06:31 +02:00
|
|
|
RwLock,
|
2022-06-04 22:27:32 -04:00
|
|
|
RwLockReadGuard,
|
|
|
|
RwLockWriteGuard,
|
2023-08-24 13:30:53 -03:00
|
|
|
Saturating,
|
2024-09-19 14:30:22 +01:00
|
|
|
SeekFrom,
|
2020-07-10 09:46:38 +10:00
|
|
|
Send,
|
2020-12-02 15:16:12 -08:00
|
|
|
SeqCst,
|
2024-05-26 17:57:13 +08:00
|
|
|
Sized,
|
2021-12-13 20:56:40 +00:00
|
|
|
SliceIndex,
|
2023-09-26 23:56:38 -04:00
|
|
|
SliceIter,
|
2024-05-26 17:57:13 +08:00
|
|
|
SmartPointer,
|
2020-07-10 09:46:38 +10:00
|
|
|
Some,
|
2023-10-16 01:05:11 -07:00
|
|
|
SpanCtxt,
|
2021-10-02 18:51:01 -05:00
|
|
|
String,
|
2020-07-14 15:05:26 +10:00
|
|
|
StructuralPartialEq,
|
2024-02-29 14:53:44 +11:00
|
|
|
SubdiagMessage,
|
2024-03-06 14:00:16 +11:00
|
|
|
Subdiagnostic,
|
2020-07-10 09:46:38 +10:00
|
|
|
Sync,
|
2022-07-14 15:09:30 +02:00
|
|
|
T,
|
2020-07-10 09:46:38 +10:00
|
|
|
Target,
|
2021-02-15 22:58:03 +00:00
|
|
|
ToOwned,
|
2021-02-16 02:32:21 +00:00
|
|
|
ToString,
|
2023-01-03 14:08:20 +01:00
|
|
|
TokenStream,
|
2023-10-05 01:50:00 +00:00
|
|
|
Trait,
|
2020-07-10 09:46:38 +10:00
|
|
|
Try,
|
2022-06-15 07:37:40 -03:00
|
|
|
TryCaptureGeneric,
|
|
|
|
TryCapturePrintable,
|
2021-10-02 18:51:01 -05:00
|
|
|
TryFrom,
|
|
|
|
TryInto,
|
2020-07-10 09:46:38 +10:00
|
|
|
Ty,
|
|
|
|
TyCtxt,
|
|
|
|
TyKind,
|
2020-07-14 15:05:26 +10:00
|
|
|
Unknown,
|
2024-05-26 17:57:13 +08:00
|
|
|
Unsize,
|
2024-07-14 13:38:51 +01:00
|
|
|
UnsizedConstParamTy,
|
2024-01-25 03:50:23 +00:00
|
|
|
Upvars,
|
2020-07-10 09:46:38 +10:00
|
|
|
Vec,
|
2021-10-02 18:51:01 -05:00
|
|
|
VecDeque,
|
2024-09-18 22:05:02 +01:00
|
|
|
Waker,
|
2022-06-15 07:37:40 -03:00
|
|
|
Wrapper,
|
2023-08-24 13:30:53 -03:00
|
|
|
Wrapping,
|
2020-07-10 09:46:38 +10:00
|
|
|
Yield,
|
2020-07-14 15:05:26 +10:00
|
|
|
_DECLS,
|
2020-07-10 09:46:38 +10:00
|
|
|
_Self,
|
2020-07-14 15:05:26 +10:00
|
|
|
__D,
|
|
|
|
__H,
|
|
|
|
__S,
|
2022-03-16 15:52:21 +01:00
|
|
|
__awaitee,
|
2020-07-14 15:05:26 +10:00
|
|
|
__try_var,
|
|
|
|
_d,
|
|
|
|
_e,
|
2020-07-10 09:46:38 +10:00
|
|
|
_task_context,
|
2020-10-08 23:23:27 +01:00
|
|
|
a32,
|
2019-05-07 09:55:12 +10:00
|
|
|
aarch64_target_feature,
|
2024-06-14 18:05:09 +01:00
|
|
|
aarch64_unstable_target_feature,
|
2022-02-10 16:43:45 +00:00
|
|
|
aarch64_ver_target_feature,
|
2019-05-07 09:55:12 +10:00
|
|
|
abi,
|
|
|
|
abi_amdgpu_kernel,
|
2020-07-08 11:07:24 +10:00
|
|
|
abi_avr_interrupt,
|
2021-01-24 17:15:05 +00:00
|
|
|
abi_c_cmse_nonsecure_call,
|
2019-10-24 15:29:29 +00:00
|
|
|
abi_efiapi,
|
2019-05-07 09:55:12 +10:00
|
|
|
abi_msp430_interrupt,
|
|
|
|
abi_ptx,
|
feat: `riscv-interrupt-{m,s}` calling conventions
Similar to prior support added for the mips430, avr, and x86 targets
this change implements the rough equivalent of clang's
[`__attribute__((interrupt))`][clang-attr] for riscv targets, enabling
e.g.
```rust
static mut CNT: usize = 0;
pub extern "riscv-interrupt-m" fn isr_m() {
unsafe {
CNT += 1;
}
}
```
to produce highly effective assembly like:
```asm
pub extern "riscv-interrupt-m" fn isr_m() {
420003a0: 1141 addi sp,sp,-16
unsafe {
CNT += 1;
420003a2: c62a sw a0,12(sp)
420003a4: c42e sw a1,8(sp)
420003a6: 3fc80537 lui a0,0x3fc80
420003aa: 63c52583 lw a1,1596(a0) # 3fc8063c <_ZN12esp_riscv_rt3CNT17hcec3e3a214887d53E.0>
420003ae: 0585 addi a1,a1,1
420003b0: 62b52e23 sw a1,1596(a0)
}
}
420003b4: 4532 lw a0,12(sp)
420003b6: 45a2 lw a1,8(sp)
420003b8: 0141 addi sp,sp,16
420003ba: 30200073 mret
```
(disassembly via `riscv64-unknown-elf-objdump -C -S --disassemble ./esp32c3-hal/target/riscv32imc-unknown-none-elf/release/examples/gpio_interrupt`)
This outcome is superior to hand-coded interrupt routines which, lacking
visibility into any non-assembly body of the interrupt handler, have to
be very conservative and save the [entire CPU state to the stack
frame][full-frame-save]. By instead asking LLVM to only save the
registers that it uses, we defer the decision to the tool with the best
context: it can more accurately account for the cost of spills if it
knows that every additional register used is already at the cost of an
implicit spill.
At the LLVM level, this is apparently [implemented by] marking every
register as "[callee-save]," matching the semantics of an interrupt
handler nicely (it has to leave the CPU state just as it found it after
its `{m|s}ret`).
This approach is not suitable for every interrupt handler, as it makes
no attempt to e.g. save the state in a user-accessible stack frame. For
a full discussion of those challenges and tradeoffs, please refer to
[the interrupt calling conventions RFC][rfc].
Inside rustc, this implementation differs from prior art because LLVM
does not expose the "all-saved" function flavor as a calling convention
directly, instead preferring to use an attribute that allows for
differentiating between "machine-mode" and "superivsor-mode" interrupts.
Finally, some effort has been made to guide those who may not yet be
aware of the differences between machine-mode and supervisor-mode
interrupts as to why no `riscv-interrupt` calling convention is exposed
through rustc, and similarly for why `riscv-interrupt-u` makes no
appearance (as it would complicate future LLVM upgrades).
[clang-attr]: https://clang.llvm.org/docs/AttributeReference.html#interrupt-risc-v
[full-frame-save]: https://github.com/esp-rs/esp-riscv-rt/blob/9281af2ecffe13e40992917316f36920c26acaf3/src/lib.rs#L440-L469
[implemented by]: https://github.com/llvm/llvm-project/blob/b7fb2a3fec7c187d58a6d338ab512d9173bca987/llvm/lib/Target/RISCV/RISCVRegisterInfo.cpp#L61-L67
[callee-save]: https://github.com/llvm/llvm-project/blob/973f1fe7a8591c7af148e573491ab68cc15b6ecf/llvm/lib/Target/RISCV/RISCVCallingConv.td#L30-L37
[rfc]: https://github.com/rust-lang/rfcs/pull/3246
2023-05-23 15:08:23 -07:00
|
|
|
abi_riscv_interrupt,
|
2019-05-07 09:55:12 +10:00
|
|
|
abi_sysv64,
|
|
|
|
abi_thiscall,
|
|
|
|
abi_unadjusted,
|
|
|
|
abi_vectorcall,
|
|
|
|
abi_x86_interrupt,
|
2020-03-09 20:18:48 +01:00
|
|
|
abort,
|
2020-07-08 11:04:10 +10:00
|
|
|
add,
|
|
|
|
add_assign,
|
2019-06-14 16:55:36 +03:00
|
|
|
add_with_overflow,
|
2020-07-10 09:46:38 +10:00
|
|
|
address,
|
2021-08-30 10:59:53 +02:00
|
|
|
adt_const_params,
|
2019-05-07 09:55:12 +10:00
|
|
|
advanced_slice_patterns,
|
|
|
|
adx_target_feature,
|
2024-04-11 15:33:37 -07:00
|
|
|
aggregate_raw_ptr,
|
2019-04-10 19:47:55 +02:00
|
|
|
alias,
|
|
|
|
align,
|
2020-07-08 11:04:10 +10:00
|
|
|
align_offset,
|
2022-08-18 19:39:14 +00:00
|
|
|
alignment,
|
2019-05-07 09:55:12 +10:00
|
|
|
all,
|
2020-07-08 11:04:10 +10:00
|
|
|
alloc,
|
2019-04-10 19:47:55 +02:00
|
|
|
alloc_error_handler,
|
2020-07-08 11:04:10 +10:00
|
|
|
alloc_layout,
|
|
|
|
alloc_zeroed,
|
2020-07-10 09:46:38 +10:00
|
|
|
allocator,
|
2021-11-13 16:39:54 +09:00
|
|
|
allocator_api,
|
2020-07-10 09:46:38 +10:00
|
|
|
allocator_internals,
|
2019-04-10 19:47:55 +02:00
|
|
|
allow,
|
|
|
|
allow_fail,
|
|
|
|
allow_internal_unsafe,
|
|
|
|
allow_internal_unstable,
|
2022-01-10 15:32:45 +01:00
|
|
|
alu32,
|
2019-05-07 09:55:12 +10:00
|
|
|
always,
|
2019-05-23 15:31:43 +10:00
|
|
|
and,
|
2020-07-14 16:29:44 +10:00
|
|
|
and_then,
|
2023-04-11 14:24:59 +10:00
|
|
|
anon,
|
2024-01-04 21:53:06 +08:00
|
|
|
anon_adt,
|
2022-06-22 22:19:02 +02:00
|
|
|
anonymous_lifetime_in_impl_trait,
|
2019-05-07 09:55:12 +10:00
|
|
|
any,
|
2022-01-16 02:44:57 +08:00
|
|
|
append_const_msg,
|
2019-05-09 17:08:55 -04:00
|
|
|
arbitrary_enum_discriminant,
|
2019-05-07 09:55:12 +10:00
|
|
|
arbitrary_self_types,
|
2024-03-30 19:25:22 +00:00
|
|
|
arbitrary_self_types_pointers,
|
2022-01-29 12:44:41 -08:00
|
|
|
args,
|
2020-04-24 00:17:29 -07:00
|
|
|
arith_offset,
|
2020-10-08 23:23:27 +01:00
|
|
|
arm,
|
2019-05-07 09:55:12 +10:00
|
|
|
arm_target_feature,
|
2020-07-08 11:04:10 +10:00
|
|
|
array,
|
2020-08-18 17:02:23 -04:00
|
|
|
as_ptr,
|
2022-01-10 17:08:21 +01:00
|
|
|
as_ref,
|
2020-07-10 09:46:38 +10:00
|
|
|
as_str,
|
2019-05-07 09:55:12 +10:00
|
|
|
asm,
|
2021-10-27 18:37:18 +01:00
|
|
|
asm_const,
|
|
|
|
asm_experimental_arch,
|
2023-12-25 20:53:01 +00:00
|
|
|
asm_goto,
|
2021-10-27 18:37:18 +01:00
|
|
|
asm_sym,
|
2021-11-14 20:21:05 +01:00
|
|
|
asm_unwind,
|
2019-06-23 14:59:42 +03:00
|
|
|
assert,
|
2023-09-06 11:13:20 +02:00
|
|
|
assert_eq,
|
2022-01-06 14:50:46 +00:00
|
|
|
assert_eq_macro,
|
2020-06-28 12:58:20 +02:00
|
|
|
assert_inhabited,
|
2020-10-18 22:29:40 +02:00
|
|
|
assert_macro,
|
2022-12-12 15:47:32 +01:00
|
|
|
assert_mem_uninitialized_valid,
|
2022-01-06 14:50:46 +00:00
|
|
|
assert_ne_macro,
|
2020-07-08 11:04:10 +10:00
|
|
|
assert_receiver_is_total_eq,
|
2020-06-28 12:58:20 +02:00
|
|
|
assert_zero_valid,
|
2022-06-15 07:37:40 -03:00
|
|
|
asserting,
|
2022-01-13 07:39:58 +00:00
|
|
|
associated_const_equality,
|
2019-05-07 09:55:12 +10:00
|
|
|
associated_consts,
|
2019-05-20 00:22:44 +01:00
|
|
|
associated_type_bounds,
|
2019-05-07 09:55:12 +10:00
|
|
|
associated_type_defaults,
|
|
|
|
associated_types,
|
2020-06-28 12:58:20 +02:00
|
|
|
assume,
|
2019-11-02 16:12:33 +01:00
|
|
|
assume_init,
|
2019-05-07 09:55:12 +10:00
|
|
|
async_await,
|
2023-12-20 18:03:21 +00:00
|
|
|
async_call,
|
|
|
|
async_call_mut,
|
|
|
|
async_call_once,
|
2019-07-02 04:10:19 +02:00
|
|
|
async_closure,
|
2024-02-13 12:31:41 +03:00
|
|
|
async_destruct,
|
|
|
|
async_drop,
|
|
|
|
async_drop_chain,
|
|
|
|
async_drop_defer,
|
2024-05-03 15:47:23 +03:00
|
|
|
async_drop_deferred_drop_in_place,
|
2024-02-13 12:31:41 +03:00
|
|
|
async_drop_either,
|
|
|
|
async_drop_fuse,
|
|
|
|
async_drop_in_place,
|
|
|
|
async_drop_noop,
|
|
|
|
async_drop_slice,
|
|
|
|
async_drop_surface_drop_in_place,
|
2023-12-20 18:03:21 +00:00
|
|
|
async_fn,
|
2022-08-18 16:27:16 -07:00
|
|
|
async_fn_in_trait,
|
2024-01-24 22:27:25 +00:00
|
|
|
async_fn_kind_helper,
|
2024-05-29 14:28:53 -04:00
|
|
|
async_fn_kind_upvars,
|
2023-12-20 18:03:21 +00:00
|
|
|
async_fn_mut,
|
|
|
|
async_fn_once,
|
2024-05-29 14:06:39 -04:00
|
|
|
async_fn_once_output,
|
2023-05-30 14:32:29 -07:00
|
|
|
async_fn_track_caller,
|
2024-01-26 17:00:28 +00:00
|
|
|
async_fn_traits,
|
2023-12-08 14:51:50 -08:00
|
|
|
async_for_loop,
|
2023-11-28 18:18:19 +00:00
|
|
|
async_iterator,
|
2023-12-08 17:00:11 -08:00
|
|
|
async_iterator_poll_next,
|
2020-12-02 15:16:12 -08:00
|
|
|
atomic,
|
|
|
|
atomic_mod,
|
2020-06-23 09:41:56 -07:00
|
|
|
atomics,
|
2020-07-10 09:46:38 +10:00
|
|
|
att_syntax,
|
2019-05-07 09:55:12 +10:00
|
|
|
attr,
|
|
|
|
attr_literals,
|
2020-07-10 09:46:38 +10:00
|
|
|
attributes,
|
2024-07-29 13:31:59 +02:00
|
|
|
audit_that,
|
2019-05-07 09:55:12 +10:00
|
|
|
augmented_assignments,
|
2020-11-22 19:54:31 -08:00
|
|
|
auto_traits,
|
2019-04-10 19:47:55 +02:00
|
|
|
automatically_derived,
|
2022-01-10 15:32:45 +01:00
|
|
|
avx,
|
2019-05-07 09:55:12 +10:00
|
|
|
avx512_target_feature,
|
2022-01-10 15:32:45 +01:00
|
|
|
avx512bw,
|
|
|
|
avx512f,
|
2019-05-07 09:55:12 +10:00
|
|
|
await_macro,
|
2020-07-14 15:05:26 +10:00
|
|
|
bang,
|
2019-05-22 14:41:15 +10:00
|
|
|
begin_panic,
|
2019-05-22 12:42:23 +10:00
|
|
|
bench,
|
2019-05-07 09:55:12 +10:00
|
|
|
bin,
|
2024-09-18 16:59:57 +01:00
|
|
|
binaryheap_iter,
|
2019-05-07 09:55:12 +10:00
|
|
|
bind_by_move_pattern_guards,
|
2019-11-11 11:39:52 +01:00
|
|
|
bindings_after_at,
|
2020-07-08 11:04:10 +10:00
|
|
|
bitand,
|
|
|
|
bitand_assign,
|
|
|
|
bitor,
|
|
|
|
bitor_assign,
|
2020-07-08 11:07:24 +10:00
|
|
|
bitreverse,
|
2020-07-08 11:04:10 +10:00
|
|
|
bitxor,
|
|
|
|
bitxor_assign,
|
2021-08-10 11:50:33 +01:00
|
|
|
black_box,
|
2019-05-07 09:55:12 +10:00
|
|
|
block,
|
2019-06-13 21:14:58 +01:00
|
|
|
bool,
|
2024-09-18 22:01:52 +01:00
|
|
|
bool_then,
|
2019-11-11 11:48:47 -08:00
|
|
|
borrowck_graphviz_format,
|
2019-05-07 09:55:12 +10:00
|
|
|
borrowck_graphviz_postflow,
|
2022-11-13 13:55:04 +00:00
|
|
|
box_new,
|
2019-05-07 09:55:12 +10:00
|
|
|
box_patterns,
|
|
|
|
box_syntax,
|
2021-04-20 19:03:10 +10:00
|
|
|
bpf_target_feature,
|
2019-05-07 09:55:12 +10:00
|
|
|
braced_empty_structs,
|
2021-04-15 00:33:55 -07:00
|
|
|
branch,
|
2020-06-28 12:58:20 +02:00
|
|
|
breakpoint,
|
2020-07-14 15:05:26 +10:00
|
|
|
bridge,
|
2019-06-14 16:55:36 +03:00
|
|
|
bswap,
|
2024-09-18 17:58:18 +01:00
|
|
|
btreemap_contains_key,
|
|
|
|
btreemap_insert,
|
2024-09-18 16:59:57 +01:00
|
|
|
btreeset_iter,
|
2023-04-22 16:29:34 +02:00
|
|
|
builtin_syntax,
|
2023-08-01 16:30:02 +01:00
|
|
|
c,
|
2020-08-18 17:02:23 -04:00
|
|
|
c_str,
|
2023-03-06 07:10:23 +00:00
|
|
|
c_str_literals,
|
rustc_target: add "unwind" payloads to `Abi`
### Overview
This commit begins the implementation work for RFC 2945. For more
information, see the rendered RFC [1] and tracking issue [2].
A boolean `unwind` payload is added to the `C`, `System`, `Stdcall`,
and `Thiscall` variants, marking whether unwinding across FFI
boundaries is acceptable. The cases where each of these variants'
`unwind` member is true correspond with the `C-unwind`,
`system-unwind`, `stdcall-unwind`, and `thiscall-unwind` ABI strings
introduced in RFC 2945 [3].
### Feature Gate and Unstable Book
This commit adds a `c_unwind` feature gate for the new ABI strings.
Tests for this feature gate are included in `src/test/ui/c-unwind/`,
which ensure that this feature gate works correctly for each of the
new ABIs.
A new language features entry in the unstable book is added as well.
### Further Work To Be Done
This commit does not proceed to implement the new unwinding ABIs,
and is intentionally scoped specifically to *defining* the ABIs and
their feature flag.
### One Note on Test Churn
This will lead to some test churn, in re-blessing hash tests, as the
deleted comment in `src/librustc_target/spec/abi.rs` mentioned,
because we can no longer guarantee the ordering of the `Abi`
variants.
While this is a downside, this decision was made bearing in mind
that RFC 2945 states the following, in the "Other `unwind` Strings"
section [3]:
> More unwind variants of existing ABI strings may be introduced,
> with the same semantics, without an additional RFC.
Adding a new variant for each of these cases, rather than specifying
a payload for a given ABI, would quickly become untenable, and make
working with the `Abi` enum prone to mistakes.
This approach encodes the unwinding information *into* a given ABI,
to account for the future possibility of other `-unwind` ABI
strings.
### Ignore Directives
`ignore-*` directives are used in two of our `*-unwind` ABI test
cases.
Specifically, the `stdcall-unwind` and `thiscall-unwind` test cases
ignore architectures that do not support `stdcall` and
`thiscall`, respectively.
These directives are cribbed from
`src/test/ui/c-variadic/variadic-ffi-1.rs` for `stdcall`, and
`src/test/ui/extern/extern-thiscall.rs` for `thiscall`.
This would otherwise fail on some targets, see:
https://github.com/rust-lang-ci/rust/commit/fcf697f90206e9c87b39d494f94ab35d976bfc60
### Footnotes
[1]: https://github.com/rust-lang/rfcs/blob/master/text/2945-c-unwind-abi.md
[2]: https://github.com/rust-lang/rust/issues/74990
[3]: https://github.com/rust-lang/rfcs/blob/master/text/2945-c-unwind-abi.md#other-unwind-abi-strings
2020-08-27 11:49:18 -04:00
|
|
|
c_unwind,
|
2020-07-10 09:46:38 +10:00
|
|
|
c_variadic,
|
2022-12-12 22:42:44 -08:00
|
|
|
c_void,
|
2020-07-08 11:04:10 +10:00
|
|
|
call,
|
|
|
|
call_mut,
|
|
|
|
call_once,
|
2024-05-29 14:06:39 -04:00
|
|
|
call_once_future,
|
|
|
|
call_ref_future,
|
2020-07-10 09:46:38 +10:00
|
|
|
caller_location,
|
2020-10-11 00:14:11 -04:00
|
|
|
capture_disjoint_fields,
|
2024-02-25 18:51:22 +01:00
|
|
|
catch_unwind,
|
2022-10-17 12:04:16 +02:00
|
|
|
cause,
|
2019-05-07 09:55:12 +10:00
|
|
|
cdylib,
|
2024-03-01 03:53:26 -05:00
|
|
|
ceilf128,
|
|
|
|
ceilf16,
|
2020-06-28 12:58:20 +02:00
|
|
|
ceilf32,
|
|
|
|
ceilf64,
|
2019-04-10 19:47:55 +02:00
|
|
|
cfg,
|
2020-03-10 00:56:20 +03:00
|
|
|
cfg_accessible,
|
2019-04-10 19:47:55 +02:00
|
|
|
cfg_attr,
|
2019-05-07 09:55:12 +10:00
|
|
|
cfg_attr_multi,
|
2019-06-28 10:31:27 -05:00
|
|
|
cfg_doctest,
|
2021-03-06 21:33:02 +03:00
|
|
|
cfg_eval,
|
2024-04-14 13:52:58 +01:00
|
|
|
cfg_fmt_debug,
|
2020-11-04 21:59:35 +01:00
|
|
|
cfg_hide,
|
2023-05-02 17:53:11 +04:00
|
|
|
cfg_overflow_checks,
|
2020-07-25 19:02:49 +01:00
|
|
|
cfg_panic,
|
2023-07-22 17:16:18 +02:00
|
|
|
cfg_relocation_model,
|
2019-10-22 00:00:00 +00:00
|
|
|
cfg_sanitize,
|
2023-12-23 00:37:35 +01:00
|
|
|
cfg_sanitizer_cfi,
|
2021-07-06 20:54:54 -07:00
|
|
|
cfg_target_abi,
|
2022-04-22 16:34:56 +02:00
|
|
|
cfg_target_compact,
|
2019-05-07 09:55:12 +10:00
|
|
|
cfg_target_feature,
|
|
|
|
cfg_target_has_atomic,
|
2022-02-09 18:14:35 +00:00
|
|
|
cfg_target_has_atomic_equal_alignment,
|
2019-05-07 09:55:12 +10:00
|
|
|
cfg_target_thread_local,
|
|
|
|
cfg_target_vendor,
|
2024-04-03 08:54:03 -04:00
|
|
|
cfg_ub_checks,
|
2020-04-19 10:47:55 +02:00
|
|
|
cfg_version,
|
2021-10-07 15:33:13 -07:00
|
|
|
cfi,
|
2022-12-12 22:42:44 -08:00
|
|
|
cfi_encoding,
|
2019-06-13 21:14:58 +01:00
|
|
|
char,
|
2020-07-14 15:05:26 +10:00
|
|
|
client,
|
2019-06-24 18:14:04 +02:00
|
|
|
clippy,
|
2021-07-29 13:43:26 +02:00
|
|
|
clobber_abi,
|
2019-05-07 09:55:12 +10:00
|
|
|
clone,
|
|
|
|
clone_closures,
|
2024-07-24 22:43:12 -04:00
|
|
|
clone_fn,
|
2019-05-07 09:55:12 +10:00
|
|
|
clone_from,
|
2020-08-31 18:11:44 +01:00
|
|
|
closure,
|
2022-06-02 20:15:05 +04:00
|
|
|
closure_lifetime_binder,
|
2019-05-07 09:55:12 +10:00
|
|
|
closure_to_fn_coercion,
|
Support `#[track_caller]` on closures and generators
This PR allows applying a `#[track_caller]` attribute to a
closure/generator expression. The attribute as interpreted as applying
to the compiler-generated implementation of the corresponding trait
method (`FnOnce::call_once`, `FnMut::call_mut`, `Fn::call`, or
`Generator::resume`).
This feature does not have its own feature gate - however, it requires
`#![feature(stmt_expr_attributes)]` in order to actually apply
an attribute to a closure or generator.
This is implemented in the same way as for functions - an extra
location argument is appended to the end of the ABI. For closures,
this argument is *not* part of the 'tupled' argument storing the
parameters - the final closure argument for `#[track_caller]` closures
is no longer a tuple.
For direct (monomorphized) calls, the necessary support was already
implemented - we just needeed to adjust some assertions around checking
the ABI and argument count to take closures into account.
For calls through a trait object, more work was needed.
When creating a `ReifyShim`, we need to create a shim
for the trait method (e.g. `FnOnce::call_mut`) - unlike normal
functions, closures are never invoked directly, and always go through a
trait method.
Additional handling was needed for `InstanceDef::ClosureOnceShim`. In
order to pass location information throgh a direct (monomorphized) call
to `FnOnce::call_once` on an `FnMut` closure, we need to make
`ClosureOnceShim` aware of `#[tracked_caller]`. A new field
`track_caller` is added to `ClosureOnceShim` - this is used by
`InstanceDef::requires_caller` location, allowing codegen to
pass through the extra location argument.
Since `ClosureOnceShim.track_caller` is only used by codegen,
we end up generating two identical MIR shims - one for
`track_caller == true`, and one for `track_caller == false`. However,
these two shims are used by the entire crate (i.e. it's two shims total,
not two shims per unique closure), so this shouldn't a big deal.
2021-06-27 14:01:11 -05:00
|
|
|
closure_track_caller,
|
2019-05-22 14:41:15 +10:00
|
|
|
cmp,
|
2021-07-15 23:47:03 +02:00
|
|
|
cmp_max,
|
|
|
|
cmp_min,
|
2024-02-18 15:21:44 +01:00
|
|
|
cmp_ord_max,
|
|
|
|
cmp_ord_min,
|
2023-11-22 18:25:08 +01:00
|
|
|
cmp_partialeq_eq,
|
|
|
|
cmp_partialeq_ne,
|
2024-02-18 15:21:44 +01:00
|
|
|
cmp_partialord_cmp,
|
|
|
|
cmp_partialord_ge,
|
|
|
|
cmp_partialord_gt,
|
|
|
|
cmp_partialord_le,
|
|
|
|
cmp_partialord_lt,
|
2019-05-07 09:55:12 +10:00
|
|
|
cmpxchg16b_target_feature,
|
2020-09-28 21:10:38 +01:00
|
|
|
cmse_nonsecure_entry,
|
2020-07-08 11:04:10 +10:00
|
|
|
coerce_unsized,
|
2019-04-10 19:47:55 +02:00
|
|
|
cold,
|
2022-07-21 16:19:22 +01:00
|
|
|
collapse_debuginfo,
|
2019-06-23 14:59:42 +03:00
|
|
|
column,
|
2023-08-02 12:45:52 -07:00
|
|
|
compare_bytes,
|
2020-12-02 15:16:12 -08:00
|
|
|
compare_exchange,
|
|
|
|
compare_exchange_weak,
|
2019-05-07 09:55:12 +10:00
|
|
|
compile_error,
|
2021-11-22 13:14:54 +01:00
|
|
|
compiler,
|
2019-04-10 19:47:55 +02:00
|
|
|
compiler_builtins,
|
2020-12-02 15:16:12 -08:00
|
|
|
compiler_fence,
|
2019-06-23 14:59:42 +03:00
|
|
|
concat,
|
2021-07-29 13:00:55 -04:00
|
|
|
concat_bytes,
|
2019-05-07 09:55:12 +10:00
|
|
|
concat_idents,
|
|
|
|
conservative_impl_trait,
|
|
|
|
console,
|
2020-12-01 15:39:25 +05:30
|
|
|
const_allocate,
|
2021-05-16 02:04:58 +02:00
|
|
|
const_async_blocks,
|
2022-12-21 14:51:02 +00:00
|
|
|
const_closures,
|
2019-05-07 09:55:12 +10:00
|
|
|
const_compare_raw_pointers,
|
2019-05-26 09:58:06 +01:00
|
|
|
const_constructor,
|
2021-12-25 22:35:11 +09:00
|
|
|
const_deallocate,
|
2019-12-14 18:51:56 +01:00
|
|
|
const_eval_limit,
|
2021-10-12 05:06:37 +00:00
|
|
|
const_eval_select,
|
2020-09-10 08:52:02 +02:00
|
|
|
const_evaluatable_checked,
|
2019-09-29 19:22:18 -04:00
|
|
|
const_extern_fn,
|
2019-05-07 09:55:12 +10:00
|
|
|
const_fn,
|
2020-09-23 11:53:58 -07:00
|
|
|
const_fn_floating_point_arithmetic,
|
2020-09-24 16:17:03 -07:00
|
|
|
const_fn_fn_ptr_basics,
|
2021-04-18 18:36:41 +02:00
|
|
|
const_fn_trait_bound,
|
2020-07-11 08:55:05 -07:00
|
|
|
const_fn_transmute,
|
2019-05-07 09:55:12 +10:00
|
|
|
const_fn_union,
|
2021-04-18 19:02:33 +02:00
|
|
|
const_fn_unsize,
|
2021-07-18 03:34:50 +02:00
|
|
|
const_for,
|
2021-07-09 16:45:50 +02:00
|
|
|
const_format_args,
|
2019-05-07 09:55:12 +10:00
|
|
|
const_generics,
|
2020-12-31 01:58:27 +01:00
|
|
|
const_generics_defaults,
|
2019-09-18 10:27:31 -07:00
|
|
|
const_if_match,
|
2020-10-05 20:30:13 -07:00
|
|
|
const_impl_trait,
|
2019-06-12 07:56:07 +01:00
|
|
|
const_in_array_repeat_expressions,
|
2020-07-08 11:07:24 +10:00
|
|
|
const_indexing,
|
2019-05-07 09:55:12 +10:00
|
|
|
const_let,
|
2019-12-10 12:41:58 -08:00
|
|
|
const_loop,
|
2019-11-21 12:38:14 -05:00
|
|
|
const_mut_refs,
|
2019-05-07 09:55:12 +10:00
|
|
|
const_panic,
|
2021-07-06 12:38:26 +00:00
|
|
|
const_panic_fmt,
|
2023-02-17 13:44:35 +00:00
|
|
|
const_param_ty,
|
2020-06-11 14:30:19 -07:00
|
|
|
const_precise_live_drops,
|
2023-08-14 11:47:42 +02:00
|
|
|
const_ptr_cast,
|
2019-05-07 09:55:12 +10:00
|
|
|
const_raw_ptr_deref,
|
|
|
|
const_raw_ptr_to_usize_cast,
|
2020-12-27 17:33:56 +00:00
|
|
|
const_refs_to_cell,
|
2024-01-05 12:18:11 +01:00
|
|
|
const_refs_to_static,
|
2022-03-16 20:49:54 +11:00
|
|
|
const_trait,
|
2020-01-02 15:46:30 -08:00
|
|
|
const_trait_bound_opt_out,
|
2020-01-02 15:45:48 -08:00
|
|
|
const_trait_impl,
|
2021-07-18 03:34:50 +02:00
|
|
|
const_try,
|
2020-08-31 18:11:44 +01:00
|
|
|
constant,
|
|
|
|
constructor,
|
2023-09-26 23:56:38 -04:00
|
|
|
convert_identity,
|
2020-07-08 11:07:24 +10:00
|
|
|
copy,
|
2019-05-07 09:55:12 +10:00
|
|
|
copy_closures,
|
2020-06-28 12:58:20 +02:00
|
|
|
copy_nonoverlapping,
|
2024-03-01 03:53:26 -05:00
|
|
|
copysignf128,
|
|
|
|
copysignf16,
|
2020-06-28 12:58:20 +02:00
|
|
|
copysignf32,
|
|
|
|
copysignf64,
|
2019-05-07 09:55:12 +10:00
|
|
|
core,
|
2021-01-09 16:52:06 +01:00
|
|
|
core_panic,
|
|
|
|
core_panic_2015_macro,
|
2022-11-13 22:58:20 +00:00
|
|
|
core_panic_2021_macro,
|
2020-10-18 22:26:36 +02:00
|
|
|
core_panic_macro,
|
2023-10-19 21:46:28 +00:00
|
|
|
coroutine,
|
|
|
|
coroutine_clone,
|
2024-01-19 21:28:37 +00:00
|
|
|
coroutine_resume,
|
2024-06-12 18:15:33 -04:00
|
|
|
coroutine_return,
|
2023-10-19 21:46:28 +00:00
|
|
|
coroutine_state,
|
2024-06-12 18:15:33 -04:00
|
|
|
coroutine_yield,
|
2023-10-19 21:46:28 +00:00
|
|
|
coroutines,
|
2024-03-01 03:53:26 -05:00
|
|
|
cosf128,
|
|
|
|
cosf16,
|
2020-06-28 12:58:20 +02:00
|
|
|
cosf32,
|
|
|
|
cosf64,
|
2021-07-29 23:23:17 -07:00
|
|
|
count,
|
2023-08-09 15:57:16 +01:00
|
|
|
coverage,
|
2023-08-24 20:15:41 +01:00
|
|
|
coverage_attribute,
|
2021-08-25 21:45:37 -07:00
|
|
|
cr,
|
2019-04-10 19:47:55 +02:00
|
|
|
crate_id,
|
2019-05-07 09:55:12 +10:00
|
|
|
crate_in_paths,
|
2019-06-03 20:47:42 -06:00
|
|
|
crate_local,
|
2019-04-10 19:47:55 +02:00
|
|
|
crate_name,
|
|
|
|
crate_type,
|
2019-05-07 09:55:12 +10:00
|
|
|
crate_visibility_modifier,
|
2020-07-08 11:04:10 +10:00
|
|
|
crt_dash_static: "crt-static",
|
2023-07-14 19:16:38 +08:00
|
|
|
csky_target_feature,
|
2024-03-23 10:49:05 -04:00
|
|
|
cstr_type,
|
2024-09-18 21:09:06 +01:00
|
|
|
cstring_as_c_str,
|
2020-09-21 16:32:28 -04:00
|
|
|
cstring_type,
|
2020-07-08 11:07:24 +10:00
|
|
|
ctlz,
|
|
|
|
ctlz_nonzero,
|
2019-06-14 16:55:36 +03:00
|
|
|
ctpop,
|
|
|
|
cttz,
|
|
|
|
cttz_nonzero,
|
2019-05-07 09:55:12 +10:00
|
|
|
custom_attribute,
|
2023-04-25 15:04:22 +02:00
|
|
|
custom_code_classes_in_docs,
|
2019-05-07 09:55:12 +10:00
|
|
|
custom_derive,
|
|
|
|
custom_inner_attributes,
|
2022-08-03 04:30:13 -07:00
|
|
|
custom_mir,
|
2019-05-07 09:55:12 +10:00
|
|
|
custom_test_frameworks,
|
2020-07-14 15:05:26 +10:00
|
|
|
d,
|
2022-02-24 22:37:53 +00:00
|
|
|
d32,
|
2022-01-06 14:50:46 +00:00
|
|
|
dbg_macro,
|
2020-07-08 11:04:10 +10:00
|
|
|
dead_code,
|
|
|
|
dealloc,
|
2020-07-08 11:07:24 +10:00
|
|
|
debug,
|
2022-01-06 14:50:46 +00:00
|
|
|
debug_assert_eq_macro,
|
2020-10-19 00:45:07 +02:00
|
|
|
debug_assert_macro,
|
2022-01-06 14:50:46 +00:00
|
|
|
debug_assert_ne_macro,
|
2020-07-08 11:04:10 +10:00
|
|
|
debug_assertions,
|
2020-07-14 15:05:26 +10:00
|
|
|
debug_struct,
|
Optimize the code produced by `derive(Debug)`.
This commit adds new methods that combine sequences of existing
formatting methods.
- `Formatter::debug_{tuple,struct}_field[12345]_finish`, equivalent to a
`Formatter::debug_{tuple,struct}` + N x `Debug{Tuple,Struct}::field` +
`Debug{Tuple,Struct}::finish` call sequence.
- `Formatter::debug_{tuple,struct}_fields_finish` is similar, but can
handle any number of fields by using arrays.
These new methods are all marked as `doc(hidden)` and unstable. They are
intended for the compiler's own use.
Special-casing up to 5 fields gives significantly better performance
results than always using arrays (as was tried in #95637).
The commit also changes the `Debug` deriving code to use these new methods. For
example, where the old `Debug` code for a struct with two fields would be like
this:
```
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match *self {
Self {
f1: ref __self_0_0,
f2: ref __self_0_1,
} => {
let debug_trait_builder = &mut ::core::fmt::Formatter::debug_struct(f, "S2");
let _ = ::core::fmt::DebugStruct::field(debug_trait_builder, "f1", &&(*__self_0_0));
let _ = ::core::fmt::DebugStruct::field(debug_trait_builder, "f2", &&(*__self_0_1));
::core::fmt::DebugStruct::finish(debug_trait_builder)
}
}
}
```
the new code is like this:
```
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match *self {
Self {
f1: ref __self_0_0,
f2: ref __self_0_1,
} => ::core::fmt::Formatter::debug_struct_field2_finish(
f,
"S2",
"f1",
&&(*__self_0_0),
"f2",
&&(*__self_0_1),
),
}
}
```
This shrinks the code produced for `Debug` instances
considerably, reducing compile times and binary sizes.
Co-authored-by: Scott McMurray <scottmcm@users.noreply.github.com>
2022-06-17 17:08:36 +10:00
|
|
|
debug_struct_fields_finish,
|
2020-07-14 15:05:26 +10:00
|
|
|
debug_tuple,
|
Optimize the code produced by `derive(Debug)`.
This commit adds new methods that combine sequences of existing
formatting methods.
- `Formatter::debug_{tuple,struct}_field[12345]_finish`, equivalent to a
`Formatter::debug_{tuple,struct}` + N x `Debug{Tuple,Struct}::field` +
`Debug{Tuple,Struct}::finish` call sequence.
- `Formatter::debug_{tuple,struct}_fields_finish` is similar, but can
handle any number of fields by using arrays.
These new methods are all marked as `doc(hidden)` and unstable. They are
intended for the compiler's own use.
Special-casing up to 5 fields gives significantly better performance
results than always using arrays (as was tried in #95637).
The commit also changes the `Debug` deriving code to use these new methods. For
example, where the old `Debug` code for a struct with two fields would be like
this:
```
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match *self {
Self {
f1: ref __self_0_0,
f2: ref __self_0_1,
} => {
let debug_trait_builder = &mut ::core::fmt::Formatter::debug_struct(f, "S2");
let _ = ::core::fmt::DebugStruct::field(debug_trait_builder, "f1", &&(*__self_0_0));
let _ = ::core::fmt::DebugStruct::field(debug_trait_builder, "f2", &&(*__self_0_1));
::core::fmt::DebugStruct::finish(debug_trait_builder)
}
}
}
```
the new code is like this:
```
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match *self {
Self {
f1: ref __self_0_0,
f2: ref __self_0_1,
} => ::core::fmt::Formatter::debug_struct_field2_finish(
f,
"S2",
"f1",
&&(*__self_0_0),
"f2",
&&(*__self_0_1),
),
}
}
```
This shrinks the code produced for `Debug` instances
considerably, reducing compile times and binary sizes.
Co-authored-by: Scott McMurray <scottmcm@users.noreply.github.com>
2022-06-17 17:08:36 +10:00
|
|
|
debug_tuple_fields_finish,
|
2022-04-25 18:02:43 -07:00
|
|
|
debugger_visualizer,
|
2019-05-07 09:55:12 +10:00
|
|
|
decl_macro,
|
2020-07-10 09:46:38 +10:00
|
|
|
declare_lint_pass,
|
2020-07-08 11:04:10 +10:00
|
|
|
decode,
|
2020-09-07 10:45:20 +02:00
|
|
|
default_alloc_error_handler,
|
2023-09-26 23:56:38 -04:00
|
|
|
default_fn,
|
2019-04-10 19:47:55 +02:00
|
|
|
default_lib_allocator,
|
2021-07-04 12:24:20 +08:00
|
|
|
default_method_body_is_const,
|
2019-05-07 09:55:12 +10:00
|
|
|
default_type_parameter_fallback,
|
|
|
|
default_type_params,
|
2024-02-12 15:26:59 +11:00
|
|
|
delayed_bug_from_inside_query,
|
2019-04-10 19:47:55 +02:00
|
|
|
deny,
|
|
|
|
deprecated,
|
2022-03-15 19:28:53 -03:00
|
|
|
deprecated_safe,
|
2022-02-16 18:48:33 -05:00
|
|
|
deprecated_suggestion,
|
2019-05-22 10:15:32 +10:00
|
|
|
deref,
|
2020-07-25 07:04:13 -04:00
|
|
|
deref_method,
|
2019-05-22 10:15:32 +10:00
|
|
|
deref_mut,
|
2023-09-26 23:56:38 -04:00
|
|
|
deref_mut_method,
|
2024-03-08 19:17:23 +01:00
|
|
|
deref_patterns,
|
2024-03-21 14:37:43 -04:00
|
|
|
deref_pure,
|
2020-07-25 07:04:13 -04:00
|
|
|
deref_target,
|
2019-04-10 19:47:55 +02:00
|
|
|
derive,
|
2022-09-20 11:55:07 +00:00
|
|
|
derive_const,
|
2021-06-29 20:22:52 -04:00
|
|
|
derive_default_enum,
|
2024-05-26 17:57:13 +08:00
|
|
|
derive_smart_pointer,
|
2022-03-21 16:52:41 +11:00
|
|
|
destruct,
|
2020-11-04 16:32:52 +00:00
|
|
|
destructuring_assignment,
|
2019-05-19 20:16:04 +02:00
|
|
|
diagnostic,
|
2023-04-28 13:04:35 +02:00
|
|
|
diagnostic_namespace,
|
2019-06-03 20:47:42 -06:00
|
|
|
direct,
|
2020-07-08 11:04:10 +10:00
|
|
|
discriminant_kind,
|
2020-07-15 09:59:08 +02:00
|
|
|
discriminant_type,
|
2020-03-08 14:24:32 +01:00
|
|
|
discriminant_value,
|
2020-07-08 11:04:10 +10:00
|
|
|
dispatch_from_dyn,
|
|
|
|
div,
|
|
|
|
div_assign,
|
2024-03-21 20:53:22 +00:00
|
|
|
diverging_block_default,
|
2023-01-09 20:51:01 -03:00
|
|
|
do_not_recommend,
|
2019-04-10 19:47:55 +02:00
|
|
|
doc,
|
2019-05-07 09:55:12 +10:00
|
|
|
doc_alias,
|
2021-11-02 14:36:54 +01:00
|
|
|
doc_auto_cfg,
|
2019-05-07 09:55:12 +10:00
|
|
|
doc_cfg,
|
2020-11-04 21:59:35 +01:00
|
|
|
doc_cfg_hide,
|
2019-05-07 09:55:12 +10:00
|
|
|
doc_keyword,
|
|
|
|
doc_masked,
|
2021-03-08 19:35:53 -08:00
|
|
|
doc_notable_trait,
|
2021-07-10 22:06:10 -04:00
|
|
|
doc_primitive,
|
2020-07-06 12:54:33 -07:00
|
|
|
doc_spotlight,
|
2019-06-28 10:31:27 -05:00
|
|
|
doctest,
|
2019-05-07 09:55:12 +10:00
|
|
|
document_private_items,
|
2021-12-15 06:18:18 +11:00
|
|
|
dotdot: "..",
|
2019-05-07 09:55:12 +10:00
|
|
|
dotdot_in_tuple_patterns,
|
2020-07-10 09:46:38 +10:00
|
|
|
dotdoteq_in_patterns,
|
2020-12-10 13:51:56 -08:00
|
|
|
dreg,
|
|
|
|
dreg_low16,
|
|
|
|
dreg_low8,
|
2020-07-08 11:04:10 +10:00
|
|
|
drop,
|
2020-06-28 12:58:20 +02:00
|
|
|
drop_in_place,
|
2020-07-08 11:07:24 +10:00
|
|
|
drop_types_in_const,
|
2020-07-10 09:46:38 +10:00
|
|
|
dropck_eyepatch,
|
|
|
|
dropck_parametricity,
|
2019-05-07 09:55:12 +10:00
|
|
|
dylib,
|
2020-10-19 15:38:11 +02:00
|
|
|
dyn_metadata,
|
2022-04-07 18:06:53 -07:00
|
|
|
dyn_star,
|
2019-05-07 09:55:12 +10:00
|
|
|
dyn_trait,
|
2023-07-22 17:16:18 +02:00
|
|
|
dynamic_no_pic: "dynamic-no-pic",
|
2022-01-10 15:32:45 +01:00
|
|
|
e,
|
2021-10-07 12:44:46 +02:00
|
|
|
edition_panic,
|
2023-06-30 13:53:23 +00:00
|
|
|
effects,
|
2020-07-08 11:04:10 +10:00
|
|
|
eh_catch_typeinfo,
|
2019-05-07 09:55:12 +10:00
|
|
|
eh_personality,
|
2023-03-05 03:39:37 +00:00
|
|
|
emit,
|
2020-07-14 15:05:26 +10:00
|
|
|
emit_enum,
|
|
|
|
emit_enum_variant,
|
|
|
|
emit_enum_variant_arg,
|
|
|
|
emit_struct,
|
|
|
|
emit_struct_field,
|
2019-05-07 09:55:12 +10:00
|
|
|
enable,
|
2020-07-08 11:04:10 +10:00
|
|
|
encode,
|
2022-01-10 17:08:21 +01:00
|
|
|
end,
|
2024-05-02 23:19:02 +02:00
|
|
|
entry_nops,
|
2024-04-29 17:22:20 -05:00
|
|
|
enumerate_method,
|
2019-06-23 14:59:42 +03:00
|
|
|
env,
|
2023-10-25 14:05:42 -07:00
|
|
|
env_CFG_RELEASE: env!("CFG_RELEASE"),
|
2022-01-06 14:50:46 +00:00
|
|
|
eprint_macro,
|
|
|
|
eprintln_macro,
|
2019-05-25 16:26:57 +01:00
|
|
|
eq,
|
2020-10-26 03:46:54 -07:00
|
|
|
ermsb_target_feature,
|
2020-06-28 12:58:20 +02:00
|
|
|
exact_div,
|
2019-05-07 09:55:12 +10:00
|
|
|
except,
|
2020-07-08 11:04:10 +10:00
|
|
|
exchange_malloc,
|
2019-05-07 09:55:12 +10:00
|
|
|
exclusive_range_pattern,
|
|
|
|
exhaustive_integer_patterns,
|
|
|
|
exhaustive_patterns,
|
|
|
|
existential_type,
|
2024-03-01 03:53:26 -05:00
|
|
|
exp2f128,
|
|
|
|
exp2f16,
|
2020-06-28 12:58:20 +02:00
|
|
|
exp2f32,
|
|
|
|
exp2f64,
|
2020-08-18 17:02:23 -04:00
|
|
|
expect,
|
2019-05-07 09:55:12 +10:00
|
|
|
expected,
|
2024-03-01 03:53:26 -05:00
|
|
|
expf128,
|
|
|
|
expf16,
|
2020-07-08 11:07:24 +10:00
|
|
|
expf32,
|
|
|
|
expf64,
|
2021-06-09 20:56:41 +01:00
|
|
|
explicit_generic_args_with_impl_trait,
|
2022-11-16 18:36:17 +00:00
|
|
|
explicit_tail_calls,
|
2019-04-10 19:47:55 +02:00
|
|
|
export_name,
|
2019-05-23 16:23:11 +10:00
|
|
|
expr,
|
2024-04-12 10:19:23 -07:00
|
|
|
expr_2021,
|
|
|
|
expr_fragment_specifier_2024,
|
2020-11-07 16:09:40 +03:00
|
|
|
extended_key_value_attributes,
|
2022-08-08 15:31:32 +02:00
|
|
|
extended_varargs_abi_support,
|
2019-05-07 09:55:12 +10:00
|
|
|
extern_absolute_paths,
|
|
|
|
extern_crate_item_prelude,
|
|
|
|
extern_crate_self,
|
|
|
|
extern_in_paths,
|
|
|
|
extern_prelude,
|
|
|
|
extern_types,
|
2024-01-11 01:36:05 +07:00
|
|
|
external,
|
2020-07-10 09:46:38 +10:00
|
|
|
external_doc,
|
2020-07-14 15:05:26 +10:00
|
|
|
f,
|
2024-02-28 03:44:23 -05:00
|
|
|
f128,
|
2024-03-01 03:53:26 -05:00
|
|
|
f128_nan,
|
2024-02-28 03:44:23 -05:00
|
|
|
f16,
|
2024-03-01 03:53:26 -05:00
|
|
|
f16_nan,
|
2019-05-07 09:55:12 +10:00
|
|
|
f16c_target_feature,
|
2019-05-19 19:56:45 +03:00
|
|
|
f32,
|
2024-09-18 21:15:03 +01:00
|
|
|
f32_epsilon,
|
2024-02-26 17:36:42 -07:00
|
|
|
f32_legacy_const_digits,
|
|
|
|
f32_legacy_const_epsilon,
|
|
|
|
f32_legacy_const_infinity,
|
|
|
|
f32_legacy_const_mantissa_dig,
|
|
|
|
f32_legacy_const_max,
|
|
|
|
f32_legacy_const_max_10_exp,
|
|
|
|
f32_legacy_const_max_exp,
|
|
|
|
f32_legacy_const_min,
|
|
|
|
f32_legacy_const_min_10_exp,
|
|
|
|
f32_legacy_const_min_exp,
|
|
|
|
f32_legacy_const_min_positive,
|
|
|
|
f32_legacy_const_nan,
|
|
|
|
f32_legacy_const_neg_infinity,
|
|
|
|
f32_legacy_const_radix,
|
2023-05-20 11:28:25 +02:00
|
|
|
f32_nan,
|
2019-05-19 19:56:45 +03:00
|
|
|
f64,
|
2024-09-18 21:15:03 +01:00
|
|
|
f64_epsilon,
|
2024-02-26 17:36:42 -07:00
|
|
|
f64_legacy_const_digits,
|
|
|
|
f64_legacy_const_epsilon,
|
|
|
|
f64_legacy_const_infinity,
|
|
|
|
f64_legacy_const_mantissa_dig,
|
|
|
|
f64_legacy_const_max,
|
|
|
|
f64_legacy_const_max_10_exp,
|
|
|
|
f64_legacy_const_max_exp,
|
|
|
|
f64_legacy_const_min,
|
|
|
|
f64_legacy_const_min_10_exp,
|
|
|
|
f64_legacy_const_min_exp,
|
|
|
|
f64_legacy_const_min_positive,
|
|
|
|
f64_legacy_const_nan,
|
|
|
|
f64_legacy_const_neg_infinity,
|
|
|
|
f64_legacy_const_radix,
|
2023-05-20 11:28:25 +02:00
|
|
|
f64_nan,
|
2024-03-01 03:53:26 -05:00
|
|
|
fabsf128,
|
|
|
|
fabsf16,
|
2020-06-28 12:58:20 +02:00
|
|
|
fabsf32,
|
|
|
|
fabsf64,
|
2024-02-06 14:32:00 -05:00
|
|
|
fadd_algebraic,
|
2020-07-08 11:07:24 +10:00
|
|
|
fadd_fast,
|
2022-06-16 09:50:57 -07:00
|
|
|
fake_variadic,
|
2024-03-21 19:47:46 +00:00
|
|
|
fallback,
|
2024-02-13 12:31:41 +03:00
|
|
|
fallback_surface_drop,
|
2024-02-06 14:32:00 -05:00
|
|
|
fdiv_algebraic,
|
2020-06-28 12:58:20 +02:00
|
|
|
fdiv_fast,
|
2019-04-10 19:47:55 +02:00
|
|
|
feature,
|
2020-12-02 15:16:12 -08:00
|
|
|
fence,
|
2021-12-03 01:20:25 +01:00
|
|
|
ferris: "🦀",
|
2020-12-02 15:16:12 -08:00
|
|
|
fetch_update,
|
2020-08-18 17:02:23 -04:00
|
|
|
ffi,
|
2020-04-14 00:19:46 +02:00
|
|
|
ffi_const,
|
|
|
|
ffi_pure,
|
2019-04-10 19:47:55 +02:00
|
|
|
ffi_returns_twice,
|
2019-05-22 12:42:23 +10:00
|
|
|
field,
|
2019-05-07 09:55:12 +10:00
|
|
|
field_init_shorthand,
|
|
|
|
file,
|
2024-09-19 12:19:48 +01:00
|
|
|
file_options,
|
2021-12-01 18:50:46 -08:00
|
|
|
float,
|
2020-06-28 12:58:20 +02:00
|
|
|
float_to_int_unchecked,
|
2024-03-01 03:53:26 -05:00
|
|
|
floorf128,
|
|
|
|
floorf16,
|
2020-06-28 12:58:20 +02:00
|
|
|
floorf32,
|
2020-07-08 11:07:24 +10:00
|
|
|
floorf64,
|
2024-03-01 03:53:26 -05:00
|
|
|
fmaf128,
|
|
|
|
fmaf16,
|
2020-06-28 12:58:20 +02:00
|
|
|
fmaf32,
|
|
|
|
fmaf64,
|
2019-05-22 14:41:15 +10:00
|
|
|
fmt,
|
2024-04-14 13:52:58 +01:00
|
|
|
fmt_debug,
|
2024-02-06 14:32:00 -05:00
|
|
|
fmul_algebraic,
|
2020-06-28 12:58:20 +02:00
|
|
|
fmul_fast,
|
2021-01-20 21:49:04 -05:00
|
|
|
fn_align,
|
2023-11-16 19:08:30 +03:00
|
|
|
fn_delegation,
|
2019-05-07 09:55:12 +10:00
|
|
|
fn_must_use,
|
2020-07-08 11:04:10 +10:00
|
|
|
fn_mut,
|
|
|
|
fn_once,
|
|
|
|
fn_once_output,
|
2022-07-20 14:32:58 +02:00
|
|
|
fn_ptr_addr,
|
|
|
|
fn_ptr_trait,
|
2019-04-10 19:47:55 +02:00
|
|
|
forbid,
|
2020-06-28 12:58:20 +02:00
|
|
|
forget,
|
2020-07-14 15:05:26 +10:00
|
|
|
format,
|
2023-01-11 21:36:46 +01:00
|
|
|
format_alignment,
|
2019-06-23 14:59:42 +03:00
|
|
|
format_args,
|
2019-10-12 15:07:13 +01:00
|
|
|
format_args_capture,
|
2022-01-06 14:50:46 +00:00
|
|
|
format_args_macro,
|
2020-07-08 11:07:24 +10:00
|
|
|
format_args_nl,
|
2023-01-11 21:36:46 +01:00
|
|
|
format_argument,
|
|
|
|
format_arguments,
|
|
|
|
format_count,
|
2021-02-14 18:52:47 +01:00
|
|
|
format_macro,
|
2023-01-11 21:36:46 +01:00
|
|
|
format_placeholder,
|
|
|
|
format_unsafe_arg,
|
2020-07-08 11:04:10 +10:00
|
|
|
freeze,
|
2024-02-23 12:11:11 +00:00
|
|
|
freeze_impls,
|
2020-12-10 13:51:56 -08:00
|
|
|
freg,
|
2024-02-06 14:32:00 -05:00
|
|
|
frem_algebraic,
|
2020-06-28 12:58:20 +02:00
|
|
|
frem_fast,
|
2019-05-07 09:55:12 +10:00
|
|
|
from,
|
2019-06-03 20:47:42 -06:00
|
|
|
from_desugaring,
|
2023-02-26 08:45:32 +00:00
|
|
|
from_fn,
|
2021-05-26 23:00:19 -04:00
|
|
|
from_iter,
|
2023-09-26 23:56:38 -04:00
|
|
|
from_iter_fn,
|
2021-04-15 00:33:55 -07:00
|
|
|
from_output,
|
|
|
|
from_residual,
|
2020-07-08 11:04:10 +10:00
|
|
|
from_size_align_unchecked,
|
2023-09-26 23:56:38 -04:00
|
|
|
from_str_method,
|
2020-07-08 11:07:24 +10:00
|
|
|
from_usize,
|
2022-03-25 23:43:54 -07:00
|
|
|
from_yeet,
|
2023-09-26 23:56:38 -04:00
|
|
|
fs_create_dir,
|
2024-02-06 14:32:00 -05:00
|
|
|
fsub_algebraic,
|
2020-06-28 12:58:20 +02:00
|
|
|
fsub_fast,
|
2024-04-14 13:52:58 +01:00
|
|
|
full,
|
2019-04-10 19:47:55 +02:00
|
|
|
fundamental,
|
2024-03-22 00:48:36 +09:00
|
|
|
fused_iterator,
|
2019-05-07 09:55:12 +10:00
|
|
|
future,
|
2024-05-29 14:22:56 -04:00
|
|
|
future_output,
|
2020-07-08 11:04:10 +10:00
|
|
|
future_trait,
|
2022-05-24 11:14:48 -07:00
|
|
|
gdb_script_file,
|
2020-07-08 11:04:10 +10:00
|
|
|
ge,
|
2023-10-23 11:34:27 +00:00
|
|
|
gen_blocks,
|
2020-07-10 09:46:38 +10:00
|
|
|
gen_future,
|
|
|
|
gen_kill,
|
2023-10-20 09:49:44 +00:00
|
|
|
generator_clone,
|
|
|
|
generators,
|
2021-05-06 15:33:44 +00:00
|
|
|
generic_arg_infer,
|
2022-06-02 09:00:04 -03:00
|
|
|
generic_assert,
|
2019-05-07 09:55:12 +10:00
|
|
|
generic_associated_types,
|
2022-03-11 18:46:49 -05:00
|
|
|
generic_associated_types_extended,
|
2021-08-25 10:21:39 +01:00
|
|
|
generic_const_exprs,
|
2023-05-04 16:08:33 +02:00
|
|
|
generic_const_items,
|
2019-05-07 09:55:12 +10:00
|
|
|
generic_param_attrs,
|
2022-12-19 11:24:59 -08:00
|
|
|
get_context,
|
2024-03-05 11:32:03 +01:00
|
|
|
global_alloc_ty,
|
2019-04-10 19:47:55 +02:00
|
|
|
global_allocator,
|
2019-05-07 09:55:12 +10:00
|
|
|
global_asm,
|
2024-05-14 16:10:05 +02:00
|
|
|
global_registration,
|
2019-05-07 09:55:12 +10:00
|
|
|
globs,
|
2020-07-08 11:04:10 +10:00
|
|
|
gt,
|
2019-12-11 10:04:34 +01:00
|
|
|
half_open_range_patterns,
|
2022-10-05 23:18:22 +02:00
|
|
|
half_open_range_patterns_in_slices,
|
2019-05-22 14:41:15 +10:00
|
|
|
hash,
|
2024-09-18 17:58:18 +01:00
|
|
|
hashmap_contains_key,
|
2024-09-18 23:21:35 +01:00
|
|
|
hashmap_drain_ty,
|
2024-09-18 17:58:18 +01:00
|
|
|
hashmap_insert,
|
2024-09-18 23:21:35 +01:00
|
|
|
hashmap_iter_mut_ty,
|
|
|
|
hashmap_iter_ty,
|
|
|
|
hashmap_keys_ty,
|
|
|
|
hashmap_values_mut_ty,
|
|
|
|
hashmap_values_ty,
|
|
|
|
hashset_drain_ty,
|
2024-09-18 16:59:57 +01:00
|
|
|
hashset_iter,
|
2024-09-18 23:21:35 +01:00
|
|
|
hashset_iter_ty,
|
2019-05-07 09:55:12 +10:00
|
|
|
hexagon_target_feature,
|
|
|
|
hidden,
|
|
|
|
homogeneous_aggregate,
|
2023-06-30 13:53:23 +00:00
|
|
|
host,
|
2019-05-07 09:55:12 +10:00
|
|
|
html_favicon_url,
|
|
|
|
html_logo_url,
|
|
|
|
html_no_source,
|
|
|
|
html_playground_url,
|
|
|
|
html_root_url,
|
2021-01-22 18:32:38 -08:00
|
|
|
hwaddress,
|
2020-07-14 15:05:26 +10:00
|
|
|
i,
|
2019-05-07 09:55:12 +10:00
|
|
|
i128,
|
2024-02-26 17:36:42 -07:00
|
|
|
i128_legacy_const_max,
|
|
|
|
i128_legacy_const_min,
|
|
|
|
i128_legacy_fn_max_value,
|
|
|
|
i128_legacy_fn_min_value,
|
|
|
|
i128_legacy_mod,
|
2019-05-07 09:55:12 +10:00
|
|
|
i128_type,
|
|
|
|
i16,
|
2024-02-26 17:36:42 -07:00
|
|
|
i16_legacy_const_max,
|
|
|
|
i16_legacy_const_min,
|
|
|
|
i16_legacy_fn_max_value,
|
|
|
|
i16_legacy_fn_min_value,
|
|
|
|
i16_legacy_mod,
|
2019-05-07 09:55:12 +10:00
|
|
|
i32,
|
2024-02-26 17:36:42 -07:00
|
|
|
i32_legacy_const_max,
|
|
|
|
i32_legacy_const_min,
|
|
|
|
i32_legacy_fn_max_value,
|
|
|
|
i32_legacy_fn_min_value,
|
|
|
|
i32_legacy_mod,
|
2019-05-07 09:55:12 +10:00
|
|
|
i64,
|
2024-02-26 17:36:42 -07:00
|
|
|
i64_legacy_const_max,
|
|
|
|
i64_legacy_const_min,
|
|
|
|
i64_legacy_fn_max_value,
|
|
|
|
i64_legacy_fn_min_value,
|
|
|
|
i64_legacy_mod,
|
2019-05-07 09:55:12 +10:00
|
|
|
i8,
|
2024-02-26 17:36:42 -07:00
|
|
|
i8_legacy_const_max,
|
|
|
|
i8_legacy_const_min,
|
|
|
|
i8_legacy_fn_max_value,
|
|
|
|
i8_legacy_fn_min_value,
|
|
|
|
i8_legacy_mod,
|
2019-05-07 09:55:12 +10:00
|
|
|
ident,
|
|
|
|
if_let,
|
2020-07-14 07:53:23 +00:00
|
|
|
if_let_guard,
|
2023-01-24 16:06:35 +08:00
|
|
|
if_let_rescope,
|
2019-05-07 09:55:12 +10:00
|
|
|
if_while_or_patterns,
|
2019-04-10 19:47:55 +02:00
|
|
|
ignore,
|
2019-05-07 09:55:12 +10:00
|
|
|
impl_header_lifetime_elision,
|
2019-06-13 15:49:33 +02:00
|
|
|
impl_lint_pass,
|
2023-04-12 13:32:15 +00:00
|
|
|
impl_trait_in_assoc_type,
|
2019-05-07 09:55:12 +10:00
|
|
|
impl_trait_in_bindings,
|
2022-07-25 01:54:47 +04:00
|
|
|
impl_trait_in_fn_trait_return,
|
2022-10-24 16:06:25 +00:00
|
|
|
impl_trait_projections,
|
2023-06-16 23:45:01 +00:00
|
|
|
implement_via_object,
|
2022-07-13 13:10:37 +01:00
|
|
|
implied_by,
|
2022-06-28 17:34:52 +00:00
|
|
|
import,
|
2022-07-12 13:52:35 -07:00
|
|
|
import_name_type,
|
2019-05-07 09:55:12 +10:00
|
|
|
import_shadowing,
|
2021-04-26 01:09:35 +08:00
|
|
|
imported_main,
|
2019-05-07 09:55:12 +10:00
|
|
|
in_band_lifetimes,
|
2019-04-10 19:47:55 +02:00
|
|
|
include,
|
2019-06-23 14:59:42 +03:00
|
|
|
include_bytes,
|
2022-01-06 14:50:46 +00:00
|
|
|
include_bytes_macro,
|
2019-06-23 14:59:42 +03:00
|
|
|
include_str,
|
2022-01-06 14:50:46 +00:00
|
|
|
include_str_macro,
|
2019-05-07 09:55:12 +10:00
|
|
|
inclusive_range_syntax,
|
2020-07-08 11:07:24 +10:00
|
|
|
index,
|
|
|
|
index_mut,
|
2019-05-07 09:55:12 +10:00
|
|
|
infer_outlives_requirements,
|
|
|
|
infer_static_outlives_requirements,
|
2021-02-25 14:09:52 +01:00
|
|
|
inherent_associated_types,
|
2022-07-05 19:56:22 +02:00
|
|
|
inherit,
|
2020-07-08 11:07:24 +10:00
|
|
|
inlateout,
|
2019-04-10 19:47:55 +02:00
|
|
|
inline,
|
2020-09-21 16:10:31 -03:00
|
|
|
inline_const,
|
2021-11-22 16:25:28 +00:00
|
|
|
inline_const_pat,
|
2020-07-08 11:07:24 +10:00
|
|
|
inout,
|
2024-09-18 22:08:04 +01:00
|
|
|
instant_now,
|
2020-10-08 23:23:27 +01:00
|
|
|
instruction_set,
|
2023-11-02 15:31:51 +11:00
|
|
|
integer_: "integer", // underscore to avoid clashing with the function `sym::integer` below
|
2021-12-01 18:50:46 -08:00
|
|
|
integral,
|
2023-12-08 17:00:11 -08:00
|
|
|
into_async_iter_into_iter,
|
2021-11-09 10:08:38 -08:00
|
|
|
into_future,
|
2019-05-07 09:55:12 +10:00
|
|
|
into_iter,
|
2021-01-14 11:55:52 -05:00
|
|
|
intra_doc_pointers,
|
2019-05-07 09:55:12 +10:00
|
|
|
intrinsics,
|
2023-09-26 23:56:38 -04:00
|
|
|
intrinsics_unaligned_volatile_load,
|
|
|
|
intrinsics_unaligned_volatile_store,
|
|
|
|
io_stderr,
|
|
|
|
io_stdout,
|
2019-05-07 09:55:12 +10:00
|
|
|
irrefutable_let_patterns,
|
2023-01-31 11:35:23 +00:00
|
|
|
is,
|
2023-08-01 15:35:12 +00:00
|
|
|
is_val_statically_known,
|
2020-10-08 23:23:27 +01:00
|
|
|
isa_attribute,
|
2019-05-07 09:55:12 +10:00
|
|
|
isize,
|
2024-03-09 23:33:27 -07:00
|
|
|
isize_legacy_const_max,
|
|
|
|
isize_legacy_const_min,
|
|
|
|
isize_legacy_fn_max_value,
|
|
|
|
isize_legacy_fn_min_value,
|
|
|
|
isize_legacy_mod,
|
2019-05-07 09:55:12 +10:00
|
|
|
issue,
|
|
|
|
issue_5723_bootstrap,
|
|
|
|
issue_tracker_base_url,
|
2019-05-23 16:23:11 +10:00
|
|
|
item,
|
2019-05-07 09:55:12 +10:00
|
|
|
item_like_imports,
|
|
|
|
iter,
|
2024-09-18 16:59:57 +01:00
|
|
|
iter_cloned,
|
|
|
|
iter_copied,
|
|
|
|
iter_filter,
|
2023-07-25 20:22:41 +00:00
|
|
|
iter_mut,
|
2021-07-15 23:47:03 +02:00
|
|
|
iter_repeat,
|
2023-10-23 09:41:30 +00:00
|
|
|
iterator,
|
2022-12-09 22:31:16 -08:00
|
|
|
iterator_collect_fn,
|
2022-11-21 21:29:00 -08:00
|
|
|
kcfi,
|
2019-04-10 19:47:55 +02:00
|
|
|
keyword,
|
2019-05-07 09:55:12 +10:00
|
|
|
kind,
|
2020-12-10 13:51:56 -08:00
|
|
|
kreg,
|
2022-04-06 20:41:12 +01:00
|
|
|
kreg0,
|
2019-05-07 09:55:12 +10:00
|
|
|
label,
|
|
|
|
label_break_value,
|
2024-02-12 09:06:45 -03:00
|
|
|
lahfsahf_target_feature,
|
2019-04-10 19:47:55 +02:00
|
|
|
lang,
|
2019-05-07 09:55:12 +10:00
|
|
|
lang_items,
|
2021-03-26 16:28:52 +00:00
|
|
|
large_assignments,
|
2020-02-12 15:47:43 +00:00
|
|
|
lateout,
|
2020-07-08 11:07:24 +10:00
|
|
|
lazy_normalization_consts,
|
2023-06-19 13:50:22 +02:00
|
|
|
lazy_type_alias,
|
2020-07-08 11:04:10 +10:00
|
|
|
le,
|
2021-06-20 16:09:42 +02:00
|
|
|
len,
|
2019-05-11 15:11:04 +02:00
|
|
|
let_chains,
|
2021-06-23 16:40:06 -05:00
|
|
|
let_else,
|
2019-06-11 19:47:52 +01:00
|
|
|
lhs,
|
2019-05-07 09:55:12 +10:00
|
|
|
lib,
|
2020-07-08 11:04:10 +10:00
|
|
|
libc,
|
2019-05-23 16:23:11 +10:00
|
|
|
lifetime,
|
2023-10-19 19:00:18 +00:00
|
|
|
lifetime_capture_rules_2024,
|
2022-08-18 19:39:14 +00:00
|
|
|
lifetimes,
|
2020-06-26 13:19:50 +01:00
|
|
|
likely,
|
2019-06-23 14:59:42 +03:00
|
|
|
line,
|
2019-04-10 19:47:55 +02:00
|
|
|
link,
|
2023-11-29 02:13:58 -08:00
|
|
|
link_arg_attribute,
|
2019-04-10 19:47:55 +02:00
|
|
|
link_args,
|
2019-05-07 09:55:12 +10:00
|
|
|
link_cfg,
|
|
|
|
link_llvm_intrinsics,
|
2019-04-10 19:47:55 +02:00
|
|
|
link_name,
|
2019-08-27 22:42:44 +08:00
|
|
|
link_ordinal,
|
2019-04-10 19:47:55 +02:00
|
|
|
link_section,
|
2020-07-10 09:46:38 +10:00
|
|
|
linkage,
|
2021-11-22 13:14:54 +01:00
|
|
|
linker,
|
2019-05-07 09:55:12 +10:00
|
|
|
lint_reasons,
|
2019-05-23 16:23:11 +10:00
|
|
|
literal,
|
2020-12-02 15:16:12 -08:00
|
|
|
load,
|
2021-12-21 16:31:35 -05:00
|
|
|
loaded_from_disk,
|
2020-12-10 13:51:56 -08:00
|
|
|
local,
|
2019-05-07 09:55:12 +10:00
|
|
|
local_inner_macros,
|
2024-03-01 03:53:26 -05:00
|
|
|
log10f128,
|
|
|
|
log10f16,
|
2020-06-28 12:58:20 +02:00
|
|
|
log10f32,
|
|
|
|
log10f64,
|
2024-03-01 03:53:26 -05:00
|
|
|
log2f128,
|
|
|
|
log2f16,
|
2020-06-28 12:58:20 +02:00
|
|
|
log2f32,
|
|
|
|
log2f64,
|
2020-07-10 09:46:38 +10:00
|
|
|
log_syntax,
|
2024-03-01 03:53:26 -05:00
|
|
|
logf128,
|
|
|
|
logf16,
|
2020-07-08 11:07:24 +10:00
|
|
|
logf32,
|
|
|
|
logf64,
|
2023-10-19 21:12:19 +08:00
|
|
|
loongarch_target_feature,
|
2019-05-07 09:55:12 +10:00
|
|
|
loop_break_value,
|
2020-07-08 11:04:10 +10:00
|
|
|
lt,
|
2019-05-07 09:55:12 +10:00
|
|
|
macro_at_most_once_rep,
|
2021-01-17 16:05:02 +03:00
|
|
|
macro_attributes_in_derive_output,
|
2019-04-10 19:47:55 +02:00
|
|
|
macro_escape,
|
|
|
|
macro_export,
|
2019-05-07 09:55:12 +10:00
|
|
|
macro_lifetime_matcher,
|
|
|
|
macro_literal_matcher,
|
2022-03-09 16:46:23 -03:00
|
|
|
macro_metavar_expr,
|
2024-06-13 22:12:26 -03:00
|
|
|
macro_metavar_expr_concat,
|
2019-05-07 09:55:12 +10:00
|
|
|
macro_reexport,
|
2019-04-10 19:47:55 +02:00
|
|
|
macro_use,
|
2019-05-07 09:55:12 +10:00
|
|
|
macro_vis_matcher,
|
2020-07-10 09:46:38 +10:00
|
|
|
macros_in_extern,
|
2019-04-10 19:47:55 +02:00
|
|
|
main,
|
2019-05-07 09:55:12 +10:00
|
|
|
managed_boxes,
|
2020-07-08 11:04:10 +10:00
|
|
|
manually_drop,
|
2020-07-14 16:29:44 +10:00
|
|
|
map,
|
2023-10-07 03:47:02 +00:00
|
|
|
map_err,
|
2019-04-10 19:47:55 +02:00
|
|
|
marker,
|
2019-05-07 09:55:12 +10:00
|
|
|
marker_trait_attr,
|
2019-04-10 19:47:55 +02:00
|
|
|
masked,
|
2019-05-07 09:55:12 +10:00
|
|
|
match_beginning_vert,
|
|
|
|
match_default_bindings,
|
2022-11-17 19:32:28 +01:00
|
|
|
matches_macro,
|
2024-03-01 03:53:26 -05:00
|
|
|
maxnumf128,
|
|
|
|
maxnumf16,
|
2020-07-08 11:07:24 +10:00
|
|
|
maxnumf32,
|
|
|
|
maxnumf64,
|
2020-07-10 09:46:38 +10:00
|
|
|
may_dangle,
|
2021-08-30 01:23:33 +01:00
|
|
|
may_unwind,
|
2020-07-08 11:04:10 +10:00
|
|
|
maybe_uninit,
|
2019-11-09 10:34:16 +01:00
|
|
|
maybe_uninit_uninit,
|
|
|
|
maybe_uninit_zeroed,
|
2021-07-15 23:47:03 +02:00
|
|
|
mem_discriminant,
|
|
|
|
mem_drop,
|
|
|
|
mem_forget,
|
|
|
|
mem_replace,
|
|
|
|
mem_size_of,
|
|
|
|
mem_size_of_val,
|
2023-09-26 23:56:38 -04:00
|
|
|
mem_swap,
|
2020-07-08 11:07:24 +10:00
|
|
|
mem_uninitialized,
|
2021-07-31 12:14:30 -04:00
|
|
|
mem_variant_count,
|
2020-07-08 11:07:24 +10:00
|
|
|
mem_zeroed,
|
2020-07-10 09:46:38 +10:00
|
|
|
member_constraints,
|
|
|
|
memory,
|
2021-12-03 16:11:13 -05:00
|
|
|
memtag,
|
2019-05-07 09:55:12 +10:00
|
|
|
message,
|
2019-05-17 18:37:53 +10:00
|
|
|
meta,
|
2020-10-19 15:38:11 +02:00
|
|
|
metadata_type,
|
2019-06-14 16:55:36 +03:00
|
|
|
min_align_of,
|
2020-06-28 12:58:20 +02:00
|
|
|
min_align_of_val,
|
2019-05-07 09:55:12 +10:00
|
|
|
min_const_fn,
|
2020-08-05 18:27:54 +02:00
|
|
|
min_const_generics,
|
2019-05-07 09:55:12 +10:00
|
|
|
min_const_unsafe_fn,
|
2024-01-08 21:48:22 +01:00
|
|
|
min_exhaustive_patterns,
|
2020-07-10 09:46:38 +10:00
|
|
|
min_specialization,
|
2021-03-12 10:53:51 +00:00
|
|
|
min_type_alias_impl_trait,
|
2024-03-01 03:53:26 -05:00
|
|
|
minnumf128,
|
|
|
|
minnumf16,
|
2020-06-28 12:58:20 +02:00
|
|
|
minnumf32,
|
|
|
|
minnumf64,
|
2019-05-07 09:55:12 +10:00
|
|
|
mips_target_feature,
|
2024-01-20 19:01:57 +00:00
|
|
|
mir_assume,
|
2023-11-09 00:00:00 +00:00
|
|
|
mir_basic_block,
|
|
|
|
mir_call,
|
2024-06-16 22:25:57 -07:00
|
|
|
mir_cast_ptr_to_ptr,
|
2023-11-09 00:00:00 +00:00
|
|
|
mir_cast_transmute,
|
|
|
|
mir_checked,
|
|
|
|
mir_copy_for_deref,
|
|
|
|
mir_debuginfo,
|
|
|
|
mir_deinit,
|
|
|
|
mir_discriminant,
|
|
|
|
mir_drop,
|
|
|
|
mir_field,
|
|
|
|
mir_goto,
|
|
|
|
mir_len,
|
|
|
|
mir_make_place,
|
|
|
|
mir_move,
|
|
|
|
mir_offset,
|
2024-05-25 02:11:45 -07:00
|
|
|
mir_ptr_metadata,
|
2023-11-09 00:00:00 +00:00
|
|
|
mir_retag,
|
|
|
|
mir_return,
|
2023-12-26 19:31:52 +01:00
|
|
|
mir_return_to,
|
2023-11-09 00:00:00 +00:00
|
|
|
mir_set_discriminant,
|
|
|
|
mir_static,
|
|
|
|
mir_static_mut,
|
|
|
|
mir_storage_dead,
|
|
|
|
mir_storage_live,
|
2024-08-05 18:23:14 +02:00
|
|
|
mir_tail_call,
|
2023-11-09 00:00:00 +00:00
|
|
|
mir_unreachable,
|
|
|
|
mir_unwind_cleanup,
|
|
|
|
mir_unwind_continue,
|
|
|
|
mir_unwind_resume,
|
|
|
|
mir_unwind_terminate,
|
|
|
|
mir_unwind_terminate_reason,
|
|
|
|
mir_unwind_unreachable,
|
|
|
|
mir_variant,
|
2022-03-09 16:52:38 +01:00
|
|
|
miri,
|
2021-06-17 21:00:52 +01:00
|
|
|
mmx_reg,
|
2021-03-24 21:45:09 -07:00
|
|
|
modifiers,
|
2019-05-07 09:55:12 +10:00
|
|
|
module,
|
2019-06-23 14:59:42 +03:00
|
|
|
module_path,
|
2024-02-23 16:39:57 +03:00
|
|
|
more_maybe_bounds,
|
2020-12-10 13:20:07 +01:00
|
|
|
more_qualified_paths,
|
2019-05-07 09:55:12 +10:00
|
|
|
more_struct_aliases,
|
2020-07-08 11:07:24 +10:00
|
|
|
movbe_target_feature,
|
2020-01-19 02:14:51 +01:00
|
|
|
move_ref_pattern,
|
2021-03-26 16:28:52 +00:00
|
|
|
move_size_limit,
|
2020-07-08 11:04:10 +10:00
|
|
|
mul,
|
|
|
|
mul_assign,
|
2019-06-14 16:55:36 +03:00
|
|
|
mul_with_overflow,
|
2022-12-09 02:27:03 +00:00
|
|
|
multiple_supertrait_upcastable,
|
2021-09-04 19:36:51 -07:00
|
|
|
must_not_suspend,
|
2019-04-10 19:47:55 +02:00
|
|
|
must_use,
|
2024-04-14 11:12:52 -04:00
|
|
|
mut_preserve_binding_mode_2024,
|
2024-03-26 01:23:26 -04:00
|
|
|
mut_ref,
|
2019-04-10 19:47:55 +02:00
|
|
|
naked,
|
2024-09-09 12:47:40 +02:00
|
|
|
naked_asm,
|
2019-05-07 09:55:12 +10:00
|
|
|
naked_functions,
|
|
|
|
name,
|
2021-09-29 02:39:30 +02:00
|
|
|
names,
|
2021-03-24 21:45:09 -07:00
|
|
|
native_link_modifiers,
|
|
|
|
native_link_modifiers_as_needed,
|
|
|
|
native_link_modifiers_bundle,
|
|
|
|
native_link_modifiers_verbatim,
|
|
|
|
native_link_modifiers_whole_archive,
|
2022-04-25 18:02:43 -07:00
|
|
|
natvis_file,
|
2020-07-08 11:04:10 +10:00
|
|
|
ne,
|
2024-03-01 03:53:26 -05:00
|
|
|
nearbyintf128,
|
|
|
|
nearbyintf16,
|
2020-06-28 12:58:20 +02:00
|
|
|
nearbyintf32,
|
|
|
|
nearbyintf64,
|
2019-04-10 19:47:55 +02:00
|
|
|
needs_allocator,
|
2019-06-14 16:55:36 +03:00
|
|
|
needs_drop,
|
2019-04-10 19:47:55 +02:00
|
|
|
needs_panic_runtime,
|
2020-07-08 11:04:10 +10:00
|
|
|
neg,
|
2019-05-07 09:55:12 +10:00
|
|
|
negate_unsigned,
|
2023-04-25 05:15:50 +00:00
|
|
|
negative_bounds,
|
2020-01-09 05:56:38 -05:00
|
|
|
negative_impls,
|
2022-01-10 15:32:45 +01:00
|
|
|
neon,
|
2024-02-26 18:03:06 +00:00
|
|
|
nested,
|
2019-05-07 09:55:12 +10:00
|
|
|
never,
|
2023-11-22 02:30:43 +01:00
|
|
|
never_patterns,
|
2019-05-07 09:55:12 +10:00
|
|
|
never_type,
|
2019-10-31 04:33:31 +01:00
|
|
|
never_type_fallback,
|
2019-05-22 14:41:15 +10:00
|
|
|
new,
|
2022-08-08 16:17:08 +02:00
|
|
|
new_binary,
|
2023-02-01 17:39:14 +01:00
|
|
|
new_const,
|
2022-08-08 16:17:08 +02:00
|
|
|
new_debug,
|
2024-04-14 13:52:58 +01:00
|
|
|
new_debug_noop,
|
2022-08-08 16:17:08 +02:00
|
|
|
new_display,
|
|
|
|
new_lower_exp,
|
|
|
|
new_lower_hex,
|
|
|
|
new_octal,
|
|
|
|
new_pointer,
|
2020-08-04 14:04:25 +01:00
|
|
|
new_unchecked,
|
2022-08-08 16:17:08 +02:00
|
|
|
new_upper_exp,
|
|
|
|
new_upper_hex,
|
|
|
|
new_v1,
|
|
|
|
new_v1_formatted,
|
2020-07-08 11:07:24 +10:00
|
|
|
next,
|
2024-03-21 19:47:46 +00:00
|
|
|
niko,
|
2019-05-07 09:55:12 +10:00
|
|
|
nll,
|
2020-07-08 11:04:10 +10:00
|
|
|
no,
|
2019-04-10 19:47:55 +02:00
|
|
|
no_builtins,
|
|
|
|
no_core,
|
2021-04-25 13:34:03 -07:00
|
|
|
no_coverage,
|
2019-05-07 09:55:12 +10:00
|
|
|
no_crate_inject,
|
2019-04-10 19:47:55 +02:00
|
|
|
no_debug,
|
2019-05-07 09:55:12 +10:00
|
|
|
no_default_passes,
|
2019-04-10 19:47:55 +02:00
|
|
|
no_implicit_prelude,
|
2019-05-07 09:55:12 +10:00
|
|
|
no_inline,
|
2019-04-10 19:47:55 +02:00
|
|
|
no_link,
|
|
|
|
no_main,
|
|
|
|
no_mangle,
|
2020-07-10 09:46:38 +10:00
|
|
|
no_sanitize,
|
|
|
|
no_stack_check,
|
|
|
|
no_start,
|
|
|
|
no_std,
|
2020-02-12 15:47:43 +00:00
|
|
|
nomem,
|
2019-05-07 09:55:12 +10:00
|
|
|
non_ascii_idents,
|
|
|
|
non_exhaustive,
|
2021-10-01 10:21:56 -04:00
|
|
|
non_exhaustive_omitted_patterns_lint,
|
2023-02-04 01:59:17 +00:00
|
|
|
non_lifetime_binders,
|
2019-05-07 09:55:12 +10:00
|
|
|
non_modrs_mods,
|
2023-04-24 17:31:32 +02:00
|
|
|
none,
|
2020-06-28 12:58:20 +02:00
|
|
|
nontemporal_store,
|
2021-02-16 22:39:05 +01:00
|
|
|
noop_method_borrow,
|
2021-01-05 16:14:39 +01:00
|
|
|
noop_method_clone,
|
2021-02-16 22:39:05 +01:00
|
|
|
noop_method_deref,
|
2020-02-12 15:47:43 +00:00
|
|
|
noreturn,
|
|
|
|
nostack,
|
2019-05-07 09:55:12 +10:00
|
|
|
not,
|
2021-03-08 19:35:53 -08:00
|
|
|
notable_trait,
|
2019-05-07 09:55:12 +10:00
|
|
|
note,
|
2019-01-08 22:14:04 +01:00
|
|
|
object_safe_for_dispatch,
|
2020-08-08 20:53:40 -07:00
|
|
|
of,
|
2023-08-09 15:57:16 +01:00
|
|
|
off,
|
2020-04-24 00:17:29 -07:00
|
|
|
offset,
|
2022-09-11 00:37:49 -07:00
|
|
|
offset_of,
|
2023-11-03 13:16:47 +00:00
|
|
|
offset_of_enum,
|
2023-12-05 22:15:26 +00:00
|
|
|
offset_of_nested,
|
2024-06-08 11:26:56 +02:00
|
|
|
offset_of_slice,
|
2023-10-07 03:47:02 +00:00
|
|
|
ok_or_else,
|
2019-04-10 19:47:55 +02:00
|
|
|
omit_gdb_pretty_printer_section,
|
2019-05-07 09:55:12 +10:00
|
|
|
on,
|
|
|
|
on_unimplemented,
|
2020-07-08 11:04:10 +10:00
|
|
|
opaque,
|
2024-09-19 12:19:48 +01:00
|
|
|
open_options_new,
|
2024-05-26 17:57:13 +08:00
|
|
|
ops,
|
2020-07-10 09:46:38 +10:00
|
|
|
opt_out_copy,
|
2019-04-10 19:47:55 +02:00
|
|
|
optimize,
|
2019-05-07 09:55:12 +10:00
|
|
|
optimize_attribute,
|
|
|
|
optin_builtin_traits,
|
|
|
|
option,
|
2019-06-23 14:59:42 +03:00
|
|
|
option_env,
|
2024-09-18 21:59:31 +01:00
|
|
|
option_expect,
|
|
|
|
option_unwrap,
|
2020-07-10 09:46:38 +10:00
|
|
|
options,
|
2019-05-23 15:31:43 +10:00
|
|
|
or,
|
2020-07-08 11:07:24 +10:00
|
|
|
or_patterns,
|
2023-09-26 23:56:38 -04:00
|
|
|
ord_cmp_method,
|
2024-09-18 21:21:17 +01:00
|
|
|
os_str_to_os_string,
|
2024-09-18 21:09:06 +01:00
|
|
|
os_string_as_os_str,
|
2020-07-14 15:05:26 +10:00
|
|
|
other,
|
2020-02-12 15:47:43 +00:00
|
|
|
out,
|
2023-05-02 17:53:11 +04:00
|
|
|
overflow_checks,
|
2019-05-07 09:55:12 +10:00
|
|
|
overlapping_marker_traits,
|
2020-07-08 11:04:10 +10:00
|
|
|
owned_box,
|
2019-05-07 09:55:12 +10:00
|
|
|
packed,
|
2023-01-26 17:10:13 +03:00
|
|
|
packed_bundled_libs,
|
2019-05-22 12:42:23 +10:00
|
|
|
panic,
|
2021-01-09 16:52:06 +01:00
|
|
|
panic_2015,
|
|
|
|
panic_2021,
|
2020-07-08 11:04:10 +10:00
|
|
|
panic_abort,
|
|
|
|
panic_bounds_check,
|
2022-12-21 13:49:48 +01:00
|
|
|
panic_cannot_unwind,
|
2024-03-17 22:26:39 -04:00
|
|
|
panic_const_add_overflow,
|
|
|
|
panic_const_async_fn_resumed,
|
|
|
|
panic_const_async_fn_resumed_panic,
|
|
|
|
panic_const_async_gen_fn_resumed,
|
|
|
|
panic_const_async_gen_fn_resumed_panic,
|
|
|
|
panic_const_coroutine_resumed,
|
|
|
|
panic_const_coroutine_resumed_panic,
|
|
|
|
panic_const_div_by_zero,
|
|
|
|
panic_const_div_overflow,
|
|
|
|
panic_const_gen_fn_none,
|
|
|
|
panic_const_gen_fn_none_panic,
|
|
|
|
panic_const_mul_overflow,
|
|
|
|
panic_const_neg_overflow,
|
|
|
|
panic_const_rem_by_zero,
|
|
|
|
panic_const_rem_overflow,
|
|
|
|
panic_const_shl_overflow,
|
|
|
|
panic_const_shr_overflow,
|
|
|
|
panic_const_sub_overflow,
|
2021-07-06 12:38:26 +00:00
|
|
|
panic_fmt,
|
2019-04-10 19:47:55 +02:00
|
|
|
panic_handler,
|
2019-05-07 09:55:12 +10:00
|
|
|
panic_impl,
|
|
|
|
panic_implementation,
|
2023-08-21 09:57:10 +02:00
|
|
|
panic_in_cleanup,
|
2020-07-08 11:04:10 +10:00
|
|
|
panic_info,
|
|
|
|
panic_location,
|
2022-11-10 11:37:28 -05:00
|
|
|
panic_misaligned_pointer_dereference,
|
2022-12-21 13:49:48 +01:00
|
|
|
panic_nounwind,
|
2019-04-10 19:47:55 +02:00
|
|
|
panic_runtime,
|
2024-03-25 20:36:13 +01:00
|
|
|
panic_str_2015,
|
2020-07-08 11:04:10 +10:00
|
|
|
panic_unwind,
|
2020-10-18 22:30:16 +02:00
|
|
|
panicking,
|
2020-07-08 11:07:24 +10:00
|
|
|
param_attrs,
|
2022-09-04 02:10:31 +00:00
|
|
|
parent_label,
|
2019-05-22 14:41:15 +10:00
|
|
|
partial_cmp,
|
2020-07-08 11:04:10 +10:00
|
|
|
partial_ord,
|
2019-05-07 09:55:12 +10:00
|
|
|
passes,
|
2019-05-23 16:23:11 +10:00
|
|
|
pat,
|
2021-04-14 20:34:51 -05:00
|
|
|
pat_param,
|
2023-12-12 13:37:04 -08:00
|
|
|
patchable_function_entry,
|
2019-04-10 19:47:55 +02:00
|
|
|
path,
|
2024-09-18 21:24:42 +01:00
|
|
|
path_main_separator,
|
2024-09-18 21:21:17 +01:00
|
|
|
path_to_pathbuf,
|
2024-09-18 21:09:06 +01:00
|
|
|
pathbuf_as_path,
|
2024-03-02 22:48:41 +01:00
|
|
|
pattern_complexity,
|
2019-05-07 09:55:12 +10:00
|
|
|
pattern_parentheses,
|
2023-01-31 11:35:23 +00:00
|
|
|
pattern_type,
|
|
|
|
pattern_types,
|
2024-09-18 23:01:37 +01:00
|
|
|
permissions_from_mode,
|
2020-07-08 11:04:10 +10:00
|
|
|
phantom_data,
|
2023-07-22 17:16:18 +02:00
|
|
|
pic,
|
|
|
|
pie,
|
2019-05-07 09:55:12 +10:00
|
|
|
pin,
|
|
|
|
platform_intrinsics,
|
2019-04-10 19:47:55 +02:00
|
|
|
plugin,
|
|
|
|
plugin_registrar,
|
2019-05-07 09:55:12 +10:00
|
|
|
plugins,
|
2024-05-26 17:57:13 +08:00
|
|
|
pointee,
|
2020-10-19 15:38:11 +02:00
|
|
|
pointee_trait,
|
2020-07-08 11:04:10 +10:00
|
|
|
pointer,
|
2023-02-07 18:02:20 +00:00
|
|
|
pointer_like,
|
2020-04-05 17:55:19 -07:00
|
|
|
poll,
|
2023-11-28 18:18:19 +00:00
|
|
|
poll_next,
|
2020-07-08 11:04:10 +10:00
|
|
|
post_dash_lto: "post-lto",
|
2024-02-15 19:54:35 -05:00
|
|
|
postfix_match,
|
2019-05-07 09:55:12 +10:00
|
|
|
powerpc_target_feature,
|
2024-03-01 03:53:26 -05:00
|
|
|
powf128,
|
|
|
|
powf16,
|
2020-06-28 12:58:20 +02:00
|
|
|
powf32,
|
|
|
|
powf64,
|
2024-03-01 03:53:26 -05:00
|
|
|
powif128,
|
|
|
|
powif16,
|
2020-06-28 12:58:20 +02:00
|
|
|
powif32,
|
|
|
|
powif64,
|
2020-07-08 11:04:10 +10:00
|
|
|
pre_dash_lto: "pre-lto",
|
2024-04-03 19:58:50 -04:00
|
|
|
precise_capturing,
|
2020-07-10 09:46:38 +10:00
|
|
|
precise_pointer_size_matching,
|
2019-06-14 16:55:36 +03:00
|
|
|
pref_align_of,
|
2020-06-28 12:58:20 +02:00
|
|
|
prefetch_read_data,
|
|
|
|
prefetch_read_instruction,
|
|
|
|
prefetch_write_data,
|
|
|
|
prefetch_write_instruction,
|
2024-05-02 23:19:02 +02:00
|
|
|
prefix_nops,
|
2021-06-17 21:00:52 +01:00
|
|
|
preg,
|
2019-05-07 09:55:12 +10:00
|
|
|
prelude,
|
2019-04-10 19:47:55 +02:00
|
|
|
prelude_import,
|
2020-02-12 15:47:43 +00:00
|
|
|
preserves_flags,
|
2024-02-12 09:06:45 -03:00
|
|
|
prfchw_target_feature,
|
2022-01-06 14:50:46 +00:00
|
|
|
print_macro,
|
|
|
|
println_macro,
|
2019-05-07 09:55:12 +10:00
|
|
|
proc_dash_macro: "proc-macro",
|
2019-04-10 19:47:55 +02:00
|
|
|
proc_macro,
|
|
|
|
proc_macro_attribute,
|
|
|
|
proc_macro_derive,
|
2019-05-07 09:55:12 +10:00
|
|
|
proc_macro_expr,
|
|
|
|
proc_macro_gen,
|
|
|
|
proc_macro_hygiene,
|
2019-07-06 21:02:45 +03:00
|
|
|
proc_macro_internals,
|
2019-05-07 09:55:12 +10:00
|
|
|
proc_macro_mod,
|
|
|
|
proc_macro_non_items,
|
|
|
|
proc_macro_path_invoc,
|
2023-09-26 23:56:38 -04:00
|
|
|
process_exit,
|
2020-06-18 13:29:43 -07:00
|
|
|
profiler_builtins,
|
2019-04-10 19:47:55 +02:00
|
|
|
profiler_runtime,
|
2022-02-25 16:10:26 +01:00
|
|
|
ptr,
|
2023-07-13 14:11:29 +02:00
|
|
|
ptr_cast,
|
2023-08-14 11:47:42 +02:00
|
|
|
ptr_cast_const,
|
2023-05-17 14:54:56 +02:00
|
|
|
ptr_cast_mut,
|
2023-05-17 16:49:18 +02:00
|
|
|
ptr_const_is_null,
|
2023-09-26 23:56:38 -04:00
|
|
|
ptr_copy,
|
|
|
|
ptr_copy_nonoverlapping,
|
|
|
|
ptr_eq,
|
2023-05-17 14:54:56 +02:00
|
|
|
ptr_from_ref,
|
2022-09-06 14:08:59 +00:00
|
|
|
ptr_guaranteed_cmp,
|
2023-05-17 16:49:18 +02:00
|
|
|
ptr_is_null,
|
2022-05-11 17:52:00 +04:00
|
|
|
ptr_mask,
|
2024-04-21 16:11:01 -07:00
|
|
|
ptr_metadata,
|
2021-04-06 22:01:00 +02:00
|
|
|
ptr_null,
|
|
|
|
ptr_null_mut,
|
2019-06-14 16:55:36 +03:00
|
|
|
ptr_offset_from,
|
2022-04-09 01:27:47 -07:00
|
|
|
ptr_offset_from_unsigned,
|
2023-09-26 23:56:38 -04:00
|
|
|
ptr_read,
|
|
|
|
ptr_read_unaligned,
|
|
|
|
ptr_read_volatile,
|
|
|
|
ptr_replace,
|
|
|
|
ptr_slice_from_raw_parts,
|
|
|
|
ptr_slice_from_raw_parts_mut,
|
|
|
|
ptr_swap,
|
|
|
|
ptr_swap_nonoverlapping,
|
2023-06-15 17:43:23 +02:00
|
|
|
ptr_unique,
|
2023-08-22 15:41:07 +02:00
|
|
|
ptr_write,
|
2023-09-26 23:56:38 -04:00
|
|
|
ptr_write_bytes,
|
2023-08-22 15:41:07 +02:00
|
|
|
ptr_write_unaligned,
|
|
|
|
ptr_write_volatile,
|
2020-10-21 00:46:29 +03:00
|
|
|
pub_macro_rules,
|
2019-05-07 09:55:12 +10:00
|
|
|
pub_restricted,
|
2022-08-23 17:02:40 +08:00
|
|
|
public,
|
2020-02-12 15:47:43 +00:00
|
|
|
pure,
|
2019-05-07 09:55:12 +10:00
|
|
|
pushpop_unsafe,
|
2020-12-10 13:51:56 -08:00
|
|
|
qreg,
|
|
|
|
qreg_low4,
|
|
|
|
qreg_low8,
|
2019-05-07 09:55:12 +10:00
|
|
|
quad_precision_float,
|
|
|
|
question_mark,
|
|
|
|
quote,
|
2020-08-04 14:04:25 +01:00
|
|
|
range_inclusive_new,
|
2019-08-27 22:42:44 +08:00
|
|
|
raw_dylib,
|
2021-05-30 10:25:41 -07:00
|
|
|
raw_eq,
|
2019-05-07 09:55:12 +10:00
|
|
|
raw_identifiers,
|
2019-11-23 14:22:00 +00:00
|
|
|
raw_ref_op,
|
2020-07-10 09:46:38 +10:00
|
|
|
re_rebalance_coherence,
|
2020-07-14 15:05:26 +10:00
|
|
|
read_enum,
|
|
|
|
read_enum_variant,
|
|
|
|
read_enum_variant_arg,
|
|
|
|
read_struct,
|
|
|
|
read_struct_field,
|
2023-03-11 15:32:54 -08:00
|
|
|
read_via_copy,
|
2020-02-12 15:47:43 +00:00
|
|
|
readonly,
|
2020-07-08 11:04:10 +10:00
|
|
|
realloc,
|
2019-05-07 09:55:12 +10:00
|
|
|
reason,
|
2020-07-08 11:04:10 +10:00
|
|
|
receiver,
|
2019-04-10 19:47:55 +02:00
|
|
|
recursion_limit,
|
|
|
|
reexport_test_harness_main,
|
2024-03-31 22:27:19 -05:00
|
|
|
ref_pat_eat_one_layer_2024,
|
2024-06-26 17:01:04 -04:00
|
|
|
ref_pat_eat_one_layer_2024_structural,
|
2024-04-02 10:54:29 -05:00
|
|
|
ref_pat_everywhere,
|
2021-06-29 14:15:58 -04:00
|
|
|
ref_unwind_safe_trait,
|
2020-07-08 11:04:10 +10:00
|
|
|
reference,
|
2019-05-07 09:55:12 +10:00
|
|
|
reflect,
|
2020-12-10 13:51:56 -08:00
|
|
|
reg,
|
|
|
|
reg16,
|
|
|
|
reg32,
|
|
|
|
reg64,
|
|
|
|
reg_abcd,
|
2023-04-05 18:42:36 -07:00
|
|
|
reg_addr,
|
2020-12-10 13:51:56 -08:00
|
|
|
reg_byte,
|
2023-04-05 18:42:36 -07:00
|
|
|
reg_data,
|
2021-11-24 23:04:27 -05:00
|
|
|
reg_iw,
|
2021-04-29 23:03:08 -05:00
|
|
|
reg_nonzero,
|
2021-11-24 23:04:27 -05:00
|
|
|
reg_pair,
|
|
|
|
reg_ptr,
|
|
|
|
reg_upper,
|
2019-11-03 20:28:20 +03:00
|
|
|
register_attr,
|
|
|
|
register_tool,
|
2019-05-07 09:55:12 +10:00
|
|
|
relaxed_adts,
|
2021-02-03 23:56:47 +01:00
|
|
|
relaxed_struct_unsize,
|
2023-07-22 17:16:18 +02:00
|
|
|
relocation_model,
|
2020-07-08 11:04:10 +10:00
|
|
|
rem,
|
|
|
|
rem_assign,
|
2019-04-10 19:47:55 +02:00
|
|
|
repr,
|
2019-05-07 09:55:12 +10:00
|
|
|
repr128,
|
|
|
|
repr_align,
|
|
|
|
repr_align_enum,
|
|
|
|
repr_packed,
|
|
|
|
repr_simd,
|
|
|
|
repr_transparent,
|
2022-08-05 19:20:03 +08:00
|
|
|
require,
|
2021-04-15 00:33:55 -07:00
|
|
|
residual,
|
2019-05-07 09:55:12 +10:00
|
|
|
result,
|
2024-03-18 20:31:48 -07:00
|
|
|
result_ffi_guarantees,
|
2024-09-18 19:36:12 +01:00
|
|
|
result_ok_method,
|
2023-05-06 05:58:00 +00:00
|
|
|
resume,
|
2022-08-31 04:03:24 +00:00
|
|
|
return_position_impl_trait_in_trait,
|
2023-03-04 02:23:36 +00:00
|
|
|
return_type_notation,
|
2019-06-11 19:47:52 +01:00
|
|
|
rhs,
|
2024-03-01 03:53:26 -05:00
|
|
|
rintf128,
|
|
|
|
rintf16,
|
2020-06-28 12:58:20 +02:00
|
|
|
rintf32,
|
|
|
|
rintf64,
|
2020-03-01 09:52:04 +00:00
|
|
|
riscv_target_feature,
|
2019-05-07 09:55:12 +10:00
|
|
|
rlib,
|
2023-07-22 17:16:18 +02:00
|
|
|
ropi,
|
|
|
|
ropi_rwpi: "ropi-rwpi",
|
2019-06-14 16:55:36 +03:00
|
|
|
rotate_left,
|
|
|
|
rotate_right,
|
2024-03-01 03:53:26 -05:00
|
|
|
roundevenf128,
|
|
|
|
roundevenf16,
|
2022-03-25 02:44:16 -04:00
|
|
|
roundevenf32,
|
|
|
|
roundevenf64,
|
2024-03-01 03:53:26 -05:00
|
|
|
roundf128,
|
|
|
|
roundf16,
|
2020-06-28 12:58:20 +02:00
|
|
|
roundf32,
|
|
|
|
roundf64,
|
2019-05-22 14:41:15 +10:00
|
|
|
rt,
|
2019-05-07 09:55:12 +10:00
|
|
|
rtm_target_feature,
|
|
|
|
rust,
|
2021-02-17 13:34:58 +01:00
|
|
|
rust_2015,
|
|
|
|
rust_2018,
|
2019-05-07 09:55:12 +10:00
|
|
|
rust_2018_preview,
|
2021-02-17 13:34:58 +01:00
|
|
|
rust_2021,
|
2022-02-28 18:13:24 -05:00
|
|
|
rust_2024,
|
2024-05-18 10:20:05 +02:00
|
|
|
rust_analyzer,
|
2019-05-07 09:55:12 +10:00
|
|
|
rust_begin_unwind,
|
2022-05-29 00:25:14 -07:00
|
|
|
rust_cold_cc,
|
2020-03-21 07:50:38 +00:00
|
|
|
rust_eh_catch_typeinfo,
|
2020-07-10 09:46:38 +10:00
|
|
|
rust_eh_personality,
|
2023-09-19 16:28:18 -07:00
|
|
|
rust_logo,
|
2019-05-14 15:58:22 +02:00
|
|
|
rustc,
|
2023-08-25 23:01:06 +02:00
|
|
|
rustc_abi,
|
2019-06-08 11:36:30 +03:00
|
|
|
rustc_allocator,
|
2022-03-21 15:30:54 -04:00
|
|
|
rustc_allocator_zeroed,
|
2020-10-21 12:36:07 +02:00
|
|
|
rustc_allow_const_fn_unstable,
|
2022-03-15 16:30:30 +01:00
|
|
|
rustc_allow_incoherent_impl,
|
2022-05-09 15:18:53 -07:00
|
|
|
rustc_allowed_through_unstable_modules,
|
2019-05-07 09:55:12 +10:00
|
|
|
rustc_attrs,
|
2022-05-22 23:10:27 +02:00
|
|
|
rustc_box,
|
2019-06-29 17:30:51 +03:00
|
|
|
rustc_builtin_macro,
|
2020-10-11 00:14:11 -04:00
|
|
|
rustc_capture_analysis,
|
2019-04-10 19:47:55 +02:00
|
|
|
rustc_clean,
|
2022-03-15 16:30:30 +01:00
|
|
|
rustc_coherence_is_core,
|
2023-02-14 10:17:19 +01:00
|
|
|
rustc_coinductive,
|
2023-07-16 18:18:38 +08:00
|
|
|
rustc_confusables,
|
2023-09-03 06:31:56 +02:00
|
|
|
rustc_const_panic_str,
|
2019-12-08 01:43:10 +01:00
|
|
|
rustc_const_stable,
|
2020-07-08 11:07:24 +10:00
|
|
|
rustc_const_unstable,
|
2019-04-10 19:47:55 +02:00
|
|
|
rustc_conversion_suggestion,
|
2022-03-21 15:30:54 -04:00
|
|
|
rustc_deallocator,
|
2019-04-10 19:47:55 +02:00
|
|
|
rustc_def_path,
|
2022-04-27 18:14:19 +04:00
|
|
|
rustc_default_body_unstable,
|
2022-11-12 23:37:52 +00:00
|
|
|
rustc_deny_explicit_impl,
|
2024-05-13 09:05:34 +02:00
|
|
|
rustc_deprecated_safe_2024,
|
2019-05-19 20:16:04 +02:00
|
|
|
rustc_diagnostic_item,
|
2019-05-07 09:55:12 +10:00
|
|
|
rustc_diagnostic_macros,
|
2019-04-10 19:47:55 +02:00
|
|
|
rustc_dirty,
|
2021-10-12 05:06:37 +00:00
|
|
|
rustc_do_not_const_check,
|
2023-03-21 16:43:51 +01:00
|
|
|
rustc_doc_primitive,
|
2024-03-22 11:42:53 +01:00
|
|
|
rustc_driver,
|
2019-06-08 11:36:43 +03:00
|
|
|
rustc_dummy,
|
2024-06-30 19:31:15 +01:00
|
|
|
rustc_dump_def_parents,
|
2024-06-19 14:24:25 +02:00
|
|
|
rustc_dump_item_bounds,
|
|
|
|
rustc_dump_predicates,
|
2023-07-11 22:35:29 +01:00
|
|
|
rustc_dump_user_args,
|
2021-07-17 15:44:19 +08:00
|
|
|
rustc_dump_vtable,
|
2022-09-12 10:57:34 +03:00
|
|
|
rustc_effective_visibility,
|
2019-04-10 19:47:55 +02:00
|
|
|
rustc_error,
|
2021-05-12 11:46:14 -04:00
|
|
|
rustc_evaluate_where_clauses,
|
2019-04-10 19:47:55 +02:00
|
|
|
rustc_expected_cgu_reuse,
|
2022-04-28 16:26:30 +02:00
|
|
|
rustc_has_incoherent_inherent_impls,
|
2023-10-04 23:08:05 +00:00
|
|
|
rustc_hidden_type_of_opaques,
|
2019-04-10 19:47:55 +02:00
|
|
|
rustc_if_this_changed,
|
|
|
|
rustc_inherit_overflow_checks,
|
2021-04-13 03:43:11 -04:00
|
|
|
rustc_insignificant_dtor,
|
2024-01-30 16:03:58 +00:00
|
|
|
rustc_intrinsic,
|
2024-02-19 17:35:12 +00:00
|
|
|
rustc_intrinsic_must_be_overridden,
|
2019-04-10 19:47:55 +02:00
|
|
|
rustc_layout,
|
|
|
|
rustc_layout_scalar_valid_range_end,
|
|
|
|
rustc_layout_scalar_valid_range_start,
|
2021-02-23 15:12:28 +00:00
|
|
|
rustc_legacy_const_generics,
|
2022-06-10 15:50:06 +01:00
|
|
|
rustc_lint_diagnostics,
|
2022-07-25 13:02:39 +01:00
|
|
|
rustc_lint_opt_deny_field_access,
|
|
|
|
rustc_lint_opt_ty,
|
2022-01-05 13:02:16 +01:00
|
|
|
rustc_lint_query_instability,
|
2024-08-09 09:52:12 +02:00
|
|
|
rustc_lint_untracked_query_information,
|
2019-06-23 16:37:28 +03:00
|
|
|
rustc_macro_transparency,
|
2021-04-08 21:37:38 +08:00
|
|
|
rustc_main,
|
2019-04-10 19:47:55 +02:00
|
|
|
rustc_mir,
|
2021-12-21 18:40:50 +03:00
|
|
|
rustc_must_implement_one_of,
|
2023-08-05 04:54:23 +02:00
|
|
|
rustc_never_returns_null_ptr,
|
2024-03-21 19:47:46 +00:00
|
|
|
rustc_never_type_options,
|
2024-02-14 22:08:03 +01:00
|
|
|
rustc_no_mir_inline,
|
2019-05-22 06:49:43 -07:00
|
|
|
rustc_nonnull_optimization_guaranteed,
|
2022-10-06 12:33:29 +02:00
|
|
|
rustc_nounwind,
|
2019-05-07 09:55:12 +10:00
|
|
|
rustc_object_lifetime_default,
|
2019-04-10 19:47:55 +02:00
|
|
|
rustc_on_unimplemented,
|
|
|
|
rustc_outlives,
|
|
|
|
rustc_paren_sugar,
|
|
|
|
rustc_partition_codegened,
|
|
|
|
rustc_partition_reused,
|
2022-01-07 11:38:16 +00:00
|
|
|
rustc_pass_by_value,
|
2019-05-07 09:55:12 +10:00
|
|
|
rustc_peek,
|
|
|
|
rustc_peek_definite_init,
|
2020-04-10 11:00:11 -07:00
|
|
|
rustc_peek_liveness,
|
2019-05-07 09:55:12 +10:00
|
|
|
rustc_peek_maybe_init,
|
|
|
|
rustc_peek_maybe_uninit,
|
2020-07-16 17:52:23 +01:00
|
|
|
rustc_polymorphize_error,
|
2024-03-10 16:29:39 +08:00
|
|
|
rustc_preserve_ub_checks,
|
2019-05-07 09:55:12 +10:00
|
|
|
rustc_private,
|
2019-04-10 19:47:55 +02:00
|
|
|
rustc_proc_macro_decls,
|
2019-05-07 09:55:12 +10:00
|
|
|
rustc_promotable,
|
2024-08-24 19:44:12 +03:00
|
|
|
rustc_pub_transparent,
|
2022-03-21 15:30:54 -04:00
|
|
|
rustc_reallocator,
|
2019-04-10 19:47:55 +02:00
|
|
|
rustc_regions,
|
2020-07-08 11:07:24 +10:00
|
|
|
rustc_reservation_impl,
|
2024-06-14 12:16:15 +00:00
|
|
|
rustc_runtime,
|
2022-08-17 13:43:59 +02:00
|
|
|
rustc_safe_intrinsic,
|
2020-07-14 15:05:26 +10:00
|
|
|
rustc_serialize,
|
2024-04-17 16:32:17 -04:00
|
|
|
rustc_skip_during_method_dispatch,
|
2020-02-08 17:56:25 +00:00
|
|
|
rustc_specialization_trait,
|
2019-04-10 19:47:55 +02:00
|
|
|
rustc_std_internal_symbol,
|
2021-10-22 15:44:28 -03:00
|
|
|
rustc_strict_coherence,
|
2019-04-10 19:47:55 +02:00
|
|
|
rustc_symbol_name,
|
|
|
|
rustc_test_marker,
|
|
|
|
rustc_then_this_would_need,
|
2021-05-21 19:35:49 +02:00
|
|
|
rustc_trivial_field_reads,
|
2020-07-08 11:07:24 +10:00
|
|
|
rustc_unsafe_specialization_marker,
|
2019-04-10 19:47:55 +02:00
|
|
|
rustc_variance,
|
2023-08-08 19:59:44 +00:00
|
|
|
rustc_variance_of_opaques,
|
2020-12-29 23:16:16 -05:00
|
|
|
rustdoc,
|
2021-10-30 17:44:50 +02:00
|
|
|
rustdoc_internals,
|
2022-09-12 20:10:35 +02:00
|
|
|
rustdoc_missing_doc_code_examples,
|
2020-07-08 11:07:24 +10:00
|
|
|
rustfmt,
|
2019-05-07 09:55:12 +10:00
|
|
|
rvalue_static_promotion,
|
2023-07-22 17:16:18 +02:00
|
|
|
rwpi,
|
2021-06-17 09:45:19 +09:00
|
|
|
s,
|
2024-07-09 14:32:17 +08:00
|
|
|
s390x_target_feature,
|
2022-08-18 19:39:14 +00:00
|
|
|
safety,
|
2019-10-22 00:00:00 +00:00
|
|
|
sanitize,
|
2022-12-12 22:42:44 -08:00
|
|
|
sanitizer_cfi_generalize_pointers,
|
|
|
|
sanitizer_cfi_normalize_integers,
|
2019-04-10 19:47:55 +02:00
|
|
|
sanitizer_runtime,
|
2019-06-14 16:55:36 +03:00
|
|
|
saturating_add,
|
2023-08-24 13:30:53 -03:00
|
|
|
saturating_div,
|
2019-06-14 16:55:36 +03:00
|
|
|
saturating_sub,
|
2024-07-26 19:36:21 +01:00
|
|
|
select_unpredictable,
|
2019-05-07 09:55:12 +10:00
|
|
|
self_in_typedefs,
|
|
|
|
self_struct_ctor,
|
2020-07-08 11:04:10 +10:00
|
|
|
semitransparent,
|
2024-08-01 23:13:51 +05:30
|
|
|
sha512_sm_x86,
|
2022-06-17 14:14:58 -04:00
|
|
|
shadow_call_stack,
|
2024-04-14 13:52:58 +01:00
|
|
|
shallow,
|
2020-07-08 11:04:10 +10:00
|
|
|
shl,
|
|
|
|
shl_assign,
|
2024-04-12 23:24:45 +08:00
|
|
|
shorter_tail_lifetimes,
|
2019-04-10 19:47:55 +02:00
|
|
|
should_panic,
|
2020-07-08 11:04:10 +10:00
|
|
|
shr,
|
|
|
|
shr_assign,
|
2022-07-05 19:56:22 +02:00
|
|
|
sig_dfl,
|
|
|
|
sig_ign,
|
2019-04-10 19:47:55 +02:00
|
|
|
simd,
|
2020-07-08 11:04:10 +10:00
|
|
|
simd_add,
|
|
|
|
simd_and,
|
2022-04-12 11:00:55 -04:00
|
|
|
simd_arith_offset,
|
2021-12-30 01:18:44 +00:00
|
|
|
simd_as,
|
2020-07-08 11:04:10 +10:00
|
|
|
simd_bitmask,
|
2023-07-27 23:53:45 -04:00
|
|
|
simd_bitreverse,
|
2023-07-27 23:04:14 -04:00
|
|
|
simd_bswap,
|
2020-07-08 11:04:10 +10:00
|
|
|
simd_cast,
|
2022-07-22 01:48:30 +00:00
|
|
|
simd_cast_ptr,
|
2020-07-08 11:04:10 +10:00
|
|
|
simd_ceil,
|
2023-07-27 23:53:45 -04:00
|
|
|
simd_ctlz,
|
2024-05-18 17:56:49 -07:00
|
|
|
simd_ctpop,
|
2023-07-27 23:53:45 -04:00
|
|
|
simd_cttz,
|
2020-07-08 11:04:10 +10:00
|
|
|
simd_div,
|
|
|
|
simd_eq,
|
2024-04-03 15:17:00 +02:00
|
|
|
simd_expose_provenance,
|
2019-06-14 16:55:36 +03:00
|
|
|
simd_extract,
|
2020-07-08 11:04:10 +10:00
|
|
|
simd_fabs,
|
|
|
|
simd_fcos,
|
|
|
|
simd_fexp,
|
|
|
|
simd_fexp2,
|
2019-05-07 09:55:12 +10:00
|
|
|
simd_ffi,
|
2020-07-08 11:04:10 +10:00
|
|
|
simd_flog,
|
|
|
|
simd_flog10,
|
|
|
|
simd_flog2,
|
|
|
|
simd_floor,
|
|
|
|
simd_fma,
|
|
|
|
simd_fmax,
|
|
|
|
simd_fmin,
|
|
|
|
simd_fpow,
|
|
|
|
simd_fpowi,
|
|
|
|
simd_fsin,
|
|
|
|
simd_fsqrt,
|
|
|
|
simd_gather,
|
|
|
|
simd_ge,
|
|
|
|
simd_gt,
|
2019-06-14 16:55:36 +03:00
|
|
|
simd_insert,
|
2020-07-08 11:04:10 +10:00
|
|
|
simd_le,
|
|
|
|
simd_lt,
|
2023-11-15 23:08:02 +01:00
|
|
|
simd_masked_load,
|
|
|
|
simd_masked_store,
|
2020-07-08 11:04:10 +10:00
|
|
|
simd_mul,
|
|
|
|
simd_ne,
|
2021-03-19 02:16:21 +08:00
|
|
|
simd_neg,
|
2020-07-08 11:04:10 +10:00
|
|
|
simd_or,
|
|
|
|
simd_reduce_add_ordered,
|
|
|
|
simd_reduce_add_unordered,
|
|
|
|
simd_reduce_all,
|
|
|
|
simd_reduce_and,
|
|
|
|
simd_reduce_any,
|
|
|
|
simd_reduce_max,
|
|
|
|
simd_reduce_min,
|
|
|
|
simd_reduce_mul_ordered,
|
|
|
|
simd_reduce_mul_unordered,
|
|
|
|
simd_reduce_or,
|
|
|
|
simd_reduce_xor,
|
|
|
|
simd_rem,
|
2021-04-14 15:07:36 -07:00
|
|
|
simd_round,
|
2020-07-08 11:04:10 +10:00
|
|
|
simd_saturating_add,
|
|
|
|
simd_saturating_sub,
|
|
|
|
simd_scatter,
|
|
|
|
simd_select,
|
|
|
|
simd_select_bitmask,
|
|
|
|
simd_shl,
|
|
|
|
simd_shr,
|
2021-09-11 14:47:28 +00:00
|
|
|
simd_shuffle,
|
2023-09-18 14:37:19 +00:00
|
|
|
simd_shuffle_generic,
|
2020-07-08 11:04:10 +10:00
|
|
|
simd_sub,
|
2021-04-14 15:07:36 -07:00
|
|
|
simd_trunc,
|
2024-03-23 23:00:53 +01:00
|
|
|
simd_with_exposed_provenance,
|
2020-07-08 11:04:10 +10:00
|
|
|
simd_xor,
|
2019-05-07 09:55:12 +10:00
|
|
|
since,
|
2024-03-01 03:53:26 -05:00
|
|
|
sinf128,
|
|
|
|
sinf16,
|
2020-06-28 12:58:20 +02:00
|
|
|
sinf32,
|
|
|
|
sinf64,
|
2019-05-07 09:55:12 +10:00
|
|
|
size,
|
2019-06-14 16:55:36 +03:00
|
|
|
size_of,
|
2020-06-28 12:58:20 +02:00
|
|
|
size_of_val,
|
2020-07-10 09:46:38 +10:00
|
|
|
sized,
|
2021-02-21 16:32:38 +03:00
|
|
|
skip,
|
2020-07-08 11:04:10 +10:00
|
|
|
slice,
|
2023-09-26 23:56:38 -04:00
|
|
|
slice_from_raw_parts,
|
|
|
|
slice_from_raw_parts_mut,
|
2024-09-18 21:42:38 +01:00
|
|
|
slice_into_vec,
|
2024-09-18 16:59:57 +01:00
|
|
|
slice_iter,
|
2021-06-20 16:09:42 +02:00
|
|
|
slice_len_fn,
|
2019-05-07 09:55:12 +10:00
|
|
|
slice_patterns,
|
|
|
|
slicing_syntax,
|
2019-09-01 14:54:57 +03:00
|
|
|
soft,
|
2019-05-07 09:55:12 +10:00
|
|
|
specialization,
|
|
|
|
speed,
|
2020-07-06 12:54:33 -07:00
|
|
|
spotlight,
|
2024-03-01 03:53:26 -05:00
|
|
|
sqrtf128,
|
|
|
|
sqrtf16,
|
2020-06-28 12:58:20 +02:00
|
|
|
sqrtf32,
|
|
|
|
sqrtf64,
|
2020-12-10 13:51:56 -08:00
|
|
|
sreg,
|
|
|
|
sreg_low16,
|
2022-01-10 15:32:45 +01:00
|
|
|
sse,
|
2019-05-07 09:55:12 +10:00
|
|
|
sse4a_target_feature,
|
2019-04-10 19:47:55 +02:00
|
|
|
stable,
|
2019-05-07 09:55:12 +10:00
|
|
|
staged_api,
|
2019-04-10 19:47:55 +02:00
|
|
|
start,
|
2020-07-14 15:05:26 +10:00
|
|
|
state,
|
2019-05-07 09:55:12 +10:00
|
|
|
static_in_const,
|
|
|
|
static_nobundle,
|
|
|
|
static_recursion,
|
2020-07-10 09:46:38 +10:00
|
|
|
staticlib,
|
2019-05-07 09:55:12 +10:00
|
|
|
std,
|
2021-01-09 16:52:06 +01:00
|
|
|
std_panic,
|
|
|
|
std_panic_2015_macro,
|
2020-10-18 22:26:36 +02:00
|
|
|
std_panic_macro,
|
2019-05-23 16:23:11 +10:00
|
|
|
stmt,
|
2019-05-07 09:55:12 +10:00
|
|
|
stmt_expr_attributes,
|
|
|
|
stop_after_dataflow,
|
2020-12-02 15:16:12 -08:00
|
|
|
store,
|
2020-07-08 11:07:24 +10:00
|
|
|
str,
|
2024-09-18 16:59:57 +01:00
|
|
|
str_chars,
|
2024-09-18 22:13:50 +01:00
|
|
|
str_ends_with,
|
2023-05-13 18:33:19 +02:00
|
|
|
str_from_utf8,
|
|
|
|
str_from_utf8_mut,
|
2023-05-13 17:12:45 +02:00
|
|
|
str_from_utf8_unchecked,
|
|
|
|
str_from_utf8_unchecked_mut,
|
2024-09-18 22:13:50 +01:00
|
|
|
str_len,
|
2022-03-24 17:05:47 +01:00
|
|
|
str_split_whitespace,
|
2024-09-18 22:13:50 +01:00
|
|
|
str_starts_with,
|
2022-03-24 17:05:47 +01:00
|
|
|
str_trim,
|
|
|
|
str_trim_end,
|
|
|
|
str_trim_start,
|
2022-04-02 21:07:00 +02:00
|
|
|
strict_provenance,
|
2024-09-18 21:09:06 +01:00
|
|
|
string_as_mut_str,
|
|
|
|
string_as_str,
|
2022-11-11 14:31:07 +00:00
|
|
|
string_deref_patterns,
|
2024-09-18 22:10:05 +01:00
|
|
|
string_from_utf8,
|
2024-09-18 21:37:12 +01:00
|
|
|
string_insert_str,
|
2024-09-18 22:38:27 +01:00
|
|
|
string_new,
|
2024-09-18 21:37:12 +01:00
|
|
|
string_push_str,
|
2020-07-08 11:07:24 +10:00
|
|
|
stringify,
|
2019-05-07 09:55:12 +10:00
|
|
|
struct_field_attributes,
|
|
|
|
struct_inherit,
|
2020-07-10 09:46:38 +10:00
|
|
|
struct_variant,
|
2019-04-10 19:47:55 +02:00
|
|
|
structural_match,
|
2020-07-08 11:04:10 +10:00
|
|
|
structural_peq,
|
|
|
|
sub,
|
|
|
|
sub_assign,
|
2019-06-14 16:55:36 +03:00
|
|
|
sub_with_overflow,
|
2019-05-07 09:55:12 +10:00
|
|
|
suggestion,
|
2024-02-13 12:31:41 +03:00
|
|
|
surface_async_drop_in_place,
|
2020-02-12 15:47:43 +00:00
|
|
|
sym,
|
2020-07-08 11:04:10 +10:00
|
|
|
sync,
|
2024-02-27 16:02:19 +00:00
|
|
|
synthetic,
|
2020-10-08 23:23:27 +01:00
|
|
|
t32,
|
2022-04-22 16:34:56 +02:00
|
|
|
target,
|
2021-07-06 20:54:54 -07:00
|
|
|
target_abi,
|
2020-07-08 11:04:10 +10:00
|
|
|
target_arch,
|
|
|
|
target_endian,
|
|
|
|
target_env,
|
|
|
|
target_family,
|
2019-04-10 19:47:55 +02:00
|
|
|
target_feature,
|
2020-05-01 14:17:02 +02:00
|
|
|
target_feature_11,
|
2019-05-07 09:55:12 +10:00
|
|
|
target_has_atomic,
|
2020-09-20 12:09:22 +02:00
|
|
|
target_has_atomic_equal_alignment,
|
2019-10-08 17:09:23 +01:00
|
|
|
target_has_atomic_load_store,
|
2020-07-08 11:04:10 +10:00
|
|
|
target_os,
|
|
|
|
target_pointer_width,
|
2019-05-07 09:55:12 +10:00
|
|
|
target_thread_local,
|
2020-07-08 11:04:10 +10:00
|
|
|
target_vendor,
|
2019-05-07 09:55:12 +10:00
|
|
|
tbm_target_feature,
|
2020-07-08 11:04:10 +10:00
|
|
|
termination,
|
2019-05-07 09:55:12 +10:00
|
|
|
termination_trait,
|
|
|
|
termination_trait_test,
|
|
|
|
test,
|
|
|
|
test_2018_feature,
|
|
|
|
test_accepted_feature,
|
2019-05-22 12:42:23 +10:00
|
|
|
test_case,
|
2019-05-07 09:55:12 +10:00
|
|
|
test_removed_feature,
|
2019-04-10 19:47:55 +02:00
|
|
|
test_runner,
|
2022-02-23 04:53:17 +00:00
|
|
|
test_unstable_lint,
|
2020-01-12 00:00:00 +00:00
|
|
|
thread,
|
2019-04-10 19:47:55 +02:00
|
|
|
thread_local,
|
2022-01-06 14:50:46 +00:00
|
|
|
thread_local_macro,
|
2023-03-05 20:19:41 -08:00
|
|
|
three_way_compare,
|
2022-01-10 15:32:45 +01:00
|
|
|
thumb2,
|
|
|
|
thumb_mode: "thumb-mode",
|
2024-08-21 03:17:47 +00:00
|
|
|
time,
|
2022-05-16 20:15:06 -04:00
|
|
|
tmm_reg,
|
2023-09-26 23:56:38 -04:00
|
|
|
to_owned_method,
|
2022-07-15 14:29:15 +09:00
|
|
|
to_string,
|
2023-09-26 23:56:38 -04:00
|
|
|
to_string_method,
|
2022-07-15 14:29:15 +09:00
|
|
|
to_vec,
|
2022-01-06 14:50:46 +00:00
|
|
|
todo_macro,
|
2019-05-07 09:55:12 +10:00
|
|
|
tool_attributes,
|
|
|
|
tool_lints,
|
|
|
|
trace_macros,
|
2019-07-20 00:55:58 +00:00
|
|
|
track_caller,
|
2019-05-07 09:55:12 +10:00
|
|
|
trait_alias,
|
2019-10-31 10:52:05 +08:00
|
|
|
trait_upcasting,
|
2019-05-07 09:55:12 +10:00
|
|
|
transmute,
|
2023-04-04 08:41:44 +00:00
|
|
|
transmute_generic_consts,
|
2022-08-18 19:39:14 +00:00
|
|
|
transmute_opts,
|
2021-07-03 12:18:13 -04:00
|
|
|
transmute_trait,
|
2023-04-22 17:14:19 -07:00
|
|
|
transmute_unchecked,
|
2019-05-07 09:55:12 +10:00
|
|
|
transparent,
|
2019-05-22 07:31:09 -07:00
|
|
|
transparent_enums,
|
|
|
|
transparent_unions,
|
2019-05-07 09:55:12 +10:00
|
|
|
trivial_bounds,
|
2024-03-01 03:53:26 -05:00
|
|
|
truncf128,
|
|
|
|
truncf16,
|
2020-06-28 12:58:20 +02:00
|
|
|
truncf32,
|
|
|
|
truncf64,
|
2019-05-07 09:55:12 +10:00
|
|
|
try_blocks,
|
2022-06-15 07:37:40 -03:00
|
|
|
try_capture,
|
2021-05-25 23:27:26 -04:00
|
|
|
try_from,
|
2023-09-26 23:56:38 -04:00
|
|
|
try_from_fn,
|
2021-05-25 23:27:26 -04:00
|
|
|
try_into,
|
2021-04-15 00:33:55 -07:00
|
|
|
try_trait_v2,
|
2019-05-23 16:23:11 +10:00
|
|
|
tt,
|
2020-07-08 11:04:10 +10:00
|
|
|
tuple,
|
2019-05-07 09:55:12 +10:00
|
|
|
tuple_indexing,
|
2022-07-30 01:53:29 +00:00
|
|
|
tuple_trait,
|
2019-11-11 11:48:47 -08:00
|
|
|
two_phase,
|
2019-05-07 09:55:12 +10:00
|
|
|
ty,
|
|
|
|
type_alias_enum_variants,
|
2020-07-08 11:07:24 +10:00
|
|
|
type_alias_impl_trait,
|
2022-11-19 21:27:57 +01:00
|
|
|
type_ascribe,
|
2019-05-07 09:55:12 +10:00
|
|
|
type_ascription,
|
2021-10-10 14:50:39 +08:00
|
|
|
type_changing_struct_update,
|
2020-07-08 11:07:24 +10:00
|
|
|
type_id,
|
2024-07-17 12:35:50 +02:00
|
|
|
type_ir_inherent,
|
2019-04-10 19:47:55 +02:00
|
|
|
type_length_limit,
|
2019-05-07 09:55:12 +10:00
|
|
|
type_macros,
|
2020-07-08 11:07:24 +10:00
|
|
|
type_name,
|
2023-06-15 15:47:38 +03:00
|
|
|
type_privacy_lints,
|
2024-03-15 22:09:05 -07:00
|
|
|
typed_swap,
|
2019-05-07 09:55:12 +10:00
|
|
|
u128,
|
2024-02-26 17:36:42 -07:00
|
|
|
u128_legacy_const_max,
|
|
|
|
u128_legacy_const_min,
|
|
|
|
u128_legacy_fn_max_value,
|
|
|
|
u128_legacy_fn_min_value,
|
|
|
|
u128_legacy_mod,
|
2019-05-07 09:55:12 +10:00
|
|
|
u16,
|
2024-02-26 17:36:42 -07:00
|
|
|
u16_legacy_const_max,
|
|
|
|
u16_legacy_const_min,
|
|
|
|
u16_legacy_fn_max_value,
|
|
|
|
u16_legacy_fn_min_value,
|
|
|
|
u16_legacy_mod,
|
2019-05-07 09:55:12 +10:00
|
|
|
u32,
|
2024-02-26 17:36:42 -07:00
|
|
|
u32_legacy_const_max,
|
|
|
|
u32_legacy_const_min,
|
|
|
|
u32_legacy_fn_max_value,
|
|
|
|
u32_legacy_fn_min_value,
|
|
|
|
u32_legacy_mod,
|
2019-05-07 09:55:12 +10:00
|
|
|
u64,
|
2024-02-26 17:36:42 -07:00
|
|
|
u64_legacy_const_max,
|
|
|
|
u64_legacy_const_min,
|
|
|
|
u64_legacy_fn_max_value,
|
|
|
|
u64_legacy_fn_min_value,
|
|
|
|
u64_legacy_mod,
|
2019-05-07 09:55:12 +10:00
|
|
|
u8,
|
2024-02-26 17:36:42 -07:00
|
|
|
u8_legacy_const_max,
|
|
|
|
u8_legacy_const_min,
|
|
|
|
u8_legacy_fn_max_value,
|
|
|
|
u8_legacy_fn_min_value,
|
|
|
|
u8_legacy_mod,
|
2024-03-17 10:29:02 +01:00
|
|
|
ub_checks,
|
2020-06-28 12:58:20 +02:00
|
|
|
unaligned_volatile_load,
|
|
|
|
unaligned_volatile_store,
|
2019-05-07 09:55:12 +10:00
|
|
|
unboxed_closures,
|
2020-02-04 17:09:22 -08:00
|
|
|
unchecked_add,
|
|
|
|
unchecked_div,
|
|
|
|
unchecked_mul,
|
|
|
|
unchecked_rem,
|
2019-06-14 16:55:36 +03:00
|
|
|
unchecked_shl,
|
|
|
|
unchecked_shr,
|
2020-02-04 17:09:22 -08:00
|
|
|
unchecked_sub,
|
2019-05-07 09:55:12 +10:00
|
|
|
underscore_const_names,
|
|
|
|
underscore_imports,
|
|
|
|
underscore_lifetimes,
|
|
|
|
uniform_paths,
|
2022-01-06 14:50:46 +00:00
|
|
|
unimplemented_macro,
|
2020-07-08 11:04:10 +10:00
|
|
|
unit,
|
2019-05-07 09:55:12 +10:00
|
|
|
universal_impl_trait,
|
2020-07-08 11:04:10 +10:00
|
|
|
unix,
|
2020-06-26 13:19:50 +01:00
|
|
|
unlikely,
|
2019-05-07 09:55:12 +10:00
|
|
|
unmarked_api,
|
2023-08-23 20:53:47 +08:00
|
|
|
unnamed_fields,
|
2020-07-08 11:04:10 +10:00
|
|
|
unpin,
|
2020-06-28 12:58:20 +02:00
|
|
|
unreachable,
|
2022-01-21 23:04:06 +01:00
|
|
|
unreachable_2015,
|
|
|
|
unreachable_2015_macro,
|
|
|
|
unreachable_2021,
|
2019-05-19 13:00:28 +01:00
|
|
|
unreachable_code,
|
2022-01-21 23:04:06 +01:00
|
|
|
unreachable_display,
|
2022-01-06 14:50:46 +00:00
|
|
|
unreachable_macro,
|
2019-05-07 09:55:12 +10:00
|
|
|
unrestricted_attribute_tokens,
|
2024-04-20 23:54:50 -05:00
|
|
|
unsafe_attributes,
|
2020-05-03 23:11:34 +02:00
|
|
|
unsafe_block_in_unsafe_fn,
|
2020-07-08 11:04:10 +10:00
|
|
|
unsafe_cell,
|
2023-08-24 12:04:40 +02:00
|
|
|
unsafe_cell_raw_get,
|
2024-05-31 16:57:07 -03:00
|
|
|
unsafe_extern_blocks,
|
2019-05-07 09:55:12 +10:00
|
|
|
unsafe_no_drop_flag,
|
2022-01-24 01:34:46 +01:00
|
|
|
unsafe_pin_internals,
|
2020-07-08 11:04:10 +10:00
|
|
|
unsize,
|
2024-07-14 13:38:51 +01:00
|
|
|
unsized_const_param_ty,
|
|
|
|
unsized_const_params,
|
2020-10-16 17:46:59 -03:00
|
|
|
unsized_fn_params,
|
2019-05-07 09:55:12 +10:00
|
|
|
unsized_locals,
|
|
|
|
unsized_tuple_coercion,
|
2019-04-10 19:47:55 +02:00
|
|
|
unstable,
|
2022-07-01 18:20:46 +03:00
|
|
|
unstable_location_reason_default: "this crate is being loaded from the sysroot, an \
|
|
|
|
unstable location; did you mean to load this crate \
|
|
|
|
from crates.io via `Cargo.toml` instead?",
|
2019-05-07 09:55:12 +10:00
|
|
|
untagged_unions,
|
2022-06-15 07:37:40 -03:00
|
|
|
unused_imports,
|
2019-04-10 19:47:55 +02:00
|
|
|
unwind,
|
2019-05-07 09:55:12 +10:00
|
|
|
unwind_attributes,
|
2021-06-29 14:15:58 -04:00
|
|
|
unwind_safe_trait,
|
2020-08-18 17:02:23 -04:00
|
|
|
unwrap,
|
2019-05-22 14:41:15 +10:00
|
|
|
unwrap_or,
|
2019-05-07 09:55:12 +10:00
|
|
|
use_extern_macros,
|
|
|
|
use_nested_groups,
|
2020-07-10 09:46:38 +10:00
|
|
|
used,
|
2021-11-22 13:14:54 +01:00
|
|
|
used_with_arg,
|
2022-06-28 17:34:52 +00:00
|
|
|
using,
|
2019-05-07 09:55:12 +10:00
|
|
|
usize,
|
2024-03-09 23:33:27 -07:00
|
|
|
usize_legacy_const_max,
|
|
|
|
usize_legacy_const_min,
|
|
|
|
usize_legacy_fn_max_value,
|
|
|
|
usize_legacy_fn_min_value,
|
|
|
|
usize_legacy_mod,
|
2020-06-28 12:58:20 +02:00
|
|
|
va_arg,
|
|
|
|
va_copy,
|
|
|
|
va_end,
|
2020-07-08 11:04:10 +10:00
|
|
|
va_list,
|
2020-07-10 09:46:38 +10:00
|
|
|
va_start,
|
|
|
|
val,
|
2022-08-18 19:39:14 +00:00
|
|
|
validity,
|
2021-09-29 02:39:30 +02:00
|
|
|
values,
|
2020-07-08 11:07:24 +10:00
|
|
|
var,
|
|
|
|
variant_count,
|
2019-05-22 14:41:15 +10:00
|
|
|
vec,
|
2024-09-18 21:09:06 +01:00
|
|
|
vec_as_mut_slice,
|
|
|
|
vec_as_slice,
|
2024-09-18 21:42:38 +01:00
|
|
|
vec_from_elem,
|
2024-09-18 21:59:31 +01:00
|
|
|
vec_is_empty,
|
2022-01-06 14:50:46 +00:00
|
|
|
vec_macro,
|
2024-09-18 21:42:38 +01:00
|
|
|
vec_new,
|
2024-09-18 21:59:31 +01:00
|
|
|
vec_pop,
|
2024-09-18 21:53:28 +01:00
|
|
|
vec_with_capacity,
|
2024-09-18 16:59:57 +01:00
|
|
|
vecdeque_iter,
|
2020-04-19 10:47:55 +02:00
|
|
|
version,
|
2022-01-10 15:32:45 +01:00
|
|
|
vfp2,
|
2019-05-07 09:55:12 +10:00
|
|
|
vis,
|
|
|
|
visible_private_types,
|
|
|
|
volatile,
|
2020-06-28 12:58:20 +02:00
|
|
|
volatile_copy_memory,
|
|
|
|
volatile_copy_nonoverlapping_memory,
|
|
|
|
volatile_load,
|
|
|
|
volatile_set_memory,
|
|
|
|
volatile_store,
|
2020-12-10 13:51:56 -08:00
|
|
|
vreg,
|
|
|
|
vreg_low16,
|
2022-07-18 09:48:20 -04:00
|
|
|
vtable_align,
|
|
|
|
vtable_size,
|
2019-04-10 19:47:55 +02:00
|
|
|
warn,
|
2024-02-21 09:23:28 -05:00
|
|
|
wasip2,
|
rustc: Add a new `wasm` ABI
This commit implements the idea of a new ABI for the WebAssembly target,
one called `"wasm"`. This ABI is entirely of my own invention
and has no current precedent, but I think that the addition of this ABI
might help solve a number of issues with the WebAssembly targets.
When `wasm32-unknown-unknown` was first added to Rust I naively
"implemented an abi" for the target. I then went to write `wasm-bindgen`
which accidentally relied on details of this ABI. Turns out the ABI
definition didn't match C, which is causing issues for C/Rust interop.
Currently the compiler has a "wasm32 bindgen compat" ABI which is the
original implementation I added, and it's purely there for, well,
`wasm-bindgen`.
Another issue with the WebAssembly target is that it's not clear to me
when and if the default C ABI will change to account for WebAssembly's
multi-value feature (a feature that allows functions to return multiple
values). Even if this does happen, though, it seems like the C ABI will
be guided based on the performance of WebAssembly code and will likely
not match even what the current wasm-bindgen-compat ABI is today. This
leaves a hole in Rust's expressivity in binding WebAssembly where given
a particular import type, Rust may not be able to import that signature
with an updated C ABI for multi-value.
To fix these issues I had the idea of a new ABI for WebAssembly, one
called `wasm`. The definition of this ABI is "what you write
maps straight to wasm". The goal here is that whatever you write down in
the parameter list or in the return values goes straight into the
function's signature in the WebAssembly file. This special ABI is for
intentionally matching the ABI of an imported function from the
environment or exporting a function with the right signature.
With the addition of a new ABI, this enables rustc to:
* Eventually remove the "wasm-bindgen compat hack". Once this
ABI is stable wasm-bindgen can switch to using it everywhere.
Afterwards the wasm32-unknown-unknown target can have its default ABI
updated to match C.
* Expose the ability to precisely match an ABI signature for a
WebAssembly function, regardless of what the C ABI that clang chooses
turns out to be.
* Continue to evolve the definition of the default C ABI to match what
clang does on all targets, since the purpose of that ABI will be
explicitly matching C rather than generating particular function
imports/exports.
Naturally this is implemented as an unstable feature initially, but it
would be nice for this to get stabilized (if it works) in the near-ish
future to remove the wasm32-unknown-unknown incompatibility with the C
ABI. Doing this, however, requires the feature to be on stable because
wasm-bindgen works with stable Rust.
2021-04-01 16:08:29 -07:00
|
|
|
wasm_abi,
|
2019-05-07 09:55:12 +10:00
|
|
|
wasm_import_module,
|
|
|
|
wasm_target_feature,
|
|
|
|
while_let,
|
|
|
|
windows,
|
2019-04-10 19:47:55 +02:00
|
|
|
windows_subsystem,
|
2022-01-30 18:55:22 -03:00
|
|
|
with_negative_coherence,
|
2019-06-14 16:55:36 +03:00
|
|
|
wrapping_add,
|
2023-08-24 13:30:53 -03:00
|
|
|
wrapping_div,
|
2019-06-14 16:55:36 +03:00
|
|
|
wrapping_mul,
|
2023-08-24 13:30:53 -03:00
|
|
|
wrapping_rem,
|
|
|
|
wrapping_rem_euclid,
|
2020-07-08 11:07:24 +10:00
|
|
|
wrapping_sub,
|
2021-04-20 19:03:10 +10:00
|
|
|
wreg,
|
2020-06-28 12:58:20 +02:00
|
|
|
write_bytes,
|
2022-01-06 14:50:46 +00:00
|
|
|
write_macro,
|
2021-09-10 12:00:22 -07:00
|
|
|
write_str,
|
2023-04-29 23:32:40 -07:00
|
|
|
write_via_move,
|
2022-01-06 14:50:46 +00:00
|
|
|
writeln_macro,
|
2024-06-23 12:12:51 +05:30
|
|
|
x86_amx_intrinsics,
|
2021-06-17 21:00:52 +01:00
|
|
|
x87_reg,
|
2021-08-25 21:45:37 -07:00
|
|
|
xer,
|
2020-12-10 13:51:56 -08:00
|
|
|
xmm_reg,
|
2024-07-12 23:30:22 +05:30
|
|
|
xop_target_feature,
|
2022-03-25 23:43:54 -07:00
|
|
|
yeet_desugar_details,
|
|
|
|
yeet_expr,
|
2024-01-11 01:36:05 +07:00
|
|
|
yes,
|
2023-10-23 11:34:27 +00:00
|
|
|
yield_expr,
|
2020-12-10 13:51:56 -08:00
|
|
|
ymm_reg,
|
2024-06-15 22:30:25 +01:00
|
|
|
zfh,
|
|
|
|
zfhmin,
|
2020-12-10 13:51:56 -08:00
|
|
|
zmm_reg,
|
2019-04-03 02:43:49 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-06-11 15:49:57 +01:00
|
|
|
#[derive(Copy, Clone, Eq, HashStable_Generic, Encodable, Decodable)]
|
2017-03-17 04:04:41 +00:00
|
|
|
pub struct Ident {
|
|
|
|
pub name: Symbol,
|
2018-03-18 02:57:23 +03:00
|
|
|
pub span: Span,
|
2017-03-17 04:04:41 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl Ident {
|
2018-03-18 02:57:23 +03:00
|
|
|
#[inline]
|
2019-05-17 10:44:51 +10:00
|
|
|
/// Constructs a new identifier from a symbol and a span.
|
2018-03-18 02:57:23 +03:00
|
|
|
pub const fn new(name: Symbol, span: Span) -> Ident {
|
|
|
|
Ident { name, span }
|
|
|
|
}
|
2018-11-27 02:59:49 +00:00
|
|
|
|
2019-08-11 02:20:18 +03:00
|
|
|
/// Constructs a new identifier with a dummy span.
|
2018-03-18 02:57:23 +03:00
|
|
|
#[inline]
|
2019-08-11 02:20:18 +03:00
|
|
|
pub const fn with_dummy_span(name: Symbol) -> Ident {
|
2018-03-18 02:57:23 +03:00
|
|
|
Ident::new(name, DUMMY_SP)
|
2017-03-17 04:04:41 +00:00
|
|
|
}
|
|
|
|
|
2019-05-11 19:08:09 +03:00
|
|
|
#[inline]
|
2021-10-17 23:20:30 +03:00
|
|
|
pub fn empty() -> Ident {
|
2020-12-29 20:28:08 -05:00
|
|
|
Ident::with_dummy_span(kw::Empty)
|
2019-05-11 19:08:09 +03:00
|
|
|
}
|
|
|
|
|
2019-09-14 21:16:51 +01:00
|
|
|
/// Maps a string to an identifier with a dummy span.
|
2017-03-17 04:04:41 +00:00
|
|
|
pub fn from_str(string: &str) -> Ident {
|
2019-08-11 02:20:18 +03:00
|
|
|
Ident::with_dummy_span(Symbol::intern(string))
|
2017-03-17 04:04:41 +00:00
|
|
|
}
|
|
|
|
|
2019-05-17 10:44:51 +10:00
|
|
|
/// Maps a string and a span to an identifier.
|
|
|
|
pub fn from_str_and_span(string: &str, span: Span) -> Ident {
|
|
|
|
Ident::new(Symbol::intern(string), span)
|
|
|
|
}
|
|
|
|
|
2019-02-08 14:53:55 +01:00
|
|
|
/// Replaces `lo` and `hi` with those from `span`, but keep hygiene context.
|
2018-03-18 16:47:09 +03:00
|
|
|
pub fn with_span_pos(self, span: Span) -> Ident {
|
|
|
|
Ident::new(self.name, span.with_ctxt(self.span.ctxt()))
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn without_first_quote(self) -> Ident {
|
2018-12-05 06:42:56 -08:00
|
|
|
Ident::new(Symbol::intern(self.as_str().trim_start_matches('\'')), self.span)
|
2017-12-06 04:28:01 -05:00
|
|
|
}
|
|
|
|
|
2018-06-28 00:12:17 +03:00
|
|
|
/// "Normalize" ident for use in comparisons using "item hygiene".
|
2020-03-14 01:36:46 +03:00
|
|
|
/// Identifiers with same string value become same if they came from the same macro 2.0 macro
|
2018-11-27 02:59:49 +00:00
|
|
|
/// (e.g., `macro` item, but not `macro_rules` item) and stay different if they came from
|
2020-03-14 01:36:46 +03:00
|
|
|
/// different macro 2.0 macros.
|
2018-06-28 00:12:17 +03:00
|
|
|
/// Technically, this operation strips all non-opaque marks from ident's syntactic context.
|
2020-03-14 01:36:46 +03:00
|
|
|
pub fn normalize_to_macros_2_0(self) -> Ident {
|
|
|
|
Ident::new(self.name, self.span.normalize_to_macros_2_0())
|
2018-03-18 02:57:23 +03:00
|
|
|
}
|
2018-04-15 20:51:10 +01:00
|
|
|
|
2018-06-30 01:53:17 +03:00
|
|
|
/// "Normalize" ident for use in comparisons using "local variable hygiene".
|
|
|
|
/// Identifiers with same string value become same if they came from the same non-transparent
|
2018-11-27 02:59:49 +00:00
|
|
|
/// macro (e.g., `macro` or `macro_rules!` items) and stay different if they came from different
|
2018-06-30 01:53:17 +03:00
|
|
|
/// non-transparent macros.
|
|
|
|
/// Technically, this operation strips all transparent marks from ident's syntactic context.
|
2022-09-28 14:45:31 +10:00
|
|
|
#[inline]
|
2020-03-14 01:36:46 +03:00
|
|
|
pub fn normalize_to_macro_rules(self) -> Ident {
|
|
|
|
Ident::new(self.name, self.span.normalize_to_macro_rules())
|
2018-06-24 19:54:23 +03:00
|
|
|
}
|
|
|
|
|
2021-12-15 08:32:21 +11:00
|
|
|
/// Access the underlying string. This is a slowish operation because it
|
|
|
|
/// requires locking the symbol interner.
|
|
|
|
///
|
|
|
|
/// Note that the lifetime of the return value is a lie. See
|
|
|
|
/// `Symbol::as_str()` for details.
|
|
|
|
pub fn as_str(&self) -> &str {
|
2018-05-26 15:12:38 +03:00
|
|
|
self.name.as_str()
|
|
|
|
}
|
2018-03-18 02:57:23 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
impl PartialEq for Ident {
|
2022-09-28 14:45:31 +10:00
|
|
|
#[inline]
|
2018-03-18 02:57:23 +03:00
|
|
|
fn eq(&self, rhs: &Self) -> bool {
|
2022-06-19 16:27:29 -07:00
|
|
|
self.name == rhs.name && self.span.eq_ctxt(rhs.span)
|
2018-03-18 02:57:23 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Hash for Ident {
|
|
|
|
fn hash<H: Hasher>(&self, state: &mut H) {
|
|
|
|
self.name.hash(state);
|
|
|
|
self.span.ctxt().hash(state);
|
2017-03-17 04:04:41 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl fmt::Debug for Ident {
|
2019-02-04 03:42:27 +09:00
|
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
2020-02-23 01:29:36 +03:00
|
|
|
fmt::Display::fmt(self, f)?;
|
|
|
|
fmt::Debug::fmt(&self.span.ctxt(), f)
|
2017-03-17 04:04:41 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-02-23 01:29:36 +03:00
|
|
|
/// This implementation is supposed to be used in error messages, so it's expected to be identical
|
|
|
|
/// to printing the original identifier token written in source code (`token_to_string`),
|
|
|
|
/// except that AST identifiers don't keep the rawness flag, so we have to guess it.
|
2017-03-17 04:04:41 +00:00
|
|
|
impl fmt::Display for Ident {
|
2019-02-04 03:42:27 +09:00
|
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
2020-02-23 01:29:36 +03:00
|
|
|
fmt::Display::fmt(&IdentPrinter::new(self.name, self.is_raw_guess(), None), f)
|
2017-03-17 04:04:41 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-12-10 04:48:37 +02:00
|
|
|
/// The most general type to print identifiers.
|
|
|
|
///
|
2020-02-23 01:29:36 +03:00
|
|
|
/// AST pretty-printer is used as a fallback for turning AST structures into token streams for
|
|
|
|
/// proc macros. Additionally, proc macros may stringify their input and expect it survive the
|
|
|
|
/// stringification (especially true for proc macro derives written between Rust 1.15 and 1.30).
|
|
|
|
/// So we need to somehow pretty-print `$crate` in a way preserving at least some of its
|
|
|
|
/// hygiene data, most importantly name of the crate it refers to.
|
|
|
|
/// As a result we print `$crate` as `crate` if it refers to the local crate
|
|
|
|
/// and as `::other_crate_name` if it refers to some other crate.
|
2022-03-30 15:14:15 -04:00
|
|
|
/// Note, that this is only done if the ident token is printed from inside of AST pretty-printing,
|
2020-02-23 01:29:36 +03:00
|
|
|
/// but not otherwise. Pretty-printing is the only way for proc macros to discover token contents,
|
|
|
|
/// so we should not perform this lossy conversion if the top level call to the pretty-printer was
|
|
|
|
/// done for a token stream or a single token.
|
|
|
|
pub struct IdentPrinter {
|
|
|
|
symbol: Symbol,
|
|
|
|
is_raw: bool,
|
|
|
|
/// Span used for retrieving the crate name to which `$crate` refers to,
|
|
|
|
/// if this field is `None` then the `$crate` conversion doesn't happen.
|
|
|
|
convert_dollar_crate: Option<Span>,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl IdentPrinter {
|
|
|
|
/// The most general `IdentPrinter` constructor. Do not use this.
|
|
|
|
pub fn new(symbol: Symbol, is_raw: bool, convert_dollar_crate: Option<Span>) -> IdentPrinter {
|
|
|
|
IdentPrinter { symbol, is_raw, convert_dollar_crate }
|
|
|
|
}
|
|
|
|
|
|
|
|
/// This implementation is supposed to be used when printing identifiers
|
|
|
|
/// as a part of pretty-printing for larger AST pieces.
|
|
|
|
/// Do not use this either.
|
|
|
|
pub fn for_ast_ident(ident: Ident, is_raw: bool) -> IdentPrinter {
|
|
|
|
IdentPrinter::new(ident.name, is_raw, Some(ident.span))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl fmt::Display for IdentPrinter {
|
|
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
|
|
if self.is_raw {
|
|
|
|
f.write_str("r#")?;
|
2020-12-03 17:06:58 -05:00
|
|
|
} else if self.symbol == kw::DollarCrate {
|
|
|
|
if let Some(span) = self.convert_dollar_crate {
|
|
|
|
let converted = span.ctxt().dollar_crate_name();
|
|
|
|
if !converted.is_path_segment_keyword() {
|
|
|
|
f.write_str("::")?;
|
2020-02-23 01:29:36 +03:00
|
|
|
}
|
2020-12-03 17:06:58 -05:00
|
|
|
return fmt::Display::fmt(&converted, f);
|
2020-02-23 01:29:36 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
fmt::Display::fmt(&self.symbol, f)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-03-11 20:05:19 +00:00
|
|
|
/// An newtype around `Ident` that calls [Ident::normalize_to_macro_rules] on
|
|
|
|
/// construction.
|
|
|
|
// FIXME(matthewj, petrochenkov) Use this more often, add a similar
|
|
|
|
// `ModernIdent` struct and use that as well.
|
|
|
|
#[derive(Copy, Clone, Eq, PartialEq, Hash)]
|
|
|
|
pub struct MacroRulesNormalizedIdent(Ident);
|
|
|
|
|
|
|
|
impl MacroRulesNormalizedIdent {
|
2024-06-03 01:01:18 +03:00
|
|
|
#[inline]
|
2020-03-11 20:05:19 +00:00
|
|
|
pub fn new(ident: Ident) -> Self {
|
|
|
|
Self(ident.normalize_to_macro_rules())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl fmt::Debug for MacroRulesNormalizedIdent {
|
|
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
|
|
fmt::Debug::fmt(&self.0, f)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl fmt::Display for MacroRulesNormalizedIdent {
|
|
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
|
|
fmt::Display::fmt(&self.0, f)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-08-31 16:40:20 +01:00
|
|
|
/// An interned string.
|
2019-05-17 10:44:51 +10:00
|
|
|
///
|
2019-08-31 16:40:20 +01:00
|
|
|
/// Internally, a `Symbol` is implemented as an index, and all operations
|
2019-05-09 12:09:57 +10:00
|
|
|
/// (including hashing, equality, and ordering) operate on that index. The use
|
2019-09-26 05:38:33 +00:00
|
|
|
/// of `rustc_index::newtype_index!` means that `Option<Symbol>` only takes up 4 bytes,
|
|
|
|
/// because `rustc_index::newtype_index!` reserves the last 256 values for tagging purposes.
|
2018-12-11 09:06:51 +11:00
|
|
|
///
|
2019-09-26 05:38:33 +00:00
|
|
|
/// Note that `Symbol` cannot directly be a `rustc_index::newtype_index!` because it
|
2019-05-17 10:44:51 +10:00
|
|
|
/// implements `fmt::Debug`, `Encodable`, and `Decodable` in special ways.
|
2016-11-16 08:21:52 +00:00
|
|
|
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
2018-12-11 09:06:51 +11:00
|
|
|
pub struct Symbol(SymbolIndex);
|
|
|
|
|
2019-09-26 05:38:33 +00:00
|
|
|
rustc_index::newtype_index! {
|
2023-11-21 17:35:46 +11:00
|
|
|
#[orderable]
|
2022-12-18 21:47:28 +01:00
|
|
|
struct SymbolIndex {}
|
2018-12-11 09:06:51 +11:00
|
|
|
}
|
2016-11-16 08:21:52 +00:00
|
|
|
|
|
|
|
impl Symbol {
|
2018-12-11 09:06:51 +11:00
|
|
|
const fn new(n: u32) -> Self {
|
2020-03-10 13:44:53 -07:00
|
|
|
Symbol(SymbolIndex::from_u32(n))
|
2018-12-11 09:06:51 +11:00
|
|
|
}
|
|
|
|
|
2022-08-20 15:39:21 +03:00
|
|
|
/// for use in Decoder only
|
|
|
|
pub fn new_from_decoded(n: u32) -> Self {
|
|
|
|
Self::new(n)
|
|
|
|
}
|
|
|
|
|
2016-11-16 08:21:52 +00:00
|
|
|
/// Maps a string to its interned representation.
|
|
|
|
pub fn intern(string: &str) -> Self {
|
2021-09-15 18:44:17 +02:00
|
|
|
with_session_globals(|session_globals| session_globals.symbol_interner.intern(string))
|
2016-11-16 08:21:52 +00:00
|
|
|
}
|
|
|
|
|
2021-12-15 08:32:21 +11:00
|
|
|
/// Access the underlying string. This is a slowish operation because it
|
2019-10-22 06:20:51 +11:00
|
|
|
/// requires locking the symbol interner.
|
2021-12-15 08:32:21 +11:00
|
|
|
///
|
|
|
|
/// Note that the lifetime of the return value is a lie. It's not the same
|
|
|
|
/// as `&self`, but actually tied to the lifetime of the underlying
|
|
|
|
/// interner. Interners are long-lived, and there are very few of them, and
|
|
|
|
/// this function is typically used for short-lived things, so in practice
|
|
|
|
/// it works out ok.
|
|
|
|
pub fn as_str(&self) -> &str {
|
|
|
|
with_session_globals(|session_globals| unsafe {
|
|
|
|
std::mem::transmute::<&str, &str>(session_globals.symbol_interner.get(*self))
|
2016-11-19 05:55:28 +00:00
|
|
|
})
|
2016-11-16 08:21:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn as_u32(self) -> u32 {
|
2018-12-11 09:06:51 +11:00
|
|
|
self.0.as_u32()
|
2016-11-16 08:21:52 +00:00
|
|
|
}
|
2020-02-26 21:24:22 +03:00
|
|
|
|
2020-12-14 19:30:36 -05:00
|
|
|
pub fn is_empty(self) -> bool {
|
2020-12-29 20:28:08 -05:00
|
|
|
self == kw::Empty
|
2020-12-14 19:30:36 -05:00
|
|
|
}
|
|
|
|
|
2020-02-26 21:24:22 +03:00
|
|
|
/// This method is supposed to be used in error messages, so it's expected to be
|
|
|
|
/// identical to printing the original identifier token written in source code
|
|
|
|
/// (`token_to_string`, `Ident::to_string`), except that symbols don't keep the rawness flag
|
|
|
|
/// or edition, so we have to guess the rawness using the global edition.
|
|
|
|
pub fn to_ident_string(self) -> String {
|
|
|
|
Ident::with_dummy_span(self).to_string()
|
|
|
|
}
|
2016-11-16 08:21:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl fmt::Debug for Symbol {
|
2019-02-04 03:42:27 +09:00
|
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
2021-12-15 14:39:23 +11:00
|
|
|
fmt::Debug::fmt(self.as_str(), f)
|
2016-11-16 08:21:52 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl fmt::Display for Symbol {
|
2019-02-04 03:42:27 +09:00
|
|
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
2021-12-15 14:39:23 +11:00
|
|
|
fmt::Display::fmt(self.as_str(), f)
|
2016-11-16 08:21:52 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-10-27 16:14:48 -05:00
|
|
|
// takes advantage of `str::to_string` specialization
|
|
|
|
impl ToString for Symbol {
|
|
|
|
fn to_string(&self) -> String {
|
|
|
|
self.as_str().to_string()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-11-09 21:17:21 +01:00
|
|
|
impl<CTX> HashStable<CTX> for Symbol {
|
|
|
|
#[inline]
|
|
|
|
fn hash_stable(&self, hcx: &mut CTX, hasher: &mut StableHasher) {
|
|
|
|
self.as_str().hash_stable(hcx, hasher);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl<CTX> ToStableHashKey<CTX> for Symbol {
|
2021-12-15 08:32:21 +11:00
|
|
|
type KeyType = String;
|
2019-11-09 21:17:21 +01:00
|
|
|
#[inline]
|
2021-12-15 08:32:21 +11:00
|
|
|
fn to_stable_hash_key(&self, _: &CTX) -> String {
|
|
|
|
self.as_str().to_string()
|
2019-11-09 21:17:21 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-12-21 10:27:34 +01:00
|
|
|
impl StableCompare for Symbol {
|
|
|
|
const CAN_USE_UNSTABLE_SORT: bool = true;
|
|
|
|
|
|
|
|
fn stable_cmp(&self, other: &Self) -> std::cmp::Ordering {
|
|
|
|
self.as_str().cmp(other.as_str())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-09-15 18:33:41 +02:00
|
|
|
pub(crate) struct Interner(Lock<InternerInner>);
|
|
|
|
|
2018-11-27 02:59:49 +00:00
|
|
|
// The `&'static str`s in this type actually point into the arena.
|
2020-08-09 12:41:09 -07:00
|
|
|
//
|
2021-12-03 07:12:31 +11:00
|
|
|
// This type is private to prevent accidentally constructing more than one
|
2022-03-30 15:14:15 -04:00
|
|
|
// `Interner` on the same thread, which makes it easy to mix up `Symbol`s
|
2021-12-03 07:12:31 +11:00
|
|
|
// between `Interner`s.
|
2021-09-15 18:33:41 +02:00
|
|
|
struct InternerInner {
|
2018-05-10 16:27:46 +02:00
|
|
|
arena: DroplessArena,
|
2023-11-02 17:02:36 +11:00
|
|
|
strings: FxIndexSet<&'static str>,
|
2016-11-16 08:21:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl Interner {
|
2019-05-23 17:47:53 +10:00
|
|
|
fn prefill(init: &[&'static str]) -> Self {
|
2021-09-15 18:33:41 +02:00
|
|
|
Interner(Lock::new(InternerInner {
|
2023-11-02 17:02:36 +11:00
|
|
|
arena: Default::default(),
|
|
|
|
strings: init.iter().copied().collect(),
|
2021-09-15 18:33:41 +02:00
|
|
|
}))
|
2016-11-16 08:21:52 +00:00
|
|
|
}
|
|
|
|
|
2020-02-18 16:00:58 +11:00
|
|
|
#[inline]
|
2021-09-15 18:44:31 +02:00
|
|
|
fn intern(&self, string: &str) -> Symbol {
|
2021-09-15 18:33:41 +02:00
|
|
|
let mut inner = self.0.lock();
|
2023-11-02 17:02:36 +11:00
|
|
|
if let Some(idx) = inner.strings.get_index_of(string) {
|
|
|
|
return Symbol::new(idx as u32);
|
2016-11-16 08:21:52 +00:00
|
|
|
}
|
|
|
|
|
2023-12-05 17:33:16 -08:00
|
|
|
let string: &str = inner.arena.alloc_str(string);
|
2021-12-03 07:12:31 +11:00
|
|
|
|
|
|
|
// SAFETY: we can extend the arena allocation to `'static` because we
|
|
|
|
// only access these while the arena is still alive.
|
2018-05-10 16:27:46 +02:00
|
|
|
let string: &'static str = unsafe { &*(string as *const str) };
|
2021-12-03 07:12:31 +11:00
|
|
|
|
|
|
|
// This second hash table lookup can be avoided by using `RawEntryMut`,
|
|
|
|
// but this code path isn't hot enough for it to be worth it. See
|
|
|
|
// #91445 for details.
|
2023-11-02 17:02:36 +11:00
|
|
|
let (idx, is_new) = inner.strings.insert_full(string);
|
|
|
|
debug_assert!(is_new); // due to the get_index_of check above
|
|
|
|
|
|
|
|
Symbol::new(idx as u32)
|
2016-11-16 08:21:52 +00:00
|
|
|
}
|
2019-10-22 06:20:51 +11:00
|
|
|
|
2023-04-15 21:48:39 +00:00
|
|
|
/// Get the symbol as a string.
|
|
|
|
///
|
|
|
|
/// [`Symbol::as_str()`] should be used in preference to this function.
|
2021-09-15 18:44:31 +02:00
|
|
|
fn get(&self, symbol: Symbol) -> &str {
|
2023-11-02 17:02:36 +11:00
|
|
|
self.0.lock().strings.get_index(symbol.0.as_usize()).unwrap()
|
2016-11-16 08:21:52 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-05-11 17:41:37 +03:00
|
|
|
// This module has a very short name because it's used a lot.
|
2020-04-12 09:45:08 +02:00
|
|
|
/// This module contains all the defined keyword `Symbol`s.
|
|
|
|
///
|
|
|
|
/// Given that `kw` is imported, use them like `kw::keyword_name`.
|
|
|
|
/// For example `kw::Loop` or `kw::Break`.
|
2019-05-11 17:41:37 +03:00
|
|
|
pub mod kw {
|
2020-12-14 11:34:55 -08:00
|
|
|
pub use super::kw_generated::*;
|
2019-04-09 09:36:17 +02:00
|
|
|
}
|
|
|
|
|
2019-05-10 09:57:08 +10:00
|
|
|
// This module has a very short name because it's used a lot.
|
2020-04-12 09:45:08 +02:00
|
|
|
/// This module contains all the defined non-keyword `Symbol`s.
|
|
|
|
///
|
|
|
|
/// Given that `sym` is imported, use them like `sym::symbol_name`.
|
|
|
|
/// For example `sym::rustfmt` or `sym::u8`.
|
2019-05-10 09:57:08 +10:00
|
|
|
pub mod sym {
|
2020-02-15 15:46:25 +03:00
|
|
|
// Used from a macro in `librustc_feature/accepted.rs`
|
|
|
|
pub use super::kw::MacroRules as macro_rules;
|
2020-12-30 19:37:39 +01:00
|
|
|
#[doc(inline)]
|
2020-12-14 11:34:55 -08:00
|
|
|
pub use super::sym_generated::*;
|
2019-04-09 09:36:17 +02:00
|
|
|
use super::Symbol;
|
2019-05-22 19:25:39 +10:00
|
|
|
|
2020-12-14 11:34:55 -08:00
|
|
|
/// Get the symbol for an integer.
|
|
|
|
///
|
|
|
|
/// The first few non-negative integers each have a static symbol and therefore
|
|
|
|
/// are fast.
|
2024-03-06 19:39:36 +01:00
|
|
|
pub fn integer<N: TryInto<usize> + Copy + itoa::Integer>(n: N) -> Symbol {
|
2019-05-22 19:25:39 +10:00
|
|
|
if let Result::Ok(idx) = n.try_into() {
|
2020-12-14 11:34:55 -08:00
|
|
|
if idx < 10 {
|
|
|
|
return Symbol::new(super::SYMBOL_DIGITS_BASE + idx as u32);
|
2019-05-22 19:25:39 +10:00
|
|
|
}
|
|
|
|
}
|
2024-03-06 19:39:36 +01:00
|
|
|
let mut buffer = itoa::Buffer::new();
|
|
|
|
let printed = buffer.format(n);
|
|
|
|
Symbol::intern(printed)
|
2019-05-22 19:25:39 +10:00
|
|
|
}
|
2019-04-09 09:36:17 +02:00
|
|
|
}
|
|
|
|
|
2018-05-13 16:14:43 +03:00
|
|
|
impl Symbol {
|
2020-12-21 21:59:57 +03:00
|
|
|
fn is_special(self) -> bool {
|
|
|
|
self <= kw::Underscore
|
2018-12-02 03:05:19 +03:00
|
|
|
}
|
|
|
|
|
2020-12-21 21:59:57 +03:00
|
|
|
fn is_used_keyword_always(self) -> bool {
|
|
|
|
self >= kw::As && self <= kw::While
|
|
|
|
}
|
|
|
|
|
|
|
|
fn is_used_keyword_conditional(self, edition: impl FnOnce() -> Edition) -> bool {
|
|
|
|
(self >= kw::Async && self <= kw::Dyn) && edition() >= Edition::Edition2018
|
|
|
|
}
|
|
|
|
|
|
|
|
fn is_unused_keyword_always(self) -> bool {
|
|
|
|
self >= kw::Abstract && self <= kw::Yield
|
|
|
|
}
|
|
|
|
|
2023-10-05 11:30:55 +00:00
|
|
|
fn is_unused_keyword_conditional(self, edition: impl Copy + FnOnce() -> Edition) -> bool {
|
|
|
|
self == kw::Try && edition().at_least_rust_2018()
|
|
|
|
|| self == kw::Gen && edition().at_least_rust_2024()
|
2020-12-21 21:59:57 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn is_reserved(self, edition: impl Copy + FnOnce() -> Edition) -> bool {
|
|
|
|
self.is_special()
|
|
|
|
|| self.is_used_keyword_always()
|
|
|
|
|| self.is_unused_keyword_always()
|
|
|
|
|| self.is_used_keyword_conditional(edition)
|
|
|
|
|| self.is_unused_keyword_conditional(edition)
|
2018-05-13 16:14:43 +03:00
|
|
|
}
|
2019-05-13 22:46:20 +03:00
|
|
|
|
2019-06-05 11:56:06 +03:00
|
|
|
/// A keyword or reserved identifier that can be used as a path segment.
|
|
|
|
pub fn is_path_segment_keyword(self) -> bool {
|
|
|
|
self == kw::Super
|
|
|
|
|| self == kw::SelfLower
|
|
|
|
|| self == kw::SelfUpper
|
|
|
|
|| self == kw::Crate
|
|
|
|
|| self == kw::PathRoot
|
|
|
|
|| self == kw::DollarCrate
|
|
|
|
}
|
|
|
|
|
2019-08-27 10:21:41 +02:00
|
|
|
/// Returns `true` if the symbol is `true` or `false`.
|
|
|
|
pub fn is_bool_lit(self) -> bool {
|
|
|
|
self == kw::True || self == kw::False
|
|
|
|
}
|
|
|
|
|
2020-12-17 12:02:34 -08:00
|
|
|
/// Returns `true` if this symbol can be a raw identifier.
|
2019-06-05 11:56:06 +03:00
|
|
|
pub fn can_be_raw(self) -> bool {
|
2020-12-29 20:28:08 -05:00
|
|
|
self != kw::Empty && self != kw::Underscore && !self.is_path_segment_keyword()
|
2019-06-05 11:56:06 +03:00
|
|
|
}
|
2022-08-20 15:13:41 +03:00
|
|
|
|
|
|
|
/// Is this symbol was interned in compiler's `symbols!` macro
|
|
|
|
pub fn is_preinterned(self) -> bool {
|
|
|
|
self.as_u32() < PREINTERNED_SYMBOLS_COUNT
|
|
|
|
}
|
2018-05-13 16:14:43 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
impl Ident {
|
2022-11-27 11:15:06 +00:00
|
|
|
/// Returns `true` for reserved identifiers used internally for elided lifetimes,
|
|
|
|
/// unnamed method parameters, crate root module, error recovery etc.
|
2018-05-13 16:14:43 +03:00
|
|
|
pub fn is_special(self) -> bool {
|
2020-12-21 21:59:57 +03:00
|
|
|
self.name.is_special()
|
2018-05-13 16:14:43 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
/// Returns `true` if the token is a keyword used in the language.
|
|
|
|
pub fn is_used_keyword(self) -> bool {
|
2018-12-02 03:05:19 +03:00
|
|
|
// Note: `span.edition()` is relatively expensive, don't call it unless necessary.
|
2020-12-21 21:59:57 +03:00
|
|
|
self.name.is_used_keyword_always()
|
|
|
|
|| self.name.is_used_keyword_conditional(|| self.span.edition())
|
2018-05-13 16:14:43 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
/// Returns `true` if the token is a keyword reserved for possible future use.
|
|
|
|
pub fn is_unused_keyword(self) -> bool {
|
|
|
|
// Note: `span.edition()` is relatively expensive, don't call it unless necessary.
|
2020-12-21 21:59:57 +03:00
|
|
|
self.name.is_unused_keyword_always()
|
|
|
|
|| self.name.is_unused_keyword_conditional(|| self.span.edition())
|
2018-05-13 16:14:43 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
/// Returns `true` if the token is either a special identifier or a keyword.
|
|
|
|
pub fn is_reserved(self) -> bool {
|
2020-12-21 21:59:57 +03:00
|
|
|
// Note: `span.edition()` is relatively expensive, don't call it unless necessary.
|
|
|
|
self.name.is_reserved(|| self.span.edition())
|
2018-05-13 16:14:43 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
/// A keyword or reserved identifier that can be used as a path segment.
|
|
|
|
pub fn is_path_segment_keyword(self) -> bool {
|
2019-06-05 11:56:06 +03:00
|
|
|
self.name.is_path_segment_keyword()
|
2019-02-27 22:06:26 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
/// We see this identifier in a normal identifier position, like variable name or a type.
|
|
|
|
/// How was it written originally? Did it use the raw form? Let's try to guess.
|
|
|
|
pub fn is_raw_guess(self) -> bool {
|
2019-06-05 11:56:06 +03:00
|
|
|
self.name.can_be_raw() && self.is_reserved()
|
2018-05-13 16:14:43 +03:00
|
|
|
}
|
|
|
|
}
|
2024-09-02 12:43:35 -04:00
|
|
|
|
|
|
|
/// An iterator over all the keywords in Rust.
|
|
|
|
#[derive(Copy, Clone)]
|
|
|
|
pub struct AllKeywords {
|
|
|
|
curr_idx: u32,
|
|
|
|
end_idx: u32,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl AllKeywords {
|
|
|
|
/// Initialize a new iterator over all the keywords.
|
|
|
|
///
|
|
|
|
/// *Note:* Please update this if a new keyword is added beyond the current
|
|
|
|
/// range.
|
|
|
|
pub fn new() -> Self {
|
|
|
|
AllKeywords { curr_idx: kw::Empty.as_u32(), end_idx: kw::Yeet.as_u32() }
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Collect all the keywords in a given edition into a vector.
|
|
|
|
pub fn collect_used(&self, edition: impl Copy + FnOnce() -> Edition) -> Vec<Symbol> {
|
|
|
|
self.filter(|&keyword| {
|
|
|
|
keyword.is_used_keyword_always() || keyword.is_used_keyword_conditional(edition)
|
|
|
|
})
|
|
|
|
.collect()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Iterator for AllKeywords {
|
|
|
|
type Item = Symbol;
|
|
|
|
|
|
|
|
fn next(&mut self) -> Option<Self::Item> {
|
|
|
|
if self.curr_idx <= self.end_idx {
|
|
|
|
let keyword = Symbol::new(self.curr_idx);
|
|
|
|
self.curr_idx += 1;
|
|
|
|
Some(keyword)
|
|
|
|
} else {
|
|
|
|
None
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|