about summary refs log tree commit diff
path: root/src/compiletest
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-08-28 17:10:37 -0700
committerBrian Anderson <banderson@mozilla.com>2012-08-31 16:20:36 -0700
commite27b8f7f02a6d9f963aae5823bbe07a962c04e33 (patch)
tree09be7f25d6d1ca664fa30c170c1b8a6dff98f55f /src/compiletest
parentb999973c0ffa86738daab277cd6e985248ef08aa (diff)
Add JIT testing to compiletest with --jit
Diffstat (limited to 'src/compiletest')
-rw-r--r--src/compiletest/common.rs7
-rw-r--r--src/compiletest/compiletest.rs5
-rw-r--r--src/compiletest/runtest.rs35
3 files changed, 37 insertions, 10 deletions
diff --git a/src/compiletest/common.rs b/src/compiletest/common.rs
index 14859ebef6e..714f04e4a9d 100644
--- a/src/compiletest/common.rs
+++ b/src/compiletest/common.rs
@@ -49,5 +49,10 @@ type config = {
     // Flags to pass to the compiler
     rustcflags: Option<~str>,
 
+    // Run tests using the JIT
+    jit: bool,
+
     // Explain what's going on
-    verbose: bool};
+    verbose: bool
+
+};
diff --git a/src/compiletest/compiletest.rs b/src/compiletest/compiletest.rs
index b1d4e899ced..7a33fa50e55 100644
--- a/src/compiletest/compiletest.rs
+++ b/src/compiletest/compiletest.rs
@@ -32,7 +32,8 @@ fn parse_config(args: ~[~str]) -> config {
           getopts::reqopt(~"mode"), getopts::optflag(~"ignored"),
           getopts::optopt(~"runtool"), getopts::optopt(~"rustcflags"),
           getopts::optflag(~"verbose"),
-          getopts::optopt(~"logfile")];
+          getopts::optopt(~"logfile"),
+          getopts::optflag(~"jit")];
 
     assert (vec::is_not_empty(args));
     let args_ = vec::tail(args);
@@ -64,6 +65,7 @@ fn parse_config(args: ~[~str]) -> config {
                               |s| Path(s)),
          runtool: getopts::opt_maybe_str(matches, ~"runtool"),
          rustcflags: getopts::opt_maybe_str(matches, ~"rustcflags"),
+         jit: getopts::opt_present(matches, ~"jit"),
          verbose: getopts::opt_present(matches, ~"verbose")};
 }
 
@@ -81,6 +83,7 @@ fn log_config(config: config) {
     logv(c, fmt!("filter: %s", opt_str(config.filter)));
     logv(c, fmt!("runtool: %s", opt_str(config.runtool)));
     logv(c, fmt!("rustcflags: %s", opt_str(config.rustcflags)));
+    logv(c, fmt!("jit: %b", config.jit));
     logv(c, fmt!("verbose: %b", config.verbose));
     logv(c, fmt!("\n"));
 }
diff --git a/src/compiletest/runtest.rs b/src/compiletest/runtest.rs
index f93dda87f38..e456b4469fa 100644
--- a/src/compiletest/runtest.rs
+++ b/src/compiletest/runtest.rs
@@ -48,11 +48,15 @@ fn run_cfail_test(config: config, props: test_props, testfile: &Path) {
 }
 
 fn run_rfail_test(config: config, props: test_props, testfile: &Path) {
-    let mut procres = compile_test(config, props, testfile);
+    let procres = if !config.jit {
+        let procres = compile_test(config, props, testfile);
 
-    if procres.status != 0 { fatal_procres(~"compilation failed!", procres); }
+        if procres.status != 0 { fatal_procres(~"compilation failed!", procres); }
 
-    procres = exec_compiled_test(config, props, testfile);
+        exec_compiled_test(config, props, testfile)
+    } else {
+        jit_test(config, props, testfile)
+    };
 
     // The value our Makefile configures valgrind to return on failure
     const valgrind_err: int = 100;
@@ -76,13 +80,19 @@ fn check_correct_failure_status(procres: procres) {
 }
 
 fn run_rpass_test(config: config, props: test_props, testfile: &Path) {
-    let mut procres = compile_test(config, props, testfile);
+    if !config.jit {
+        let mut procres = compile_test(config, props, testfile);
+
+        if procres.status != 0 { fatal_procres(~"compilation failed!", procres); }
 
-    if procres.status != 0 { fatal_procres(~"compilation failed!", procres); }
+        procres = exec_compiled_test(config, props, testfile);
 
-    procres = exec_compiled_test(config, props, testfile);
+        if procres.status != 0 { fatal_procres(~"test run failed!", procres); }
+    } else {
+        let mut procres = jit_test(config, props, testfile);
 
-    if procres.status != 0 { fatal_procres(~"test run failed!", procres); }
+        if procres.status != 0 { fatal_procres(~"jit failed!", procres); }
+    }
 }
 
 fn run_pretty_test(config: config, props: test_props, testfile: &Path) {
@@ -295,10 +305,19 @@ type procres = {status: int, stdout: ~str, stderr: ~str, cmdline: ~str};
 
 fn compile_test(config: config, props: test_props,
                 testfile: &Path) -> procres {
+    compile_test_(config, props, testfile, [])
+}
+
+fn jit_test(config: config, props: test_props, testfile: &Path) -> procres {
+    compile_test_(config, props, testfile, [~"--jit"])
+}
+
+fn compile_test_(config: config, props: test_props,
+                 testfile: &Path, extra_args: &[~str]) -> procres {
     let link_args = ~[~"-L", aux_output_dir_name(config, testfile).to_str()];
     compose_and_run_compiler(
         config, props, testfile,
-        make_compile_args(config, props, link_args,
+        make_compile_args(config, props, link_args + extra_args,
                           make_exe_name, testfile),
         None)
 }