From 0f44202b7b460de10e3509d4366af48453102f76 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Thu, 6 Oct 2016 15:32:15 -0700 Subject: [PATCH] Ignore `panic` configuration for test/bench profiles Both of these profiles link to libtest, so it's invalid to configure them with `panic="abort"`. To prevent confusing errors just ignore the configuration for now. Closes #3166 --- src/cargo/ops/cargo_compile.rs | 2 +- src/cargo/util/toml.rs | 4 ++++ tests/test.rs | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/cargo/ops/cargo_compile.rs b/src/cargo/ops/cargo_compile.rs index 5a9513f94cc..324c528bf70 100644 --- a/src/cargo/ops/cargo_compile.rs +++ b/src/cargo/ops/cargo_compile.rs @@ -245,7 +245,7 @@ pub fn compile_ws<'a>(ws: &Workspace<'a>, let _p = profile::start("compiling"); let mut build_config = try!(scrape_build_config(config, jobs, target)); build_config.release = release; - build_config.test = mode == CompileMode::Test; + build_config.test = mode == CompileMode::Test || mode == CompileMode::Bench; build_config.json_errors = message_format == MessageFormat::Json; if let CompileMode::Doc { deps } = mode { build_config.doc_all = deps; diff --git a/src/cargo/util/toml.rs b/src/cargo/util/toml.rs index 4686eb9a29d..bc72b5ee99b 100644 --- a/src/cargo/util/toml.rs +++ b/src/cargo/util/toml.rs @@ -1239,6 +1239,10 @@ fn build_profiles(profiles: &Option) -> Profiles { profiles.and_then(|p| p.doc.as_ref())), custom_build: Profile::default_custom_build(), }; + // The test/bench targets cannot have panic=abort because they'll all get + // compiled with --test which requires the unwind runtime currently + profiles.test.panic = None; + profiles.bench.panic = None; profiles.test_deps.panic = None; profiles.bench_deps.panic = None; return profiles; diff --git a/tests/test.rs b/tests/test.rs index 69f22e701a4..5bc9d8e1bb7 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -2332,3 +2332,35 @@ fn pass_correct_cfgs_flags_to_rustdoc() { [DOCTEST] foo [RUNNING] `rustdoc --test [..]feature_a[..]`")); } + +#[test] +fn test_release_ignore_panic() { + let p = project("foo") + .file("Cargo.toml", r#" + [package] + name = "foo" + version = "0.0.1" + authors = [] + + [dependencies] + a = { path = "a" } + + [profile.test] + panic = 'abort' + [profile.release] + panic = 'abort' + "#) + .file("src/lib.rs", "extern crate a;") + .file("a/Cargo.toml", r#" + [package] + name = "a" + version = "0.0.1" + authors = [] + "#) + .file("a/src/lib.rs", ""); + p.build(); + println!("test"); + assert_that(p.cargo("test").arg("-v"), execs().with_status(0)); + println!("bench"); + assert_that(p.cargo("bench").arg("-v"), execs().with_status(0)); +}