Give built-in macros stable addresses in the standard library
This commit is contained in:
parent
534b42394d
commit
cbcc7dd182
16 changed files with 365 additions and 165 deletions
|
@ -133,6 +133,14 @@ pub trait Clone : Sized {
|
|||
}
|
||||
}
|
||||
|
||||
/// Derive macro generating an impl of the trait `Clone`.
|
||||
#[cfg(not(bootstrap))]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
#[stable(feature = "builtin_macro_prelude", since = "1.38.0")]
|
||||
#[allow_internal_unstable(core_intrinsics, derive_clone_copy)]
|
||||
pub macro Clone($item:item) { /* compiler built-in */ }
|
||||
|
||||
// FIXME(aburka): these structs are used solely by #[derive] to
|
||||
// assert that every component of a type implements Clone or Copy.
|
||||
//
|
||||
|
|
|
@ -200,6 +200,14 @@ pub trait PartialEq<Rhs: ?Sized = Self> {
|
|||
fn ne(&self, other: &Rhs) -> bool { !self.eq(other) }
|
||||
}
|
||||
|
||||
/// Derive macro generating an impl of the trait `PartialEq`.
|
||||
#[cfg(not(bootstrap))]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
#[stable(feature = "builtin_macro_prelude", since = "1.38.0")]
|
||||
#[allow_internal_unstable(core_intrinsics)]
|
||||
pub macro PartialEq($item:item) { /* compiler built-in */ }
|
||||
|
||||
/// Trait for equality comparisons which are [equivalence relations](
|
||||
/// https://en.wikipedia.org/wiki/Equivalence_relation).
|
||||
///
|
||||
|
@ -256,6 +264,14 @@ pub trait Eq: PartialEq<Self> {
|
|||
fn assert_receiver_is_total_eq(&self) {}
|
||||
}
|
||||
|
||||
/// Derive macro generating an impl of the trait `Eq`.
|
||||
#[cfg(not(bootstrap))]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
#[stable(feature = "builtin_macro_prelude", since = "1.38.0")]
|
||||
#[allow_internal_unstable(core_intrinsics, derive_eq)]
|
||||
pub macro Eq($item:item) { /* compiler built-in */ }
|
||||
|
||||
// FIXME: this struct is used solely by #[derive] to
|
||||
// assert that every component of a type implements Eq.
|
||||
//
|
||||
|
@ -600,6 +616,14 @@ pub trait Ord: Eq + PartialOrd<Self> {
|
|||
}
|
||||
}
|
||||
|
||||
/// Derive macro generating an impl of the trait `Ord`.
|
||||
#[cfg(not(bootstrap))]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
#[stable(feature = "builtin_macro_prelude", since = "1.38.0")]
|
||||
#[allow_internal_unstable(core_intrinsics)]
|
||||
pub macro Ord($item:item) { /* compiler built-in */ }
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl Eq for Ordering {}
|
||||
|
||||
|
@ -842,6 +866,14 @@ pub trait PartialOrd<Rhs: ?Sized = Self>: PartialEq<Rhs> {
|
|||
}
|
||||
}
|
||||
|
||||
/// Derive macro generating an impl of the trait `PartialOrd`.
|
||||
#[cfg(not(bootstrap))]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
#[stable(feature = "builtin_macro_prelude", since = "1.38.0")]
|
||||
#[allow_internal_unstable(core_intrinsics)]
|
||||
pub macro PartialOrd($item:item) { /* compiler built-in */ }
|
||||
|
||||
/// Compares and returns the minimum of two values.
|
||||
///
|
||||
/// Returns the first argument if the comparison determines them to be equal.
|
||||
|
|
|
@ -115,6 +115,14 @@ pub trait Default: Sized {
|
|||
fn default() -> Self;
|
||||
}
|
||||
|
||||
/// Derive macro generating an impl of the trait `Default`.
|
||||
#[cfg(not(bootstrap))]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
#[stable(feature = "builtin_macro_prelude", since = "1.38.0")]
|
||||
#[allow_internal_unstable(core_intrinsics)]
|
||||
pub macro Default($item:item) { /* compiler built-in */ }
|
||||
|
||||
macro_rules! default_impl {
|
||||
($t:ty, $v:expr, $doc:tt) => {
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
|
|
|
@ -545,6 +545,21 @@ pub trait Debug {
|
|||
fn fmt(&self, f: &mut Formatter<'_>) -> Result;
|
||||
}
|
||||
|
||||
// Separate module to reexport the macro `Debug` from prelude without the trait `Debug`.
|
||||
#[cfg(not(bootstrap))]
|
||||
pub(crate) mod macros {
|
||||
/// Derive macro generating an impl of the trait `Debug`.
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
#[stable(feature = "builtin_macro_prelude", since = "1.38.0")]
|
||||
#[allow_internal_unstable(core_intrinsics)]
|
||||
pub macro Debug($item:item) { /* compiler built-in */ }
|
||||
}
|
||||
#[cfg(not(bootstrap))]
|
||||
#[stable(feature = "builtin_macro_prelude", since = "1.38.0")]
|
||||
#[doc(inline)]
|
||||
pub use macros::Debug;
|
||||
|
||||
/// Format trait for an empty format, `{}`.
|
||||
///
|
||||
/// `Display` is similar to [`Debug`][debug], but `Display` is for user-facing
|
||||
|
|
|
@ -198,6 +198,21 @@ pub trait Hash {
|
|||
}
|
||||
}
|
||||
|
||||
// Separate module to reexport the macro `Hash` from prelude without the trait `Hash`.
|
||||
#[cfg(not(bootstrap))]
|
||||
pub(crate) mod macros {
|
||||
/// Derive macro generating an impl of the trait `Hash`.
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
#[stable(feature = "builtin_macro_prelude", since = "1.38.0")]
|
||||
#[allow_internal_unstable(core_intrinsics)]
|
||||
pub macro Hash($item:item) { /* compiler built-in */ }
|
||||
}
|
||||
#[cfg(not(bootstrap))]
|
||||
#[stable(feature = "builtin_macro_prelude", since = "1.38.0")]
|
||||
#[doc(inline)]
|
||||
pub use macros::Hash;
|
||||
|
||||
/// A trait for hashing an arbitrary stream of bytes.
|
||||
///
|
||||
/// Instances of `Hasher` usually represent state that is changed while hashing
|
||||
|
|
|
@ -714,9 +714,9 @@ pub(crate) mod builtin {
|
|||
/// [`panic!`]: ../std/macro.panic.html
|
||||
#[stable(feature = "compile_error_macro", since = "1.20.0")]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
pub macro compile_error {
|
||||
($msg:expr) => ({ /* compiler built-in */ }),
|
||||
#[macro_export]
|
||||
macro_rules! compile_error {
|
||||
($msg:expr) => ({ /* compiler built-in */ });
|
||||
($msg:expr,) => ({ /* compiler built-in */ })
|
||||
}
|
||||
|
||||
|
@ -768,8 +768,10 @@ pub(crate) mod builtin {
|
|||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[allow_internal_unstable(fmt_internals)]
|
||||
#[rustc_builtin_macro]
|
||||
pub macro format_args {
|
||||
($fmt:expr) => ({ /* compiler built-in */ }),
|
||||
#[macro_export]
|
||||
#[rustc_macro_transparency = "opaque"]
|
||||
macro_rules! format_args {
|
||||
($fmt:expr) => ({ /* compiler built-in */ });
|
||||
($fmt:expr, $($args:tt)*) => ({ /* compiler built-in */ })
|
||||
}
|
||||
|
||||
|
@ -779,8 +781,10 @@ pub(crate) mod builtin {
|
|||
language use and is subject to change")]
|
||||
#[allow_internal_unstable(fmt_internals)]
|
||||
#[rustc_builtin_macro]
|
||||
pub macro format_args_nl {
|
||||
($fmt:expr) => ({ /* compiler built-in */ }),
|
||||
#[macro_export]
|
||||
#[rustc_macro_transparency = "opaque"]
|
||||
macro_rules! format_args_nl {
|
||||
($fmt:expr) => ({ /* compiler built-in */ });
|
||||
($fmt:expr, $($args:tt)*) => ({ /* compiler built-in */ })
|
||||
}
|
||||
|
||||
|
@ -817,9 +821,9 @@ pub(crate) mod builtin {
|
|||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
pub macro env {
|
||||
($name:expr) => ({ /* compiler built-in */ }),
|
||||
#[macro_export]
|
||||
macro_rules! env {
|
||||
($name:expr) => ({ /* compiler built-in */ });
|
||||
($name:expr,) => ({ /* compiler built-in */ })
|
||||
}
|
||||
|
||||
|
@ -844,9 +848,9 @@ pub(crate) mod builtin {
|
|||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
pub macro option_env {
|
||||
($name:expr) => ({ /* compiler built-in */ }),
|
||||
#[macro_export]
|
||||
macro_rules! option_env {
|
||||
($name:expr) => ({ /* compiler built-in */ });
|
||||
($name:expr,) => ({ /* compiler built-in */ })
|
||||
}
|
||||
|
||||
|
@ -877,9 +881,9 @@ pub(crate) mod builtin {
|
|||
#[unstable(feature = "concat_idents", issue = "29599",
|
||||
reason = "`concat_idents` is not stable enough for use and is subject to change")]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
pub macro concat_idents {
|
||||
($($e:ident),+) => ({ /* compiler built-in */ }),
|
||||
#[macro_export]
|
||||
macro_rules! concat_idents {
|
||||
($($e:ident),+) => ({ /* compiler built-in */ });
|
||||
($($e:ident,)+) => ({ /* compiler built-in */ })
|
||||
}
|
||||
|
||||
|
@ -900,9 +904,9 @@ pub(crate) mod builtin {
|
|||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
pub macro concat {
|
||||
($($e:expr),*) => ({ /* compiler built-in */ }),
|
||||
#[macro_export]
|
||||
macro_rules! concat {
|
||||
($($e:expr),*) => ({ /* compiler built-in */ });
|
||||
($($e:expr,)*) => ({ /* compiler built-in */ })
|
||||
}
|
||||
|
||||
|
@ -929,8 +933,8 @@ pub(crate) mod builtin {
|
|||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
pub macro line() { /* compiler built-in */ }
|
||||
#[macro_export]
|
||||
macro_rules! line { () => { /* compiler built-in */ } }
|
||||
|
||||
/// Expands to the column number at which it was invoked.
|
||||
///
|
||||
|
@ -955,15 +959,15 @@ pub(crate) mod builtin {
|
|||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
pub macro column() { /* compiler built-in */ }
|
||||
#[macro_export]
|
||||
macro_rules! column { () => { /* compiler built-in */ } }
|
||||
|
||||
/// Same as `column`, but less likely to be shadowed.
|
||||
#[unstable(feature = "__rust_unstable_column", issue = "0",
|
||||
reason = "internal implementation detail of the `panic` macro")]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
pub macro __rust_unstable_column() { /* compiler built-in */ }
|
||||
#[macro_export]
|
||||
macro_rules! __rust_unstable_column { () => { /* compiler built-in */ } }
|
||||
|
||||
/// Expands to the file name in which it was invoked.
|
||||
///
|
||||
|
@ -987,8 +991,8 @@ pub(crate) mod builtin {
|
|||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
pub macro file() { /* compiler built-in */ }
|
||||
#[macro_export]
|
||||
macro_rules! file { () => { /* compiler built-in */ } }
|
||||
|
||||
/// Stringifies its arguments.
|
||||
///
|
||||
|
@ -1007,8 +1011,8 @@ pub(crate) mod builtin {
|
|||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
pub macro stringify($($t:tt)*) { /* compiler built-in */ }
|
||||
#[macro_export]
|
||||
macro_rules! stringify { ($($t:tt)*) => { /* compiler built-in */ } }
|
||||
|
||||
/// Includes a utf8-encoded file as a string.
|
||||
///
|
||||
|
@ -1042,9 +1046,9 @@ pub(crate) mod builtin {
|
|||
/// Compiling 'main.rs' and running the resulting binary will print "adiós".
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
pub macro include_str {
|
||||
($file:expr) => ({ /* compiler built-in */ }),
|
||||
#[macro_export]
|
||||
macro_rules! include_str {
|
||||
($file:expr) => ({ /* compiler built-in */ });
|
||||
($file:expr,) => ({ /* compiler built-in */ })
|
||||
}
|
||||
|
||||
|
@ -1080,9 +1084,9 @@ pub(crate) mod builtin {
|
|||
/// Compiling 'main.rs' and running the resulting binary will print "adiós".
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
pub macro include_bytes {
|
||||
($file:expr) => ({ /* compiler built-in */ }),
|
||||
#[macro_export]
|
||||
macro_rules! include_bytes {
|
||||
($file:expr) => ({ /* compiler built-in */ });
|
||||
($file:expr,) => ({ /* compiler built-in */ })
|
||||
}
|
||||
|
||||
|
@ -1105,8 +1109,8 @@ pub(crate) mod builtin {
|
|||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
pub macro module_path() { /* compiler built-in */ }
|
||||
#[macro_export]
|
||||
macro_rules! module_path { () => { /* compiler built-in */ } }
|
||||
|
||||
/// Evaluates boolean combinations of configuration flags at compile-time.
|
||||
///
|
||||
|
@ -1130,8 +1134,8 @@ pub(crate) mod builtin {
|
|||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
pub macro cfg($($cfg:tt)*) { /* compiler built-in */ }
|
||||
#[macro_export]
|
||||
macro_rules! cfg { ($($cfg:tt)*) => { /* compiler built-in */ } }
|
||||
|
||||
/// Parses a file as an expression or an item according to the context.
|
||||
///
|
||||
|
@ -1174,9 +1178,9 @@ pub(crate) mod builtin {
|
|||
/// "🙈🙊🙉🙈🙊🙉".
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
pub macro include {
|
||||
($file:expr) => ({ /* compiler built-in */ }),
|
||||
#[macro_export]
|
||||
macro_rules! include {
|
||||
($file:expr) => ({ /* compiler built-in */ });
|
||||
($file:expr,) => ({ /* compiler built-in */ })
|
||||
}
|
||||
|
||||
|
@ -1227,10 +1231,10 @@ pub(crate) mod builtin {
|
|||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
pub macro assert {
|
||||
($cond:expr) => ({ /* compiler built-in */ }),
|
||||
($cond:expr,) => ({ /* compiler built-in */ }),
|
||||
#[macro_export]
|
||||
macro_rules! assert {
|
||||
($cond:expr) => ({ /* compiler built-in */ });
|
||||
($cond:expr,) => ({ /* compiler built-in */ });
|
||||
($cond:expr, $($arg:tt)+) => ({ /* compiler built-in */ })
|
||||
}
|
||||
|
||||
|
@ -1238,34 +1242,34 @@ pub(crate) mod builtin {
|
|||
#[unstable(feature = "asm", issue = "29722",
|
||||
reason = "inline assembly is not stable enough for use and is subject to change")]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
pub macro asm("assembly template"
|
||||
#[macro_export]
|
||||
macro_rules! asm { ("assembly template"
|
||||
: $("output"(operand),)*
|
||||
: $("input"(operand),)*
|
||||
: $("clobbers",)*
|
||||
: $("options",)*) { /* compiler built-in */ }
|
||||
: $("options",)*) => { /* compiler built-in */ } }
|
||||
|
||||
/// Module-level inline assembly.
|
||||
#[unstable(feature = "global_asm", issue = "35119",
|
||||
reason = "`global_asm!` is not stable enough for use and is subject to change")]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
pub macro global_asm("assembly") { /* compiler built-in */ }
|
||||
#[macro_export]
|
||||
macro_rules! global_asm { ("assembly") => { /* compiler built-in */ } }
|
||||
|
||||
/// Prints passed tokens into the standard output.
|
||||
#[unstable(feature = "log_syntax", issue = "29598",
|
||||
reason = "`log_syntax!` is not stable enough for use and is subject to change")]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
pub macro log_syntax($($arg:tt)*) { /* compiler built-in */ }
|
||||
#[macro_export]
|
||||
macro_rules! log_syntax { ($($arg:tt)*) => { /* compiler built-in */ } }
|
||||
|
||||
/// Enables or disables tracing functionality used for debugging other macros.
|
||||
#[unstable(feature = "trace_macros", issue = "29598",
|
||||
reason = "`trace_macros` is not stable enough for use and is subject to change")]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
pub macro trace_macros {
|
||||
(true) => ({ /* compiler built-in */ }),
|
||||
#[macro_export]
|
||||
macro_rules! trace_macros {
|
||||
(true) => ({ /* compiler built-in */ });
|
||||
(false) => ({ /* compiler built-in */ })
|
||||
}
|
||||
|
||||
|
@ -1299,69 +1303,6 @@ pub(crate) mod builtin {
|
|||
#[rustc_macro_transparency = "semitransparent"]
|
||||
pub macro global_allocator($item:item) { /* compiler built-in */ }
|
||||
|
||||
/// Derive macro generating an impl of the trait `Clone`.
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[allow_internal_unstable(core_intrinsics, derive_clone_copy)]
|
||||
pub macro Clone($item:item) { /* compiler built-in */ }
|
||||
|
||||
/// Derive macro generating an impl of the trait `Copy`.
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[allow_internal_unstable(core_intrinsics, derive_clone_copy)]
|
||||
pub macro Copy($item:item) { /* compiler built-in */ }
|
||||
|
||||
/// Derive macro generating an impl of the trait `Debug`.
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[allow_internal_unstable(core_intrinsics)]
|
||||
pub macro Debug($item:item) { /* compiler built-in */ }
|
||||
|
||||
/// Derive macro generating an impl of the trait `Default`.
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[allow_internal_unstable(core_intrinsics)]
|
||||
pub macro Default($item:item) { /* compiler built-in */ }
|
||||
|
||||
/// Derive macro generating an impl of the trait `Eq`.
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[allow_internal_unstable(core_intrinsics, derive_eq)]
|
||||
pub macro Eq($item:item) { /* compiler built-in */ }
|
||||
|
||||
/// Derive macro generating an impl of the trait `Hash`.
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[allow_internal_unstable(core_intrinsics)]
|
||||
pub macro Hash($item:item) { /* compiler built-in */ }
|
||||
|
||||
/// Derive macro generating an impl of the trait `Ord`.
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[allow_internal_unstable(core_intrinsics)]
|
||||
pub macro Ord($item:item) { /* compiler built-in */ }
|
||||
|
||||
/// Derive macro generating an impl of the trait `PartialEq`.
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[allow_internal_unstable(core_intrinsics)]
|
||||
pub macro PartialEq($item:item) { /* compiler built-in */ }
|
||||
|
||||
/// Derive macro generating an impl of the trait `PartialOrd`.
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[allow_internal_unstable(core_intrinsics)]
|
||||
pub macro PartialOrd($item:item) { /* compiler built-in */ }
|
||||
|
||||
/// Unstable implementation detail of the `rustc` compiler, do not use.
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
|
|
|
@ -288,6 +288,14 @@ pub trait Copy : Clone {
|
|||
// Empty.
|
||||
}
|
||||
|
||||
/// Derive macro generating an impl of the trait `Copy`.
|
||||
#[cfg(not(bootstrap))]
|
||||
#[rustc_builtin_macro]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
#[stable(feature = "builtin_macro_prelude", since = "1.38.0")]
|
||||
#[allow_internal_unstable(core_intrinsics, derive_clone_copy)]
|
||||
pub macro Copy($item:item) { /* compiler built-in */ }
|
||||
|
||||
/// Types for which it is safe to share references between threads.
|
||||
///
|
||||
/// This trait is automatically implemented when the compiler determines
|
||||
|
|
|
@ -48,24 +48,20 @@ pub use crate::result::Result::{self, Ok, Err};
|
|||
// Re-exported built-in macros
|
||||
#[cfg(not(bootstrap))]
|
||||
#[stable(feature = "builtin_macro_prelude", since = "1.38.0")]
|
||||
#[allow(deprecated)]
|
||||
#[doc(no_inline)]
|
||||
pub use crate::macros::builtin::{
|
||||
Clone,
|
||||
Copy,
|
||||
Debug,
|
||||
Default,
|
||||
Eq,
|
||||
Hash,
|
||||
Ord,
|
||||
PartialEq,
|
||||
PartialOrd,
|
||||
RustcDecodable,
|
||||
RustcEncodable,
|
||||
pub use crate::fmt::macros::Debug;
|
||||
#[cfg(not(bootstrap))]
|
||||
#[stable(feature = "builtin_macro_prelude", since = "1.38.0")]
|
||||
#[doc(no_inline)]
|
||||
pub use crate::hash::macros::Hash;
|
||||
|
||||
#[cfg(not(bootstrap))]
|
||||
#[stable(feature = "builtin_macro_prelude", since = "1.38.0")]
|
||||
#[doc(no_inline)]
|
||||
pub use crate::{
|
||||
__rust_unstable_column,
|
||||
asm,
|
||||
assert,
|
||||
bench,
|
||||
cfg,
|
||||
column,
|
||||
compile_error,
|
||||
|
@ -75,7 +71,6 @@ pub use crate::macros::builtin::{
|
|||
file,
|
||||
format_args,
|
||||
format_args_nl,
|
||||
global_allocator,
|
||||
global_asm,
|
||||
include,
|
||||
include_bytes,
|
||||
|
@ -85,7 +80,18 @@ pub use crate::macros::builtin::{
|
|||
module_path,
|
||||
option_env,
|
||||
stringify,
|
||||
test,
|
||||
test_case,
|
||||
trace_macros,
|
||||
};
|
||||
|
||||
#[cfg(not(bootstrap))]
|
||||
#[stable(feature = "builtin_macro_prelude", since = "1.38.0")]
|
||||
#[allow(deprecated)]
|
||||
#[doc(no_inline)]
|
||||
pub use crate::macros::builtin::{
|
||||
RustcDecodable,
|
||||
RustcEncodable,
|
||||
bench,
|
||||
global_allocator,
|
||||
test,
|
||||
test_case,
|
||||
};
|
||||
|
|
|
@ -326,16 +326,6 @@ use prelude::v1::*;
|
|||
// Access to Bencher, etc.
|
||||
#[cfg(test)] extern crate test;
|
||||
|
||||
// Re-export a few macros from core
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub use core::{assert_eq, assert_ne, debug_assert, debug_assert_eq, debug_assert_ne};
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub use core::{unreachable, unimplemented, write, writeln, todo};
|
||||
// FIXME: change this to `#[allow(deprecated)]` when we update nightly compiler.
|
||||
#[allow(deprecated_in_future)]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub use core::r#try;
|
||||
|
||||
#[allow(unused_imports)] // macros from `alloc` are not used on all platforms
|
||||
#[macro_use]
|
||||
extern crate alloc as alloc_crate;
|
||||
|
@ -520,33 +510,52 @@ mod std_detect;
|
|||
#[cfg(not(test))]
|
||||
pub use std_detect::detect;
|
||||
|
||||
// Document built-in macros in the crate root for consistency with libcore and existing tradition.
|
||||
// FIXME: Attribute and derive macros are not reexported because rustdoc renders them
|
||||
// as reexports rather than as macros, and that's not what we want.
|
||||
#[cfg(rustdoc)]
|
||||
// Re-export macros defined in libcore.
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[allow(deprecated_in_future)]
|
||||
pub use core::{
|
||||
// Stable
|
||||
assert_eq,
|
||||
assert_ne,
|
||||
debug_assert_eq,
|
||||
debug_assert_ne,
|
||||
debug_assert,
|
||||
r#try,
|
||||
unimplemented,
|
||||
unreachable,
|
||||
write,
|
||||
writeln,
|
||||
// Unstable
|
||||
todo,
|
||||
};
|
||||
|
||||
// Re-export built-in macros defined through libcore.
|
||||
#[cfg(not(bootstrap))]
|
||||
#[stable(feature = "builtin_macro_prelude", since = "1.38.0")]
|
||||
pub use crate::prelude::v1::{
|
||||
__rust_unstable_column,
|
||||
asm,
|
||||
pub use core::{
|
||||
// Stable
|
||||
assert,
|
||||
cfg,
|
||||
column,
|
||||
compile_error,
|
||||
concat,
|
||||
concat_idents,
|
||||
env,
|
||||
file,
|
||||
format_args,
|
||||
format_args_nl,
|
||||
global_asm,
|
||||
include,
|
||||
include_bytes,
|
||||
include_str,
|
||||
line,
|
||||
log_syntax,
|
||||
module_path,
|
||||
option_env,
|
||||
stringify,
|
||||
// Unstable
|
||||
__rust_unstable_column,
|
||||
asm,
|
||||
concat_idents,
|
||||
format_args_nl,
|
||||
global_asm,
|
||||
log_syntax,
|
||||
trace_macros,
|
||||
};
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// Macro from prelude is shadowed by non-existent import recovered as `Res::Err`.
|
||||
|
||||
use std::assert; //~ ERROR unresolved import `std::assert`
|
||||
mod m {}
|
||||
use m::assert; //~ ERROR unresolved import `m::assert`
|
||||
|
||||
fn main() {
|
||||
assert!(true);
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
error[E0432]: unresolved import `std::assert`
|
||||
--> $DIR/issue-53512.rs:3:5
|
||||
error[E0432]: unresolved import `m::assert`
|
||||
--> $DIR/issue-53512.rs:4:5
|
||||
|
|
||||
LL | use std::assert;
|
||||
| ^^^^^^^^^^^ no `assert` in the root
|
||||
LL | use m::assert;
|
||||
| ^^^^^^^^^ no `assert` in `m`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
|
|
8
src/test/ui/macros/builtin-prelude-no-accidents.rs
Normal file
8
src/test/ui/macros/builtin-prelude-no-accidents.rs
Normal file
|
@ -0,0 +1,8 @@
|
|||
// Names of public modules in libstd and libcore don't accidentally get into prelude
|
||||
// because macros with the same names are in prelude.
|
||||
|
||||
fn main() {
|
||||
env::current_dir; //~ ERROR use of undeclared type or module `env`
|
||||
type A = panic::PanicInfo; //~ ERROR use of undeclared type or module `panic`
|
||||
type B = vec::Vec<u8>; //~ ERROR use of undeclared type or module `vec`
|
||||
}
|
21
src/test/ui/macros/builtin-prelude-no-accidents.stderr
Normal file
21
src/test/ui/macros/builtin-prelude-no-accidents.stderr
Normal file
|
@ -0,0 +1,21 @@
|
|||
error[E0433]: failed to resolve: use of undeclared type or module `env`
|
||||
--> $DIR/builtin-prelude-no-accidents.rs:5:5
|
||||
|
|
||||
LL | env::current_dir;
|
||||
| ^^^ use of undeclared type or module `env`
|
||||
|
||||
error[E0433]: failed to resolve: use of undeclared type or module `panic`
|
||||
--> $DIR/builtin-prelude-no-accidents.rs:6:14
|
||||
|
|
||||
LL | type A = panic::PanicInfo;
|
||||
| ^^^^^ use of undeclared type or module `panic`
|
||||
|
||||
error[E0433]: failed to resolve: use of undeclared type or module `vec`
|
||||
--> $DIR/builtin-prelude-no-accidents.rs:7:14
|
||||
|
|
||||
LL | type B = vec::Vec<u8>;
|
||||
| ^^^ use of undeclared type or module `vec`
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0433`.
|
21
src/test/ui/macros/builtin-std-paths-fail.rs
Normal file
21
src/test/ui/macros/builtin-std-paths-fail.rs
Normal file
|
@ -0,0 +1,21 @@
|
|||
#[derive(
|
||||
core::RustcDecodable, //~ ERROR could not find `RustcDecodable` in `core`
|
||||
core::RustcDecodable, //~ ERROR could not find `RustcDecodable` in `core`
|
||||
)]
|
||||
#[core::bench] //~ ERROR could not find `bench` in `core`
|
||||
#[core::global_allocator] //~ ERROR could not find `global_allocator` in `core`
|
||||
#[core::test_case] //~ ERROR could not find `test_case` in `core`
|
||||
#[core::test] //~ ERROR could not find `test` in `core`
|
||||
struct Core;
|
||||
|
||||
#[derive(
|
||||
std::RustcDecodable, //~ ERROR could not find `RustcDecodable` in `std`
|
||||
std::RustcDecodable, //~ ERROR could not find `RustcDecodable` in `std`
|
||||
)]
|
||||
#[std::bench] //~ ERROR could not find `bench` in `std`
|
||||
#[std::global_allocator] //~ ERROR could not find `global_allocator` in `std`
|
||||
#[std::test_case] //~ ERROR could not find `test_case` in `std`
|
||||
#[std::test] //~ ERROR could not find `test` in `std`
|
||||
struct Std;
|
||||
|
||||
fn main() {}
|
75
src/test/ui/macros/builtin-std-paths-fail.stderr
Normal file
75
src/test/ui/macros/builtin-std-paths-fail.stderr
Normal file
|
@ -0,0 +1,75 @@
|
|||
error[E0433]: failed to resolve: could not find `bench` in `core`
|
||||
--> $DIR/builtin-std-paths-fail.rs:5:9
|
||||
|
|
||||
LL | #[core::bench]
|
||||
| ^^^^^ could not find `bench` in `core`
|
||||
|
||||
error[E0433]: failed to resolve: could not find `global_allocator` in `core`
|
||||
--> $DIR/builtin-std-paths-fail.rs:6:9
|
||||
|
|
||||
LL | #[core::global_allocator]
|
||||
| ^^^^^^^^^^^^^^^^ could not find `global_allocator` in `core`
|
||||
|
||||
error[E0433]: failed to resolve: could not find `test_case` in `core`
|
||||
--> $DIR/builtin-std-paths-fail.rs:7:9
|
||||
|
|
||||
LL | #[core::test_case]
|
||||
| ^^^^^^^^^ could not find `test_case` in `core`
|
||||
|
||||
error[E0433]: failed to resolve: could not find `test` in `core`
|
||||
--> $DIR/builtin-std-paths-fail.rs:8:9
|
||||
|
|
||||
LL | #[core::test]
|
||||
| ^^^^ could not find `test` in `core`
|
||||
|
||||
error[E0433]: failed to resolve: could not find `RustcDecodable` in `core`
|
||||
--> $DIR/builtin-std-paths-fail.rs:2:11
|
||||
|
|
||||
LL | core::RustcDecodable,
|
||||
| ^^^^^^^^^^^^^^ could not find `RustcDecodable` in `core`
|
||||
|
||||
error[E0433]: failed to resolve: could not find `RustcDecodable` in `core`
|
||||
--> $DIR/builtin-std-paths-fail.rs:3:11
|
||||
|
|
||||
LL | core::RustcDecodable,
|
||||
| ^^^^^^^^^^^^^^ could not find `RustcDecodable` in `core`
|
||||
|
||||
error[E0433]: failed to resolve: could not find `bench` in `std`
|
||||
--> $DIR/builtin-std-paths-fail.rs:15:8
|
||||
|
|
||||
LL | #[std::bench]
|
||||
| ^^^^^ could not find `bench` in `std`
|
||||
|
||||
error[E0433]: failed to resolve: could not find `global_allocator` in `std`
|
||||
--> $DIR/builtin-std-paths-fail.rs:16:8
|
||||
|
|
||||
LL | #[std::global_allocator]
|
||||
| ^^^^^^^^^^^^^^^^ could not find `global_allocator` in `std`
|
||||
|
||||
error[E0433]: failed to resolve: could not find `test_case` in `std`
|
||||
--> $DIR/builtin-std-paths-fail.rs:17:8
|
||||
|
|
||||
LL | #[std::test_case]
|
||||
| ^^^^^^^^^ could not find `test_case` in `std`
|
||||
|
||||
error[E0433]: failed to resolve: could not find `test` in `std`
|
||||
--> $DIR/builtin-std-paths-fail.rs:18:8
|
||||
|
|
||||
LL | #[std::test]
|
||||
| ^^^^ could not find `test` in `std`
|
||||
|
||||
error[E0433]: failed to resolve: could not find `RustcDecodable` in `std`
|
||||
--> $DIR/builtin-std-paths-fail.rs:12:10
|
||||
|
|
||||
LL | std::RustcDecodable,
|
||||
| ^^^^^^^^^^^^^^ could not find `RustcDecodable` in `std`
|
||||
|
||||
error[E0433]: failed to resolve: could not find `RustcDecodable` in `std`
|
||||
--> $DIR/builtin-std-paths-fail.rs:13:10
|
||||
|
|
||||
LL | std::RustcDecodable,
|
||||
| ^^^^^^^^^^^^^^ could not find `RustcDecodable` in `std`
|
||||
|
||||
error: aborting due to 12 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0433`.
|
32
src/test/ui/macros/builtin-std-paths.rs
Normal file
32
src/test/ui/macros/builtin-std-paths.rs
Normal file
|
@ -0,0 +1,32 @@
|
|||
// check-pass
|
||||
|
||||
#[derive(
|
||||
core::clone::Clone,
|
||||
core::marker::Copy,
|
||||
core::fmt::Debug,
|
||||
core::default::Default,
|
||||
core::cmp::Eq,
|
||||
core::hash::Hash,
|
||||
core::cmp::Ord,
|
||||
core::cmp::PartialEq,
|
||||
core::cmp::PartialOrd,
|
||||
)]
|
||||
struct Core;
|
||||
|
||||
#[derive(
|
||||
std::clone::Clone,
|
||||
std::marker::Copy,
|
||||
std::fmt::Debug,
|
||||
std::default::Default,
|
||||
std::cmp::Eq,
|
||||
std::hash::Hash,
|
||||
std::cmp::Ord,
|
||||
std::cmp::PartialEq,
|
||||
std::cmp::PartialOrd,
|
||||
)]
|
||||
struct Std;
|
||||
|
||||
fn main() {
|
||||
core::column!();
|
||||
std::column!();
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue