Auto merge of #142253 - tgross35:rollup-img49op, r=tgross35
Rollup of 5 pull requests Successful merges: - rust-lang/rust#140767 (Stabilize `sha512`, `sm3` and `sm4` for x86) - rust-lang/rust#141001 (Make NonZero<char> possible) - rust-lang/rust#141993 (Use the in-tree `compiler-builtins` for the sysroot) - rust-lang/rust#142208 (Always consider `const _` items as live for dead code analysis) - rust-lang/rust#142238 (stabilize nonnull_provenance) r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
d13a431a6c
35 changed files with 154 additions and 72 deletions
|
|
@ -3130,11 +3130,12 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "rustc-build-sysroot"
|
||||
version = "0.5.7"
|
||||
version = "0.5.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "10edc2e4393515193bd766e2f6c050b0536a68e56f2b6d56c07ababfdc114ff0"
|
||||
checksum = "16d115ad7e26e0d1337f64ae6598f758194696afc2e9f34c8a6f24582529c3dc"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"regex",
|
||||
"rustc_version",
|
||||
"tempfile",
|
||||
"walkdir",
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ resolver = "2"
|
|||
|
||||
[dependencies]
|
||||
core = { path = "./sysroot_src/library/core" }
|
||||
compiler_builtins = "0.1"
|
||||
alloc = { path = "./sysroot_src/library/alloc" }
|
||||
std = { path = "./sysroot_src/library/std", features = ["panic_unwind", "backtrace"] }
|
||||
test = { path = "./sysroot_src/library/test" }
|
||||
|
|
@ -16,6 +15,7 @@ proc_macro = { path = "./sysroot_src/library/proc_macro" }
|
|||
rustc-std-workspace-core = { path = "./sysroot_src/library/rustc-std-workspace-core" }
|
||||
rustc-std-workspace-alloc = { path = "./sysroot_src/library/rustc-std-workspace-alloc" }
|
||||
rustc-std-workspace-std = { path = "./sysroot_src/library/rustc-std-workspace-std" }
|
||||
compiler_builtins = { path = "./sysroot_src/library/compiler-builtins/compiler-builtins" }
|
||||
|
||||
# For compiler-builtins we always use a high number of codegen units.
|
||||
# The goal here is to place every single intrinsic into its own object
|
||||
|
|
|
|||
|
|
@ -382,6 +382,8 @@ declare_features! (
|
|||
(accepted, self_in_typedefs, "1.32.0", Some(49303)),
|
||||
/// Allows `Self` struct constructor (RFC 2302).
|
||||
(accepted, self_struct_ctor, "1.32.0", Some(51994)),
|
||||
/// Allows use of x86 SHA512, SM3 and SM4 target-features and intrinsics
|
||||
(accepted, sha512_sm_x86, "CURRENT_RUSTC_VERSION", Some(126624)),
|
||||
/// Shortern the tail expression lifetime
|
||||
(accepted, shorter_tail_lifetimes, "1.84.0", Some(123739)),
|
||||
/// Allows using subslice patterns, `[a, .., b]` and `[a, xs @ .., b]`.
|
||||
|
|
|
|||
|
|
@ -627,8 +627,6 @@ declare_features! (
|
|||
(unstable, return_type_notation, "1.70.0", Some(109417)),
|
||||
/// Allows `extern "rust-cold"`.
|
||||
(unstable, rust_cold_cc, "1.63.0", Some(97544)),
|
||||
/// Allows use of x86 SHA512, SM3 and SM4 target-features and intrinsics
|
||||
(unstable, sha512_sm_x86, "1.82.0", Some(126624)),
|
||||
/// Allows the use of SIMD types in functions declared in `extern` blocks.
|
||||
(unstable, simd_ffi, "1.0.0", Some(27731)),
|
||||
/// Allows specialization of implementations (RFC 1210).
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ use rustc_middle::ty::{self, TyCtxt};
|
|||
use rustc_middle::{bug, span_bug};
|
||||
use rustc_session::lint::builtin::DEAD_CODE;
|
||||
use rustc_session::lint::{self, LintExpectationId};
|
||||
use rustc_span::{Symbol, sym};
|
||||
use rustc_span::{Symbol, kw, sym};
|
||||
|
||||
use crate::errors::{
|
||||
ChangeFields, IgnoredDerivedImpls, MultipleDeadCodes, ParentInfo, UselessAssignment,
|
||||
|
|
@ -793,6 +793,17 @@ fn check_item<'tcx>(
|
|||
// global_asm! is always live.
|
||||
worklist.push((id.owner_id.def_id, ComesFromAllowExpect::No));
|
||||
}
|
||||
DefKind::Const => {
|
||||
let item = tcx.hir_item(id);
|
||||
if let hir::ItemKind::Const(ident, ..) = item.kind
|
||||
&& ident.name == kw::Underscore
|
||||
{
|
||||
// `const _` is always live, as that syntax only exists for the side effects
|
||||
// of type checking and evaluating the constant expression, and marking them
|
||||
// as dead code would defeat that purpose.
|
||||
worklist.push((id.owner_id.def_id, ComesFromAllowExpect::No));
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -455,9 +455,9 @@ static X86_FEATURES: &[(&str, Stability, ImpliedFeatures)] = &[
|
|||
("rdseed", Stable, &[]),
|
||||
("rtm", Unstable(sym::rtm_target_feature), &[]),
|
||||
("sha", Stable, &["sse2"]),
|
||||
("sha512", Unstable(sym::sha512_sm_x86), &["avx2"]),
|
||||
("sm3", Unstable(sym::sha512_sm_x86), &["avx"]),
|
||||
("sm4", Unstable(sym::sha512_sm_x86), &["avx2"]),
|
||||
("sha512", Stable, &["avx2"]),
|
||||
("sm3", Stable, &["avx"]),
|
||||
("sm4", Stable, &["avx2"]),
|
||||
// This cannot actually be toggled, the ABI always fixes it, so it'd make little sense to
|
||||
// stabilize. It must be in this list for the ABI check to be able to use it.
|
||||
("soft-float", Stability::Unstable(sym::x87_target_feature), &[]),
|
||||
|
|
|
|||
|
|
@ -62,11 +62,9 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "compiler_builtins"
|
||||
version = "0.1.160"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6376049cfa92c0aa8b9ac95fae22184b981c658208d4ed8a1dc553cd83612895"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"rustc-std-workspace-core",
|
||||
"core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -304,6 +302,7 @@ dependencies = [
|
|||
name = "rustc-std-workspace-core"
|
||||
version = "1.99.0"
|
||||
dependencies = [
|
||||
"compiler_builtins",
|
||||
"core",
|
||||
]
|
||||
|
||||
|
|
|
|||
|
|
@ -50,3 +50,4 @@ rustc-demangle.opt-level = "s"
|
|||
rustc-std-workspace-core = { path = 'rustc-std-workspace-core' }
|
||||
rustc-std-workspace-alloc = { path = 'rustc-std-workspace-alloc' }
|
||||
rustc-std-workspace-std = { path = 'rustc-std-workspace-std' }
|
||||
compiler_builtins = { path = "compiler-builtins/compiler-builtins" }
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ bench = false
|
|||
|
||||
[dependencies]
|
||||
core = { path = "../core", public = true }
|
||||
compiler_builtins = { version = "=0.1.160", features = ['rustc-dep-of-std'] }
|
||||
compiler_builtins = { path = "../compiler-builtins/compiler-builtins", features = ["rustc-dep-of-std"] }
|
||||
|
||||
[features]
|
||||
compiler-builtins-mem = ['compiler_builtins/mem']
|
||||
|
|
|
|||
|
|
@ -131,7 +131,6 @@
|
|||
#![feature(local_waker)]
|
||||
#![feature(maybe_uninit_slice)]
|
||||
#![feature(maybe_uninit_uninit_array_transpose)]
|
||||
#![feature(nonnull_provenance)]
|
||||
#![feature(panic_internals)]
|
||||
#![feature(pattern)]
|
||||
#![feature(pin_coerce_unsized_trait)]
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@
|
|||
#![feature(iter_next_chunk)]
|
||||
#![feature(maybe_uninit_slice)]
|
||||
#![feature(maybe_uninit_uninit_array_transpose)]
|
||||
#![feature(nonnull_provenance)]
|
||||
#![feature(ptr_alignment_type)]
|
||||
#![feature(ptr_internals)]
|
||||
#![feature(sized_type_properties)]
|
||||
|
|
|
|||
|
|
@ -17,9 +17,7 @@ doctest = false
|
|||
test = false
|
||||
|
||||
[dependencies]
|
||||
# For more information on this dependency see
|
||||
# https://github.com/rust-lang/rust/tree/master/library/rustc-std-workspace-core
|
||||
core = { version = "1.0.1", optional = true, package = "rustc-std-workspace-core" }
|
||||
core = { path = "../../core", optional = true }
|
||||
|
||||
[build-dependencies]
|
||||
cc = { optional = true, version = "1.2" }
|
||||
|
|
|
|||
|
|
@ -22,6 +22,9 @@ fn main() {
|
|||
|
||||
println!("cargo:compiler-rt={}", cwd.join("compiler-rt").display());
|
||||
|
||||
println!("cargo::rustc-check-cfg=cfg(kernel_user_helpers)");
|
||||
println!("cargo::rustc-check-cfg=cfg(feature, values(\"mem-unaligned\"))");
|
||||
|
||||
// Emscripten's runtime includes all the builtins
|
||||
if target.os == "emscripten" {
|
||||
return;
|
||||
|
|
@ -47,7 +50,6 @@ fn main() {
|
|||
}
|
||||
|
||||
// These targets have hardware unaligned access support.
|
||||
println!("cargo::rustc-check-cfg=cfg(feature, values(\"mem-unaligned\"))");
|
||||
if target.arch.contains("x86_64")
|
||||
|| target.arch.contains("x86")
|
||||
|| target.arch.contains("aarch64")
|
||||
|
|
@ -78,7 +80,6 @@ fn main() {
|
|||
// Only emit the ARM Linux atomic emulation on pre-ARMv6 architectures. This
|
||||
// includes the old androideabi. It is deprecated but it is available as a
|
||||
// rustc target (arm-linux-androideabi).
|
||||
println!("cargo::rustc-check-cfg=cfg(kernel_user_helpers)");
|
||||
if llvm_target[0] == "armv4t"
|
||||
|| llvm_target[0] == "armv5te"
|
||||
|| target.triple == "arm-linux-androideabi"
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
//! To avoid breaking backwards compat, C toolchains introduced a concept of "outlined atomics",
|
||||
//! where atomic operations call into the compiler runtime to dispatch between two depending on
|
||||
//! which is supported on the current CPU.
|
||||
//! See https://community.arm.com/arm-community-blogs/b/tools-software-ides-blog/posts/making-the-most-of-the-arm-architecture-in-gcc-10#:~:text=out%20of%20line%20atomics for more discussion.
|
||||
//! See <https://community.arm.com/arm-community-blogs/b/tools-software-ides-blog/posts/making-the-most-of-the-arm-architecture-in-gcc-10#:~:text=out%20of%20line%20atomics> for more discussion.
|
||||
//!
|
||||
//! Currently we only support LL/SC, because LSE requires `getauxval` from libc in order to do runtime detection.
|
||||
//! Use the `compiler-rt` intrinsics if you want LSE support.
|
||||
|
|
|
|||
|
|
@ -4,12 +4,17 @@ use core::{arch, mem};
|
|||
// Kernel-provided user-mode helper functions:
|
||||
// https://www.kernel.org/doc/Documentation/arm/kernel_user_helpers.txt
|
||||
unsafe fn __kuser_cmpxchg(oldval: u32, newval: u32, ptr: *mut u32) -> bool {
|
||||
let f: extern "C" fn(u32, u32, *mut u32) -> u32 = mem::transmute(0xffff0fc0usize as *const ());
|
||||
// FIXME(volatile): the third parameter is a volatile pointer
|
||||
// SAFETY: kernel docs specify a known address with the given signature
|
||||
let f = unsafe {
|
||||
mem::transmute::<_, extern "C" fn(u32, u32, *mut u32) -> u32>(0xffff0fc0usize as *const ())
|
||||
};
|
||||
f(oldval, newval, ptr) == 0
|
||||
}
|
||||
|
||||
unsafe fn __kuser_memory_barrier() {
|
||||
let f: extern "C" fn() = mem::transmute(0xffff0fa0usize as *const ());
|
||||
// SAFETY: kernel docs specify a known address with the given signature
|
||||
let f = unsafe { mem::transmute::<_, extern "C" fn()>(0xffff0fa0usize as *const ()) };
|
||||
f();
|
||||
}
|
||||
|
||||
|
|
@ -67,8 +72,10 @@ fn insert_aligned(aligned: u32, val: u32, shift: u32, mask: u32) -> u32 {
|
|||
/// - if `size_of::<T>() == 2`, `ptr` or `ptr` offset by 2 bytes must be valid for a relaxed atomic
|
||||
/// read of 2 bytes.
|
||||
/// - if `size_of::<T>() == 4`, `ptr` must be valid for a relaxed atomic read of 4 bytes.
|
||||
// FIXME: assert some of the preconditions in debug mode
|
||||
unsafe fn atomic_load_aligned<T>(ptr: *mut u32) -> u32 {
|
||||
if mem::size_of::<T>() == 4 {
|
||||
const { assert!(size_of::<T>() <= 4) };
|
||||
if size_of::<T>() == 4 {
|
||||
// SAFETY: As `T` has a size of 4, the caller garantees this is sound.
|
||||
unsafe { AtomicU32::from_ptr(ptr).load(Ordering::Relaxed) }
|
||||
} else {
|
||||
|
|
@ -100,11 +107,13 @@ unsafe fn atomic_rmw<T, F: Fn(u32) -> u32, G: Fn(u32, u32) -> u32>(ptr: *mut T,
|
|||
let (shift, mask) = get_shift_mask(ptr);
|
||||
|
||||
loop {
|
||||
let curval_aligned = atomic_load_aligned::<T>(aligned_ptr);
|
||||
// FIXME(safety): preconditions review needed
|
||||
let curval_aligned = unsafe { atomic_load_aligned::<T>(aligned_ptr) };
|
||||
let curval = extract_aligned(curval_aligned, shift, mask);
|
||||
let newval = f(curval);
|
||||
let newval_aligned = insert_aligned(curval_aligned, newval, shift, mask);
|
||||
if __kuser_cmpxchg(curval_aligned, newval_aligned, aligned_ptr) {
|
||||
// FIXME(safety): preconditions review needed
|
||||
if unsafe { __kuser_cmpxchg(curval_aligned, newval_aligned, aligned_ptr) } {
|
||||
return g(curval, newval);
|
||||
}
|
||||
}
|
||||
|
|
@ -116,13 +125,15 @@ unsafe fn atomic_cmpxchg<T>(ptr: *mut T, oldval: u32, newval: u32) -> u32 {
|
|||
let (shift, mask) = get_shift_mask(ptr);
|
||||
|
||||
loop {
|
||||
let curval_aligned = atomic_load_aligned::<T>(aligned_ptr);
|
||||
// FIXME(safety): preconditions review needed
|
||||
let curval_aligned = unsafe { atomic_load_aligned::<T>(aligned_ptr) };
|
||||
let curval = extract_aligned(curval_aligned, shift, mask);
|
||||
if curval != oldval {
|
||||
return curval;
|
||||
}
|
||||
let newval_aligned = insert_aligned(curval_aligned, newval, shift, mask);
|
||||
if __kuser_cmpxchg(curval_aligned, newval_aligned, aligned_ptr) {
|
||||
// FIXME(safety): preconditions review needed
|
||||
if unsafe { __kuser_cmpxchg(curval_aligned, newval_aligned, aligned_ptr) } {
|
||||
return oldval;
|
||||
}
|
||||
}
|
||||
|
|
@ -132,7 +143,14 @@ macro_rules! atomic_rmw {
|
|||
($name:ident, $ty:ty, $op:expr, $fetch:expr) => {
|
||||
intrinsics! {
|
||||
pub unsafe extern "C" fn $name(ptr: *mut $ty, val: $ty) -> $ty {
|
||||
atomic_rmw(ptr, |x| $op(x as $ty, val) as u32, |old, new| $fetch(old, new)) as $ty
|
||||
// FIXME(safety): preconditions review needed
|
||||
unsafe {
|
||||
atomic_rmw(
|
||||
ptr,
|
||||
|x| $op(x as $ty, val) as u32,
|
||||
|old, new| $fetch(old, new)
|
||||
) as $ty
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
@ -149,7 +167,8 @@ macro_rules! atomic_cmpxchg {
|
|||
($name:ident, $ty:ty) => {
|
||||
intrinsics! {
|
||||
pub unsafe extern "C" fn $name(ptr: *mut $ty, oldval: $ty, newval: $ty) -> $ty {
|
||||
atomic_cmpxchg(ptr, oldval as u32, newval as u32) as $ty
|
||||
// FIXME(safety): preconditions review needed
|
||||
unsafe { atomic_cmpxchg(ptr, oldval as u32, newval as u32) as $ty }
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
@ -285,6 +304,7 @@ atomic_cmpxchg!(__sync_val_compare_and_swap_4, u32);
|
|||
|
||||
intrinsics! {
|
||||
pub unsafe extern "C" fn __sync_synchronize() {
|
||||
__kuser_memory_barrier();
|
||||
// SAFETY: preconditions are the same as the calling function.
|
||||
unsafe { __kuser_memory_barrier() };
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ pub unsafe fn copy_backward(dest: *mut u8, src: *const u8, count: usize) {
|
|||
"rep movsb",
|
||||
"sub $7, %rsi",
|
||||
"sub $7, %rdi",
|
||||
"mov {qword_count}, %rcx",
|
||||
"mov {qword_count:r}, %rcx",
|
||||
"rep movsq",
|
||||
"test {pre_byte_count:e}, {pre_byte_count:e}",
|
||||
"add $7, %rsi",
|
||||
|
|
@ -212,7 +212,7 @@ pub unsafe fn c_string_length(mut s: *const core::ffi::c_char) -> usize {
|
|||
let x = {
|
||||
let r;
|
||||
asm!(
|
||||
"movdqa ({addr}), {dest}",
|
||||
"movdqa ({addr:r}), {dest}",
|
||||
addr = in(reg) s,
|
||||
dest = out(xmm_reg) r,
|
||||
options(att_syntax, nostack),
|
||||
|
|
@ -232,7 +232,7 @@ pub unsafe fn c_string_length(mut s: *const core::ffi::c_char) -> usize {
|
|||
let x = {
|
||||
let r;
|
||||
asm!(
|
||||
"movdqa ({addr}), {dest}",
|
||||
"movdqa ({addr:r}), {dest}",
|
||||
addr = in(reg) s,
|
||||
dest = out(xmm_reg) r,
|
||||
options(att_syntax, nostack),
|
||||
|
|
|
|||
|
|
@ -197,7 +197,6 @@
|
|||
#![feature(riscv_target_feature)]
|
||||
#![feature(rtm_target_feature)]
|
||||
#![feature(s390x_target_feature)]
|
||||
#![feature(sha512_sm_x86)]
|
||||
#![feature(sse4a_target_feature)]
|
||||
#![feature(tbm_target_feature)]
|
||||
#![feature(wasm_target_feature)]
|
||||
|
|
|
|||
|
|
@ -131,6 +131,8 @@ define_valid_range_type! {
|
|||
pub struct NonZeroI32Inner(i32 as u32 in 1..=0xffff_ffff);
|
||||
pub struct NonZeroI64Inner(i64 as u64 in 1..=0xffffffff_ffffffff);
|
||||
pub struct NonZeroI128Inner(i128 as u128 in 1..=0xffffffffffffffff_ffffffffffffffff);
|
||||
|
||||
pub struct NonZeroCharInner(char as u32 in 1..=0x10ffff);
|
||||
}
|
||||
|
||||
#[cfg(target_pointer_width = "16")]
|
||||
|
|
|
|||
|
|
@ -79,6 +79,7 @@ impl_zeroable_primitive!(
|
|||
NonZeroI64Inner(i64),
|
||||
NonZeroI128Inner(i128),
|
||||
NonZeroIsizeInner(isize),
|
||||
NonZeroCharInner(char),
|
||||
);
|
||||
|
||||
/// A value that is known not to equal zero.
|
||||
|
|
|
|||
|
|
@ -89,7 +89,8 @@ impl<T: Sized> NonNull<T> {
|
|||
/// For more details, see the equivalent method on a raw pointer, [`ptr::without_provenance_mut`].
|
||||
///
|
||||
/// This is a [Strict Provenance][crate::ptr#strict-provenance] API.
|
||||
#[unstable(feature = "nonnull_provenance", issue = "135243")]
|
||||
#[stable(feature = "nonnull_provenance", since = "CURRENT_RUSTC_VERSION")]
|
||||
#[rustc_const_stable(feature = "nonnull_provenance", since = "CURRENT_RUSTC_VERSION")]
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub const fn without_provenance(addr: NonZero<usize>) -> Self {
|
||||
|
|
@ -132,7 +133,7 @@ impl<T: Sized> NonNull<T> {
|
|||
/// For more details, see the equivalent method on a raw pointer, [`ptr::with_exposed_provenance_mut`].
|
||||
///
|
||||
/// This is an [Exposed Provenance][crate::ptr#exposed-provenance] API.
|
||||
#[unstable(feature = "nonnull_provenance", issue = "135243")]
|
||||
#[stable(feature = "nonnull_provenance", since = "CURRENT_RUSTC_VERSION")]
|
||||
#[inline]
|
||||
pub fn with_exposed_provenance(addr: NonZero<usize>) -> Self {
|
||||
// SAFETY: we know `addr` is non-zero.
|
||||
|
|
@ -329,7 +330,7 @@ impl<T: ?Sized> NonNull<T> {
|
|||
/// For more details, see the equivalent method on a raw pointer, [`pointer::expose_provenance`].
|
||||
///
|
||||
/// This is an [Exposed Provenance][crate::ptr#exposed-provenance] API.
|
||||
#[unstable(feature = "nonnull_provenance", issue = "135243")]
|
||||
#[stable(feature = "nonnull_provenance", since = "CURRENT_RUSTC_VERSION")]
|
||||
pub fn expose_provenance(self) -> NonZero<usize> {
|
||||
// SAFETY: The pointer is guaranteed by the type to be non-null,
|
||||
// meaning that the address will be non-zero.
|
||||
|
|
|
|||
|
|
@ -22,20 +22,19 @@ mod u64;
|
|||
mod u8;
|
||||
|
||||
mod bignum;
|
||||
|
||||
mod const_from;
|
||||
mod dec2flt;
|
||||
mod float_iter_sum_identity;
|
||||
mod flt2dec;
|
||||
mod ieee754;
|
||||
mod int_log;
|
||||
mod int_sqrt;
|
||||
mod midpoint;
|
||||
mod nan;
|
||||
mod niche_types;
|
||||
mod ops;
|
||||
mod wrapping;
|
||||
|
||||
mod float_iter_sum_identity;
|
||||
mod ieee754;
|
||||
mod nan;
|
||||
|
||||
/// Adds the attribute to all items in the block.
|
||||
macro_rules! cfg_block {
|
||||
($(#[$attr:meta]{$($it:item)*})*) => {$($(
|
||||
|
|
|
|||
12
library/coretests/tests/num/niche_types.rs
Normal file
12
library/coretests/tests/num/niche_types.rs
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
use core::num::NonZero;
|
||||
|
||||
#[test]
|
||||
fn test_new_from_zero_is_none() {
|
||||
assert_eq!(NonZero::<char>::new(0 as char), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_new_from_extreme_is_some() {
|
||||
assert!(NonZero::<char>::new(1 as char).is_some());
|
||||
assert!(NonZero::<char>::new(char::MAX).is_some());
|
||||
}
|
||||
|
|
@ -13,7 +13,7 @@ doc = false
|
|||
|
||||
[dependencies]
|
||||
core = { path = "../core" }
|
||||
compiler_builtins = "0.1.0"
|
||||
compiler_builtins = { path = "../compiler-builtins/compiler-builtins" }
|
||||
|
||||
[target.'cfg(target_os = "android")'.dependencies]
|
||||
libc = { version = "0.2", default-features = false }
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ doc = false
|
|||
alloc = { path = "../alloc" }
|
||||
core = { path = "../core" }
|
||||
unwind = { path = "../unwind" }
|
||||
compiler_builtins = "0.1.0"
|
||||
compiler_builtins = { path = "../compiler-builtins/compiler-builtins" }
|
||||
cfg-if = { version = "1.0", features = ['rustc-dep-of-std'] }
|
||||
|
||||
[target.'cfg(not(all(windows, target_env = "msvc")))'.dependencies]
|
||||
|
|
|
|||
|
|
@ -12,3 +12,4 @@ path = "lib.rs"
|
|||
|
||||
[dependencies]
|
||||
core = { path = "../core" }
|
||||
compiler_builtins = { path = "../compiler-builtins/compiler-builtins", features = ["compiler-builtins"] }
|
||||
|
|
|
|||
|
|
@ -2,3 +2,7 @@
|
|||
#![no_core]
|
||||
|
||||
pub use core::*;
|
||||
|
||||
// Crate must be brought into scope so it appears in the crate graph for anything that
|
||||
// depends on `rustc-std-workspace-core`.
|
||||
use compiler_builtins as _;
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ cfg-if = { version = "1.0", features = ['rustc-dep-of-std'] }
|
|||
panic_unwind = { path = "../panic_unwind", optional = true }
|
||||
panic_abort = { path = "../panic_abort" }
|
||||
core = { path = "../core", public = true }
|
||||
compiler_builtins = { version = "=0.1.160" }
|
||||
compiler_builtins = { path = "../compiler-builtins/compiler-builtins" }
|
||||
unwind = { path = "../unwind" }
|
||||
hashbrown = { version = "0.15", default-features = false, features = [
|
||||
'rustc-dep-of-std',
|
||||
|
|
|
|||
|
|
@ -351,7 +351,6 @@
|
|||
#![feature(lazy_get)]
|
||||
#![feature(maybe_uninit_slice)]
|
||||
#![feature(maybe_uninit_write_slice)]
|
||||
#![feature(nonnull_provenance)]
|
||||
#![feature(panic_can_unwind)]
|
||||
#![feature(panic_internals)]
|
||||
#![feature(pin_coerce_unsized_trait)]
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ doc = false
|
|||
|
||||
[dependencies]
|
||||
core = { path = "../core" }
|
||||
compiler_builtins = "0.1.0"
|
||||
compiler_builtins = { path = "../compiler-builtins/compiler-builtins" }
|
||||
cfg-if = "1.0"
|
||||
|
||||
[target.'cfg(not(all(windows, target_env = "msvc")))'.dependencies]
|
||||
|
|
|
|||
|
|
@ -2,6 +2,15 @@
|
|||
# It is not intended for manual editing.
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "aho-corasick"
|
||||
version = "1.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anyhow"
|
||||
version = "1.0.97"
|
||||
|
|
@ -207,12 +216,42 @@ dependencies = [
|
|||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustc-build-sysroot"
|
||||
version = "0.5.7"
|
||||
name = "regex"
|
||||
version = "1.11.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "10edc2e4393515193bd766e2f6c050b0536a68e56f2b6d56c07ababfdc114ff0"
|
||||
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"memchr",
|
||||
"regex-automata",
|
||||
"regex-syntax",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex-automata"
|
||||
version = "0.4.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"memchr",
|
||||
"regex-syntax",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex-syntax"
|
||||
version = "0.8.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
|
||||
|
||||
[[package]]
|
||||
name = "rustc-build-sysroot"
|
||||
version = "0.5.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "16d115ad7e26e0d1337f64ae6598f758194696afc2e9f34c8a6f24582529c3dc"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"regex",
|
||||
"rustc_version",
|
||||
"tempfile",
|
||||
"walkdir",
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ directories = "6"
|
|||
rustc_version = "0.4"
|
||||
serde_json = "1.0.40"
|
||||
cargo_metadata = "0.19"
|
||||
rustc-build-sysroot = "0.5.7"
|
||||
rustc-build-sysroot = "0.5.8"
|
||||
|
||||
# Enable some feature flags that dev-dependencies need but dependencies
|
||||
# do not. This makes `./miri install` after `./miri build` faster.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
error: linking with `./fake-linker` failed: exit status: 1
|
||||
|
|
||||
= note: "./fake-linker" "-m64" "/symbols.o" "<2 object files omitted>" "-Wl,--as-needed" "-Wl,-Bstatic" "<sysroot>/lib/rustlib/x86_64-unknown-linux-gnu/lib/{libstd-*,libpanic_unwind-*,libobject-*,libmemchr-*,libaddr2line-*,libgimli-*,librustc_demangle-*,libstd_detect-*,libhashbrown-*,librustc_std_workspace_alloc-*,libminiz_oxide-*,libadler2-*,libunwind-*,libcfg_if-*,liblibc-*,liballoc-*,librustc_std_workspace_core-*,libcore-*,libcompiler_builtins-*}.rlib" "-Wl,-Bdynamic" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-L" "/raw-dylibs" "-Wl,--eh-frame-hdr" "-Wl,-z,noexecstack" "-L" "/build-root/test/run-make/linker-warning/rmake_out" "-L" "<sysroot>/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-o" "main" "-Wl,--gc-sections" "-pie" "-Wl,-z,relro,-z,now" "-nodefaultlibs" "run_make_error"
|
||||
= note: "./fake-linker" "-m64" "/symbols.o" "<2 object files omitted>" "-Wl,--as-needed" "-Wl,-Bstatic" "<sysroot>/lib/rustlib/x86_64-unknown-linux-gnu/lib/{libstd-*,libpanic_unwind-*,libobject-*,libmemchr-*,libaddr2line-*,libgimli-*,librustc_demangle-*,libstd_detect-*,libhashbrown-*,librustc_std_workspace_alloc-*,libminiz_oxide-*,libadler2-*,libunwind-*,libcfg_if-*,liblibc-*,librustc_std_workspace_core-*,liballoc-*,libcore-*,libcompiler_builtins-*}.rlib" "-Wl,-Bdynamic" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-L" "/raw-dylibs" "-Wl,--eh-frame-hdr" "-Wl,-z,noexecstack" "-L" "/build-root/test/run-make/linker-warning/rmake_out" "-L" "<sysroot>/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-o" "main" "-Wl,--gc-sections" "-pie" "-Wl,-z,relro,-z,now" "-nodefaultlibs" "run_make_error"
|
||||
= note: some arguments are omitted. use `--verbose` to show all linker arguments
|
||||
= note: error: baz
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +0,0 @@
|
|||
//@ only-x86_64
|
||||
#[target_feature(enable = "sha512")]
|
||||
//~^ ERROR: currently unstable
|
||||
unsafe fn foo() {}
|
||||
|
||||
fn main() {}
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
error[E0658]: the target feature `sha512` is currently unstable
|
||||
--> $DIR/feature-gate-sha512_sm_x86.rs:2:18
|
||||
|
|
||||
LL | #[target_feature(enable = "sha512")]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #126624 <https://github.com/rust-lang/rust/issues/126624> for more information
|
||||
= help: add `#![feature(sha512_sm_x86)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0658`.
|
||||
15
tests/ui/lint/dead-code/const-underscore-issue-142104.rs
Normal file
15
tests/ui/lint/dead-code/const-underscore-issue-142104.rs
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
//@ check-pass
|
||||
|
||||
// This test makes sure we always considers `const _` items as live for dead code analysis.
|
||||
|
||||
#![deny(dead_code)]
|
||||
|
||||
const fn is_nonzero(x: u8) -> bool {
|
||||
x != 0
|
||||
}
|
||||
|
||||
const _: () = {
|
||||
assert!(is_nonzero(2));
|
||||
};
|
||||
|
||||
fn main() {}
|
||||
Loading…
Add table
Add a link
Reference in a new issue