mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 08:44:35 +00:00
Rollup merge of #110773 - mj10021:issue-109502-fix, r=oli-obk
Reduce MIR dump file count for MIR-opt tests As referenced in issue #109502 , mir-opt tests previously used the -Zdump-mir=all flag, which generates very large output. This PR only dumps the passes under test, greatly reducing dump output.
This commit is contained in:
commit
de7e29e593
@ -319,7 +319,8 @@ impl<'test> TestCx<'test> {
|
||||
|
||||
fn run_cfail_test(&self) {
|
||||
let pm = self.pass_mode();
|
||||
let proc_res = self.compile_test(WillExecute::No, self.should_emit_metadata(pm));
|
||||
let proc_res =
|
||||
self.compile_test(WillExecute::No, self.should_emit_metadata(pm), Vec::new());
|
||||
self.check_if_test_should_compile(&proc_res, pm);
|
||||
self.check_no_compiler_crash(&proc_res, self.props.should_ice);
|
||||
|
||||
@ -347,7 +348,7 @@ impl<'test> TestCx<'test> {
|
||||
fn run_rfail_test(&self) {
|
||||
let pm = self.pass_mode();
|
||||
let should_run = self.run_if_enabled();
|
||||
let proc_res = self.compile_test(should_run, self.should_emit_metadata(pm));
|
||||
let proc_res = self.compile_test(should_run, self.should_emit_metadata(pm), Vec::new());
|
||||
|
||||
if !proc_res.status.success() {
|
||||
self.fatal_proc_rec("compilation failed!", &proc_res);
|
||||
@ -395,7 +396,7 @@ impl<'test> TestCx<'test> {
|
||||
|
||||
fn run_cpass_test(&self) {
|
||||
let emit_metadata = self.should_emit_metadata(self.pass_mode());
|
||||
let proc_res = self.compile_test(WillExecute::No, emit_metadata);
|
||||
let proc_res = self.compile_test(WillExecute::No, emit_metadata, Vec::new());
|
||||
|
||||
if !proc_res.status.success() {
|
||||
self.fatal_proc_rec("compilation failed!", &proc_res);
|
||||
@ -410,7 +411,7 @@ impl<'test> TestCx<'test> {
|
||||
fn run_rpass_test(&self) {
|
||||
let emit_metadata = self.should_emit_metadata(self.pass_mode());
|
||||
let should_run = self.run_if_enabled();
|
||||
let proc_res = self.compile_test(should_run, emit_metadata);
|
||||
let proc_res = self.compile_test(should_run, emit_metadata, Vec::new());
|
||||
|
||||
if !proc_res.status.success() {
|
||||
self.fatal_proc_rec("compilation failed!", &proc_res);
|
||||
@ -440,7 +441,7 @@ impl<'test> TestCx<'test> {
|
||||
}
|
||||
|
||||
let should_run = self.run_if_enabled();
|
||||
let mut proc_res = self.compile_test(should_run, Emit::None);
|
||||
let mut proc_res = self.compile_test(should_run, Emit::None, Vec::new());
|
||||
|
||||
if !proc_res.status.success() {
|
||||
self.fatal_proc_rec("compilation failed!", &proc_res);
|
||||
@ -686,7 +687,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, Emit::None);
|
||||
let compile_result = self.compile_test(should_run, Emit::None, Vec::new());
|
||||
if !compile_result.status.success() {
|
||||
self.fatal_proc_rec("compilation failed!", &compile_result);
|
||||
}
|
||||
@ -806,7 +807,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, Emit::None);
|
||||
let compiler_run_result = self.compile_test(should_run, Emit::None, Vec::new());
|
||||
if !compiler_run_result.status.success() {
|
||||
self.fatal_proc_rec("compilation failed!", &compiler_run_result);
|
||||
}
|
||||
@ -1043,7 +1044,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, Emit::None);
|
||||
let compile_result = self.compile_test(should_run, Emit::None, Vec::new());
|
||||
if !compile_result.status.success() {
|
||||
self.fatal_proc_rec("compilation failed!", &compile_result);
|
||||
}
|
||||
@ -1482,8 +1483,8 @@ impl<'test> TestCx<'test> {
|
||||
}
|
||||
}
|
||||
|
||||
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(&self, will_execute: WillExecute, emit: Emit, passes: Vec<String>) -> ProcRes {
|
||||
self.compile_test_general(will_execute, emit, self.props.local_pass_mode(), passes)
|
||||
}
|
||||
|
||||
fn compile_test_general(
|
||||
@ -1491,6 +1492,7 @@ impl<'test> TestCx<'test> {
|
||||
will_execute: WillExecute,
|
||||
emit: Emit,
|
||||
local_pm: Option<PassMode>,
|
||||
passes: Vec<String>,
|
||||
) -> ProcRes {
|
||||
// Only use `make_exe_name` when the test ends up being executed.
|
||||
let output_file = match will_execute {
|
||||
@ -1527,6 +1529,7 @@ impl<'test> TestCx<'test> {
|
||||
emit,
|
||||
allow_unused,
|
||||
LinkToAux::Yes,
|
||||
passes,
|
||||
);
|
||||
|
||||
self.compose_and_run_compiler(rustc, None)
|
||||
@ -1777,6 +1780,7 @@ impl<'test> TestCx<'test> {
|
||||
Emit::None,
|
||||
AllowUnused::No,
|
||||
LinkToAux::No,
|
||||
Vec::new(),
|
||||
);
|
||||
|
||||
for key in &aux_props.unset_rustc_env {
|
||||
@ -1908,6 +1912,7 @@ impl<'test> TestCx<'test> {
|
||||
emit: Emit,
|
||||
allow_unused: AllowUnused,
|
||||
link_to_aux: LinkToAux,
|
||||
passes: Vec<String>, // Vec of passes under mir-opt test to be dumped
|
||||
) -> Command {
|
||||
let is_aux = input_file.components().map(|c| c.as_os_str()).any(|c| c == "auxiliary");
|
||||
let is_rustdoc = self.is_rustdoc() && !is_aux;
|
||||
@ -2008,9 +2013,18 @@ impl<'test> TestCx<'test> {
|
||||
rustc.arg("-Cstrip=debuginfo");
|
||||
}
|
||||
MirOpt => {
|
||||
// We check passes under test to minimize the mir-opt test dump
|
||||
// if files_for_miropt_test parses the passes, we dump only those passes
|
||||
// otherwise we conservatively pass -Zdump-mir=all
|
||||
let zdump_arg = if !passes.is_empty() {
|
||||
format!("-Zdump-mir={}", passes.join(" | "))
|
||||
} else {
|
||||
"-Zdump-mir=all".to_string()
|
||||
};
|
||||
|
||||
rustc.args(&[
|
||||
"-Copt-level=1",
|
||||
"-Zdump-mir=all",
|
||||
&zdump_arg,
|
||||
"-Zvalidate-mir",
|
||||
"-Zdump-mir-exclude-pass-number",
|
||||
"-Zmir-pretty-relative-line-numbers=yes",
|
||||
@ -2333,6 +2347,7 @@ impl<'test> TestCx<'test> {
|
||||
Emit::LlvmIr,
|
||||
AllowUnused::No,
|
||||
LinkToAux::Yes,
|
||||
Vec::new(),
|
||||
);
|
||||
|
||||
self.compose_and_run_compiler(rustc, None)
|
||||
@ -2364,8 +2379,14 @@ 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);
|
||||
let rustc = self.make_compile_args(
|
||||
input_file,
|
||||
output_file,
|
||||
emit,
|
||||
AllowUnused::No,
|
||||
LinkToAux::Yes,
|
||||
Vec::new(),
|
||||
);
|
||||
|
||||
(self.compose_and_run_compiler(rustc, None), output_path)
|
||||
}
|
||||
@ -2496,6 +2517,7 @@ impl<'test> TestCx<'test> {
|
||||
Emit::None,
|
||||
AllowUnused::Yes,
|
||||
LinkToAux::Yes,
|
||||
Vec::new(),
|
||||
);
|
||||
new_rustdoc.build_all_auxiliary(&mut rustc);
|
||||
|
||||
@ -2769,7 +2791,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, Emit::None);
|
||||
let proc_res = self.compile_test(WillExecute::No, Emit::None, Vec::new());
|
||||
|
||||
if !proc_res.status.success() {
|
||||
self.fatal_proc_rec("compilation failed!", &proc_res);
|
||||
@ -3310,14 +3332,15 @@ 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, Emit::Metadata, pm);
|
||||
let proc_res =
|
||||
self.compile_test_general(WillExecute::No, Emit::Metadata, pm, Vec::new());
|
||||
self.check_if_test_should_compile(&proc_res, pm);
|
||||
}
|
||||
|
||||
let pm = self.pass_mode();
|
||||
let should_run = self.should_run(pm);
|
||||
let emit_metadata = self.should_emit_metadata(pm);
|
||||
let proc_res = self.compile_test(should_run, emit_metadata);
|
||||
let proc_res = self.compile_test(should_run, emit_metadata, Vec::new());
|
||||
self.check_if_test_should_compile(&proc_res, pm);
|
||||
|
||||
// if the user specified a format in the ui test
|
||||
@ -3479,6 +3502,7 @@ impl<'test> TestCx<'test> {
|
||||
emit_metadata,
|
||||
AllowUnused::No,
|
||||
LinkToAux::Yes,
|
||||
Vec::new(),
|
||||
);
|
||||
let res = self.compose_and_run_compiler(rustc, None);
|
||||
if !res.status.success() {
|
||||
@ -3497,14 +3521,14 @@ impl<'test> TestCx<'test> {
|
||||
let pm = self.pass_mode();
|
||||
let should_run = self.should_run(pm);
|
||||
let emit_metadata = self.should_emit_metadata(pm);
|
||||
let proc_res = self.compile_test(should_run, emit_metadata);
|
||||
let passes = self.get_passes();
|
||||
|
||||
let proc_res = self.compile_test(should_run, emit_metadata, passes);
|
||||
self.check_mir_dump();
|
||||
if !proc_res.status.success() {
|
||||
self.fatal_proc_rec("compilation failed!", &proc_res);
|
||||
}
|
||||
|
||||
self.check_mir_dump();
|
||||
|
||||
if let WillExecute::Yes = should_run {
|
||||
let proc_res = self.exec_compiled_test();
|
||||
|
||||
@ -3514,6 +3538,26 @@ impl<'test> TestCx<'test> {
|
||||
}
|
||||
}
|
||||
|
||||
fn get_passes(&self) -> Vec<String> {
|
||||
let files = miropt_test_tools::files_for_miropt_test(
|
||||
&self.testpaths.file,
|
||||
self.config.get_pointer_width(),
|
||||
);
|
||||
|
||||
let mut out = Vec::new();
|
||||
|
||||
for miropt_test_tools::MiroptTestFiles {
|
||||
from_file: _,
|
||||
to_file: _,
|
||||
expected_file: _,
|
||||
passes,
|
||||
} in files
|
||||
{
|
||||
out.extend(passes);
|
||||
}
|
||||
out
|
||||
}
|
||||
|
||||
fn check_mir_dump(&self) {
|
||||
let test_file_contents = fs::read_to_string(&self.testpaths.file).unwrap();
|
||||
|
||||
@ -3543,8 +3587,9 @@ impl<'test> TestCx<'test> {
|
||||
&self.testpaths.file,
|
||||
self.config.get_pointer_width(),
|
||||
);
|
||||
|
||||
for miropt_test_tools::MiroptTestFiles { from_file, to_file, expected_file } in files {
|
||||
for miropt_test_tools::MiroptTestFiles { from_file, to_file, expected_file, passes: _ } in
|
||||
files
|
||||
{
|
||||
let dumped_string = if let Some(after) = to_file {
|
||||
self.diff_mir_files(from_file.into(), after.into())
|
||||
} else {
|
||||
|
@ -4,6 +4,8 @@ pub struct MiroptTestFiles {
|
||||
pub expected_file: std::path::PathBuf,
|
||||
pub from_file: String,
|
||||
pub to_file: Option<String>,
|
||||
/// Vec of passes under test to be dumped
|
||||
pub passes: Vec<String>,
|
||||
}
|
||||
|
||||
pub fn files_for_miropt_test(testfile: &std::path::Path, bit_width: u32) -> Vec<MiroptTestFiles> {
|
||||
@ -28,9 +30,11 @@ pub fn files_for_miropt_test(testfile: &std::path::Path, bit_width: u32) -> Vec<
|
||||
let mut expected_file;
|
||||
let from_file;
|
||||
let to_file;
|
||||
let mut passes = Vec::new();
|
||||
|
||||
if test_name.ends_with(".diff") {
|
||||
let trimmed = test_name.trim_end_matches(".diff");
|
||||
passes.push(trimmed.split('.').last().unwrap().to_owned());
|
||||
let test_against = format!("{}.after.mir", trimmed);
|
||||
from_file = format!("{}.before.mir", trimmed);
|
||||
expected_file = format!("{}{}.diff", trimmed, bit_width);
|
||||
@ -38,7 +42,14 @@ pub fn files_for_miropt_test(testfile: &std::path::Path, bit_width: u32) -> Vec<
|
||||
to_file = Some(test_against);
|
||||
} else if let Some(first_pass) = test_names.next() {
|
||||
let second_pass = test_names.next().unwrap();
|
||||
if let Some((first_pass_name, _)) = first_pass.split_once('.') {
|
||||
passes.push(first_pass_name.to_owned());
|
||||
}
|
||||
if let Some((second_pass_name, _)) = second_pass.split_once('.') {
|
||||
passes.push(second_pass_name.to_owned());
|
||||
}
|
||||
assert!(test_names.next().is_none(), "three mir pass names specified for MIR diff");
|
||||
|
||||
expected_file =
|
||||
format!("{}{}.{}-{}.diff", test_name, bit_width, first_pass, second_pass);
|
||||
let second_file = format!("{}.{}.mir", test_name, second_pass);
|
||||
@ -51,18 +62,24 @@ pub fn files_for_miropt_test(testfile: &std::path::Path, bit_width: u32) -> Vec<
|
||||
.next()
|
||||
.expect("test_name has an invalid extension");
|
||||
let extension = cap.get(1).unwrap().as_str();
|
||||
|
||||
expected_file =
|
||||
format!("{}{}{}", test_name.trim_end_matches(extension), bit_width, extension,);
|
||||
from_file = test_name.to_string();
|
||||
assert!(test_names.next().is_none(), "two mir pass names specified for MIR dump");
|
||||
to_file = None;
|
||||
// the pass name is the third to last string in the test name
|
||||
// this gets pushed into passes
|
||||
passes.push(
|
||||
test_name.split('.').rev().nth(2).expect("invalid test format").to_string(),
|
||||
);
|
||||
};
|
||||
if !expected_file.starts_with(&test_crate) {
|
||||
expected_file = format!("{}.{}", test_crate, expected_file);
|
||||
}
|
||||
let expected_file = test_dir.join(expected_file);
|
||||
|
||||
out.push(MiroptTestFiles { expected_file, from_file, to_file });
|
||||
out.push(MiroptTestFiles { expected_file, from_file, to_file, passes });
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -21,42 +21,42 @@ fn main() -> () {
|
||||
}
|
||||
|
||||
alloc1 (static: FOO, size: 8, align: 4) {
|
||||
╾─alloc18─╼ 03 00 00 00 │ ╾──╼....
|
||||
╾─alloc19─╼ 03 00 00 00 │ ╾──╼....
|
||||
}
|
||||
|
||||
alloc18 (size: 48, align: 4) {
|
||||
0x00 │ 00 00 00 00 __ __ __ __ ╾─alloc5──╼ 00 00 00 00 │ ....░░░░╾──╼....
|
||||
0x10 │ 00 00 00 00 __ __ __ __ ╾─alloc8──╼ 02 00 00 00 │ ....░░░░╾──╼....
|
||||
0x20 │ 01 00 00 00 2a 00 00 00 ╾─alloc13─╼ 03 00 00 00 │ ....*...╾──╼....
|
||||
alloc19 (size: 48, align: 4) {
|
||||
0x00 │ 00 00 00 00 __ __ __ __ ╾─alloc6──╼ 00 00 00 00 │ ....░░░░╾──╼....
|
||||
0x10 │ 00 00 00 00 __ __ __ __ ╾─alloc9──╼ 02 00 00 00 │ ....░░░░╾──╼....
|
||||
0x20 │ 01 00 00 00 2a 00 00 00 ╾─alloc14─╼ 03 00 00 00 │ ....*...╾──╼....
|
||||
}
|
||||
|
||||
alloc5 (size: 0, align: 4) {}
|
||||
alloc6 (size: 0, align: 4) {}
|
||||
|
||||
alloc8 (size: 16, align: 4) {
|
||||
╾─alloc9──╼ 03 00 00 00 ╾─alloc10─╼ 03 00 00 00 │ ╾──╼....╾──╼....
|
||||
}
|
||||
|
||||
alloc9 (size: 3, align: 1) {
|
||||
66 6f 6f │ foo
|
||||
alloc9 (size: 16, align: 4) {
|
||||
╾─alloc10─╼ 03 00 00 00 ╾─alloc11─╼ 03 00 00 00 │ ╾──╼....╾──╼....
|
||||
}
|
||||
|
||||
alloc10 (size: 3, align: 1) {
|
||||
66 6f 6f │ foo
|
||||
}
|
||||
|
||||
alloc11 (size: 3, align: 1) {
|
||||
62 61 72 │ bar
|
||||
}
|
||||
|
||||
alloc13 (size: 24, align: 4) {
|
||||
0x00 │ ╾─alloc14─╼ 03 00 00 00 ╾─alloc15─╼ 03 00 00 00 │ ╾──╼....╾──╼....
|
||||
0x10 │ ╾─alloc16─╼ 04 00 00 00 │ ╾──╼....
|
||||
}
|
||||
|
||||
alloc14 (size: 3, align: 1) {
|
||||
6d 65 68 │ meh
|
||||
alloc14 (size: 24, align: 4) {
|
||||
0x00 │ ╾─alloc15─╼ 03 00 00 00 ╾─alloc16─╼ 03 00 00 00 │ ╾──╼....╾──╼....
|
||||
0x10 │ ╾─alloc17─╼ 04 00 00 00 │ ╾──╼....
|
||||
}
|
||||
|
||||
alloc15 (size: 3, align: 1) {
|
||||
6d 65 68 │ meh
|
||||
}
|
||||
|
||||
alloc16 (size: 3, align: 1) {
|
||||
6d 6f 70 │ mop
|
||||
}
|
||||
|
||||
alloc16 (size: 4, align: 1) {
|
||||
alloc17 (size: 4, align: 1) {
|
||||
6d c3 b6 70 │ m..p
|
||||
}
|
||||
|
@ -21,46 +21,46 @@ fn main() -> () {
|
||||
}
|
||||
|
||||
alloc1 (static: FOO, size: 16, align: 8) {
|
||||
╾───────alloc18───────╼ 03 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
╾───────alloc19───────╼ 03 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
}
|
||||
|
||||
alloc18 (size: 72, align: 8) {
|
||||
0x00 │ 00 00 00 00 __ __ __ __ ╾───────alloc5────────╼ │ ....░░░░╾──────╼
|
||||
alloc19 (size: 72, align: 8) {
|
||||
0x00 │ 00 00 00 00 __ __ __ __ ╾───────alloc6────────╼ │ ....░░░░╾──────╼
|
||||
0x10 │ 00 00 00 00 00 00 00 00 00 00 00 00 __ __ __ __ │ ............░░░░
|
||||
0x20 │ ╾───────alloc8────────╼ 02 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
0x30 │ 01 00 00 00 2a 00 00 00 ╾───────alloc13───────╼ │ ....*...╾──────╼
|
||||
0x20 │ ╾───────alloc9────────╼ 02 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
0x30 │ 01 00 00 00 2a 00 00 00 ╾───────alloc14───────╼ │ ....*...╾──────╼
|
||||
0x40 │ 03 00 00 00 00 00 00 00 │ ........
|
||||
}
|
||||
|
||||
alloc5 (size: 0, align: 8) {}
|
||||
alloc6 (size: 0, align: 8) {}
|
||||
|
||||
alloc8 (size: 32, align: 8) {
|
||||
0x00 │ ╾───────alloc9────────╼ 03 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
0x10 │ ╾───────alloc10───────╼ 03 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
}
|
||||
|
||||
alloc9 (size: 3, align: 1) {
|
||||
66 6f 6f │ foo
|
||||
alloc9 (size: 32, align: 8) {
|
||||
0x00 │ ╾───────alloc10───────╼ 03 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
0x10 │ ╾───────alloc11───────╼ 03 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
}
|
||||
|
||||
alloc10 (size: 3, align: 1) {
|
||||
66 6f 6f │ foo
|
||||
}
|
||||
|
||||
alloc11 (size: 3, align: 1) {
|
||||
62 61 72 │ bar
|
||||
}
|
||||
|
||||
alloc13 (size: 48, align: 8) {
|
||||
0x00 │ ╾───────alloc14───────╼ 03 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
0x10 │ ╾───────alloc15───────╼ 03 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
0x20 │ ╾───────alloc16───────╼ 04 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
}
|
||||
|
||||
alloc14 (size: 3, align: 1) {
|
||||
6d 65 68 │ meh
|
||||
alloc14 (size: 48, align: 8) {
|
||||
0x00 │ ╾───────alloc15───────╼ 03 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
0x10 │ ╾───────alloc16───────╼ 03 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
0x20 │ ╾───────alloc17───────╼ 04 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
}
|
||||
|
||||
alloc15 (size: 3, align: 1) {
|
||||
6d 65 68 │ meh
|
||||
}
|
||||
|
||||
alloc16 (size: 3, align: 1) {
|
||||
6d 6f 70 │ mop
|
||||
}
|
||||
|
||||
alloc16 (size: 4, align: 1) {
|
||||
alloc17 (size: 4, align: 1) {
|
||||
6d c3 b6 70 │ m..p
|
||||
}
|
||||
|
@ -21,41 +21,41 @@ fn main() -> () {
|
||||
}
|
||||
|
||||
alloc1 (static: FOO, size: 8, align: 4) {
|
||||
╾─alloc22─╼ 03 00 00 00 │ ╾──╼....
|
||||
╾─alloc23─╼ 03 00 00 00 │ ╾──╼....
|
||||
}
|
||||
|
||||
alloc22 (size: 48, align: 4) {
|
||||
0x00 │ 00 00 00 00 __ __ __ __ ╾─alloc9──╼ 00 00 00 00 │ ....░░░░╾──╼....
|
||||
0x10 │ 00 00 00 00 __ __ __ __ ╾─alloc14─╼ 02 00 00 00 │ ....░░░░╾──╼....
|
||||
0x20 │ 01 00 00 00 2a 00 00 00 ╾─alloc20─╼ 03 00 00 00 │ ....*...╾──╼....
|
||||
alloc23 (size: 48, align: 4) {
|
||||
0x00 │ 00 00 00 00 __ __ __ __ ╾─alloc10─╼ 00 00 00 00 │ ....░░░░╾──╼....
|
||||
0x10 │ 00 00 00 00 __ __ __ __ ╾─alloc15─╼ 02 00 00 00 │ ....░░░░╾──╼....
|
||||
0x20 │ 01 00 00 00 2a 00 00 00 ╾─alloc21─╼ 03 00 00 00 │ ....*...╾──╼....
|
||||
}
|
||||
|
||||
alloc9 (size: 0, align: 4) {}
|
||||
alloc10 (size: 0, align: 4) {}
|
||||
|
||||
alloc14 (size: 8, align: 4) {
|
||||
╾─alloc12─╼ ╾─alloc13─╼ │ ╾──╼╾──╼
|
||||
}
|
||||
|
||||
alloc12 (size: 1, align: 1) {
|
||||
05 │ .
|
||||
alloc15 (size: 8, align: 4) {
|
||||
╾─alloc13─╼ ╾─alloc14─╼ │ ╾──╼╾──╼
|
||||
}
|
||||
|
||||
alloc13 (size: 1, align: 1) {
|
||||
05 │ .
|
||||
}
|
||||
|
||||
alloc14 (size: 1, align: 1) {
|
||||
06 │ .
|
||||
}
|
||||
|
||||
alloc20 (size: 12, align: 4) {
|
||||
╾─a17+0x3─╼ ╾─alloc18─╼ ╾─a19+0x2─╼ │ ╾──╼╾──╼╾──╼
|
||||
alloc21 (size: 12, align: 4) {
|
||||
╾─a18+0x3─╼ ╾─alloc19─╼ ╾─a20+0x2─╼ │ ╾──╼╾──╼╾──╼
|
||||
}
|
||||
|
||||
alloc17 (size: 4, align: 1) {
|
||||
alloc18 (size: 4, align: 1) {
|
||||
2a 45 15 6f │ *E.o
|
||||
}
|
||||
|
||||
alloc18 (size: 1, align: 1) {
|
||||
alloc19 (size: 1, align: 1) {
|
||||
2a │ *
|
||||
}
|
||||
|
||||
alloc19 (size: 4, align: 1) {
|
||||
alloc20 (size: 4, align: 1) {
|
||||
2a 45 15 6f │ *E.o
|
||||
}
|
||||
|
@ -21,44 +21,44 @@ fn main() -> () {
|
||||
}
|
||||
|
||||
alloc1 (static: FOO, size: 16, align: 8) {
|
||||
╾───────alloc22───────╼ 03 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
╾───────alloc23───────╼ 03 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
}
|
||||
|
||||
alloc22 (size: 72, align: 8) {
|
||||
0x00 │ 00 00 00 00 __ __ __ __ ╾───────alloc9────────╼ │ ....░░░░╾──────╼
|
||||
alloc23 (size: 72, align: 8) {
|
||||
0x00 │ 00 00 00 00 __ __ __ __ ╾───────alloc10───────╼ │ ....░░░░╾──────╼
|
||||
0x10 │ 00 00 00 00 00 00 00 00 00 00 00 00 __ __ __ __ │ ............░░░░
|
||||
0x20 │ ╾───────alloc14───────╼ 02 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
0x30 │ 01 00 00 00 2a 00 00 00 ╾───────alloc20───────╼ │ ....*...╾──────╼
|
||||
0x20 │ ╾───────alloc15───────╼ 02 00 00 00 00 00 00 00 │ ╾──────╼........
|
||||
0x30 │ 01 00 00 00 2a 00 00 00 ╾───────alloc21───────╼ │ ....*...╾──────╼
|
||||
0x40 │ 03 00 00 00 00 00 00 00 │ ........
|
||||
}
|
||||
|
||||
alloc9 (size: 0, align: 8) {}
|
||||
alloc10 (size: 0, align: 8) {}
|
||||
|
||||
alloc14 (size: 16, align: 8) {
|
||||
╾───────alloc12───────╼ ╾───────alloc13───────╼ │ ╾──────╼╾──────╼
|
||||
}
|
||||
|
||||
alloc12 (size: 1, align: 1) {
|
||||
05 │ .
|
||||
alloc15 (size: 16, align: 8) {
|
||||
╾───────alloc13───────╼ ╾───────alloc14───────╼ │ ╾──────╼╾──────╼
|
||||
}
|
||||
|
||||
alloc13 (size: 1, align: 1) {
|
||||
05 │ .
|
||||
}
|
||||
|
||||
alloc14 (size: 1, align: 1) {
|
||||
06 │ .
|
||||
}
|
||||
|
||||
alloc20 (size: 24, align: 8) {
|
||||
0x00 │ ╾─────alloc17+0x3─────╼ ╾───────alloc18───────╼ │ ╾──────╼╾──────╼
|
||||
0x10 │ ╾─────alloc19+0x2─────╼ │ ╾──────╼
|
||||
alloc21 (size: 24, align: 8) {
|
||||
0x00 │ ╾─────alloc18+0x3─────╼ ╾───────alloc19───────╼ │ ╾──────╼╾──────╼
|
||||
0x10 │ ╾─────alloc20+0x2─────╼ │ ╾──────╼
|
||||
}
|
||||
|
||||
alloc17 (size: 4, align: 1) {
|
||||
alloc18 (size: 4, align: 1) {
|
||||
2a 45 15 6f │ *E.o
|
||||
}
|
||||
|
||||
alloc18 (size: 1, align: 1) {
|
||||
alloc19 (size: 1, align: 1) {
|
||||
2a │ *
|
||||
}
|
||||
|
||||
alloc19 (size: 4, align: 1) {
|
||||
alloc20 (size: 4, align: 1) {
|
||||
2a 45 15 6f │ *E.o
|
||||
}
|
||||
|
@ -21,30 +21,30 @@ fn main() -> () {
|
||||
}
|
||||
|
||||
alloc1 (static: FOO, size: 4, align: 4) {
|
||||
╾─alloc11─╼ │ ╾──╼
|
||||
╾─alloc12─╼ │ ╾──╼
|
||||
}
|
||||
|
||||
alloc11 (size: 168, align: 1) {
|
||||
alloc12 (size: 168, align: 1) {
|
||||
0x00 │ ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab │ ................
|
||||
0x10 │ ab ab ab ab ab ab ab ab ab ab ab ab ╾─alloc6──╼ │ ............╾──╼
|
||||
0x10 │ ab ab ab ab ab ab ab ab ab ab ab ab ╾─alloc7──╼ │ ............╾──╼
|
||||
0x20 │ 01 ef cd ab 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
|
||||
0x30 │ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
|
||||
0x40 │ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
|
||||
0x50 │ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
|
||||
0x60 │ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
|
||||
0x70 │ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
|
||||
0x80 │ 00 00 00 00 00 00 00 00 00 00 ╾─alloc8──╼ 00 00 │ ..........╾──╼..
|
||||
0x90 │ ╾─a9+0x63─╼ 00 00 00 00 00 00 00 00 00 00 00 00 │ ╾──╼............
|
||||
0x80 │ 00 00 00 00 00 00 00 00 00 00 ╾─alloc9──╼ 00 00 │ ..........╾──╼..
|
||||
0x90 │ ╾a10+0x63─╼ 00 00 00 00 00 00 00 00 00 00 00 00 │ ╾──╼............
|
||||
0xa0 │ 00 00 00 00 00 00 00 00 │ ........
|
||||
}
|
||||
|
||||
alloc6 (size: 4, align: 4) {
|
||||
alloc7 (size: 4, align: 4) {
|
||||
2a 00 00 00 │ *...
|
||||
}
|
||||
|
||||
alloc8 (fn: main)
|
||||
alloc9 (fn: main)
|
||||
|
||||
alloc9 (size: 100, align: 1) {
|
||||
alloc10 (size: 100, align: 1) {
|
||||
0x00 │ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
|
||||
0x10 │ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
|
||||
0x20 │ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
|
||||
|
@ -21,12 +21,12 @@ fn main() -> () {
|
||||
}
|
||||
|
||||
alloc1 (static: FOO, size: 8, align: 8) {
|
||||
╾───────alloc11───────╼ │ ╾──────╼
|
||||
╾───────alloc12───────╼ │ ╾──────╼
|
||||
}
|
||||
|
||||
alloc11 (size: 180, align: 1) {
|
||||
alloc12 (size: 180, align: 1) {
|
||||
0x00 │ ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab │ ................
|
||||
0x10 │ ab ab ab ab ab ab ab ab ab ab ab ab ╾──alloc6── │ ............╾───
|
||||
0x10 │ ab ab ab ab ab ab ab ab ab ab ab ab ╾──alloc7── │ ............╾───
|
||||
0x20 │ ──────────╼ 01 ef cd ab 00 00 00 00 00 00 00 00 │ ───╼............
|
||||
0x30 │ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
|
||||
0x40 │ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
|
||||
@ -34,18 +34,18 @@ alloc11 (size: 180, align: 1) {
|
||||
0x60 │ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
|
||||
0x70 │ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
|
||||
0x80 │ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ╾──── │ ..............╾─
|
||||
0x90 │ ─────alloc8─────╼ 00 00 ╾─────alloc9+0x63─────╼ │ ─────╼..╾──────╼
|
||||
0x90 │ ─────alloc9─────╼ 00 00 ╾────alloc10+0x63─────╼ │ ─────╼..╾──────╼
|
||||
0xa0 │ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
|
||||
0xb0 │ 00 00 00 00 │ ....
|
||||
}
|
||||
|
||||
alloc6 (size: 4, align: 4) {
|
||||
alloc7 (size: 4, align: 4) {
|
||||
2a 00 00 00 │ *...
|
||||
}
|
||||
|
||||
alloc8 (fn: main)
|
||||
alloc9 (fn: main)
|
||||
|
||||
alloc9 (size: 100, align: 1) {
|
||||
alloc10 (size: 100, align: 1) {
|
||||
0x00 │ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
|
||||
0x10 │ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
|
||||
0x20 │ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 │ ................
|
||||
|
Loading…
Reference in New Issue
Block a user