diff options
| author | yvt <i@yvt.jp> | 2022-04-25 21:19:42 +0900 |
|---|---|---|
| committer | yvt <i@yvt.jp> | 2022-04-30 09:53:06 +0900 |
| commit | 63ffdfdd1776afa2e82bbd3d2ff8ff7b7f0d5b67 (patch) | |
| tree | 12a50fb5d959adc1716ea9e0946df77387c8c1f6 | |
| parent | 5d25b8fc45f66cdd1b19c87cce38eda86141dcf8 (diff) | |
| download | rust-63ffdfdd1776afa2e82bbd3d2ff8ff7b7f0d5b67.tar.gz rust-63ffdfdd1776afa2e82bbd3d2ff8ff7b7f0d5b67.zip | |
Add compilation tests with optimization enabled
Introduces a new variant of `tests/lib.rs` that compiles the source files in `tests/run` with `-Copt-level=3`.
| -rw-r--r-- | Cargo.toml | 8 | ||||
| -rw-r--r-- | tests/lang_tests_common.rs (renamed from tests/lib.rs) | 20 | ||||
| -rw-r--r-- | tests/lang_tests_debug.rs | 5 | ||||
| -rw-r--r-- | tests/lang_tests_release.rs | 5 | ||||
| -rw-r--r-- | tests/run/int_overflow.rs | 17 |
5 files changed, 49 insertions, 6 deletions
diff --git a/Cargo.toml b/Cargo.toml index 86278b46983..211d19a8dc8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,8 +9,12 @@ license = "MIT OR Apache-2.0" crate-type = ["dylib"] [[test]] -name = "lang_tests" -path = "tests/lib.rs" +name = "lang_tests_debug" +path = "tests/lang_tests_debug.rs" +harness = false +[[test]] +name = "lang_tests_release" +path = "tests/lang_tests_release.rs" harness = false [features] diff --git a/tests/lib.rs b/tests/lang_tests_common.rs index 8ee35b30bc8..8e378177e24 100644 --- a/tests/lib.rs +++ b/tests/lang_tests_common.rs @@ -1,3 +1,4 @@ +//! The common code for `tests/lang_tests_*.rs` use std::{ env::{self, current_dir}, path::PathBuf, @@ -7,7 +8,15 @@ use std::{ use lang_tester::LangTester; use tempfile::TempDir; -fn main() { +/// Controls the compile options (e.g., optimization level) used to compile +/// test code. +#[allow(dead_code)] // Each test crate picks one variant +pub enum Profile { + Debug, + Release, +} + +pub fn main_inner(profile: Profile) { let tempdir = TempDir::new().expect("temp dir"); let current_dir = current_dir().expect("current dir"); let current_dir = current_dir.to_str().expect("current dir").to_string(); @@ -42,6 +51,15 @@ fn main() { "-o", exe.to_str().expect("to_str"), path.to_str().expect("to_str"), ]); + match profile { + Profile::Debug => {} + Profile::Release => { + compiler.args(&[ + "-C", "opt-level=3", + "-C", "lto=no", + ]); + } + } // Test command 2: run `tempdir/x`. let runtime = Command::new(exe); vec![("Compiler", compiler), ("Run-time", runtime)] diff --git a/tests/lang_tests_debug.rs b/tests/lang_tests_debug.rs new file mode 100644 index 00000000000..96bd74883ff --- /dev/null +++ b/tests/lang_tests_debug.rs @@ -0,0 +1,5 @@ +mod lang_tests_common; + +fn main() { + lang_tests_common::main_inner(lang_tests_common::Profile::Debug); +} diff --git a/tests/lang_tests_release.rs b/tests/lang_tests_release.rs new file mode 100644 index 00000000000..35d5d60c33e --- /dev/null +++ b/tests/lang_tests_release.rs @@ -0,0 +1,5 @@ +mod lang_tests_common; + +fn main() { + lang_tests_common::main_inner(lang_tests_common::Profile::Release); +} diff --git a/tests/run/int_overflow.rs b/tests/run/int_overflow.rs index 6477b839828..ea2c5add962 100644 --- a/tests/run/int_overflow.rs +++ b/tests/run/int_overflow.rs @@ -1,7 +1,7 @@ // Compiler: // // Run-time: -// stdout: Panicking +// stdout: Success // status: signal #![allow(unused_attributes)] @@ -64,7 +64,9 @@ mod intrinsics { #[no_mangle] pub fn panic(_msg: &str) -> ! { unsafe { - libc::puts("Panicking\0" as *const str as *const u8); + // Panicking is expected iff overflow checking is enabled. + #[cfg(debug_assertions)] + libc::puts("Success\0" as *const str as *const u8); libc::fflush(libc::stdout); intrinsics::abort(); } @@ -124,6 +126,15 @@ impl Add for isize { #[start] fn main(mut argc: isize, _argv: *const *const u8) -> isize { let int = 9223372036854775807isize; - let int = int + argc; + let int = int + argc; // overflow + + // If overflow checking is disabled, we should reach here. + #[cfg(not(debug_assertions))] + unsafe { + libc::puts("Success\0" as *const str as *const u8); + libc::fflush(libc::stdout); + intrinsics::abort(); + } + int } |
