Auto merge of #46291 - alexcrichton:wasm-tests, r=kennytm

ci: Start running wasm32 tests on Travis

This commit allocates a builder to running wasm32 tests on Travis. Not all test
suites pass right now so this is starting out with just the run-pass and the
libcore test suites. This'll hopefully give us a pretty broad set of coverage
for integration in rustc itself as well as a somewhat broad coverage of the llvm
backend itself through integration/unit tests.
This commit is contained in:
bors 2017-11-28 17:58:58 +00:00
commit 71340ca4e1
23 changed files with 84 additions and 34 deletions

View File

@ -161,8 +161,8 @@ matrix:
if: branch = auto
- env: IMAGE=i686-gnu-nopt
if: branch = auto
# - env: IMAGE=wasm32 issue 42646
# if: branch = auto
- env: IMAGE=wasm32-unknown
if: branch = auto
- env: IMAGE=x86_64-gnu
if: branch = auto
- env: IMAGE=x86_64-gnu-full-bootstrap

View File

@ -1245,6 +1245,17 @@ impl Step for Crate {
if target.contains("emscripten") {
cargo.env(format!("CARGO_TARGET_{}_RUNNER", envify(&target)),
build.config.nodejs.as_ref().expect("nodejs not configured"));
} else if target.starts_with("wasm32") {
// On the wasm32-unknown-unknown target we're using LTO which is
// incompatible with `-C prefer-dynamic`, so disable that here
cargo.env("RUSTC_NO_PREFER_DYNAMIC", "1");
let node = build.config.nodejs.as_ref()
.expect("nodejs not configured");
let runner = format!("{} {}/src/etc/wasm32-shim.js",
node.display(),
build.src.display());
cargo.env(format!("CARGO_TARGET_{}_RUNNER", envify(&target)), &runner);
} else if build.remote_tested(target) {
cargo.env(format!("CARGO_TARGET_{}_RUNNER", envify(&target)),
format!("{} run",

View File

@ -0,0 +1,36 @@
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y --no-install-recommends \
g++ \
make \
file \
curl \
ca-certificates \
python \
git \
cmake \
sudo \
gdb \
xz-utils
RUN curl -sL https://nodejs.org/dist/v9.2.0/node-v9.2.0-linux-x64.tar.xz | \
tar -xJ
COPY scripts/sccache.sh /scripts/
RUN sh /scripts/sccache.sh
ENV TARGETS=wasm32-unknown-unknown
ENV RUST_CONFIGURE_ARGS \
--target=$TARGETS \
--set build.nodejs=/node-v9.2.0-linux-x64/bin/node
ENV SCRIPT python2.7 /checkout/x.py test --target $TARGETS \
src/test/ui \
src/test/run-pass \
src/test/compile-fail \
src/test/parse-fail \
src/test/mir-opt \
src/test/codegen-units \
src/libcore \
src/libstd_unicode/ \

View File

@ -45,8 +45,8 @@ imports.env = {
exp2f: function(x) { return Math.pow(2, x); },
ldexp: function(x, y) { return x * Math.pow(2, y); },
ldexpf: function(x, y) { return x * Math.pow(2, y); },
log10: function(x) { return Math.log10(x); },
log10f: function(x) { return Math.log10(x); },
log10: Math.log10,
log10f: Math.log10,
// These are called in src/libstd/sys/wasm/stdio.rs and are used when
// debugging is enabled.
@ -71,14 +71,12 @@ imports.env = {
return process.argv.length - 2;
},
rust_wasm_args_arg_size: function(i) {
return process.argv[i + 2].length;
return Buffer.byteLength(process.argv[i + 2]);
},
rust_wasm_args_arg_fill: function(idx, ptr) {
let arg = process.argv[idx + 2];
let view = new Uint8Array(memory.buffer);
for (var i = 0; i < arg.length; i++) {
view[ptr + i] = arg.charCodeAt(i);
}
Buffer.from(arg).copy(view, ptr);
},
// These are called in src/libstd/sys/wasm/os.rs and are used when
@ -91,15 +89,13 @@ imports.env = {
if (!(key in process.env)) {
return -1;
}
return process.env[key].length;
return Buffer.byteLength(process.env[key]);
},
rust_wasm_getenv_data: function(a, b, ptr) {
let key = copystr(a, b);
let value = process.env[key];
let view = new Uint8Array(memory.buffer);
for (var i = 0; i < value.length; i++) {
view[ptr + i] = value.charCodeAt(i);
}
Buffer.from(value).copy(view, ptr);
},
};

@ -1 +1 @@
Subproject commit e45c75de1148456a9eb1a67c14a66df4dfb50c94
Subproject commit 487c636342ea1abe64d6387eade963a91a152aa9

View File

@ -8,10 +8,6 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![feature(libc)]
extern crate libc;
extern "C" {
pub fn rand() -> libc::c_int;
pub fn rand() -> u32;
}

View File

@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// compile-flags: -C linker=llllll
// compile-flags: -C linker=llllll -Z linker-flavor=ld
// error-pattern: the linker `llllll`
fn main() {

View File

@ -52,8 +52,6 @@ extern {
pub fn fn_type2(p: fn()); //~ ERROR found function pointer with Rust
pub fn fn_contained(p: RustBadRet); //~ ERROR: found struct without
pub fn good1(size: *const libc::c_int);
pub fn good2(size: *const libc::c_uint);
pub fn good3(fptr: Option<extern fn()>);
pub fn good4(aptr: &[u8; 4 as usize]);
pub fn good5(s: StructWithProjection);
@ -66,5 +64,11 @@ extern {
pub fn good12(size: usize);
}
#[cfg(not(target_arch = "wasm32"))]
extern {
pub fn good1(size: *const libc::c_int);
pub fn good2(size: *const libc::c_uint);
}
fn main() {
}

View File

@ -11,11 +11,9 @@
#![allow(unused_variables)]
#![allow(non_camel_case_types)]
#![deny(dead_code)]
#![feature(libc)]
#![crate_type="lib"]
extern crate libc;
pub use extern_foo as x;
extern {
@ -54,14 +52,13 @@ pub fn pub_fn() {
}
mod blah {
use libc::size_t;
// not warned because it's used in the parameter of `free` and return of
// `malloc` below, which are also used.
enum c_void {}
extern {
fn free(p: *const c_void);
fn malloc(size: size_t) -> *const c_void;
fn malloc(size: usize) -> *const c_void;
}
pub fn baz() {

View File

@ -9,6 +9,7 @@
// except according to those terms.
// error-pattern:aFdEfSeVEE
// compile-flags: -Z linker-flavor=ld
/* We're testing that link_args are indeed passed when nolink is specified.
So we try to compile with junk link_args and make sure they are visible in

View File

@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// ignore-wasm32-bare no libc to test ffi with
#![feature(libc)]
extern crate libc;

View File

@ -10,6 +10,7 @@
// error-pattern:is not compiled with this crate's panic strategy `abort`
// compile-flags:-C panic=abort
// ignore-wasm32-bare compiled with panic=abort by default
#![feature(test)]

View File

@ -14,6 +14,7 @@
// aux-build:wants-panic-runtime-abort.rs
// aux-build:panic-runtime-lang-items.rs
// error-pattern: is not compiled with this crate's panic strategy `unwind`
// ignore-wasm32-bare compiled with panic=abort by default
#![no_std]

View File

@ -11,6 +11,7 @@
// error-pattern:is incompatible with this crate's strategy of `unwind`
// aux-build:panic-runtime-abort.rs
// aux-build:panic-runtime-lang-items.rs
// ignore-wasm32-bare compiled with panic=abort by default
#![no_std]

View File

@ -12,6 +12,7 @@
// aux-build:panic-runtime-abort.rs
// aux-build:wants-panic-runtime-abort.rs
// aux-build:panic-runtime-lang-items.rs
// ignore-wasm32-bare compiled with panic=abort by default
#![no_std]

View File

@ -8,12 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![feature(libc)]
extern crate libc;
extern {
static mut a: libc::c_int;
static mut a: i32;
}
fn main() {

View File

@ -10,10 +10,8 @@
// error-pattern:casting
#![feature(libc)]
extern crate libc;
struct A;
fn main() {
println!("{:?}", 1.0 as *const libc::FILE); // Can't cast float to foreign.
println!("{:?}", 1.0 as *const A); // Can't cast float to foreign.
}

View File

@ -11,6 +11,7 @@
// aux-build:weak-lang-items.rs
// error-pattern: language item required, but not found: `panic_fmt`
// error-pattern: language item required, but not found: `eh_personality`
// ignore-wasm32-bare compiled with panic=abort, personality not required
#![no_std]

View File

@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// ignore-wasm32-bare compiled with panic=abort by default
#![feature(box_syntax)]
fn main() {

View File

@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// ignore-wasm32-bare compiled with panic=abort by default
// check that we don't emit multiple drop flags when they are not needed.
fn main() {

View File

@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// ignore-wasm32-bare compiled with panic=abort by default
fn main() {
let mut x = Packed(Aligned(Droppy(0)));
x.0 = Aligned(Droppy(0));

View File

@ -9,6 +9,7 @@
// except according to those terms.
// compile-flags: -C debug_assertions=yes
// ignore-wasm32-bare compiled with panic=abort by default
#![feature(i128_type)]

View File

@ -10,6 +10,7 @@
// Tests saturating float->int casts. See u128-as-f32.rs for the opposite direction.
// compile-flags: -Z saturating-float-casts
// ignore-wasm32-bare FIXME(#46298) needs upstream llvm fixes
#![feature(test, i128, i128_type, stmt_expr_attributes)]
#![deny(overflowing_literals)]