Skip to content

Commit

Permalink
Share wasm-bindgen compat abi selection code
Browse files Browse the repository at this point in the history
  • Loading branch information
bjorn3 committed Jan 25, 2021
1 parent 4d2766e commit e7a056f
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 5 deletions.
2 changes: 1 addition & 1 deletion compiler/rustc_middle/src/ty/layout.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2752,7 +2752,7 @@ where
attrs
});

if target.arch == "wasm32" && target.os == "unknown" {
if call::use_wasm_bindgen_compat_abi(target) {
// wasm-bindgen depends on ABI details and is incompatible with the
// correct C ABI, so this is being kept around until wasm-bindgen
// can be fixed to work with the correct ABI. See #63649 for further
Expand Down
20 changes: 16 additions & 4 deletions compiler/rustc_target/src/abi/call/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::abi::{self, Abi, Align, FieldsShape, Size};
use crate::abi::{HasDataLayout, LayoutOf, TyAndLayout, TyAndLayoutMethods};
use crate::spec::{self, HasTargetSpec};
use crate::spec::{self, HasTargetSpec, Target};

mod aarch64;
mod amdgpu;
Expand Down Expand Up @@ -631,9 +631,10 @@ impl<'a, Ty> FnAbi<'a, Ty> {
"nvptx64" => nvptx64::compute_abi_info(self),
"hexagon" => hexagon::compute_abi_info(self),
"riscv32" | "riscv64" => riscv::compute_abi_info(cx, self),
"wasm32" => match cx.target_spec().os.as_str() {
"emscripten" | "wasi" => wasm32::compute_abi_info(cx, self),
_ => wasm32_bindgen_compat::compute_abi_info(self),
"wasm32" => if use_wasm_bindgen_compat_abi(cx.target_spec()) {
wasm32_bindgen_compat::compute_abi_info(self)
} else {
wasm32::compute_abi_info(cx, self)
},
"asmjs" => wasm32::compute_abi_info(cx, self),
a => return Err(format!("unrecognized arch \"{}\" in target specification", a)),
Expand All @@ -642,3 +643,14 @@ impl<'a, Ty> FnAbi<'a, Ty> {
Ok(())
}
}

pub fn use_wasm_bindgen_compat_abi(target_spec: &Target) -> bool {
if target_spec.arch.as_str() == "wasm32" {
match target_spec.os.as_str() {
"emscripten" | "wasi" => false,
_ => true,
}
} else {
false
}
}

0 comments on commit e7a056f

Please sign in to comment.