diff options
| author | Thomas Lively <tlively@google.com> | 2019-10-02 11:02:25 -0700 |
|---|---|---|
| committer | Thomas Lively <tlively@google.com> | 2019-10-04 00:47:21 -0700 |
| commit | 5b56c660c9cf55b240d26854fa0ffd41db068ff9 (patch) | |
| tree | 03bc9b23e0f08f0f94054e85d64672a769c7e339 /src/librustc_target | |
| parent | 9a55103b985fdd4a7d90db5d46ebaf0a9e34b419 (diff) | |
| download | rust-5b56c660c9cf55b240d26854fa0ffd41db068ff9.tar.gz rust-5b56c660c9cf55b240d26854fa0ffd41db068ff9.zip | |
Fix ABI, run and fix more tests, re-enable CI for PRs
Diffstat (limited to 'src/librustc_target')
| -rw-r--r-- | src/librustc_target/abi/call/wasm32.rs | 38 | ||||
| -rw-r--r-- | src/librustc_target/spec/wasm32_unknown_emscripten.rs | 2 |
2 files changed, 30 insertions, 10 deletions
diff --git a/src/librustc_target/abi/call/wasm32.rs b/src/librustc_target/abi/call/wasm32.rs index 698da2a3aaa..27799edab91 100644 --- a/src/librustc_target/abi/call/wasm32.rs +++ b/src/librustc_target/abi/call/wasm32.rs @@ -1,29 +1,47 @@ use crate::abi::call::{FnType, ArgType, Uniform}; use crate::abi::{HasDataLayout, LayoutOf, TyLayout, TyLayoutMethods}; -fn classify_ret_ty<'a, Ty, C>(cx: &C, ret: &mut ArgType<'a, Ty>) +fn unwrap_trivial_aggregate<'a, Ty, C>(cx: &C, val: &mut ArgType<'a, Ty>) -> bool where Ty: TyLayoutMethods<'a, C> + Copy, C: LayoutOf<Ty = Ty, TyLayout = TyLayout<'a, Ty>> + HasDataLayout { - if ret.layout.is_aggregate() { - if let Some(unit) = ret.layout.homogeneous_aggregate(cx).unit() { - let size = ret.layout.size; + if val.layout.is_aggregate() { + if let Some(unit) = val.layout.homogeneous_aggregate(cx).unit() { + let size = val.layout.size; if unit.size == size { - ret.cast_to(Uniform { + val.cast_to(Uniform { unit, total: size }); - return; + return true; } } + } + false +} - ret.make_indirect(); + +fn classify_ret_ty<'a, Ty, C>(cx: &C, ret: &mut ArgType<'a, Ty>) + where Ty: TyLayoutMethods<'a, C> + Copy, + C: LayoutOf<Ty = Ty, TyLayout = TyLayout<'a, Ty>> + HasDataLayout +{ + ret.extend_integer_width_to(32); + if ret.layout.is_aggregate() { + if !unwrap_trivial_aggregate(cx, ret) { + ret.make_indirect(); + } } } -fn classify_arg_ty<Ty>(arg: &mut ArgType<'_, Ty>) { +fn classify_arg_ty<'a, Ty, C>(cx: &C, arg: &mut ArgType<'a, Ty>) + where Ty: TyLayoutMethods<'a, C> + Copy, + C: LayoutOf<Ty = Ty, TyLayout = TyLayout<'a, Ty>> + HasDataLayout +{ + arg.extend_integer_width_to(32); if arg.layout.is_aggregate() { - arg.make_indirect_byval(); + if !unwrap_trivial_aggregate(cx, arg) { + arg.make_indirect_byval(); + } } } @@ -37,6 +55,6 @@ pub fn compute_abi_info<'a, Ty, C>(cx: &C, fty: &mut FnType<'a, Ty>) for arg in &mut fty.args { if arg.is_ignore() { continue; } - classify_arg_ty(arg); + classify_arg_ty(cx, arg); } } diff --git a/src/librustc_target/spec/wasm32_unknown_emscripten.rs b/src/librustc_target/spec/wasm32_unknown_emscripten.rs index 90f3d2fc52d..6a2c8c49537 100644 --- a/src/librustc_target/spec/wasm32_unknown_emscripten.rs +++ b/src/librustc_target/spec/wasm32_unknown_emscripten.rs @@ -10,6 +10,8 @@ pub fn target() -> Result<Target, String> { "ASSERTIONS=1".to_string(), "-s".to_string(), "DISABLE_EXCEPTION_CATCHING=1".to_string(), + "-s".to_string(), + "ABORTING_MALLOC=0".to_string(), // FIXME(tlively): Enable this linker option once libc type errors // are resolved. See https://github.com/rust-lang/libc/pull/1478. // "-Wl,--fatal-warnings".to_string(), |
