Warn when using panic-strategy abort for proc-macro crates
This commit is contained in:
parent
279f1c9d8c
commit
549ece7033
@ -41,3 +41,6 @@ interface_rustc_error_unexpected_annotation =
|
|||||||
|
|
||||||
interface_failed_writing_file =
|
interface_failed_writing_file =
|
||||||
failed to write file {$path}: {$error}"
|
failed to write file {$path}: {$error}"
|
||||||
|
|
||||||
|
interface_proc_macro_crate_panic_abort =
|
||||||
|
building proc macro crate with `panic=abort` may crash the compiler should the proc-macro panic
|
||||||
|
@ -45,6 +45,7 @@ rustc_plugin_impl = { path = "../rustc_plugin_impl" }
|
|||||||
rustc_privacy = { path = "../rustc_privacy" }
|
rustc_privacy = { path = "../rustc_privacy" }
|
||||||
rustc_query_impl = { path = "../rustc_query_impl" }
|
rustc_query_impl = { path = "../rustc_query_impl" }
|
||||||
rustc_resolve = { path = "../rustc_resolve" }
|
rustc_resolve = { path = "../rustc_resolve" }
|
||||||
|
rustc_target = { path = "../rustc_target" }
|
||||||
rustc_trait_selection = { path = "../rustc_trait_selection" }
|
rustc_trait_selection = { path = "../rustc_trait_selection" }
|
||||||
rustc_ty_utils = { path = "../rustc_ty_utils" }
|
rustc_ty_utils = { path = "../rustc_ty_utils" }
|
||||||
|
|
||||||
|
@ -87,3 +87,7 @@ pub struct FailedWritingFile<'a> {
|
|||||||
pub path: &'a Path,
|
pub path: &'a Path,
|
||||||
pub error: io::Error,
|
pub error: io::Error,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Diagnostic)]
|
||||||
|
#[diag(interface_proc_macro_crate_panic_abort)]
|
||||||
|
pub struct ProcMacroCratePanicAbort;
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
use crate::errors::{
|
use crate::errors::{
|
||||||
CantEmitMIR, EmojiIdentifier, ErrorWritingDependencies, FerrisIdentifier,
|
CantEmitMIR, EmojiIdentifier, ErrorWritingDependencies, FerrisIdentifier,
|
||||||
GeneratedFileConflictsWithDirectory, InputFileWouldBeOverWritten, MixedBinCrate,
|
GeneratedFileConflictsWithDirectory, InputFileWouldBeOverWritten, MixedBinCrate,
|
||||||
MixedProcMacroCrate, OutDirError, ProcMacroDocWithoutArg, TempsDirError,
|
MixedProcMacroCrate, OutDirError, ProcMacroCratePanicAbort, ProcMacroDocWithoutArg,
|
||||||
|
TempsDirError,
|
||||||
};
|
};
|
||||||
use crate::interface::{Compiler, Result};
|
use crate::interface::{Compiler, Result};
|
||||||
use crate::proc_macro_decls;
|
use crate::proc_macro_decls;
|
||||||
@ -36,6 +37,7 @@
|
|||||||
use rustc_session::{Limit, Session};
|
use rustc_session::{Limit, Session};
|
||||||
use rustc_span::symbol::{sym, Symbol};
|
use rustc_span::symbol::{sym, Symbol};
|
||||||
use rustc_span::FileName;
|
use rustc_span::FileName;
|
||||||
|
use rustc_target::spec::PanicStrategy;
|
||||||
use rustc_trait_selection::traits;
|
use rustc_trait_selection::traits;
|
||||||
|
|
||||||
use std::any::Any;
|
use std::any::Any;
|
||||||
@ -380,6 +382,10 @@ pub fn configure_and_expand(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if is_proc_macro_crate && sess.panic_strategy() == PanicStrategy::Abort {
|
||||||
|
sess.emit_warning(ProcMacroCratePanicAbort);
|
||||||
|
}
|
||||||
|
|
||||||
// For backwards compatibility, we don't try to run proc macro injection
|
// For backwards compatibility, we don't try to run proc macro injection
|
||||||
// if rustdoc is run on a proc macro crate without '--crate-type proc-macro' being
|
// if rustdoc is run on a proc macro crate without '--crate-type proc-macro' being
|
||||||
// specified. This should only affect users who manually invoke 'rustdoc', as
|
// specified. This should only affect users who manually invoke 'rustdoc', as
|
||||||
|
4
tests/ui/proc-macro/panic-abort.rs
Normal file
4
tests/ui/proc-macro/panic-abort.rs
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
// error-pattern: building proc macro crate with `panic=abort` may crash the compiler should the proc-macro panic
|
||||||
|
// compile-flags: --crate-type proc-macro -Cpanic=abort
|
||||||
|
// force-host
|
||||||
|
// check-pass
|
4
tests/ui/proc-macro/panic-abort.stderr
Normal file
4
tests/ui/proc-macro/panic-abort.stderr
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
warning: building proc macro crate with `panic=abort` may crash the compiler should the proc-macro panic
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
Loading…
Reference in New Issue
Block a user