Skip to content

Commit

Permalink
put custom flags as last in codegen and asm tests
Browse files Browse the repository at this point in the history
  • Loading branch information
pietroalbini committed Nov 3, 2022
1 parent 5ed753c commit 4c55b29
Showing 1 changed file with 41 additions and 33 deletions.
74 changes: 41 additions & 33 deletions src/tools/compiletest/src/runtest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -220,11 +220,13 @@ enum WillExecute {
Disabled,
}

/// Should `--emit metadata` be used?
/// What value should be passed to `--emit`?
#[derive(Copy, Clone)]
enum EmitMetadata {
Yes,
No,
enum Emit {
None,
Metadata,
LlvmIr,
Asm,
}

impl<'test> TestCx<'test> {
Expand Down Expand Up @@ -424,7 +426,7 @@ impl<'test> TestCx<'test> {
}

let should_run = self.run_if_enabled();
let mut proc_res = self.compile_test(should_run, EmitMetadata::No);
let mut proc_res = self.compile_test(should_run, Emit::None);

if !proc_res.status.success() {
self.fatal_proc_rec("compilation failed!", &proc_res);
Expand Down Expand Up @@ -676,7 +678,7 @@ impl<'test> TestCx<'test> {

// compile test file (it should have 'compile-flags:-g' in the header)
let should_run = self.run_if_enabled();
let compile_result = self.compile_test(should_run, EmitMetadata::No);
let compile_result = self.compile_test(should_run, Emit::None);
if !compile_result.status.success() {
self.fatal_proc_rec("compilation failed!", &compile_result);
}
Expand Down Expand Up @@ -796,7 +798,7 @@ impl<'test> TestCx<'test> {

// compile test file (it should have 'compile-flags:-g' in the header)
let should_run = self.run_if_enabled();
let compiler_run_result = self.compile_test(should_run, EmitMetadata::No);
let compiler_run_result = self.compile_test(should_run, Emit::None);
if !compiler_run_result.status.success() {
self.fatal_proc_rec("compilation failed!", &compiler_run_result);
}
Expand Down Expand Up @@ -1028,7 +1030,7 @@ impl<'test> TestCx<'test> {
fn run_debuginfo_lldb_test_no_opt(&self) {
// compile test file (it should have 'compile-flags:-g' in the header)
let should_run = self.run_if_enabled();
let compile_result = self.compile_test(should_run, EmitMetadata::No);
let compile_result = self.compile_test(should_run, Emit::None);
if !compile_result.status.success() {
self.fatal_proc_rec("compilation failed!", &compile_result);
}
Expand Down Expand Up @@ -1453,21 +1455,21 @@ impl<'test> TestCx<'test> {
}
}

fn should_emit_metadata(&self, pm: Option<PassMode>) -> EmitMetadata {
fn should_emit_metadata(&self, pm: Option<PassMode>) -> Emit {
match (pm, self.props.fail_mode, self.config.mode) {
(Some(PassMode::Check), ..) | (_, Some(FailMode::Check), Ui) => EmitMetadata::Yes,
_ => EmitMetadata::No,
(Some(PassMode::Check), ..) | (_, Some(FailMode::Check), Ui) => Emit::Metadata,
_ => Emit::None,
}
}

fn compile_test(&self, will_execute: WillExecute, emit_metadata: EmitMetadata) -> ProcRes {
self.compile_test_general(will_execute, emit_metadata, self.props.local_pass_mode())
fn compile_test(&self, will_execute: WillExecute, emit: Emit) -> ProcRes {
self.compile_test_general(will_execute, emit, self.props.local_pass_mode())
}

fn compile_test_general(
&self,
will_execute: WillExecute,
emit_metadata: EmitMetadata,
emit: Emit,
local_pm: Option<PassMode>,
) -> ProcRes {
// Only use `make_exe_name` when the test ends up being executed.
Expand Down Expand Up @@ -1502,7 +1504,7 @@ impl<'test> TestCx<'test> {
let rustc = self.make_compile_args(
&self.testpaths.file,
output_file,
emit_metadata,
emit,
allow_unused,
LinkToAux::Yes,
);
Expand Down Expand Up @@ -1735,7 +1737,7 @@ impl<'test> TestCx<'test> {
let mut aux_rustc = aux_cx.make_compile_args(
input_file,
aux_output,
EmitMetadata::No,
Emit::None,
AllowUnused::No,
LinkToAux::No,
);
Expand Down Expand Up @@ -1875,7 +1877,7 @@ impl<'test> TestCx<'test> {
&self,
input_file: &Path,
output_file: TargetLocation,
emit_metadata: EmitMetadata,
emit: Emit,
allow_unused: AllowUnused,
link_to_aux: LinkToAux,
) -> Command {
Expand Down Expand Up @@ -1992,8 +1994,18 @@ impl<'test> TestCx<'test> {
}
}

if let (false, EmitMetadata::Yes) = (is_rustdoc, emit_metadata) {
rustc.args(&["--emit", "metadata"]);
match emit {
Emit::None => {}
Emit::Metadata if is_rustdoc => {}
Emit::Metadata => {
rustc.args(&["--emit", "metadata"]);
}
Emit::LlvmIr => {
rustc.args(&["--emit", "llvm-ir"]);
}
Emit::Asm => {
rustc.args(&["--emit", "asm"]);
}
}

if !is_rustdoc {
Expand Down Expand Up @@ -2262,14 +2274,13 @@ impl<'test> TestCx<'test> {
fn compile_test_and_save_ir(&self) -> ProcRes {
let output_file = TargetLocation::ThisDirectory(self.output_base_dir());
let input_file = &self.testpaths.file;
let mut rustc = self.make_compile_args(
let rustc = self.make_compile_args(
input_file,
output_file,
EmitMetadata::No,
Emit::LlvmIr,
AllowUnused::No,
LinkToAux::Yes,
);
rustc.arg("--emit=llvm-ir");

self.compose_and_run_compiler(rustc, None)
}
Expand All @@ -2281,17 +2292,11 @@ impl<'test> TestCx<'test> {

let output_file = TargetLocation::ThisFile(output_path.clone());
let input_file = &self.testpaths.file;
let mut rustc = self.make_compile_args(
input_file,
output_file,
EmitMetadata::No,
AllowUnused::No,
LinkToAux::Yes,
);

let mut emit = Emit::None;
match self.props.assembly_output.as_ref().map(AsRef::as_ref) {
Some("emit-asm") => {
rustc.arg("--emit=asm");
emit = Emit::Asm;
}

Some("ptx-linker") => {
Expand All @@ -2302,6 +2307,9 @@ impl<'test> TestCx<'test> {
None => self.fatal("missing 'assembly-output' header"),
}

let rustc =
self.make_compile_args(input_file, output_file, emit, AllowUnused::No, LinkToAux::Yes);

(self.compose_and_run_compiler(rustc, None), output_path)
}

Expand Down Expand Up @@ -2426,7 +2434,7 @@ impl<'test> TestCx<'test> {
let mut rustc = new_rustdoc.make_compile_args(
&new_rustdoc.testpaths.file,
output_file,
EmitMetadata::No,
Emit::None,
AllowUnused::Yes,
LinkToAux::Yes,
);
Expand Down Expand Up @@ -2702,7 +2710,7 @@ impl<'test> TestCx<'test> {
fn run_codegen_units_test(&self) {
assert!(self.revision.is_none(), "revisions not relevant here");

let proc_res = self.compile_test(WillExecute::No, EmitMetadata::No);
let proc_res = self.compile_test(WillExecute::No, Emit::None);

if !proc_res.status.success() {
self.fatal_proc_rec("compilation failed!", &proc_res);
Expand Down Expand Up @@ -3215,7 +3223,7 @@ impl<'test> TestCx<'test> {
if let Some(FailMode::Build) = self.props.fail_mode {
// Make sure a build-fail test cannot fail due to failing analysis (e.g. typeck).
let pm = Some(PassMode::Check);
let proc_res = self.compile_test_general(WillExecute::No, EmitMetadata::Yes, pm);
let proc_res = self.compile_test_general(WillExecute::No, Emit::Metadata, pm);
self.check_if_test_should_compile(&proc_res, pm);
}

Expand Down

0 comments on commit 4c55b29

Please sign in to comment.