mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-28 22:34:45 +00:00
better reporting of valgrind errors
This commit is contained in:
parent
6d6c7a294a
commit
42c0de1314
2 changed files with 39 additions and 7 deletions
|
@ -13,6 +13,7 @@ mod helpers;
|
||||||
mod cli_run {
|
mod cli_run {
|
||||||
use crate::helpers::{
|
use crate::helpers::{
|
||||||
example_file, extract_valgrind_errors, fixture_file, run_cmd, run_roc, run_with_valgrind,
|
example_file, extract_valgrind_errors, fixture_file, run_cmd, run_roc, run_with_valgrind,
|
||||||
|
ValgrindError, ValgrindErrorXWhat,
|
||||||
};
|
};
|
||||||
use serial_test::serial;
|
use serial_test::serial;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
@ -59,8 +60,39 @@ mod cli_run {
|
||||||
panic!("failed to parse the `valgrind` xml output. Error was:\n\n{:?}\n\nvalgrind xml was: \"{}\"\n\nvalgrind stdout was: \"{}\"\n\nvalgrind stderr was: \"{}\"", err, raw_xml, valgrind_out.stdout, valgrind_out.stderr);
|
panic!("failed to parse the `valgrind` xml output. Error was:\n\n{:?}\n\nvalgrind xml was: \"{}\"\n\nvalgrind stdout was: \"{}\"\n\nvalgrind stderr was: \"{}\"", err, raw_xml, valgrind_out.stdout, valgrind_out.stderr);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// #[derive(Debug, Deserialize, Clone)]
|
||||||
|
// pub struct ValgrindError {
|
||||||
|
// kind: String,
|
||||||
|
// #[serde(default)]
|
||||||
|
// what: Option<String>,
|
||||||
|
// #[serde(default)]
|
||||||
|
// xwhat: Option<ValgrindErrorXWhat>,
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// #[derive(Debug, Deserialize, Clone)]
|
||||||
|
// pub struct ValgrindErrorXWhat {
|
||||||
|
// text: String,
|
||||||
|
// #[serde(default)]
|
||||||
|
// leakedbytes: Option<isize>,
|
||||||
|
// #[serde(default)]
|
||||||
|
// leakedblocks: Option<isize>,
|
||||||
|
// }
|
||||||
|
|
||||||
if !memory_errors.is_empty() {
|
if !memory_errors.is_empty() {
|
||||||
panic!("{:?}", memory_errors);
|
for error in memory_errors {
|
||||||
|
let ValgrindError { kind, what, xwhat } = error;
|
||||||
|
println!("Valgrind Error: {}\n", kind);
|
||||||
|
|
||||||
|
if let Some(ValgrindErrorXWhat {
|
||||||
|
text,
|
||||||
|
leakedbytes: _,
|
||||||
|
leakedblocks: _,
|
||||||
|
}) = xwhat
|
||||||
|
{
|
||||||
|
println!(" {}", text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
panic!("Valgrind reported memory errors");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let exit_code = match valgrind_out.status.code() {
|
let exit_code = match valgrind_out.status.code() {
|
||||||
|
|
|
@ -192,20 +192,20 @@ struct ValgrindDummyStruct {}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Clone)]
|
#[derive(Debug, Deserialize, Clone)]
|
||||||
pub struct ValgrindError {
|
pub struct ValgrindError {
|
||||||
kind: String,
|
pub kind: String,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
what: Option<String>,
|
pub what: Option<String>,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
xwhat: Option<ValgrindErrorXWhat>,
|
pub xwhat: Option<ValgrindErrorXWhat>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Clone)]
|
#[derive(Debug, Deserialize, Clone)]
|
||||||
pub struct ValgrindErrorXWhat {
|
pub struct ValgrindErrorXWhat {
|
||||||
text: String,
|
pub text: String,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
leakedbytes: Option<isize>,
|
pub leakedbytes: Option<isize>,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
leakedblocks: Option<isize>,
|
pub leakedblocks: Option<isize>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue