#[doc(hidden)]
#[allow(unused)]
pub mod __support {
#[cfg(all(windows, not(miri)))]
pub type CtorRetType = usize;
#[cfg(any(not(windows), miri))]
pub type CtorRetType = ();
pub use crate::__ctor_call as ctor_call;
pub use crate::__ctor_entry as ctor_entry;
pub use crate::__ctor_link_section as ctor_link_section;
pub use crate::__ctor_link_section_attr as ctor_link_section_attr;
pub use crate::__ctor_parse as ctor_parse;
pub use crate::__dtor_entry as dtor_entry;
pub use crate::__dtor_parse as dtor_parse;
pub use crate::__if_has_feature as if_has_feature;
pub use crate::__if_unsafe as if_unsafe;
pub use crate::__get_priority as get_priority;
pub use crate::__unify_features as unify_features;
}
#[doc(hidden)]
#[macro_export]
macro_rules! __ctor_parse {
(#[ctor $(($($meta:tt)*))?] $(#[$imeta:meta])* pub ( $($extra:tt)* ) $($item:tt)*) => {
$crate::__support::unify_features!(next=$crate::__support::ctor_entry, meta=[$($($meta)*)?], features=[], imeta=$(#[$imeta])*, vis=[pub($($extra)*)], item=$($item)*);
};
(#[ctor $(($($meta:tt)*))?] $(#[$imeta:meta])* pub $($item:tt)*) => {
$crate::__support::unify_features!(next=$crate::__support::ctor_entry, meta=[$($($meta)*)?], features=[], imeta=$(#[$imeta])*, vis=[pub], item=$($item)*);
};
(#[ctor $(($($meta:tt)*))?] $(#[$imeta:meta])* fn $($item:tt)*) => {
$crate::__support::unify_features!(next=$crate::__support::ctor_entry, meta=[$($($meta)*)?], features=[], imeta=$(#[$imeta])*, vis=[], item=fn $($item)*);
};
(#[ctor $(($($meta:tt)*))?] $(#[$imeta:meta])* unsafe $($item:tt)*) => {
$crate::__support::unify_features!(next=$crate::__support::ctor_entry, meta=[$($($meta)*)?], features=[], imeta=$(#[$imeta])*, vis=[], item=unsafe $($item)*);
};
(#[ctor $(($($meta:tt)*))?] $(#[$imeta:meta])* static $($item:tt)*) => {
$crate::__support::unify_features!(next=$crate::__support::ctor_entry, meta=[$($($meta)*)?], features=[], imeta=$(#[$imeta])*, vis=[], item=static $($item)*);
};
(#[$imeta:meta] $($rest:tt)*) => {
$crate::__support::ctor_parse!(__reorder__(#[$imeta],), $($rest)*);
};
(__reorder__($(#[$imeta:meta],)*), #[ctor $(($($meta:tt)*))?] $($rest:tt)*) => {
$crate::__support::ctor_parse!(#[ctor $(($($meta)*))?] $(#[$imeta])* $($rest)*);
};
(__reorder__($(#[$imeta:meta],)*), #[$imeta2:meta] $($rest:tt)*) => {
$crate::__support::ctor_parse!(__reorder__($(#[$imeta],)*#[$imeta2],), $($rest)*);
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! __dtor_parse {
(#[dtor $(($($meta:tt)*))?] $(#[$imeta:meta])* pub ( $($extra:tt)* ) $($item:tt)*) => {
$crate::__support::unify_features!(next=$crate::__support::dtor_entry, meta=[$($($meta)*)?], features=[], imeta=$(#[$imeta])*, vis=[pub($($extra)*)], item=$($item)*);
};
(#[dtor $(($($meta:tt)*))?] $(#[$imeta:meta])* pub $($item:tt)*) => {
$crate::__support::unify_features!(next=$crate::__support::dtor_entry, meta=[$($($meta)*)?], features=[], imeta=$(#[$imeta])*, vis=[pub], item=$($item)*);
};
(#[dtor $(($($meta:tt)*))?] $(#[$imeta:meta])* fn $($item:tt)*) => {
$crate::__support::unify_features!(next=$crate::__support::dtor_entry, meta=[$($($meta)*)?], features=[], imeta=$(#[$imeta])*, vis=[], item=fn $($item)*);
};
(#[dtor $(($($meta:tt)*))?] $(#[$imeta:meta])* unsafe $($item:tt)*) => {
$crate::__support::unify_features!(next=$crate::__support::dtor_entry, meta=[$($($meta)*)?], features=[], imeta=$(#[$imeta])*, vis=[], item=unsafe $($item)*);
};
(#[$imeta:meta] $($rest:tt)*) => {
$crate::__support::dtor_parse!(__reorder__(#[$imeta],), $($rest)*);
};
(__reorder__($(#[$imeta:meta],)*), #[dtor $(($($meta:tt)*))?] $($rest:tt)*) => {
$crate::__support::dtor_parse!(#[dtor $(($($meta)*))?] $(#[$imeta])* $($rest)*);
};
(__reorder__($(#[$imeta:meta],)*), #[$imeta2:meta] $($rest:tt)*) => {
$crate::__support::dtor_parse!(__reorder__($(#[$imeta],)*#[$imeta2],), $($rest)*);
};
}
macro_rules! declare_features {
( $(#[doc = $doc1:literal])* crate = $crate_features:tt; $(#[doc = $doc2:literal])* attr = $attrs:tt; ) => {
declare_features!( __ crate $crate_features );
};
( __ crate [$(
$( #[doc = $doc:literal] )*
$feature_name:ident $feature_name_str:literal = $feature_include_macro:ident ;
)*] ) => {
$(
#[doc = concat!("<code>", stringify!($feature_name), "</code>: ")]
$( #[doc = $doc] )*
#[doc = "\n"]
)*
pub mod features {
}
$(
#[doc(hidden)]
#[macro_export]
#[cfg(feature = $feature_name_str)]
macro_rules! $feature_include_macro {
($true:item $false:item) => {
$true
};
}
#[doc(hidden)]
#[macro_export]
#[cfg(not(feature = $feature_name_str))]
macro_rules! $feature_include_macro {
($true:item $false:item) => {
$false
};
}
)*
};
}
declare_features!(
crate = [
std "std" = __include_std_feature;
used_linker "used_linker" = __include_used_linker_feature;
proc_macro "proc_macro" = __include_proc_macro_feature;
__no_warn_on_missing_unsafe "__no_warn_on_missing_unsafe" = __include_no_warn_on_missing_unsafe_feature;
];
attr = [
unsafe = [unsafe];
link_section = [link_section($section:literal)];
crate_path = [crate_path = $path:path];
anonymous = [anonymous];
used_linker = [used(linker)];
priority = [priority = $priority:literal];
];
);
#[doc(hidden)]
#[macro_export]
macro_rules! __unify_features {
(next=$next_macro:path, meta=[$($meta:tt)*], features=[$($features:tt)*], $($rest:tt)*) => {
$crate::__support::unify_features!(std, next=$next_macro, meta=[$($meta)*], features=[$($features)*], $($rest)*);
};
(std, next=$next_macro:path, meta=[$($meta:tt)*], features=[$($features:tt)*], $($rest:tt)*) => {
$crate::__include_std_feature!(
$crate::__support::unify_features!(used_linker, next=$next_macro, meta=[$($meta)*], features=[std,$($features)*], $($rest)*);
$crate::__support::unify_features!(used_linker, next=$next_macro, meta=[$($meta)*], features=[$($features)*], $($rest)*);
);
};
(used_linker, next=$next_macro:path, meta=[$($meta:tt)*], features=[$($features:tt)*], $($rest:tt)*) => {
$crate::__include_used_linker_feature!(
$crate::__support::unify_features!(__no_warn_on_missing_unsafe, next=$next_macro, meta=[$($meta)*], features=[used_linker,$($features)*], $($rest)*);
$crate::__support::unify_features!(__no_warn_on_missing_unsafe, next=$next_macro, meta=[$($meta)*], features=[$($features)*], $($rest)*);
);
};
(__no_warn_on_missing_unsafe, next=$next_macro:path, meta=[$($meta:tt)*], features=[$($features:tt)*], $($rest:tt)*) => {
$crate::__include_no_warn_on_missing_unsafe_feature!(
$crate::__support::unify_features!(continue, next=$next_macro, meta=[$($meta)*], features=[__no_warn_on_missing_unsafe,$($features)*], $($rest)*);
$crate::__support::unify_features!(continue, next=$next_macro, meta=[$($meta)*], features=[$($features)*], $($rest)*);
);
};
(continue, next=$next_macro:path, meta=[used(linker) $(, $($meta:tt)* )?], features=[$($features:tt)*], $($rest:tt)*) => {
$crate::__support::unify_features!(continue, next=$next_macro, meta=[$($($meta)*)?], features=[used_linker,$($features)*], $($rest)*);
};
(continue, next=$next_macro:path, meta=[link_section = $section:tt $(, $($meta:tt)* )?], features=[$($features:tt)*], $($rest:tt)*) => {
$crate::__support::unify_features!(continue, next=$next_macro, meta=[$($($meta)*)?], features=[(link_section=($section)),$($features)*], $($rest)*);
};
(continue, next=$next_macro:path, meta=[crate_path = $path:path $(, $($meta:tt)* )?], features=[$($features:tt)*], $($rest:tt)*) => {
$crate::__support::unify_features!(continue, next=$next_macro, meta=[$($($meta)*)?], features=[(crate_path=$path),$($features)*], $($rest)*);
};
(continue, next=$next_macro:path, meta=[anonymous $(, $($meta:tt)* )?], features=[$($features:tt)*], $($rest:tt)*) => {
$crate::__support::unify_features!(continue, next=$next_macro, meta=[$($($meta)*)?], features=[anonymous,$($features)*], $($rest)*);
};
(continue, next=$next_macro:path, meta=[priority = $priority:literal $(, $($meta:tt)* )?], features=[$($features:tt)*], $($rest:tt)*) => {
$crate::__support::unify_features!(continue, next=$next_macro, meta=[$($($meta)*)?], features=[(priority=($priority)),$($features)*], $($rest)*);
};
(continue, next=$next_macro:path, meta=[$unknown_meta:meta $($meta:tt)*], features=[$($features:tt)*], $($rest:tt)*) => {
compile_error!(concat!("Unknown attribute parameter: ", stringify!($unknown_meta)));
};
(continue, next=$next_macro:path, meta=[], features=[$($features:tt)*], $($rest:tt)*) => {
$next_macro!(features=[$($features)*], $($rest)*);
};
}
#[doc(hidden)]
#[macro_export]
#[allow(unknown_lints, edition_2024_expr_fragment_specifier)]
macro_rules! __if_has_feature {
(std, [std, $($rest:tt)*], {$($if_true:tt)*}, {$($if_false:tt)*}) => { $($if_true)* };
(used_linker, [used_linker, $($rest:tt)*], {$($if_true:tt)*}, {$($if_false:tt)*}) => { $($if_true)* };
(__no_warn_on_missing_unsafe, [__no_warn_on_missing_unsafe, $($rest:tt)*], {$($if_true:tt)*}, {$($if_false:tt)*}) => { $($if_true)* };
(anonymous, [anonymous, $($rest:tt)*], {$($if_true:tt)*}, {$($if_false:tt)*}) => { $($if_true)* };
((link_section(c)), [(link_section=($section:literal)), $($rest:tt)*], {$($if_true:tt)*}, {$($if_false:tt)*}) => { #[link_section = $section] $($if_true)* };
((priority(p)), [(priority=($priority:literal)), $($rest:tt)*], {$($if_true:tt)*}, {$($if_false:tt)*}) => { $($if_true)* };
($anything:tt, [$x:ident, $($rest:tt)*], {$($if_true:tt)*}, {$($if_false:tt)*}) => { $crate::__support::if_has_feature!($anything, [$($rest)*], {$($if_true)*}, {$($if_false)*}); };
($anything:tt, [($x:ident=$y:tt), $($rest:tt)*], {$($if_true:tt)*}, {$($if_false:tt)*}) => { $crate::__support::if_has_feature!($anything, [$($rest)*], {$($if_true)*}, {$($if_false)*}); };
($anything:tt, [], {$($if_true:tt)*}, {$($if_false:tt)*}) => { $($if_false)* };
}
#[doc(hidden)]
#[macro_export]
macro_rules! __if_unsafe {
(, {$($if_unsafe:tt)*}, {$($if_safe:tt)*}) => { $($if_safe)* };
(unsafe, {$($if_unsafe:tt)*}, {$($if_safe:tt)*}) => { $($if_unsafe)* };
}
#[doc(hidden)]
#[macro_export]
macro_rules! __get_priority {
($next:path, $args:tt, [(priority=($priority:literal)), $($rest:tt)*]) => { $next!($args, (".", $priority)); };
($next:path, $args:tt, [$x:ident, $($rest:tt)*]) => { $crate::__support::get_priority!($next, $args, [$($rest)*]); };
($next:path, $args:tt, [($x:ident=$y:tt), $($rest:tt)*]) => { $crate::__support::get_priority!($next, $args, [$($rest)*]); };
($next:path, $args:tt, []) => { $next!($args, ("")); };
}
#[doc(hidden)]
#[macro_export]
#[allow(unknown_lints, edition_2024_expr_fragment_specifier)]
macro_rules! __ctor_entry {
(features=$features:tt, imeta=$(#[$fnmeta:meta])*, vis=[$($vis:tt)*], item=unsafe fn $($item:tt)*) => {
$crate::__support::ctor_entry!(features=$features, imeta=$(#[$fnmeta])*, vis=[$($vis)*], unsafe=unsafe, item=fn $($item)*);
};
(features=$features:tt, imeta=$(#[$fnmeta:meta])*, vis=[$($vis:tt)*], item=fn $($item:tt)*) => {
$crate::__support::ctor_entry!(features=$features, imeta=$(#[$fnmeta])*, vis=[$($vis)*], unsafe=, item=fn $($item)*);
};
(features=$features:tt, imeta=$(#[$fnmeta:meta])*, vis=[$($vis:tt)*], item=static $ident:ident : $ty:ty = $(unsafe)? $({ $lit:literal })? $($lit2:literal)? ;) => {
compile_error!(concat!("Use `const ", stringify!($ident), " = ", stringify!($($lit)?$($lit2)?), ";` or `static ", stringify!($ident), ": ", stringify!($ty), " = ", stringify!($($lit)?$($lit2)?), ";` instead"));
};
(features=$features:tt, imeta=$(#[$fnmeta:meta])*, vis=[$($vis:tt)*], item=static $ident:ident : $ty:ty = unsafe $($item:tt)*) => {
$crate::__support::ctor_entry!(features=$features, imeta=$(#[$fnmeta])*, vis=[$($vis)*], unsafe=unsafe, item=static $ident: $ty = $($item)*);
};
(features=$features:tt, imeta=$(#[$fnmeta:meta])*, vis=[$($vis:tt)*], item=static $ident:ident : $ty:ty = $($item:tt)*) => {
$crate::__support::ctor_entry!(features=$features, imeta=$(#[$fnmeta])*, vis=[$($vis)*], unsafe=, item=static $ident: $ty = $($item)*);
};
(features=$features:tt, imeta=$(#[$fnmeta:meta])*, vis=[$($vis:tt)*], unsafe=$($unsafe:ident)?, item=fn $ident:ident() $block:block) => {
$crate::__support::if_has_feature!(anonymous, $features, {
$crate::__support::ctor_entry!(unnamed, features=$features, imeta=$(#[$fnmeta])*, vis=[$($vis)*], unsafe=$($unsafe)?, item=fn $ident() $block);
}, {
$crate::__support::ctor_entry!(named, features=$features, imeta=$(#[$fnmeta])*, vis=[$($vis)*], unsafe=$($unsafe)?, item=fn $ident() $block);
});
};
(unnamed,features=$features:tt, imeta=$(#[$fnmeta:meta])*, vis=[$($vis:tt)*], unsafe=$($unsafe:ident)?, item=fn $ident:ident() $block:block) => {
const _: () = {
$crate::__support::ctor_entry!(named, features=$features, imeta=$(#[$fnmeta])*, vis=[$($vis)*], unsafe=$($unsafe)?, item=fn $ident() $block);
};
};
(named, features=$features:tt, imeta=$(#[$fnmeta:meta])*, vis=[$($vis:tt)*], unsafe=$($unsafe:ident)?, item=fn $ident:ident() $block:block) => {
$(#[$fnmeta])*
#[allow(unused)]
$($vis)* $($unsafe)? fn $ident() {
#[allow(unsafe_code)]
{
$crate::__support::if_unsafe!($($unsafe)?, {}, {
$crate::__support::if_has_feature!( __warn_on_missing_unsafe, $features, {
#[deprecated="ctor deprecation note:\n\n \
Use of #[ctor] without `unsafe fn` is deprecated. As code execution before main\n\
is unsupported by most Rust runtime functions, these functions must be marked\n\
`unsafe`."]
const fn ctor_without_unsafe_is_deprecated() {}
#[allow(unused)]
static UNSAFE_WARNING: () = ctor_without_unsafe_is_deprecated();
}, {});
});
$crate::__support::ctor_call!(
features=$features,
{ unsafe { $ident(); } }
);
}
#[cfg(target_family = "wasm")]
{
static __CTOR__INITILIZED: ::core::sync::atomic::AtomicBool = ::core::sync::atomic::AtomicBool::new(false);
if __CTOR__INITILIZED.swap(true, ::core::sync::atomic::Ordering::Relaxed) {
return;
}
}
$block
}
};
(features=$features:tt, imeta=$(#[$imeta:meta])*, vis=[$($vis:tt)*], unsafe=$($unsafe:ident)?, item=static $ident:ident : $ty:ty = $block:block;) => {
$crate::__support::if_has_feature!(std, $features, {
$(#[$imeta])*
$($vis)* static $ident: $ident::Static<$ty> = $ident::Static::<$ty> {
_storage: {
$crate::__support::ctor_call!(
features=$features,
{ _ = &*$ident; }
);
::std::sync::OnceLock::new()
}
};
impl ::core::ops::Deref for $ident::Static<$ty> {
type Target = $ty;
fn deref(&self) -> &$ty {
fn init() -> $ty $block
self._storage.get_or_init(move || {
init()
})
}
}
#[doc(hidden)]
#[allow(non_upper_case_globals, non_snake_case)]
#[allow(unsafe_code)]
mod $ident {
$crate::__support::if_unsafe!($($unsafe)?, {}, {
$crate::__support::if_has_feature!( __no_warn_on_missing_unsafe, $features, {
#[deprecated="ctor deprecation note:\n\n \
Use of #[ctor] without `unsafe { ... }` is deprecated. As code execution before main\n\
is unsupported by most Rust runtime functions, these functions must be marked\n\
`unsafe`."]
const fn ctor_without_unsafe_is_deprecated() {}
#[allow(unused)]
static UNSAFE_WARNING: () = ctor_without_unsafe_is_deprecated();
}, {});
});
#[allow(non_camel_case_types, unreachable_pub)]
pub struct Static<T> {
pub _storage: ::std::sync::OnceLock<T>
}
}
}, {
compile_error!("`#[ctor]` on `static` items requires the `std` feature");
});
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! __dtor_entry {
(features=$features:tt, imeta=$(#[$fnmeta:meta])*, vis=[$($vis:tt)*], item=fn $ident:ident() $block:block) => {
$crate::__support::dtor_entry!(features=$features, imeta=$(#[$fnmeta])*, vis=[$($vis)*], unsafe=, item=fn $ident() $block);
};
(features=$features:tt, imeta=$(#[$fnmeta:meta])*, vis=[$($vis:tt)*], item=unsafe fn $ident:ident() $block:block) => {
$crate::__support::dtor_entry!(features=$features, imeta=$(#[$fnmeta])*, vis=[$($vis)*], unsafe=unsafe, item=fn $ident() $block);
};
(features=$features:tt, imeta=$(#[$fnmeta:meta])*, vis=[$($vis:tt)*], unsafe=$($unsafe:ident)?, item=fn $ident:ident() $block:block) => {
$crate::__support::if_has_feature!(anonymous, $features, {
$crate::__support::dtor_entry!(unnamed, features=$features, imeta=$(#[$fnmeta])*, vis=[$($vis)*], unsafe=$($unsafe)?, item=fn $ident() $block);
}, {
$crate::__support::dtor_entry!(named, features=$features, imeta=$(#[$fnmeta])*, vis=[$($vis)*], unsafe=$($unsafe)?, item=fn $ident() $block);
});
};
(unnamed, features=$features:tt, imeta=$(#[$fnmeta:meta])*, vis=[$($vis:tt)*], unsafe=$($unsafe:ident)?, item=fn $ident:ident() $block:block) => {
const _: () = {
$crate::__support::dtor_entry!(named, features=$features, imeta=$(#[$fnmeta])*, vis=[$($vis)*], unsafe=$($unsafe)?, item=fn $ident() $block);
};
};
(named, features=$features:tt, imeta=$(#[$fnmeta:meta])*, vis=[$($vis:tt)*], unsafe=$($unsafe:ident)?, item=fn $ident:ident() $block:block) => {
$(#[$fnmeta])*
#[allow(unused)]
$($vis)* $($unsafe)? fn $ident() {
#[allow(unsafe_code)]
{
$crate::__support::if_unsafe!($($unsafe)?, {}, {
$crate::__support::if_has_feature!( __warn_on_missing_unsafe, $features, {
#[deprecated="dtor deprecation note:\n\n \
Use of #[dtor] without `unsafe fn` is deprecated. As code execution after main\n\
is unsupported by most Rust runtime functions, these functions must be marked\n\
`unsafe`."]
const fn dtor_without_unsafe_is_deprecated() {}
#[allow(unused)]
static UNSAFE_WARNING: () = dtor_without_unsafe_is_deprecated();
}, {});
});
$crate::__support::ctor_call!(
features=$features,
{ unsafe { do_atexit(__dtor); } }
);
$crate::__support::ctor_link_section!(
exit,
features=$features,
(""),
extern "C" fn __dtor(
#[cfg(target_vendor = "apple")] _: *const u8
) { unsafe { $ident() } }
);
#[cfg(not(target_vendor = "apple"))]
#[inline(always)]
unsafe fn do_atexit(cb: unsafe extern fn()) {
extern "C" {
fn atexit(cb: unsafe extern fn());
}
unsafe {
atexit(cb);
}
}
#[cfg(target_vendor = "apple")]
#[inline(always)]
unsafe fn do_atexit(cb: extern "C" fn(_: *const u8)) {
extern "C" {
static __dso_handle: *const u8;
fn __cxa_atexit(cb: extern "C" fn(_: *const u8), arg: *const u8, dso_handle: *const u8);
}
unsafe {
__cxa_atexit(cb, ::core::ptr::null(), __dso_handle);
}
}
}
$block
}
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! __ctor_call {
(features=$features:tt, { $($block:tt)+ } ) => {
$crate::__support::get_priority!($crate::__support::ctor_call, [features=$features, { $($block)+ }], $features);
};
([features=$features:tt, { $($block:tt)+ }], $priority:tt) => {
$crate::__support::ctor_link_section!(
array,
features=$features,
$priority,
#[allow(non_upper_case_globals, non_snake_case)]
#[doc(hidden)]
static f: extern "C" fn() -> $crate::__support::CtorRetType =
{
$crate::__support::ctor_link_section!(
startup,
features=$features,
(""),
#[allow(non_snake_case)]
extern "C" fn f() -> $crate::__support::CtorRetType {
$($block)+;
::core::default::Default::default()
}
);
f
};
);
}
}
#[doc(hidden)]
#[macro_export]
macro_rules! __ctor_link_section {
($section:ident, features=$features:tt, $priority:tt, $($block:tt)+) => {
$crate::__support::if_has_feature!(used_linker, $features, {
$crate::__support::ctor_link_section_attr!($section, $features, used(linker), $priority, $($block)+);
}, {
$crate::__support::ctor_link_section_attr!($section, $features, used, $priority, $($block)+);
});
#[cfg(not(any(
target_os = "linux",
target_os = "android",
target_os = "freebsd",
target_os = "netbsd",
target_os = "openbsd",
target_os = "dragonfly",
target_os = "illumos",
target_os = "haiku",
target_vendor = "apple",
target_family = "wasm",
target_arch = "xtensa",
target_vendor = "pc"
)))]
compile_error!("#[ctor]/#[dtor] is not supported on the current target");
}
}
#[doc(hidden)]
#[macro_export]
macro_rules! __ctor_link_section_attr {
(array, $features:tt, $used:meta, ($($priority:tt)*), $item:item) => {
$crate::__support::if_has_feature!((priority(p)), $features, {
#[cfg(target_vendor="apple")]
const _: () = {
#[deprecated(note = "The priority parameter is not supported on target_vendor = \"apple\"")]
const fn ctor_priority_unsupported() {}
ctor_priority_unsupported();
};
}, {});
$crate::__support::if_has_feature!((link_section(c)), $features, {
#[allow(unsafe_code)]
#[$used]
$item
}, {
#[allow(unsafe_code)]
$crate::__support::ctor_link_section_attr!(
[[any(
target_os = "linux",
target_os = "android",
target_os = "freebsd",
target_os = "netbsd",
target_os = "openbsd",
target_os = "dragonfly",
target_os = "illumos",
target_os = "haiku",
target_family = "wasm"
), (concat!(".init_array", $($priority)*))],
[target_arch = "xtensa", (concat!(".ctors", $($priority)*))],
[target_vendor = "apple", (concat!("__DATA,__mod_init_func,mod_init_funcs"))],
[all(target_vendor = "pc", any(target_env = "gnu", target_env = "msvc")), (concat!(".CRT$XCU", $($priority)*))],
[all(target_vendor = "pc", not(any(target_env = "gnu", target_env = "msvc"))), (concat!(".ctors", $($priority)*))]
],
#[$used]
$item
);
});
};
(startup, $features:tt, $used:meta, $priority:tt, $item:item) => {
#[cfg(not(clippy))]
$crate::__support::ctor_link_section_attr!([[any(target_os = "linux", target_os = "android"), (".text.startup")]], $item);
#[cfg(clippy)]
$item
};
(exit, $features:tt, $used:meta, $priority:tt, $item:item) => {
#[cfg(not(clippy))]
$crate::__support::ctor_link_section_attr!([[any(target_os = "linux", target_os = "android"), (".text.exit")]], $item);
#[cfg(clippy)]
$item
};
([$( [$cond:meta, ($($literal:tt)*) ] ),+], $item:item) => {
$( #[cfg_attr($cond, link_section = $($literal)*)] )+
$item
};
}