mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-21 22:34:05 +00:00
Remove extern "wasm" ABI
Remove the unstable `extern "wasm"` ABI (`wasm_abi` feature tracked in #83788). As discussed in https://github.com/rust-lang/rust/pull/127513#issuecomment-2220410679 and following, this ABI is a failed experiment that did not end up being used for anything. Keeping support for this ABI in LLVM 19 would require us to switch wasm targets to the `experimental-mv` ABI, which we do not want to do. It should be noted that `Abi::Wasm` was internally used for two things: The `-Z wasm-c-abi=legacy` ABI that is still used by default on some wasm targets, and the `extern "wasm"` ABI. Despite both being `Abi::Wasm` internally, they were not the same. An explicit `extern "wasm"` additionally enabled the `+multivalue` feature. I've opted to remove `Abi::Wasm` in this patch entirely, instead of keeping it as an ABI with only internal usage. Both `-Z wasm-c-abi` variants are now treated as part of the normal C ABI, just with different different treatment in adjust_for_foreign_abi.
This commit is contained in:
parent
0fdfb61795
commit
8a50bcbdce
@ -6,7 +6,6 @@ use rustc_middle::middle::codegen_fn_attrs::{CodegenFnAttrFlags, PatchableFuncti
|
||||
use rustc_middle::ty::{self, TyCtxt};
|
||||
use rustc_session::config::{FunctionReturn, OptLevel};
|
||||
use rustc_span::symbol::sym;
|
||||
use rustc_target::spec::abi::Abi;
|
||||
use rustc_target::spec::{FramePointer, SanitizerSet, StackProbeType, StackProtector};
|
||||
use smallvec::SmallVec;
|
||||
|
||||
@ -482,7 +481,7 @@ pub fn from_fn_attrs<'ll, 'tcx>(
|
||||
return;
|
||||
}
|
||||
|
||||
let mut function_features = function_features
|
||||
let function_features = function_features
|
||||
.iter()
|
||||
.flat_map(|feat| {
|
||||
llvm_util::to_llvm_features(cx.tcx.sess, feat).into_iter().map(|f| format!("+{f}"))
|
||||
@ -504,17 +503,6 @@ pub fn from_fn_attrs<'ll, 'tcx>(
|
||||
let name = name.as_str();
|
||||
to_add.push(llvm::CreateAttrStringValue(cx.llcx, "wasm-import-name", name));
|
||||
}
|
||||
|
||||
// The `"wasm"` abi on wasm targets automatically enables the
|
||||
// `+multivalue` feature because the purpose of the wasm abi is to match
|
||||
// the WebAssembly specification, which has this feature. This won't be
|
||||
// needed when LLVM enables this `multivalue` feature by default.
|
||||
if !cx.tcx.is_closure_like(instance.def_id()) {
|
||||
let abi = cx.tcx.fn_sig(instance.def_id()).skip_binder().abi();
|
||||
if abi == Abi::Wasm {
|
||||
function_features.push("+multivalue".to_string());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let global_features = cx.tcx.global_backend_features(()).iter().map(|s| s.as_str());
|
||||
|
@ -215,6 +215,9 @@ declare_features! (
|
||||
/// Permits specifying whether a function should permit unwinding or abort on unwind.
|
||||
(removed, unwind_attributes, "1.56.0", Some(58760), Some("use the C-unwind ABI instead")),
|
||||
(removed, visible_private_types, "1.0.0", None, None),
|
||||
/// Allows `extern "wasm" fn`
|
||||
(removed, wasm_abi, "CURRENT_RUSTC_VERSION", Some(83788),
|
||||
Some("non-standard wasm ABI is no longer supported")),
|
||||
// !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!!
|
||||
// Features are listed in alphabetical order. Tidy will fail if you don't keep it this way.
|
||||
// !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!!
|
||||
|
@ -640,8 +640,6 @@ declare_features! (
|
||||
(unstable, unsized_tuple_coercion, "1.20.0", Some(42877)),
|
||||
/// Allows using the `#[used(linker)]` (or `#[used(compiler)]`) attribute.
|
||||
(unstable, used_with_arg, "1.60.0", Some(93798)),
|
||||
/// Allows `extern "wasm" fn`
|
||||
(unstable, wasm_abi, "1.53.0", Some(83788)),
|
||||
/// Allows `do yeet` expressions
|
||||
(unstable, yeet_expr, "1.62.0", Some(96373)),
|
||||
// !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!! !!!!
|
||||
|
@ -1212,7 +1212,6 @@ pub fn fn_can_unwind(tcx: TyCtxt<'_>, fn_def_id: Option<DefId>, abi: SpecAbi) ->
|
||||
| RiscvInterruptM
|
||||
| RiscvInterruptS
|
||||
| CCmseNonSecureCall
|
||||
| Wasm
|
||||
| Unadjusted => false,
|
||||
Rust | RustCall | RustCold | RustIntrinsic => {
|
||||
tcx.sess.panic_strategy() == PanicStrategy::Unwind
|
||||
|
@ -466,7 +466,6 @@ impl RustcInternal for Abi {
|
||||
Abi::AvrInterrupt => rustc_target::spec::abi::Abi::AvrInterrupt,
|
||||
Abi::AvrNonBlockingInterrupt => rustc_target::spec::abi::Abi::AvrNonBlockingInterrupt,
|
||||
Abi::CCmseNonSecureCall => rustc_target::spec::abi::Abi::CCmseNonSecureCall,
|
||||
Abi::Wasm => rustc_target::spec::abi::Abi::Wasm,
|
||||
Abi::System { unwind } => rustc_target::spec::abi::Abi::System { unwind },
|
||||
Abi::RustIntrinsic => rustc_target::spec::abi::Abi::RustIntrinsic,
|
||||
Abi::RustCall => rustc_target::spec::abi::Abi::RustCall,
|
||||
|
@ -909,7 +909,6 @@ impl<'tcx> Stable<'tcx> for rustc_target::spec::abi::Abi {
|
||||
abi::Abi::AvrInterrupt => Abi::AvrInterrupt,
|
||||
abi::Abi::AvrNonBlockingInterrupt => Abi::AvrNonBlockingInterrupt,
|
||||
abi::Abi::CCmseNonSecureCall => Abi::CCmseNonSecureCall,
|
||||
abi::Abi::Wasm => Abi::Wasm,
|
||||
abi::Abi::System { unwind } => Abi::System { unwind },
|
||||
abi::Abi::RustIntrinsic => Abi::RustIntrinsic,
|
||||
abi::Abi::RustCall => Abi::RustCall,
|
||||
|
@ -1,6 +1,6 @@
|
||||
use crate::abi::{self, Abi, Align, FieldsShape, Size};
|
||||
use crate::abi::{HasDataLayout, TyAbiInterface, TyAndLayout};
|
||||
use crate::spec::{self, HasTargetSpec, HasWasmCAbiOpt};
|
||||
use crate::spec::{self, HasTargetSpec, HasWasmCAbiOpt, WasmCAbi};
|
||||
use rustc_macros::HashStable_Generic;
|
||||
use rustc_span::Symbol;
|
||||
use std::fmt;
|
||||
@ -854,7 +854,8 @@ impl<'a, Ty> FnAbi<'a, Ty> {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
match &cx.target_spec().arch[..] {
|
||||
let spec = cx.target_spec();
|
||||
match &spec.arch[..] {
|
||||
"x86" => {
|
||||
let flavor = if let spec::abi::Abi::Fastcall { .. }
|
||||
| spec::abi::Abi::Vectorcall { .. } = abi
|
||||
@ -901,9 +902,7 @@ impl<'a, Ty> FnAbi<'a, Ty> {
|
||||
"sparc" => sparc::compute_abi_info(cx, self),
|
||||
"sparc64" => sparc64::compute_abi_info(cx, self),
|
||||
"nvptx64" => {
|
||||
if cx.target_spec().adjust_abi(cx, abi, self.c_variadic)
|
||||
== spec::abi::Abi::PtxKernel
|
||||
{
|
||||
if cx.target_spec().adjust_abi(abi, self.c_variadic) == spec::abi::Abi::PtxKernel {
|
||||
nvptx64::compute_ptx_kernel_abi_info(cx, self)
|
||||
} else {
|
||||
nvptx64::compute_abi_info(self)
|
||||
@ -912,13 +911,14 @@ impl<'a, Ty> FnAbi<'a, Ty> {
|
||||
"hexagon" => hexagon::compute_abi_info(self),
|
||||
"xtensa" => xtensa::compute_abi_info(cx, self),
|
||||
"riscv32" | "riscv64" => riscv::compute_abi_info(cx, self),
|
||||
"wasm32" | "wasm64" => {
|
||||
if cx.target_spec().adjust_abi(cx, abi, self.c_variadic) == spec::abi::Abi::Wasm {
|
||||
"wasm32" => {
|
||||
if spec.os == "unknown" && cx.wasm_c_abi_opt() == WasmCAbi::Legacy {
|
||||
wasm::compute_wasm_abi_info(self)
|
||||
} else {
|
||||
wasm::compute_c_abi_info(cx, self)
|
||||
}
|
||||
}
|
||||
"wasm64" => wasm::compute_c_abi_info(cx, self),
|
||||
"bpf" => bpf::compute_abi_info(self),
|
||||
arch => {
|
||||
return Err(AdjustForForeignAbiError::Unsupported {
|
||||
|
@ -48,7 +48,6 @@ pub enum Abi {
|
||||
AvrInterrupt,
|
||||
AvrNonBlockingInterrupt,
|
||||
CCmseNonSecureCall,
|
||||
Wasm,
|
||||
System {
|
||||
unwind: bool,
|
||||
},
|
||||
@ -123,7 +122,6 @@ const AbiDatas: &[AbiData] = &[
|
||||
AbiData { abi: Abi::AvrInterrupt, name: "avr-interrupt" },
|
||||
AbiData { abi: Abi::AvrNonBlockingInterrupt, name: "avr-non-blocking-interrupt" },
|
||||
AbiData { abi: Abi::CCmseNonSecureCall, name: "C-cmse-nonsecure-call" },
|
||||
AbiData { abi: Abi::Wasm, name: "wasm" },
|
||||
AbiData { abi: Abi::System { unwind: false }, name: "system" },
|
||||
AbiData { abi: Abi::System { unwind: true }, name: "system-unwind" },
|
||||
AbiData { abi: Abi::RustIntrinsic, name: "rust-intrinsic" },
|
||||
@ -149,6 +147,9 @@ pub fn lookup(name: &str) -> Result<Abi, AbiUnsupported> {
|
||||
"riscv-interrupt-u" => AbiUnsupported::Reason {
|
||||
explain: "user-mode interrupt handlers have been removed from LLVM pending standardization, see: https://reviews.llvm.org/D149314",
|
||||
},
|
||||
"wasm" => AbiUnsupported::Reason {
|
||||
explain: "non-standard wasm ABI is no longer supported",
|
||||
},
|
||||
|
||||
_ => AbiUnsupported::Unrecognized,
|
||||
|
||||
@ -241,10 +242,6 @@ pub fn is_stable(name: &str) -> Result<(), AbiDisabled> {
|
||||
feature: sym::abi_c_cmse_nonsecure_call,
|
||||
explain: "C-cmse-nonsecure-call ABI is experimental and subject to change",
|
||||
}),
|
||||
"wasm" => Err(AbiDisabled::Unstable {
|
||||
feature: sym::wasm_abi,
|
||||
explain: "wasm ABI is experimental and subject to change",
|
||||
}),
|
||||
_ => Err(AbiDisabled::Unrecognized),
|
||||
}
|
||||
}
|
||||
@ -287,16 +284,15 @@ impl Abi {
|
||||
AvrInterrupt => 23,
|
||||
AvrNonBlockingInterrupt => 24,
|
||||
CCmseNonSecureCall => 25,
|
||||
Wasm => 26,
|
||||
// Cross-platform ABIs
|
||||
System { unwind: false } => 27,
|
||||
System { unwind: true } => 28,
|
||||
RustIntrinsic => 29,
|
||||
RustCall => 30,
|
||||
Unadjusted => 31,
|
||||
RustCold => 32,
|
||||
RiscvInterruptM => 33,
|
||||
RiscvInterruptS => 34,
|
||||
System { unwind: false } => 26,
|
||||
System { unwind: true } => 27,
|
||||
RustIntrinsic => 28,
|
||||
RustCall => 29,
|
||||
Unadjusted => 30,
|
||||
RustCold => 31,
|
||||
RiscvInterruptM => 32,
|
||||
RiscvInterruptS => 33,
|
||||
};
|
||||
debug_assert!(
|
||||
AbiDatas
|
||||
|
@ -2608,22 +2608,8 @@ impl DerefMut for Target {
|
||||
|
||||
impl Target {
|
||||
/// Given a function ABI, turn it into the correct ABI for this target.
|
||||
pub fn adjust_abi<C>(&self, cx: &C, abi: Abi, c_variadic: bool) -> Abi
|
||||
where
|
||||
C: HasWasmCAbiOpt,
|
||||
{
|
||||
pub fn adjust_abi(&self, abi: Abi, c_variadic: bool) -> Abi {
|
||||
match abi {
|
||||
Abi::C { .. } => {
|
||||
if self.arch == "wasm32"
|
||||
&& self.os == "unknown"
|
||||
&& cx.wasm_c_abi_opt() == WasmCAbi::Legacy
|
||||
{
|
||||
Abi::Wasm
|
||||
} else {
|
||||
abi
|
||||
}
|
||||
}
|
||||
|
||||
// On Windows, `extern "system"` behaves like msvc's `__stdcall`.
|
||||
// `__stdcall` only applies on x86 and on non-variadic functions:
|
||||
// https://learn.microsoft.com/en-us/cpp/cpp/stdcall?view=msvc-170
|
||||
@ -2676,7 +2662,6 @@ impl Target {
|
||||
Msp430Interrupt => self.arch == "msp430",
|
||||
RiscvInterruptM | RiscvInterruptS => ["riscv32", "riscv64"].contains(&&self.arch[..]),
|
||||
AvrInterrupt | AvrNonBlockingInterrupt => self.arch == "avr",
|
||||
Wasm => ["wasm32", "wasm64"].contains(&&self.arch[..]),
|
||||
Thiscall { .. } => self.arch == "x86",
|
||||
// On windows these fall-back to platform native calling convention (C) when the
|
||||
// architecture is not supported.
|
||||
|
@ -324,7 +324,7 @@ fn fn_sig_for_fn_abi<'tcx>(
|
||||
#[inline]
|
||||
fn conv_from_spec_abi(tcx: TyCtxt<'_>, abi: SpecAbi, c_variadic: bool) -> Conv {
|
||||
use rustc_target::spec::abi::Abi::*;
|
||||
match tcx.sess.target.adjust_abi(&tcx, abi, c_variadic) {
|
||||
match tcx.sess.target.adjust_abi(abi, c_variadic) {
|
||||
RustIntrinsic | Rust | RustCall => Conv::Rust,
|
||||
|
||||
// This is intentionally not using `Conv::Cold`, as that has to preserve
|
||||
@ -352,7 +352,6 @@ fn conv_from_spec_abi(tcx: TyCtxt<'_>, abi: SpecAbi, c_variadic: bool) -> Conv {
|
||||
AvrNonBlockingInterrupt => Conv::AvrNonBlockingInterrupt,
|
||||
RiscvInterruptM => Conv::RiscvInterrupt { kind: RiscvInterruptKind::Machine },
|
||||
RiscvInterruptS => Conv::RiscvInterrupt { kind: RiscvInterruptKind::Supervisor },
|
||||
Wasm => Conv::C,
|
||||
|
||||
// These API constants ought to be more specific...
|
||||
Cdecl { .. } => Conv::C,
|
||||
|
@ -1045,7 +1045,6 @@ pub enum Abi {
|
||||
AvrInterrupt,
|
||||
AvrNonBlockingInterrupt,
|
||||
CCmseNonSecureCall,
|
||||
Wasm,
|
||||
System { unwind: bool },
|
||||
RustIntrinsic,
|
||||
RustCall,
|
||||
|
@ -1,87 +0,0 @@
|
||||
#![crate_type = "cdylib"]
|
||||
#![deny(warnings)]
|
||||
#![feature(wasm_abi)]
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(PartialEq, Debug)]
|
||||
pub struct TwoI32 {
|
||||
pub a: i32,
|
||||
pub b: i32,
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "wasm" fn return_two_i32() -> TwoI32 {
|
||||
TwoI32 { a: 1, b: 2 }
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(PartialEq, Debug)]
|
||||
pub struct TwoI64 {
|
||||
pub a: i64,
|
||||
pub b: i64,
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "wasm" fn return_two_i64() -> TwoI64 {
|
||||
TwoI64 { a: 3, b: 4 }
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(PartialEq, Debug)]
|
||||
pub struct TwoF32 {
|
||||
pub a: f32,
|
||||
pub b: f32,
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "wasm" fn return_two_f32() -> TwoF32 {
|
||||
TwoF32 { a: 5., b: 6. }
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(PartialEq, Debug)]
|
||||
pub struct TwoF64 {
|
||||
pub a: f64,
|
||||
pub b: f64,
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "wasm" fn return_two_f64() -> TwoF64 {
|
||||
TwoF64 { a: 7., b: 8. }
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
#[derive(PartialEq, Debug)]
|
||||
pub struct Mishmash {
|
||||
pub a: f64,
|
||||
pub b: f32,
|
||||
pub c: i32,
|
||||
pub d: i64,
|
||||
pub e: TwoI32,
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "wasm" fn return_mishmash() -> Mishmash {
|
||||
Mishmash { a: 9., b: 10., c: 11, d: 12, e: TwoI32 { a: 13, b: 14 } }
|
||||
}
|
||||
|
||||
#[link(wasm_import_module = "host")]
|
||||
extern "wasm" {
|
||||
fn two_i32() -> TwoI32;
|
||||
fn two_i64() -> TwoI64;
|
||||
fn two_f32() -> TwoF32;
|
||||
fn two_f64() -> TwoF64;
|
||||
fn mishmash() -> Mishmash;
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn call_imports() {
|
||||
assert_eq!(two_i32(), TwoI32 { a: 100, b: 101 });
|
||||
assert_eq!(two_i64(), TwoI64 { a: 102, b: 103 });
|
||||
assert_eq!(two_f32(), TwoF32 { a: 104., b: 105. });
|
||||
assert_eq!(two_f64(), TwoF64 { a: 106., b: 107. });
|
||||
assert_eq!(
|
||||
mishmash(),
|
||||
Mishmash { a: 108., b: 109., c: 110, d: 111, e: TwoI32 { a: 112, b: 113 } }
|
||||
);
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
(module
|
||||
(func (export "two_i32") (result i32 i32)
|
||||
i32.const 100
|
||||
i32.const 101)
|
||||
(func (export "two_i64") (result i64 i64)
|
||||
i64.const 102
|
||||
i64.const 103)
|
||||
(func (export "two_f32") (result f32 f32)
|
||||
f32.const 104
|
||||
f32.const 105)
|
||||
(func (export "two_f64") (result f64 f64)
|
||||
f64.const 106
|
||||
f64.const 107)
|
||||
|
||||
(func (export "mishmash") (result f64 f32 i32 i64 i32 i32)
|
||||
f64.const 108
|
||||
f32.const 109
|
||||
i32.const 110
|
||||
i64.const 111
|
||||
i32.const 112
|
||||
i32.const 113)
|
||||
)
|
@ -1,29 +0,0 @@
|
||||
//@ only-wasm32-wasip1
|
||||
//@ needs-wasmtime
|
||||
|
||||
use run_make_support::{cmd, rustc};
|
||||
use std::path::Path;
|
||||
|
||||
fn main() {
|
||||
rustc().input("foo.rs").target("wasm32-wasip1").run();
|
||||
|
||||
let file = Path::new("foo.wasm");
|
||||
|
||||
run(&file, "return_two_i32", "1\n2\n");
|
||||
run(&file, "return_two_i64", "3\n4\n");
|
||||
run(&file, "return_two_f32", "5\n6\n");
|
||||
run(&file, "return_two_f64", "7\n8\n");
|
||||
run(&file, "return_mishmash", "9\n10\n11\n12\n13\n14\n");
|
||||
run(&file, "call_imports", "");
|
||||
}
|
||||
|
||||
fn run(file: &Path, method: &str, expected_output: &str) {
|
||||
cmd("wasmtime")
|
||||
.arg("run")
|
||||
.arg("--preload=host=host.wat")
|
||||
.arg("--invoke")
|
||||
.arg(method)
|
||||
.arg(file)
|
||||
.run()
|
||||
.assert_stdout_equals(expected_output);
|
||||
}
|
4
tests/ui/abi/removed-wasm-abi.rs
Normal file
4
tests/ui/abi/removed-wasm-abi.rs
Normal file
@ -0,0 +1,4 @@
|
||||
extern "wasm" fn test() {}
|
||||
//~^ ERROR invalid ABI: found `wasm`
|
||||
|
||||
fn main() {}
|
12
tests/ui/abi/removed-wasm-abi.stderr
Normal file
12
tests/ui/abi/removed-wasm-abi.stderr
Normal file
@ -0,0 +1,12 @@
|
||||
error[E0703]: invalid ABI: found `wasm`
|
||||
--> $DIR/removed-wasm-abi.rs:1:8
|
||||
|
|
||||
LL | extern "wasm" fn test() {}
|
||||
| ^^^^^^ invalid ABI
|
||||
|
|
||||
= note: invoke `rustc --print=calling-conventions` for a full list of supported calling conventions
|
||||
= note: non-standard wasm ABI is no longer supported
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0703`.
|
@ -1,53 +1,47 @@
|
||||
error[E0570]: `"ptx-kernel"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:29:1
|
||||
--> $DIR/unsupported.rs:28:1
|
||||
|
|
||||
LL | extern "ptx-kernel" fn ptx() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"wasm"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:31:1
|
||||
|
|
||||
LL | extern "wasm" fn wasm() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"aapcs"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:33:1
|
||||
--> $DIR/unsupported.rs:30:1
|
||||
|
|
||||
LL | extern "aapcs" fn aapcs() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"msp430-interrupt"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:39:1
|
||||
--> $DIR/unsupported.rs:36:1
|
||||
|
|
||||
LL | extern "msp430-interrupt" fn msp430() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"avr-interrupt"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:41:1
|
||||
--> $DIR/unsupported.rs:38:1
|
||||
|
|
||||
LL | extern "avr-interrupt" fn avr() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"riscv-interrupt-m"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:43:1
|
||||
--> $DIR/unsupported.rs:40:1
|
||||
|
|
||||
LL | extern "riscv-interrupt-m" fn riscv() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"x86-interrupt"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:48:1
|
||||
--> $DIR/unsupported.rs:45:1
|
||||
|
|
||||
LL | extern "x86-interrupt" fn x86() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"thiscall"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:53:1
|
||||
--> $DIR/unsupported.rs:50:1
|
||||
|
|
||||
LL | extern "thiscall" fn thiscall() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: use of calling convention not supported on this target
|
||||
--> $DIR/unsupported.rs:59:1
|
||||
--> $DIR/unsupported.rs:56:1
|
||||
|
|
||||
LL | extern "stdcall" fn stdcall() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@ -56,6 +50,6 @@ LL | extern "stdcall" fn stdcall() {}
|
||||
= note: for more information, see issue #87678 <https://github.com/rust-lang/rust/issues/87678>
|
||||
= note: `#[warn(unsupported_calling_conventions)]` on by default
|
||||
|
||||
error: aborting due to 8 previous errors; 1 warning emitted
|
||||
error: aborting due to 7 previous errors; 1 warning emitted
|
||||
|
||||
For more information about this error, try `rustc --explain E0570`.
|
||||
|
@ -1,47 +1,41 @@
|
||||
error[E0570]: `"ptx-kernel"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:29:1
|
||||
--> $DIR/unsupported.rs:28:1
|
||||
|
|
||||
LL | extern "ptx-kernel" fn ptx() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"wasm"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:31:1
|
||||
|
|
||||
LL | extern "wasm" fn wasm() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"msp430-interrupt"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:39:1
|
||||
--> $DIR/unsupported.rs:36:1
|
||||
|
|
||||
LL | extern "msp430-interrupt" fn msp430() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"avr-interrupt"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:41:1
|
||||
--> $DIR/unsupported.rs:38:1
|
||||
|
|
||||
LL | extern "avr-interrupt" fn avr() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"riscv-interrupt-m"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:43:1
|
||||
--> $DIR/unsupported.rs:40:1
|
||||
|
|
||||
LL | extern "riscv-interrupt-m" fn riscv() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"x86-interrupt"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:48:1
|
||||
--> $DIR/unsupported.rs:45:1
|
||||
|
|
||||
LL | extern "x86-interrupt" fn x86() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"thiscall"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:53:1
|
||||
--> $DIR/unsupported.rs:50:1
|
||||
|
|
||||
LL | extern "thiscall" fn thiscall() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: use of calling convention not supported on this target
|
||||
--> $DIR/unsupported.rs:59:1
|
||||
--> $DIR/unsupported.rs:56:1
|
||||
|
|
||||
LL | extern "stdcall" fn stdcall() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@ -50,6 +44,6 @@ LL | extern "stdcall" fn stdcall() {}
|
||||
= note: for more information, see issue #87678 <https://github.com/rust-lang/rust/issues/87678>
|
||||
= note: `#[warn(unsupported_calling_conventions)]` on by default
|
||||
|
||||
error: aborting due to 7 previous errors; 1 warning emitted
|
||||
error: aborting due to 6 previous errors; 1 warning emitted
|
||||
|
||||
For more information about this error, try `rustc --explain E0570`.
|
||||
|
@ -1,39 +1,33 @@
|
||||
error[E0570]: `"ptx-kernel"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:29:1
|
||||
--> $DIR/unsupported.rs:28:1
|
||||
|
|
||||
LL | extern "ptx-kernel" fn ptx() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"wasm"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:31:1
|
||||
|
|
||||
LL | extern "wasm" fn wasm() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"aapcs"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:33:1
|
||||
--> $DIR/unsupported.rs:30:1
|
||||
|
|
||||
LL | extern "aapcs" fn aapcs() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"msp430-interrupt"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:39:1
|
||||
--> $DIR/unsupported.rs:36:1
|
||||
|
|
||||
LL | extern "msp430-interrupt" fn msp430() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"avr-interrupt"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:41:1
|
||||
--> $DIR/unsupported.rs:38:1
|
||||
|
|
||||
LL | extern "avr-interrupt" fn avr() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"riscv-interrupt-m"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:43:1
|
||||
--> $DIR/unsupported.rs:40:1
|
||||
|
|
||||
LL | extern "riscv-interrupt-m" fn riscv() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0570`.
|
||||
|
@ -1,47 +1,41 @@
|
||||
error[E0570]: `"ptx-kernel"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:29:1
|
||||
--> $DIR/unsupported.rs:28:1
|
||||
|
|
||||
LL | extern "ptx-kernel" fn ptx() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"wasm"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:31:1
|
||||
|
|
||||
LL | extern "wasm" fn wasm() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"aapcs"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:33:1
|
||||
--> $DIR/unsupported.rs:30:1
|
||||
|
|
||||
LL | extern "aapcs" fn aapcs() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"msp430-interrupt"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:39:1
|
||||
--> $DIR/unsupported.rs:36:1
|
||||
|
|
||||
LL | extern "msp430-interrupt" fn msp430() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"avr-interrupt"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:41:1
|
||||
--> $DIR/unsupported.rs:38:1
|
||||
|
|
||||
LL | extern "avr-interrupt" fn avr() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"x86-interrupt"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:48:1
|
||||
--> $DIR/unsupported.rs:45:1
|
||||
|
|
||||
LL | extern "x86-interrupt" fn x86() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"thiscall"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:53:1
|
||||
--> $DIR/unsupported.rs:50:1
|
||||
|
|
||||
LL | extern "thiscall" fn thiscall() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: use of calling convention not supported on this target
|
||||
--> $DIR/unsupported.rs:59:1
|
||||
--> $DIR/unsupported.rs:56:1
|
||||
|
|
||||
LL | extern "stdcall" fn stdcall() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@ -50,6 +44,6 @@ LL | extern "stdcall" fn stdcall() {}
|
||||
= note: for more information, see issue #87678 <https://github.com/rust-lang/rust/issues/87678>
|
||||
= note: `#[warn(unsupported_calling_conventions)]` on by default
|
||||
|
||||
error: aborting due to 7 previous errors; 1 warning emitted
|
||||
error: aborting due to 6 previous errors; 1 warning emitted
|
||||
|
||||
For more information about this error, try `rustc --explain E0570`.
|
||||
|
@ -1,47 +1,41 @@
|
||||
error[E0570]: `"ptx-kernel"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:29:1
|
||||
--> $DIR/unsupported.rs:28:1
|
||||
|
|
||||
LL | extern "ptx-kernel" fn ptx() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"wasm"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:31:1
|
||||
|
|
||||
LL | extern "wasm" fn wasm() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"aapcs"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:33:1
|
||||
--> $DIR/unsupported.rs:30:1
|
||||
|
|
||||
LL | extern "aapcs" fn aapcs() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"msp430-interrupt"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:39:1
|
||||
--> $DIR/unsupported.rs:36:1
|
||||
|
|
||||
LL | extern "msp430-interrupt" fn msp430() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"avr-interrupt"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:41:1
|
||||
--> $DIR/unsupported.rs:38:1
|
||||
|
|
||||
LL | extern "avr-interrupt" fn avr() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"x86-interrupt"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:48:1
|
||||
--> $DIR/unsupported.rs:45:1
|
||||
|
|
||||
LL | extern "x86-interrupt" fn x86() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"thiscall"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:53:1
|
||||
--> $DIR/unsupported.rs:50:1
|
||||
|
|
||||
LL | extern "thiscall" fn thiscall() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: use of calling convention not supported on this target
|
||||
--> $DIR/unsupported.rs:59:1
|
||||
--> $DIR/unsupported.rs:56:1
|
||||
|
|
||||
LL | extern "stdcall" fn stdcall() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@ -50,6 +44,6 @@ LL | extern "stdcall" fn stdcall() {}
|
||||
= note: for more information, see issue #87678 <https://github.com/rust-lang/rust/issues/87678>
|
||||
= note: `#[warn(unsupported_calling_conventions)]` on by default
|
||||
|
||||
error: aborting due to 7 previous errors; 1 warning emitted
|
||||
error: aborting due to 6 previous errors; 1 warning emitted
|
||||
|
||||
For more information about this error, try `rustc --explain E0570`.
|
||||
|
@ -19,7 +19,6 @@
|
||||
abi_ptx,
|
||||
abi_msp430_interrupt,
|
||||
abi_avr_interrupt,
|
||||
wasm_abi,
|
||||
abi_x86_interrupt,
|
||||
abi_riscv_interrupt
|
||||
)]
|
||||
@ -28,8 +27,6 @@ trait Sized {}
|
||||
|
||||
extern "ptx-kernel" fn ptx() {}
|
||||
//~^ ERROR is not a supported ABI
|
||||
extern "wasm" fn wasm() {}
|
||||
//~^ ERROR is not a supported ABI
|
||||
extern "aapcs" fn aapcs() {}
|
||||
//[x64]~^ ERROR is not a supported ABI
|
||||
//[i686]~^^ ERROR is not a supported ABI
|
||||
|
@ -1,47 +1,41 @@
|
||||
error[E0570]: `"ptx-kernel"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:29:1
|
||||
--> $DIR/unsupported.rs:28:1
|
||||
|
|
||||
LL | extern "ptx-kernel" fn ptx() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"wasm"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:31:1
|
||||
|
|
||||
LL | extern "wasm" fn wasm() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"aapcs"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:33:1
|
||||
--> $DIR/unsupported.rs:30:1
|
||||
|
|
||||
LL | extern "aapcs" fn aapcs() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"msp430-interrupt"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:39:1
|
||||
--> $DIR/unsupported.rs:36:1
|
||||
|
|
||||
LL | extern "msp430-interrupt" fn msp430() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"avr-interrupt"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:41:1
|
||||
--> $DIR/unsupported.rs:38:1
|
||||
|
|
||||
LL | extern "avr-interrupt" fn avr() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"riscv-interrupt-m"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:43:1
|
||||
--> $DIR/unsupported.rs:40:1
|
||||
|
|
||||
LL | extern "riscv-interrupt-m" fn riscv() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error[E0570]: `"thiscall"` is not a supported ABI for the current target
|
||||
--> $DIR/unsupported.rs:53:1
|
||||
--> $DIR/unsupported.rs:50:1
|
||||
|
|
||||
LL | extern "thiscall" fn thiscall() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: use of calling convention not supported on this target
|
||||
--> $DIR/unsupported.rs:59:1
|
||||
--> $DIR/unsupported.rs:56:1
|
||||
|
|
||||
LL | extern "stdcall" fn stdcall() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@ -50,6 +44,6 @@ LL | extern "stdcall" fn stdcall() {}
|
||||
= note: for more information, see issue #87678 <https://github.com/rust-lang/rust/issues/87678>
|
||||
= note: `#[warn(unsupported_calling_conventions)]` on by default
|
||||
|
||||
error: aborting due to 7 previous errors; 1 warning emitted
|
||||
error: aborting due to 6 previous errors; 1 warning emitted
|
||||
|
||||
For more information about this error, try `rustc --explain E0570`.
|
||||
|
@ -1,26 +0,0 @@
|
||||
//@ needs-llvm-components: webassembly
|
||||
//@ compile-flags: --target=wasm32-unknown-unknown --crate-type=rlib
|
||||
#![no_core]
|
||||
#![feature(no_core, lang_items)]
|
||||
#[lang="sized"]
|
||||
trait Sized { }
|
||||
|
||||
extern "wasm" fn fu() {} //~ ERROR wasm ABI is experimental
|
||||
|
||||
trait T {
|
||||
extern "wasm" fn mu(); //~ ERROR wasm ABI is experimental
|
||||
extern "wasm" fn dmu() {} //~ ERROR wasm ABI is experimental
|
||||
}
|
||||
|
||||
struct S;
|
||||
impl T for S {
|
||||
extern "wasm" fn mu() {} //~ ERROR wasm ABI is experimental
|
||||
}
|
||||
|
||||
impl S {
|
||||
extern "wasm" fn imu() {} //~ ERROR wasm ABI is experimental
|
||||
}
|
||||
|
||||
type TAU = extern "wasm" fn(); //~ ERROR wasm ABI is experimental
|
||||
|
||||
extern "wasm" {} //~ ERROR wasm ABI is experimental
|
@ -1,73 +0,0 @@
|
||||
error[E0658]: wasm ABI is experimental and subject to change
|
||||
--> $DIR/feature-gate-wasm_abi.rs:8:8
|
||||
|
|
||||
LL | extern "wasm" fn fu() {}
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: see issue #83788 <https://github.com/rust-lang/rust/issues/83788> for more information
|
||||
= help: add `#![feature(wasm_abi)]` 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[E0658]: wasm ABI is experimental and subject to change
|
||||
--> $DIR/feature-gate-wasm_abi.rs:11:12
|
||||
|
|
||||
LL | extern "wasm" fn mu();
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: see issue #83788 <https://github.com/rust-lang/rust/issues/83788> for more information
|
||||
= help: add `#![feature(wasm_abi)]` 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[E0658]: wasm ABI is experimental and subject to change
|
||||
--> $DIR/feature-gate-wasm_abi.rs:12:12
|
||||
|
|
||||
LL | extern "wasm" fn dmu() {}
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: see issue #83788 <https://github.com/rust-lang/rust/issues/83788> for more information
|
||||
= help: add `#![feature(wasm_abi)]` 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[E0658]: wasm ABI is experimental and subject to change
|
||||
--> $DIR/feature-gate-wasm_abi.rs:17:12
|
||||
|
|
||||
LL | extern "wasm" fn mu() {}
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: see issue #83788 <https://github.com/rust-lang/rust/issues/83788> for more information
|
||||
= help: add `#![feature(wasm_abi)]` 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[E0658]: wasm ABI is experimental and subject to change
|
||||
--> $DIR/feature-gate-wasm_abi.rs:21:12
|
||||
|
|
||||
LL | extern "wasm" fn imu() {}
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: see issue #83788 <https://github.com/rust-lang/rust/issues/83788> for more information
|
||||
= help: add `#![feature(wasm_abi)]` 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[E0658]: wasm ABI is experimental and subject to change
|
||||
--> $DIR/feature-gate-wasm_abi.rs:24:19
|
||||
|
|
||||
LL | type TAU = extern "wasm" fn();
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: see issue #83788 <https://github.com/rust-lang/rust/issues/83788> for more information
|
||||
= help: add `#![feature(wasm_abi)]` 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[E0658]: wasm ABI is experimental and subject to change
|
||||
--> $DIR/feature-gate-wasm_abi.rs:26:8
|
||||
|
|
||||
LL | extern "wasm" {}
|
||||
| ^^^^^^
|
||||
|
|
||||
= note: see issue #83788 <https://github.com/rust-lang/rust/issues/83788> for more information
|
||||
= help: add `#![feature(wasm_abi)]` 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 7 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0658`.
|
Loading…
Reference in New Issue
Block a user