Diferentiate between ICE and compilation error

This commit is contained in:
Celina G. Val 2023-08-31 16:53:28 -07:00
parent 2db01be584
commit 3b01f65aa5
4 changed files with 16 additions and 9 deletions

View file

@ -18,7 +18,6 @@ use rustc_middle::mir::interpret::AllocId;
use rustc_middle::ty::TyCtxt; use rustc_middle::ty::TyCtxt;
use rustc_session::EarlyErrorHandler; use rustc_session::EarlyErrorHandler;
pub use rustc_span::def_id::{CrateNum, DefId}; pub use rustc_span::def_id::{CrateNum, DefId};
use rustc_span::ErrorGuaranteed;
fn with_tables<R>(mut f: impl FnMut(&mut Tables<'_>) -> R) -> R { fn with_tables<R>(mut f: impl FnMut(&mut Tables<'_>) -> R) -> R {
let mut ret = None; let mut ret = None;
@ -211,11 +210,14 @@ where
/// Runs the compiler against given target and tests it with `test_function` /// Runs the compiler against given target and tests it with `test_function`
pub fn run(mut self) -> Result<T, CompilerError> { pub fn run(mut self) -> Result<T, CompilerError> {
rustc_driver::catch_fatal_errors(|| { let compiler_result = rustc_driver::catch_fatal_errors(|| {
RunCompiler::new(&self.args.clone(), &mut self).run().unwrap(); RunCompiler::new(&self.args.clone(), &mut self).run()
}) });
.map_err(|e| <ErrorGuaranteed as Into<CompilerError>>::into(e))?; match compiler_result {
Ok(self.result.unwrap()) Ok(Ok(())) => Ok(self.result.unwrap()),
Ok(Err(_)) => Err(CompilerError::CompilationFailed),
Err(_) => Err(CompilerError::ICE),
}
} }
} }

View file

@ -1456,6 +1456,6 @@ impl<'tcx> Stable<'tcx> for rustc_span::Span {
impl From<ErrorGuaranteed> for CompilerError { impl From<ErrorGuaranteed> for CompilerError {
fn from(_error: ErrorGuaranteed) -> Self { fn from(_error: ErrorGuaranteed) -> Self {
CompilerError CompilerError::CompilationFailed
} }
} }

View file

@ -58,7 +58,12 @@ pub type ImplTraitDecls = Vec<ImplDef>;
/// An error type used to represent an error that has already been reported by the compiler. /// An error type used to represent an error that has already been reported by the compiler.
#[derive(Clone, Copy, Debug, PartialEq, Eq)] #[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct CompilerError; pub enum CompilerError {
/// Internal compiler error (I.e.: Compiler crashed).
ICE,
/// Compilation failed.
CompilationFailed,
}
/// Holds information about a crate. /// Holds information about a crate.
#[derive(Clone, PartialEq, Eq, Debug)] #[derive(Clone, PartialEq, Eq, Debug)]

View file

@ -136,7 +136,7 @@ fn main() {
CRATE_NAME.to_string(), CRATE_NAME.to_string(),
path.to_string(), path.to_string(),
]; ];
rustc_internal::StableMir::new(args, test_stable_mir).run(); rustc_internal::StableMir::new(args, test_stable_mir).run().unwrap();
} }
fn generate_input(path: &str) -> std::io::Result<()> { fn generate_input(path: &str) -> std::io::Result<()> {