mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
Auto merge of #132664 - matthiaskrgr:rollup-i27nr7i, r=matthiaskrgr
Rollup of 5 pull requests Successful merges: - #131261 (Stabilize `UnsafeCell::from_mut`) - #131405 (bootstrap/codegen_ssa: ship llvm-strip and use it for -Cstrip) - #132077 (Add a new `wide-arithmetic` feature for WebAssembly) - #132562 (Remove the `wasm32-wasi` target from rustc) - #132660 (Remove unused errs.rs file) Failed merges: - #131721 (Add new unstable feature `const_eq_ignore_ascii_case`) r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
a69df72bdc
@ -277,6 +277,9 @@ pub(crate) fn to_llvm_features<'a>(sess: &Session, s: &'a str) -> Option<LLVMFea
|
|||||||
("x86", s) if s.starts_with("avx512") => {
|
("x86", s) if s.starts_with("avx512") => {
|
||||||
Some(LLVMFeature::with_dependency(s, TargetFeatureFoldStrength::EnableOnly("evex512")))
|
Some(LLVMFeature::with_dependency(s, TargetFeatureFoldStrength::EnableOnly("evex512")))
|
||||||
}
|
}
|
||||||
|
// Support for `wide-arithmetic` will first land in LLVM 20 as part of
|
||||||
|
// llvm/llvm-project#111598
|
||||||
|
("wasm32" | "wasm64", "wide-arithmetic") if get_version() < (20, 0, 0) => None,
|
||||||
(_, s) => Some(LLVMFeature::new(s)),
|
(_, s) => Some(LLVMFeature::new(s)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,8 @@ codegen_ssa_L4Bender_exporting_symbols_unimplemented = exporting symbols not imp
|
|||||||
|
|
||||||
codegen_ssa_add_native_library = failed to add native library {$library_path}: {$error}
|
codegen_ssa_add_native_library = failed to add native library {$library_path}: {$error}
|
||||||
|
|
||||||
|
codegen_ssa_aix_strip_not_used = using host's `strip` binary to cross-compile to AIX which is not guaranteed to work
|
||||||
|
|
||||||
codegen_ssa_apple_deployment_target_invalid =
|
codegen_ssa_apple_deployment_target_invalid =
|
||||||
failed to parse deployment target specified in {$env_var}: {$error}
|
failed to parse deployment target specified in {$env_var}: {$error}
|
||||||
|
|
||||||
|
@ -1085,9 +1085,7 @@ fn link_natively(
|
|||||||
let strip = sess.opts.cg.strip;
|
let strip = sess.opts.cg.strip;
|
||||||
|
|
||||||
if sess.target.is_like_osx {
|
if sess.target.is_like_osx {
|
||||||
// Use system `strip` when running on host macOS.
|
let stripcmd = "rust-objcopy";
|
||||||
// <https://github.com/rust-lang/rust/pull/130781>
|
|
||||||
let stripcmd = if cfg!(target_os = "macos") { "/usr/bin/strip" } else { "strip" };
|
|
||||||
match (strip, crate_type) {
|
match (strip, crate_type) {
|
||||||
(Strip::Debuginfo, _) => {
|
(Strip::Debuginfo, _) => {
|
||||||
strip_symbols_with_external_utility(sess, stripcmd, out_filename, Some("-S"))
|
strip_symbols_with_external_utility(sess, stripcmd, out_filename, Some("-S"))
|
||||||
@ -1103,11 +1101,14 @@ fn link_natively(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if sess.target.os == "illumos" {
|
if sess.target.is_like_solaris {
|
||||||
// Many illumos systems will have both the native 'strip' utility and
|
// Many illumos systems will have both the native 'strip' utility and
|
||||||
// the GNU one. Use the native version explicitly and do not rely on
|
// the GNU one. Use the native version explicitly and do not rely on
|
||||||
// what's in the path.
|
// what's in the path.
|
||||||
let stripcmd = "/usr/bin/strip";
|
//
|
||||||
|
// If cross-compiling and there is not a native version, then use
|
||||||
|
// `llvm-strip` and hope.
|
||||||
|
let stripcmd = if !sess.host.is_like_solaris { "rust-objcopy" } else { "/usr/bin/strip" };
|
||||||
match strip {
|
match strip {
|
||||||
// Always preserve the symbol table (-x).
|
// Always preserve the symbol table (-x).
|
||||||
Strip::Debuginfo => {
|
Strip::Debuginfo => {
|
||||||
@ -1120,6 +1121,10 @@ fn link_natively(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if sess.target.is_like_aix {
|
if sess.target.is_like_aix {
|
||||||
|
// `llvm-strip` doesn't work for AIX - their strip must be used.
|
||||||
|
if !sess.host.is_like_aix {
|
||||||
|
sess.dcx().emit_warn(errors::AixStripNotUsed);
|
||||||
|
}
|
||||||
let stripcmd = "/usr/bin/strip";
|
let stripcmd = "/usr/bin/strip";
|
||||||
match strip {
|
match strip {
|
||||||
Strip::Debuginfo => {
|
Strip::Debuginfo => {
|
||||||
@ -1147,6 +1152,13 @@ fn strip_symbols_with_external_utility(
|
|||||||
if let Some(option) = option {
|
if let Some(option) = option {
|
||||||
cmd.arg(option);
|
cmd.arg(option);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let mut new_path = sess.get_tools_search_paths(false);
|
||||||
|
if let Some(path) = env::var_os("PATH") {
|
||||||
|
new_path.extend(env::split_paths(&path));
|
||||||
|
}
|
||||||
|
cmd.env("PATH", env::join_paths(new_path).unwrap());
|
||||||
|
|
||||||
let prog = cmd.arg(out_filename).output();
|
let prog = cmd.arg(out_filename).output();
|
||||||
match prog {
|
match prog {
|
||||||
Ok(prog) => {
|
Ok(prog) => {
|
||||||
|
@ -1110,3 +1110,7 @@ impl<G: EmissionGuarantee> Diagnostic<'_, G> for TargetFeatureDisableOrEnable<'_
|
|||||||
diag
|
diag
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Diagnostic)]
|
||||||
|
#[diag(codegen_ssa_aix_strip_not_used)]
|
||||||
|
pub(crate) struct AixStripNotUsed;
|
||||||
|
@ -1,88 +0,0 @@
|
|||||||
use rustc_hir as hir;
|
|
||||||
use rustc_lint_defs::builtin::STATIC_MUT_REFS;
|
|
||||||
use rustc_middle::ty::{Mutability, TyCtxt};
|
|
||||||
use rustc_span::Span;
|
|
||||||
|
|
||||||
use crate::errors;
|
|
||||||
|
|
||||||
/// Check for shared or mutable references of `static mut` inside expression
|
|
||||||
pub(crate) fn maybe_expr_static_mut(tcx: TyCtxt<'_>, expr: hir::Expr<'_>) {
|
|
||||||
let span = expr.span;
|
|
||||||
let hir_id = expr.hir_id;
|
|
||||||
if let hir::ExprKind::AddrOf(borrow_kind, m, expr) = expr.kind
|
|
||||||
&& matches!(borrow_kind, hir::BorrowKind::Ref)
|
|
||||||
&& path_if_static_mut(expr)
|
|
||||||
{
|
|
||||||
handle_static_mut_ref(
|
|
||||||
tcx,
|
|
||||||
span,
|
|
||||||
span.with_hi(expr.span.lo()),
|
|
||||||
span.shrink_to_hi(),
|
|
||||||
span.edition().at_least_rust_2024(),
|
|
||||||
m,
|
|
||||||
hir_id,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Check for shared or mutable references of `static mut` inside statement
|
|
||||||
pub(crate) fn maybe_stmt_static_mut(tcx: TyCtxt<'_>, stmt: hir::Stmt<'_>) {
|
|
||||||
if let hir::StmtKind::Let(loc) = stmt.kind
|
|
||||||
&& let hir::PatKind::Binding(ba, _, _, _) = loc.pat.kind
|
|
||||||
&& let hir::ByRef::Yes(rmutbl) = ba.0
|
|
||||||
&& let Some(init) = loc.init
|
|
||||||
&& path_if_static_mut(init)
|
|
||||||
{
|
|
||||||
handle_static_mut_ref(
|
|
||||||
tcx,
|
|
||||||
init.span,
|
|
||||||
init.span.shrink_to_lo(),
|
|
||||||
init.span.shrink_to_hi(),
|
|
||||||
loc.span.edition().at_least_rust_2024(),
|
|
||||||
rmutbl,
|
|
||||||
stmt.hir_id,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn path_if_static_mut(expr: &hir::Expr<'_>) -> bool {
|
|
||||||
if let hir::ExprKind::Path(qpath) = expr.kind
|
|
||||||
&& let hir::QPath::Resolved(_, path) = qpath
|
|
||||||
&& let hir::def::Res::Def(def_kind, _) = path.res
|
|
||||||
&& let hir::def::DefKind::Static { safety: _, mutability: Mutability::Mut, nested: false } =
|
|
||||||
def_kind
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
false
|
|
||||||
}
|
|
||||||
|
|
||||||
fn handle_static_mut_ref(
|
|
||||||
tcx: TyCtxt<'_>,
|
|
||||||
span: Span,
|
|
||||||
lo: Span,
|
|
||||||
hi: Span,
|
|
||||||
e2024: bool,
|
|
||||||
mutable: Mutability,
|
|
||||||
hir_id: hir::HirId,
|
|
||||||
) {
|
|
||||||
if e2024 {
|
|
||||||
let (sugg, shared) = if mutable == Mutability::Mut {
|
|
||||||
(errors::MutRefSugg::Mut { lo, hi }, "mutable")
|
|
||||||
} else {
|
|
||||||
(errors::MutRefSugg::Shared { lo, hi }, "shared")
|
|
||||||
};
|
|
||||||
tcx.dcx().emit_err(errors::StaticMutRef { span, sugg, shared });
|
|
||||||
} else {
|
|
||||||
let (sugg, shared) = if mutable == Mutability::Mut {
|
|
||||||
(errors::MutRefSugg::Mut { lo, hi }, "mutable")
|
|
||||||
} else {
|
|
||||||
(errors::MutRefSugg::Shared { lo, hi }, "shared")
|
|
||||||
};
|
|
||||||
tcx.emit_node_span_lint(STATIC_MUT_REFS, hir_id, span, errors::RefOfMutStatic {
|
|
||||||
span,
|
|
||||||
sugg,
|
|
||||||
shared,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
@ -1351,19 +1351,6 @@ pub fn build_target_config(early_dcx: &EarlyDiagCtxt, opts: &Options, sysroot: &
|
|||||||
early_dcx.early_warn(warning)
|
early_dcx.early_warn(warning)
|
||||||
}
|
}
|
||||||
|
|
||||||
// The `wasm32-wasi` target is being renamed to `wasm32-wasip1` as
|
|
||||||
// part of rust-lang/compiler-team#607 and
|
|
||||||
// rust-lang/compiler-team#695. Warn unconditionally on usage to
|
|
||||||
// raise awareness of the renaming. This code will be deleted in
|
|
||||||
// October 2024.
|
|
||||||
if opts.target_triple.tuple() == "wasm32-wasi" {
|
|
||||||
early_dcx.early_warn(
|
|
||||||
"the `wasm32-wasi` target is being renamed to \
|
|
||||||
`wasm32-wasip1` and the `wasm32-wasi` target will be \
|
|
||||||
removed from nightly in October 2024 and removed from \
|
|
||||||
stable Rust in January 2025",
|
|
||||||
)
|
|
||||||
}
|
|
||||||
if !matches!(target.pointer_width, 16 | 32 | 64) {
|
if !matches!(target.pointer_width, 16 | 32 | 64) {
|
||||||
early_dcx.early_fatal(format!(
|
early_dcx.early_fatal(format!(
|
||||||
"target specification was invalid: unrecognized target-pointer-width {}",
|
"target specification was invalid: unrecognized target-pointer-width {}",
|
||||||
|
@ -1805,7 +1805,6 @@ supported_targets! {
|
|||||||
("wasm32-unknown-emscripten", wasm32_unknown_emscripten),
|
("wasm32-unknown-emscripten", wasm32_unknown_emscripten),
|
||||||
("wasm32-unknown-unknown", wasm32_unknown_unknown),
|
("wasm32-unknown-unknown", wasm32_unknown_unknown),
|
||||||
("wasm32v1-none", wasm32v1_none),
|
("wasm32v1-none", wasm32v1_none),
|
||||||
("wasm32-wasi", wasm32_wasi),
|
|
||||||
("wasm32-wasip1", wasm32_wasip1),
|
("wasm32-wasip1", wasm32_wasip1),
|
||||||
("wasm32-wasip2", wasm32_wasip2),
|
("wasm32-wasip2", wasm32_wasip2),
|
||||||
("wasm32-wasip1-threads", wasm32_wasip1_threads),
|
("wasm32-wasip1-threads", wasm32_wasip1_threads),
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
//! NB: This target is in the process of being renamed to
|
|
||||||
//! `wasm32-wasip1`. For more information see:
|
|
||||||
//!
|
|
||||||
//! * <https://github.com/rust-lang/compiler-team/issues/607>
|
|
||||||
//! * <https://github.com/rust-lang/compiler-team/issues/695>
|
|
||||||
|
|
||||||
use crate::spec::Target;
|
|
||||||
|
|
||||||
pub(crate) fn target() -> Target {
|
|
||||||
super::wasm32_wasip1::target()
|
|
||||||
}
|
|
@ -17,7 +17,7 @@ pub(crate) fn target() -> Target {
|
|||||||
|
|
||||||
options.os = "wasi".into();
|
options.os = "wasi".into();
|
||||||
options.env = "p1".into();
|
options.env = "p1".into();
|
||||||
options.add_pre_link_args(LinkerFlavor::WasmLld(Cc::Yes), &["--target=wasm32-wasi"]);
|
options.add_pre_link_args(LinkerFlavor::WasmLld(Cc::Yes), &["--target=wasm32-wasip1"]);
|
||||||
|
|
||||||
options.pre_link_objects_self_contained = crt_objects::pre_wasi_self_contained();
|
options.pre_link_objects_self_contained = crt_objects::pre_wasi_self_contained();
|
||||||
options.post_link_objects_self_contained = crt_objects::post_wasi_self_contained();
|
options.post_link_objects_self_contained = crt_objects::post_wasi_self_contained();
|
||||||
@ -47,7 +47,7 @@ pub(crate) fn target() -> Target {
|
|||||||
options.entry_name = "__main_void".into();
|
options.entry_name = "__main_void".into();
|
||||||
|
|
||||||
Target {
|
Target {
|
||||||
llvm_target: "wasm32-wasi".into(),
|
llvm_target: "wasm32-wasip1".into(),
|
||||||
metadata: crate::spec::TargetMetadata {
|
metadata: crate::spec::TargetMetadata {
|
||||||
description: Some("WebAssembly with WASI".into()),
|
description: Some("WebAssembly with WASI".into()),
|
||||||
tier: Some(2),
|
tier: Some(2),
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//! The `wasm32-wasip2` target is the next evolution of the
|
//! The `wasm32-wasip2` target is the next evolution of the
|
||||||
//! wasm32-wasi target. While the wasi specification is still under
|
//! wasm32-wasip1 target. While the wasi specification is still under
|
||||||
//! active development, the preview 2 iteration is considered an "island
|
//! active development, the preview 2 iteration is considered an "island
|
||||||
//! of stability" that should allow users to rely on it indefinitely.
|
//! of stability" that should allow users to rely on it indefinitely.
|
||||||
//!
|
//!
|
||||||
|
@ -470,6 +470,7 @@ const WASM_FEATURES: &[(&str, Stability, ImpliedFeatures)] = &[
|
|||||||
("relaxed-simd", Stable, &["simd128"]),
|
("relaxed-simd", Stable, &["simd128"]),
|
||||||
("sign-ext", Stable, &[]),
|
("sign-ext", Stable, &[]),
|
||||||
("simd128", Stable, &[]),
|
("simd128", Stable, &[]),
|
||||||
|
("wide-arithmetic", Unstable(sym::wasm_target_feature), &[]),
|
||||||
// tidy-alphabetical-end
|
// tidy-alphabetical-end
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -2122,7 +2122,6 @@ impl<T: ?Sized> UnsafeCell<T> {
|
|||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// # #![feature(unsafe_cell_from_mut)]
|
|
||||||
/// use std::cell::UnsafeCell;
|
/// use std::cell::UnsafeCell;
|
||||||
///
|
///
|
||||||
/// let mut val = 42;
|
/// let mut val = 42;
|
||||||
@ -2132,7 +2131,9 @@ impl<T: ?Sized> UnsafeCell<T> {
|
|||||||
/// assert_eq!(*uc.get_mut(), 41);
|
/// assert_eq!(*uc.get_mut(), 41);
|
||||||
/// ```
|
/// ```
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
#[unstable(feature = "unsafe_cell_from_mut", issue = "111645")]
|
#[stable(feature = "unsafe_cell_from_mut", since = "CURRENT_RUSTC_VERSION")]
|
||||||
|
#[rustc_const_stable(feature = "unsafe_cell_from_mut", since = "CURRENT_RUSTC_VERSION")]
|
||||||
|
#[cfg_attr(bootstrap, rustc_allow_const_fn_unstable(const_mut_refs))]
|
||||||
pub const fn from_mut(value: &mut T) -> &mut UnsafeCell<T> {
|
pub const fn from_mut(value: &mut T) -> &mut UnsafeCell<T> {
|
||||||
// SAFETY: `UnsafeCell<T>` has the same memory layout as `T` due to #[repr(transparent)].
|
// SAFETY: `UnsafeCell<T>` has the same memory layout as `T` due to #[repr(transparent)].
|
||||||
unsafe { &mut *(value as *mut T as *mut UnsafeCell<T>) }
|
unsafe { &mut *(value as *mut T as *mut UnsafeCell<T>) }
|
||||||
|
@ -219,8 +219,7 @@ impl Step for Std {
|
|||||||
.join(compiler.host)
|
.join(compiler.host)
|
||||||
.join("bin");
|
.join("bin");
|
||||||
if src_sysroot_bin.exists() {
|
if src_sysroot_bin.exists() {
|
||||||
let target_sysroot_bin =
|
let target_sysroot_bin = builder.sysroot_target_bindir(compiler, target);
|
||||||
builder.sysroot_target_libdir(compiler, target).parent().unwrap().join("bin");
|
|
||||||
t!(fs::create_dir_all(&target_sysroot_bin));
|
t!(fs::create_dir_all(&target_sysroot_bin));
|
||||||
builder.cp_link_r(&src_sysroot_bin, &target_sysroot_bin);
|
builder.cp_link_r(&src_sysroot_bin, &target_sysroot_bin);
|
||||||
}
|
}
|
||||||
@ -1977,6 +1976,14 @@ impl Step for Assemble {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// `llvm-strip` is used by rustc, which is actually just a symlink to `llvm-objcopy`,
|
||||||
|
// so copy and rename `llvm-objcopy`.
|
||||||
|
let src_exe = exe("llvm-objcopy", target_compiler.host);
|
||||||
|
let dst_exe = exe("rust-objcopy", target_compiler.host);
|
||||||
|
builder.copy_link(&libdir_bin.join(src_exe), &libdir_bin.join(dst_exe));
|
||||||
|
}
|
||||||
|
|
||||||
// In addition to `rust-lld` also install `wasm-component-ld` when
|
// In addition to `rust-lld` also install `wasm-component-ld` when
|
||||||
// LLD is enabled. This is a relatively small binary that primarily
|
// LLD is enabled. This is a relatively small binary that primarily
|
||||||
// delegates to the `rust-lld` binary for linking and then runs
|
// delegates to the `rust-lld` binary for linking and then runs
|
||||||
|
@ -459,8 +459,7 @@ impl Step for Rustc {
|
|||||||
|
|
||||||
// Copy over lld if it's there
|
// Copy over lld if it's there
|
||||||
if builder.config.lld_enabled {
|
if builder.config.lld_enabled {
|
||||||
let src_dir =
|
let src_dir = builder.sysroot_target_bindir(compiler, host);
|
||||||
builder.sysroot_target_libdir(compiler, host).parent().unwrap().join("bin");
|
|
||||||
let rust_lld = exe("rust-lld", compiler.host);
|
let rust_lld = exe("rust-lld", compiler.host);
|
||||||
builder.copy_link(&src_dir.join(&rust_lld), &dst_dir.join(&rust_lld));
|
builder.copy_link(&src_dir.join(&rust_lld), &dst_dir.join(&rust_lld));
|
||||||
let self_contained_lld_src_dir = src_dir.join("gcc-ld");
|
let self_contained_lld_src_dir = src_dir.join("gcc-ld");
|
||||||
@ -474,9 +473,16 @@ impl Step for Rustc {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
let src_dir = builder.sysroot_target_bindir(compiler, host);
|
||||||
|
let llvm_objcopy = exe("llvm-objcopy", compiler.host);
|
||||||
|
let rust_objcopy = exe("rust-objcopy", compiler.host);
|
||||||
|
builder.copy_link(&src_dir.join(&llvm_objcopy), &dst_dir.join(&rust_objcopy));
|
||||||
|
}
|
||||||
|
|
||||||
if builder.tool_enabled("wasm-component-ld") {
|
if builder.tool_enabled("wasm-component-ld") {
|
||||||
let src_dir =
|
let src_dir = builder.sysroot_target_bindir(compiler, host);
|
||||||
builder.sysroot_target_libdir(compiler, host).parent().unwrap().join("bin");
|
|
||||||
let ld = exe("wasm-component-ld", compiler.host);
|
let ld = exe("wasm-component-ld", compiler.host);
|
||||||
builder.copy_link(&src_dir.join(&ld), &dst_dir.join(&ld));
|
builder.copy_link(&src_dir.join(&ld), &dst_dir.join(&ld));
|
||||||
}
|
}
|
||||||
|
@ -1161,6 +1161,11 @@ impl<'a> Builder<'a> {
|
|||||||
self.ensure(compile::Sysroot::new(compiler))
|
self.ensure(compile::Sysroot::new(compiler))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns the bindir for a compiler's sysroot.
|
||||||
|
pub fn sysroot_target_bindir(&self, compiler: Compiler, target: TargetSelection) -> PathBuf {
|
||||||
|
self.sysroot_target_libdir(compiler, target).parent().unwrap().join("bin")
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns the libdir where the standard library and other artifacts are
|
/// Returns the libdir where the standard library and other artifacts are
|
||||||
/// found for a compiler's sysroot.
|
/// found for a compiler's sysroot.
|
||||||
pub fn sysroot_target_libdir(&self, compiler: Compiler, target: TargetSelection) -> PathBuf {
|
pub fn sysroot_target_libdir(&self, compiler: Compiler, target: TargetSelection) -> PathBuf {
|
||||||
|
@ -114,7 +114,6 @@ ENV CARGO_TARGET_AARCH64_UNKNOWN_FUCHSIA_RUSTFLAGS \
|
|||||||
ENV TARGETS=x86_64-unknown-fuchsia
|
ENV TARGETS=x86_64-unknown-fuchsia
|
||||||
ENV TARGETS=$TARGETS,aarch64-unknown-fuchsia
|
ENV TARGETS=$TARGETS,aarch64-unknown-fuchsia
|
||||||
ENV TARGETS=$TARGETS,wasm32-unknown-unknown
|
ENV TARGETS=$TARGETS,wasm32-unknown-unknown
|
||||||
ENV TARGETS=$TARGETS,wasm32-wasi
|
|
||||||
ENV TARGETS=$TARGETS,wasm32-wasip1
|
ENV TARGETS=$TARGETS,wasm32-wasip1
|
||||||
ENV TARGETS=$TARGETS,wasm32-wasip1-threads
|
ENV TARGETS=$TARGETS,wasm32-wasip1-threads
|
||||||
ENV TARGETS=$TARGETS,wasm32-wasip2
|
ENV TARGETS=$TARGETS,wasm32-wasip2
|
||||||
|
@ -192,8 +192,8 @@ target | std | notes
|
|||||||
[`thumbv8m.main-none-eabihf`](platform-support/thumbv8m.main-none-eabi.md) | * | Bare Armv8-M Mainline, hardfloat
|
[`thumbv8m.main-none-eabihf`](platform-support/thumbv8m.main-none-eabi.md) | * | Bare Armv8-M Mainline, hardfloat
|
||||||
[`wasm32-unknown-emscripten`](platform-support/wasm32-unknown-emscripten.md) | ✓ | WebAssembly via Emscripten
|
[`wasm32-unknown-emscripten`](platform-support/wasm32-unknown-emscripten.md) | ✓ | WebAssembly via Emscripten
|
||||||
[`wasm32-unknown-unknown`](platform-support/wasm32-unknown-unknown.md) | ✓ | WebAssembly
|
[`wasm32-unknown-unknown`](platform-support/wasm32-unknown-unknown.md) | ✓ | WebAssembly
|
||||||
`wasm32-wasi` | ✓ | WebAssembly with WASI (undergoing a [rename to `wasm32-wasip1`][wasi-rename])
|
[`wasm32-wasip1`](platform-support/wasm32-wasip1.md) | ✓ | WebAssembly with WASIp1
|
||||||
[`wasm32-wasip1`](platform-support/wasm32-wasip1.md) | ✓ | WebAssembly with WASI
|
[`wasm32-wasip2`](platform-support/wasm32-wasip2.md) | ✓ | WebAssembly with WASIp2
|
||||||
[`wasm32-wasip1-threads`](platform-support/wasm32-wasip1-threads.md) | ✓ | WebAssembly with WASI Preview 1 and threads
|
[`wasm32-wasip1-threads`](platform-support/wasm32-wasip1-threads.md) | ✓ | WebAssembly with WASI Preview 1 and threads
|
||||||
[`wasm32v1-none`](platform-support/wasm32v1-none.md) | * | WebAssembly limited to 1.0 features and no imports
|
[`wasm32v1-none`](platform-support/wasm32v1-none.md) | * | WebAssembly limited to 1.0 features and no imports
|
||||||
[`x86_64-apple-ios`](platform-support/apple-ios.md) | ✓ | 64-bit x86 iOS
|
[`x86_64-apple-ios`](platform-support/apple-ios.md) | ✓ | 64-bit x86 iOS
|
||||||
@ -377,7 +377,6 @@ target | std | host | notes
|
|||||||
`thumbv7a-pc-windows-msvc` | ✓ | |
|
`thumbv7a-pc-windows-msvc` | ✓ | |
|
||||||
`thumbv7a-uwp-windows-msvc` | ✓ | |
|
`thumbv7a-uwp-windows-msvc` | ✓ | |
|
||||||
`thumbv7neon-unknown-linux-musleabihf` | ? | | Thumb2-mode Armv7-A Linux with NEON, musl 1.2.3
|
`thumbv7neon-unknown-linux-musleabihf` | ? | | Thumb2-mode Armv7-A Linux with NEON, musl 1.2.3
|
||||||
[`wasm32-wasip2`](platform-support/wasm32-wasip2.md) | ✓ | | WebAssembly
|
|
||||||
[`wasm64-unknown-unknown`](platform-support/wasm64-unknown-unknown.md) | ? | | WebAssembly
|
[`wasm64-unknown-unknown`](platform-support/wasm64-unknown-unknown.md) | ? | | WebAssembly
|
||||||
[`x86_64-apple-tvos`](platform-support/apple-tvos.md) | ✓ | | x86 64-bit tvOS
|
[`x86_64-apple-tvos`](platform-support/apple-tvos.md) | ✓ | | x86 64-bit tvOS
|
||||||
[`x86_64-apple-watchos-sim`](platform-support/apple-watchos.md) | ✓ | | x86 64-bit Apple WatchOS simulator
|
[`x86_64-apple-watchos-sim`](platform-support/apple-watchos.md) | ✓ | | x86 64-bit Apple WatchOS simulator
|
||||||
|
@ -98,10 +98,6 @@ the target with:
|
|||||||
rustup target add wasm32-wasip1
|
rustup target add wasm32-wasip1
|
||||||
```
|
```
|
||||||
|
|
||||||
> **Note**: the `wasm32-wasip1` target is new and may only be available
|
|
||||||
> on nightly by the time you're reading this. If `wasm32-wasip1` isn't
|
|
||||||
> available on stable Rust then `wasm32-wasi` should be available instead.
|
|
||||||
|
|
||||||
Rust programs can be built for that target:
|
Rust programs can be built for that target:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
|
@ -4,7 +4,7 @@ This option controls whether Rust uses the spec-compliant C ABI when compiling
|
|||||||
for the `wasm32-unknown-unknown` target.
|
for the `wasm32-unknown-unknown` target.
|
||||||
|
|
||||||
This makes it possible to be ABI-compatible with all other spec-compliant Wasm
|
This makes it possible to be ABI-compatible with all other spec-compliant Wasm
|
||||||
like Rusts `wasm32-wasi`.
|
like Rusts `wasm32-wasip1`.
|
||||||
|
|
||||||
This compiler flag is perma-unstable, as it will be enabled by default in the
|
This compiler flag is perma-unstable, as it will be enabled by default in the
|
||||||
future with no option to fall back to the old non-spec-compliant ABI.
|
future with no option to fall back to the old non-spec-compliant ABI.
|
||||||
|
@ -157,7 +157,6 @@ static TARGETS: &[&str] = &[
|
|||||||
"thumbv8m.main-none-eabihf",
|
"thumbv8m.main-none-eabihf",
|
||||||
"wasm32-unknown-emscripten",
|
"wasm32-unknown-emscripten",
|
||||||
"wasm32-unknown-unknown",
|
"wasm32-unknown-unknown",
|
||||||
"wasm32-wasi",
|
|
||||||
"wasm32-wasip1",
|
"wasm32-wasip1",
|
||||||
"wasm32-wasip1-threads",
|
"wasm32-wasip1-threads",
|
||||||
"wasm32-wasip2",
|
"wasm32-wasip2",
|
||||||
|
@ -583,10 +583,6 @@ fn wasm_special() {
|
|||||||
("wasm32-unknown-emscripten", "emscripten", true),
|
("wasm32-unknown-emscripten", "emscripten", true),
|
||||||
("wasm32-unknown-emscripten", "wasm32", true),
|
("wasm32-unknown-emscripten", "wasm32", true),
|
||||||
("wasm32-unknown-emscripten", "wasm32-bare", false),
|
("wasm32-unknown-emscripten", "wasm32-bare", false),
|
||||||
("wasm32-wasi", "emscripten", false),
|
|
||||||
("wasm32-wasi", "wasm32", true),
|
|
||||||
("wasm32-wasi", "wasm32-bare", false),
|
|
||||||
("wasm32-wasi", "wasi", true),
|
|
||||||
("wasm32-wasip1", "emscripten", false),
|
("wasm32-wasip1", "emscripten", false),
|
||||||
("wasm32-wasip1", "wasm32", true),
|
("wasm32-wasip1", "wasm32", true),
|
||||||
("wasm32-wasip1", "wasm32-bare", false),
|
("wasm32-wasip1", "wasm32-bare", false),
|
||||||
|
@ -525,9 +525,6 @@
|
|||||||
//@ revisions: wasm32v1_none
|
//@ revisions: wasm32v1_none
|
||||||
//@ [wasm32v1_none] compile-flags: --target wasm32v1-none
|
//@ [wasm32v1_none] compile-flags: --target wasm32v1-none
|
||||||
//@ [wasm32v1_none] needs-llvm-components: webassembly
|
//@ [wasm32v1_none] needs-llvm-components: webassembly
|
||||||
//@ revisions: wasm32_wasi
|
|
||||||
//@ [wasm32_wasi] compile-flags: --target wasm32-wasi
|
|
||||||
//@ [wasm32_wasi] needs-llvm-components: webassembly
|
|
||||||
//@ revisions: wasm32_wasip1
|
//@ revisions: wasm32_wasip1
|
||||||
//@ [wasm32_wasip1] compile-flags: --target wasm32-wasip1
|
//@ [wasm32_wasip1] compile-flags: --target wasm32-wasip1
|
||||||
//@ [wasm32_wasip1] needs-llvm-components: webassembly
|
//@ [wasm32_wasip1] needs-llvm-components: webassembly
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
//@ revisions: aarch64-linux aarch64-darwin wasm32-wasi
|
//@ revisions: aarch64-linux aarch64-darwin wasm32-wasip1
|
||||||
//@ compile-flags: -O -C no-prepopulate-passes
|
//@ compile-flags: -O -C no-prepopulate-passes
|
||||||
|
|
||||||
//@[aarch64-linux] compile-flags: --target aarch64-unknown-linux-gnu
|
//@[aarch64-linux] compile-flags: --target aarch64-unknown-linux-gnu
|
||||||
//@[aarch64-linux] needs-llvm-components: aarch64
|
//@[aarch64-linux] needs-llvm-components: aarch64
|
||||||
//@[aarch64-darwin] compile-flags: --target aarch64-apple-darwin
|
//@[aarch64-darwin] compile-flags: --target aarch64-apple-darwin
|
||||||
//@[aarch64-darwin] needs-llvm-components: aarch64
|
//@[aarch64-darwin] needs-llvm-components: aarch64
|
||||||
//@[wasm32-wasi] compile-flags: --target wasm32-wasi
|
//@[wasm32-wasip1] compile-flags: --target wasm32-wasip1
|
||||||
//@[wasm32-wasi] needs-llvm-components: webassembly
|
//@[wasm32-wasip1] needs-llvm-components: webassembly
|
||||||
|
|
||||||
// See ./transparent.rs
|
// See ./transparent.rs
|
||||||
// Some platforms pass large aggregates using immediate arrays in LLVMIR
|
// Some platforms pass large aggregates using immediate arrays in LLVMIR
|
||||||
|
@ -251,7 +251,7 @@ warning: unexpected `cfg` condition value: `zebra`
|
|||||||
LL | cfg!(target_feature = "zebra");
|
LL | cfg!(target_feature = "zebra");
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= note: expected values for `target_feature` are: `10e60`, `2e3`, `3e3r1`, `3e3r2`, `3e3r3`, `3e7`, `7e10`, `a`, `aclass`, `adx`, `aes`, `altivec`, `alu32`, `amx-bf16`, `amx-complex`, `amx-fp16`, `amx-int8`, `amx-tile`, `atomics`, `avx`, `avx2`, `avx512bf16`, `avx512bitalg`, `avx512bw`, `avx512cd`, `avx512dq`, `avx512f`, `avx512fp16`, `avx512ifma`, `avx512vbmi`, `avx512vbmi2`, `avx512vl`, `avx512vnni`, `avx512vp2intersect`, and `avx512vpopcntdq` and 246 more
|
= note: expected values for `target_feature` are: `10e60`, `2e3`, `3e3r1`, `3e3r2`, `3e3r3`, `3e7`, `7e10`, `a`, `aclass`, `adx`, `aes`, `altivec`, `alu32`, `amx-bf16`, `amx-complex`, `amx-fp16`, `amx-int8`, `amx-tile`, `atomics`, `avx`, `avx2`, `avx512bf16`, `avx512bitalg`, `avx512bw`, `avx512cd`, `avx512dq`, `avx512f`, `avx512fp16`, `avx512ifma`, `avx512vbmi`, `avx512vbmi2`, `avx512vl`, `avx512vnni`, `avx512vp2intersect`, and `avx512vpopcntdq` and 247 more
|
||||||
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
||||||
|
|
||||||
warning: 27 warnings emitted
|
warning: 27 warnings emitted
|
||||||
|
@ -174,7 +174,7 @@ warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
|
|||||||
LL | target_feature = "_UNEXPECTED_VALUE",
|
LL | target_feature = "_UNEXPECTED_VALUE",
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= note: expected values for `target_feature` are: `10e60`, `2e3`, `3e3r1`, `3e3r2`, `3e3r3`, `3e7`, `7e10`, `a`, `aclass`, `adx`, `aes`, `altivec`, `alu32`, `amx-bf16`, `amx-complex`, `amx-fp16`, `amx-int8`, `amx-tile`, `atomics`, `avx`, `avx2`, `avx512bf16`, `avx512bitalg`, `avx512bw`, `avx512cd`, `avx512dq`, `avx512f`, `avx512fp16`, `avx512ifma`, `avx512vbmi`, `avx512vbmi2`, `avx512vl`, `avx512vnni`, `avx512vp2intersect`, `avx512vpopcntdq`, `avxifma`, `avxneconvert`, `avxvnni`, `avxvnniint16`, `avxvnniint8`, `backchain`, `bf16`, `bmi1`, `bmi2`, `bti`, `bulk-memory`, `c`, `cache`, `cmpxchg16b`, `crc`, `crt-static`, `cssc`, `d`, `d32`, `dit`, `doloop`, `dotprod`, `dpb`, `dpb2`, `dsp`, `dsp1e2`, `dspe60`, `e`, `e1`, `e2`, `ecv`, `edsp`, `elrw`, `ermsb`, `exception-handling`, `extended-const`, `f`, `f16c`, `f32mm`, `f64mm`, `faminmax`, `fcma`, `fdivdu`, `fhm`, `flagm`, `flagm2`, `float1e2`, `float1e3`, `float3e4`, `float7e60`, `floate1`, `fma`, `fp-armv8`, `fp16`, `fp64`, `fp8`, `fp8dot2`, `fp8dot4`, `fp8fma`, `fpuv2_df`, `fpuv2_sf`, `fpuv3_df`, `fpuv3_hf`, `fpuv3_hi`, `fpuv3_sf`, `frecipe`, `frintts`, `fxsr`, `gfni`, `hard-float`, `hard-float-abi`, `hard-tp`, `hbc`, `high-registers`, `hvx`, `hvx-length128b`, `hwdiv`, `i8mm`, `jsconv`, `lahfsahf`, `lasx`, `lbt`, `lor`, `lse`, `lse128`, `lse2`, `lsx`, `lut`, `lvz`, `lzcnt`, `m`, `mclass`, `mops`, `movbe`, `mp`, `mp1e2`, `msa`, `mte`, `multivalue`, `mutable-globals`, `neon`, `nontrapping-fptoint`, `nvic`, `paca`, `pacg`, `pan`, `partword-atomics`, `pauth-lr`, `pclmulqdq`, `pmuv3`, `popcnt`, `power10-vector`, `power8-altivec`, `power8-vector`, `power9-altivec`, `power9-vector`, `prfchw`, `quadword-atomics`, `rand`, `ras`, `rclass`, `rcpc`, `rcpc2`, `rcpc3`, `rdm`, `rdrand`, `rdseed`, `reference-types`, `relax`, `relaxed-simd`, `rtm`, `sb`, `sha`, `sha2`, `sha3`, `sha512`, `sign-ext`, `simd128`, `sm3`, `sm4`, `sme`, `sme-b16b16`, `sme-f16f16`, `sme-f64f64`, `sme-f8f16`, `sme-f8f32`, `sme-fa64`, `sme-i16i64`, `sme-lutv2`, `sme2`, `sme2p1`, `spe`, `ssbs`, `sse`, `sse2`, `sse3`, `sse4.1`, `sse4.2`, `sse4a`, `ssse3`, `ssve-fp8dot2`, `ssve-fp8dot4`, `ssve-fp8fma`, `sve`, `sve-b16b16`, `sve2`, `sve2-aes`, `sve2-bitperm`, `sve2-sha3`, `sve2-sm4`, `sve2p1`, `tbm`, `thumb-mode`, `thumb2`, `tme`, `trust`, `trustzone`, `ual`, `unaligned-scalar-mem`, `v`, `v5te`, `v6`, `v6k`, `v6t2`, `v7`, `v8`, `v8.1a`, `v8.2a`, `v8.3a`, `v8.4a`, `v8.5a`, `v8.6a`, `v8.7a`, `v8.8a`, `v8.9a`, `v9.1a`, `v9.2a`, `v9.3a`, `v9.4a`, `v9.5a`, `v9a`, `vaes`, `vdsp2e60f`, `vdspv1`, `vdspv2`, `vector`, `vfp2`, `vfp3`, `vfp4`, `vh`, `virt`, `virtualization`, `vpclmulqdq`, `vsx`, `wfxt`, `xop`, `xsave`, `xsavec`, `xsaveopt`, `xsaves`, `zaamo`, `zabha`, `zalrsc`, `zba`, `zbb`, `zbc`, `zbkb`, `zbkc`, `zbkx`, `zbs`, `zdinx`, `zfh`, `zfhmin`, `zfinx`, `zhinx`, `zhinxmin`, `zk`, `zkn`, `zknd`, `zkne`, `zknh`, `zkr`, `zks`, `zksed`, `zksh`, and `zkt`
|
= note: expected values for `target_feature` are: `10e60`, `2e3`, `3e3r1`, `3e3r2`, `3e3r3`, `3e7`, `7e10`, `a`, `aclass`, `adx`, `aes`, `altivec`, `alu32`, `amx-bf16`, `amx-complex`, `amx-fp16`, `amx-int8`, `amx-tile`, `atomics`, `avx`, `avx2`, `avx512bf16`, `avx512bitalg`, `avx512bw`, `avx512cd`, `avx512dq`, `avx512f`, `avx512fp16`, `avx512ifma`, `avx512vbmi`, `avx512vbmi2`, `avx512vl`, `avx512vnni`, `avx512vp2intersect`, `avx512vpopcntdq`, `avxifma`, `avxneconvert`, `avxvnni`, `avxvnniint16`, `avxvnniint8`, `backchain`, `bf16`, `bmi1`, `bmi2`, `bti`, `bulk-memory`, `c`, `cache`, `cmpxchg16b`, `crc`, `crt-static`, `cssc`, `d`, `d32`, `dit`, `doloop`, `dotprod`, `dpb`, `dpb2`, `dsp`, `dsp1e2`, `dspe60`, `e`, `e1`, `e2`, `ecv`, `edsp`, `elrw`, `ermsb`, `exception-handling`, `extended-const`, `f`, `f16c`, `f32mm`, `f64mm`, `faminmax`, `fcma`, `fdivdu`, `fhm`, `flagm`, `flagm2`, `float1e2`, `float1e3`, `float3e4`, `float7e60`, `floate1`, `fma`, `fp-armv8`, `fp16`, `fp64`, `fp8`, `fp8dot2`, `fp8dot4`, `fp8fma`, `fpuv2_df`, `fpuv2_sf`, `fpuv3_df`, `fpuv3_hf`, `fpuv3_hi`, `fpuv3_sf`, `frecipe`, `frintts`, `fxsr`, `gfni`, `hard-float`, `hard-float-abi`, `hard-tp`, `hbc`, `high-registers`, `hvx`, `hvx-length128b`, `hwdiv`, `i8mm`, `jsconv`, `lahfsahf`, `lasx`, `lbt`, `lor`, `lse`, `lse128`, `lse2`, `lsx`, `lut`, `lvz`, `lzcnt`, `m`, `mclass`, `mops`, `movbe`, `mp`, `mp1e2`, `msa`, `mte`, `multivalue`, `mutable-globals`, `neon`, `nontrapping-fptoint`, `nvic`, `paca`, `pacg`, `pan`, `partword-atomics`, `pauth-lr`, `pclmulqdq`, `pmuv3`, `popcnt`, `power10-vector`, `power8-altivec`, `power8-vector`, `power9-altivec`, `power9-vector`, `prfchw`, `quadword-atomics`, `rand`, `ras`, `rclass`, `rcpc`, `rcpc2`, `rcpc3`, `rdm`, `rdrand`, `rdseed`, `reference-types`, `relax`, `relaxed-simd`, `rtm`, `sb`, `sha`, `sha2`, `sha3`, `sha512`, `sign-ext`, `simd128`, `sm3`, `sm4`, `sme`, `sme-b16b16`, `sme-f16f16`, `sme-f64f64`, `sme-f8f16`, `sme-f8f32`, `sme-fa64`, `sme-i16i64`, `sme-lutv2`, `sme2`, `sme2p1`, `spe`, `ssbs`, `sse`, `sse2`, `sse3`, `sse4.1`, `sse4.2`, `sse4a`, `ssse3`, `ssve-fp8dot2`, `ssve-fp8dot4`, `ssve-fp8fma`, `sve`, `sve-b16b16`, `sve2`, `sve2-aes`, `sve2-bitperm`, `sve2-sha3`, `sve2-sm4`, `sve2p1`, `tbm`, `thumb-mode`, `thumb2`, `tme`, `trust`, `trustzone`, `ual`, `unaligned-scalar-mem`, `v`, `v5te`, `v6`, `v6k`, `v6t2`, `v7`, `v8`, `v8.1a`, `v8.2a`, `v8.3a`, `v8.4a`, `v8.5a`, `v8.6a`, `v8.7a`, `v8.8a`, `v8.9a`, `v9.1a`, `v9.2a`, `v9.3a`, `v9.4a`, `v9.5a`, `v9a`, `vaes`, `vdsp2e60f`, `vdspv1`, `vdspv2`, `vector`, `vfp2`, `vfp3`, `vfp4`, `vh`, `virt`, `virtualization`, `vpclmulqdq`, `vsx`, `wfxt`, `wide-arithmetic`, `xop`, `xsave`, `xsavec`, `xsaveopt`, `xsaves`, `zaamo`, `zabha`, `zalrsc`, `zba`, `zbb`, `zbc`, `zbkb`, `zbkc`, `zbkx`, `zbs`, `zdinx`, `zfh`, `zfhmin`, `zfinx`, `zhinx`, `zhinxmin`, `zk`, `zkn`, `zknd`, `zkne`, `zknh`, `zkr`, `zks`, `zksed`, `zksh`, and `zkt`
|
||||||
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
= note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg.html> for more information about checking conditional configuration
|
||||||
|
|
||||||
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
|
warning: unexpected `cfg` condition value: `_UNEXPECTED_VALUE`
|
||||||
|
Loading…
Reference in New Issue
Block a user