1
Fork 0

Add more track_caller

This commit is contained in:
mejrs 2022-10-31 16:14:29 +01:00
parent 0f35c0c672
commit cbeb244b05
13 changed files with 68 additions and 3 deletions

View file

@ -763,6 +763,7 @@ impl Handler {
/// Construct a builder at the `Allow` level with the `msg`. /// Construct a builder at the `Allow` level with the `msg`.
#[rustc_lint_diagnostics] #[rustc_lint_diagnostics]
#[track_caller]
pub fn struct_allow(&self, msg: impl Into<DiagnosticMessage>) -> DiagnosticBuilder<'_, ()> { pub fn struct_allow(&self, msg: impl Into<DiagnosticMessage>) -> DiagnosticBuilder<'_, ()> {
DiagnosticBuilder::new(self, Level::Allow, msg) DiagnosticBuilder::new(self, Level::Allow, msg)
} }
@ -864,6 +865,7 @@ impl Handler {
/// Construct a builder at the `Fatal` level at the given `span`, with the `msg`, and `code`. /// Construct a builder at the `Fatal` level at the given `span`, with the `msg`, and `code`.
#[rustc_lint_diagnostics] #[rustc_lint_diagnostics]
#[track_caller]
pub fn struct_span_fatal_with_code( pub fn struct_span_fatal_with_code(
&self, &self,
span: impl Into<MultiSpan>, span: impl Into<MultiSpan>,
@ -877,6 +879,7 @@ impl Handler {
/// Construct a builder at the `Error` level with the `msg`. /// Construct a builder at the `Error` level with the `msg`.
#[rustc_lint_diagnostics] #[rustc_lint_diagnostics]
#[track_caller]
pub fn struct_fatal(&self, msg: impl Into<DiagnosticMessage>) -> DiagnosticBuilder<'_, !> { pub fn struct_fatal(&self, msg: impl Into<DiagnosticMessage>) -> DiagnosticBuilder<'_, !> {
DiagnosticBuilder::new_fatal(self, msg) DiagnosticBuilder::new_fatal(self, msg)
} }
@ -898,6 +901,7 @@ impl Handler {
} }
#[rustc_lint_diagnostics] #[rustc_lint_diagnostics]
#[track_caller]
pub fn span_fatal(&self, span: impl Into<MultiSpan>, msg: impl Into<DiagnosticMessage>) -> ! { pub fn span_fatal(&self, span: impl Into<MultiSpan>, msg: impl Into<DiagnosticMessage>) -> ! {
self.emit_diag_at_span(Diagnostic::new(Fatal, msg), span); self.emit_diag_at_span(Diagnostic::new(Fatal, msg), span);
FatalError.raise() FatalError.raise()
@ -956,7 +960,6 @@ impl Handler {
self.emit_diag_at_span(Diagnostic::new_with_code(Warning(None), Some(code), msg), span); self.emit_diag_at_span(Diagnostic::new_with_code(Warning(None), Some(code), msg), span);
} }
#[track_caller]
pub fn span_bug(&self, span: impl Into<MultiSpan>, msg: impl Into<DiagnosticMessage>) -> ! { pub fn span_bug(&self, span: impl Into<MultiSpan>, msg: impl Into<DiagnosticMessage>) -> ! {
self.inner.borrow_mut().span_bug(span, msg) self.inner.borrow_mut().span_bug(span, msg)
} }
@ -972,7 +975,6 @@ impl Handler {
// FIXME(eddyb) note the comment inside `impl Drop for HandlerInner`, that's // FIXME(eddyb) note the comment inside `impl Drop for HandlerInner`, that's
// where the explanation of what "good path" is (also, it should be renamed). // where the explanation of what "good path" is (also, it should be renamed).
#[track_caller]
pub fn delay_good_path_bug(&self, msg: impl Into<DiagnosticMessage>) { pub fn delay_good_path_bug(&self, msg: impl Into<DiagnosticMessage>) {
self.inner.borrow_mut().delay_good_path_bug(msg) self.inner.borrow_mut().delay_good_path_bug(msg)
} }

View file

@ -252,6 +252,7 @@ pub struct MissingTypeParams {
// Manual implementation of `IntoDiagnostic` to be able to call `span_to_snippet`. // Manual implementation of `IntoDiagnostic` to be able to call `span_to_snippet`.
impl<'a> IntoDiagnostic<'a> for MissingTypeParams { impl<'a> IntoDiagnostic<'a> for MissingTypeParams {
#[track_caller]
fn into_diagnostic(self, handler: &'a Handler) -> DiagnosticBuilder<'a, ErrorGuaranteed> { fn into_diagnostic(self, handler: &'a Handler) -> DiagnosticBuilder<'a, ErrorGuaranteed> {
let mut err = handler.struct_span_err_with_code( let mut err = handler.struct_span_err_with_code(
self.span, self.span,

View file

@ -69,6 +69,8 @@ impl<'a> DiagnosticDerive<'a> {
for @Self for @Self
where G: rustc_errors::EmissionGuarantee where G: rustc_errors::EmissionGuarantee
{ {
#[track_caller]
fn into_diagnostic( fn into_diagnostic(
self, self,
#handler: &'__diagnostic_handler_sess rustc_errors::Handler #handler: &'__diagnostic_handler_sess rustc_errors::Handler
@ -133,6 +135,7 @@ impl<'a> LintDiagnosticDerive<'a> {
let diag = &builder.diag; let diag = &builder.diag;
structure.gen_impl(quote! { structure.gen_impl(quote! {
gen impl<'__a> rustc_errors::DecorateLint<'__a, ()> for @Self { gen impl<'__a> rustc_errors::DecorateLint<'__a, ()> for @Self {
#[track_caller]
fn decorate_lint<'__b>( fn decorate_lint<'__b>(
self, self,
#diag: &'__b mut rustc_errors::DiagnosticBuilder<'__a, ()> #diag: &'__b mut rustc_errors::DiagnosticBuilder<'__a, ()>

View file

@ -578,6 +578,7 @@ pub struct InvalidMetadataFiles {
} }
impl IntoDiagnostic<'_> for InvalidMetadataFiles { impl IntoDiagnostic<'_> for InvalidMetadataFiles {
#[track_caller]
fn into_diagnostic( fn into_diagnostic(
self, self,
handler: &'_ rustc_errors::Handler, handler: &'_ rustc_errors::Handler,
@ -606,6 +607,7 @@ pub struct CannotFindCrate {
} }
impl IntoDiagnostic<'_> for CannotFindCrate { impl IntoDiagnostic<'_> for CannotFindCrate {
#[track_caller]
fn into_diagnostic( fn into_diagnostic(
self, self,
handler: &'_ rustc_errors::Handler, handler: &'_ rustc_errors::Handler,

View file

@ -45,6 +45,7 @@ pub struct UnusedGenericParams {
} }
impl IntoDiagnostic<'_> for UnusedGenericParams { impl IntoDiagnostic<'_> for UnusedGenericParams {
#[track_caller]
fn into_diagnostic( fn into_diagnostic(
self, self,
handler: &'_ rustc_errors::Handler, handler: &'_ rustc_errors::Handler,

View file

@ -930,6 +930,7 @@ pub(crate) struct ExpectedIdentifier {
} }
impl<'a, G: EmissionGuarantee> IntoDiagnostic<'a, G> for ExpectedIdentifier { impl<'a, G: EmissionGuarantee> IntoDiagnostic<'a, G> for ExpectedIdentifier {
#[track_caller]
fn into_diagnostic( fn into_diagnostic(
self, self,
handler: &'a rustc_errors::Handler, handler: &'a rustc_errors::Handler,
@ -977,6 +978,7 @@ pub(crate) struct ExpectedSemi {
} }
impl<'a, G: EmissionGuarantee> IntoDiagnostic<'a, G> for ExpectedSemi { impl<'a, G: EmissionGuarantee> IntoDiagnostic<'a, G> for ExpectedSemi {
#[track_caller]
fn into_diagnostic( fn into_diagnostic(
self, self,
handler: &'a rustc_errors::Handler, handler: &'a rustc_errors::Handler,

View file

@ -744,6 +744,7 @@ pub struct InvalidAttrAtCrateLevel {
} }
impl IntoDiagnostic<'_> for InvalidAttrAtCrateLevel { impl IntoDiagnostic<'_> for InvalidAttrAtCrateLevel {
#[track_caller]
fn into_diagnostic( fn into_diagnostic(
self, self,
handler: &'_ rustc_errors::Handler, handler: &'_ rustc_errors::Handler,
@ -877,6 +878,7 @@ pub struct BreakNonLoop<'a> {
} }
impl<'a> IntoDiagnostic<'_> for BreakNonLoop<'a> { impl<'a> IntoDiagnostic<'_> for BreakNonLoop<'a> {
#[track_caller]
fn into_diagnostic( fn into_diagnostic(
self, self,
handler: &rustc_errors::Handler, handler: &rustc_errors::Handler,
@ -1014,6 +1016,7 @@ pub struct NakedFunctionsAsmBlock {
} }
impl IntoDiagnostic<'_> for NakedFunctionsAsmBlock { impl IntoDiagnostic<'_> for NakedFunctionsAsmBlock {
#[track_caller]
fn into_diagnostic( fn into_diagnostic(
self, self,
handler: &rustc_errors::Handler, handler: &rustc_errors::Handler,
@ -1137,6 +1140,7 @@ pub struct NoMainErr {
} }
impl<'a> IntoDiagnostic<'a> for NoMainErr { impl<'a> IntoDiagnostic<'a> for NoMainErr {
#[track_caller]
fn into_diagnostic( fn into_diagnostic(
self, self,
handler: &'a rustc_errors::Handler, handler: &'a rustc_errors::Handler,
@ -1197,6 +1201,7 @@ pub struct DuplicateLangItem {
} }
impl IntoDiagnostic<'_> for DuplicateLangItem { impl IntoDiagnostic<'_> for DuplicateLangItem {
#[track_caller]
fn into_diagnostic( fn into_diagnostic(
self, self,
handler: &rustc_errors::Handler, handler: &rustc_errors::Handler,

View file

@ -97,6 +97,7 @@ pub fn feature_err<'a>(
/// ///
/// This variant allows you to control whether it is a library or language feature. /// This variant allows you to control whether it is a library or language feature.
/// Almost always, you want to use this for a language feature. If so, prefer `feature_err`. /// Almost always, you want to use this for a language feature. If so, prefer `feature_err`.
#[track_caller]
pub fn feature_err_issue<'a>( pub fn feature_err_issue<'a>(
sess: &'a ParseSess, sess: &'a ParseSess,
feature: Symbol, feature: Symbol,
@ -332,6 +333,7 @@ impl ParseSess {
self.proc_macro_quoted_spans.lock().clone() self.proc_macro_quoted_spans.lock().clone()
} }
#[track_caller]
pub fn create_err<'a>( pub fn create_err<'a>(
&'a self, &'a self,
err: impl IntoDiagnostic<'a>, err: impl IntoDiagnostic<'a>,
@ -339,10 +341,12 @@ impl ParseSess {
err.into_diagnostic(&self.span_diagnostic) err.into_diagnostic(&self.span_diagnostic)
} }
#[track_caller]
pub fn emit_err<'a>(&'a self, err: impl IntoDiagnostic<'a>) -> ErrorGuaranteed { pub fn emit_err<'a>(&'a self, err: impl IntoDiagnostic<'a>) -> ErrorGuaranteed {
self.create_err(err).emit() self.create_err(err).emit()
} }
#[track_caller]
pub fn create_warning<'a>( pub fn create_warning<'a>(
&'a self, &'a self,
warning: impl IntoDiagnostic<'a, ()>, warning: impl IntoDiagnostic<'a, ()>,
@ -350,6 +354,7 @@ impl ParseSess {
warning.into_diagnostic(&self.span_diagnostic) warning.into_diagnostic(&self.span_diagnostic)
} }
#[track_caller]
pub fn emit_warning<'a>(&'a self, warning: impl IntoDiagnostic<'a, ()>) { pub fn emit_warning<'a>(&'a self, warning: impl IntoDiagnostic<'a, ()>) {
self.create_warning(warning).emit() self.create_warning(warning).emit()
} }
@ -377,6 +382,7 @@ impl ParseSess {
} }
#[rustc_lint_diagnostics] #[rustc_lint_diagnostics]
#[track_caller]
pub fn struct_err( pub fn struct_err(
&self, &self,
msg: impl Into<DiagnosticMessage>, msg: impl Into<DiagnosticMessage>,

View file

@ -330,6 +330,7 @@ impl Session {
self.diagnostic().struct_warn_with_expectation(msg, id) self.diagnostic().struct_warn_with_expectation(msg, id)
} }
#[rustc_lint_diagnostics] #[rustc_lint_diagnostics]
#[track_caller]
pub fn struct_span_allow<S: Into<MultiSpan>>( pub fn struct_span_allow<S: Into<MultiSpan>>(
&self, &self,
sp: S, sp: S,
@ -338,10 +339,12 @@ impl Session {
self.diagnostic().struct_span_allow(sp, msg) self.diagnostic().struct_span_allow(sp, msg)
} }
#[rustc_lint_diagnostics] #[rustc_lint_diagnostics]
#[track_caller]
pub fn struct_allow(&self, msg: impl Into<DiagnosticMessage>) -> DiagnosticBuilder<'_, ()> { pub fn struct_allow(&self, msg: impl Into<DiagnosticMessage>) -> DiagnosticBuilder<'_, ()> {
self.diagnostic().struct_allow(msg) self.diagnostic().struct_allow(msg)
} }
#[rustc_lint_diagnostics] #[rustc_lint_diagnostics]
#[track_caller]
pub fn struct_expect( pub fn struct_expect(
&self, &self,
msg: impl Into<DiagnosticMessage>, msg: impl Into<DiagnosticMessage>,
@ -396,6 +399,7 @@ impl Session {
self.diagnostic().struct_warn_with_code(msg, code) self.diagnostic().struct_warn_with_code(msg, code)
} }
#[rustc_lint_diagnostics] #[rustc_lint_diagnostics]
#[track_caller]
pub fn struct_span_fatal<S: Into<MultiSpan>>( pub fn struct_span_fatal<S: Into<MultiSpan>>(
&self, &self,
sp: S, sp: S,
@ -418,6 +422,7 @@ impl Session {
} }
#[rustc_lint_diagnostics] #[rustc_lint_diagnostics]
#[track_caller]
pub fn span_fatal<S: Into<MultiSpan>>(&self, sp: S, msg: impl Into<DiagnosticMessage>) -> ! { pub fn span_fatal<S: Into<MultiSpan>>(&self, sp: S, msg: impl Into<DiagnosticMessage>) -> ! {
self.diagnostic().span_fatal(sp, msg) self.diagnostic().span_fatal(sp, msg)
} }
@ -490,33 +495,40 @@ impl Session {
add_feature_diagnostics(&mut err, &self.parse_sess, feature); add_feature_diagnostics(&mut err, &self.parse_sess, feature);
err err
} }
#[track_caller]
pub fn emit_err<'a>(&'a self, err: impl IntoDiagnostic<'a>) -> ErrorGuaranteed { pub fn emit_err<'a>(&'a self, err: impl IntoDiagnostic<'a>) -> ErrorGuaranteed {
self.parse_sess.emit_err(err) self.parse_sess.emit_err(err)
} }
#[track_caller]
pub fn create_warning<'a>( pub fn create_warning<'a>(
&'a self, &'a self,
err: impl IntoDiagnostic<'a, ()>, err: impl IntoDiagnostic<'a, ()>,
) -> DiagnosticBuilder<'a, ()> { ) -> DiagnosticBuilder<'a, ()> {
self.parse_sess.create_warning(err) self.parse_sess.create_warning(err)
} }
#[track_caller]
pub fn emit_warning<'a>(&'a self, warning: impl IntoDiagnostic<'a, ()>) { pub fn emit_warning<'a>(&'a self, warning: impl IntoDiagnostic<'a, ()>) {
self.parse_sess.emit_warning(warning) self.parse_sess.emit_warning(warning)
} }
#[track_caller]
pub fn create_note<'a>( pub fn create_note<'a>(
&'a self, &'a self,
note: impl IntoDiagnostic<'a, Noted>, note: impl IntoDiagnostic<'a, Noted>,
) -> DiagnosticBuilder<'a, Noted> { ) -> DiagnosticBuilder<'a, Noted> {
self.parse_sess.create_note(note) self.parse_sess.create_note(note)
} }
#[track_caller]
pub fn emit_note<'a>(&'a self, note: impl IntoDiagnostic<'a, Noted>) -> Noted { pub fn emit_note<'a>(&'a self, note: impl IntoDiagnostic<'a, Noted>) -> Noted {
self.parse_sess.emit_note(note) self.parse_sess.emit_note(note)
} }
#[track_caller]
pub fn create_fatal<'a>( pub fn create_fatal<'a>(
&'a self, &'a self,
fatal: impl IntoDiagnostic<'a, !>, fatal: impl IntoDiagnostic<'a, !>,
) -> DiagnosticBuilder<'a, !> { ) -> DiagnosticBuilder<'a, !> {
self.parse_sess.create_fatal(fatal) self.parse_sess.create_fatal(fatal)
} }
#[track_caller]
pub fn emit_fatal<'a>(&'a self, fatal: impl IntoDiagnostic<'a, !>) -> ! { pub fn emit_fatal<'a>(&'a self, fatal: impl IntoDiagnostic<'a, !>) -> ! {
self.parse_sess.emit_fatal(fatal) self.parse_sess.emit_fatal(fatal)
} }
@ -556,6 +568,7 @@ impl Session {
} }
#[allow(rustc::untranslatable_diagnostic)] #[allow(rustc::untranslatable_diagnostic)]
#[allow(rustc::diagnostic_outside_of_impl)] #[allow(rustc::diagnostic_outside_of_impl)]
#[track_caller]
pub fn span_warn<S: Into<MultiSpan>>(&self, sp: S, msg: impl Into<DiagnosticMessage>) { pub fn span_warn<S: Into<MultiSpan>>(&self, sp: S, msg: impl Into<DiagnosticMessage>) {
self.diagnostic().span_warn(sp, msg) self.diagnostic().span_warn(sp, msg)
} }
@ -602,6 +615,8 @@ impl Session {
pub fn note_without_error(&self, msg: impl Into<DiagnosticMessage>) { pub fn note_without_error(&self, msg: impl Into<DiagnosticMessage>) {
self.diagnostic().note_without_error(msg) self.diagnostic().note_without_error(msg)
} }
#[track_caller]
pub fn span_note_without_error<S: Into<MultiSpan>>( pub fn span_note_without_error<S: Into<MultiSpan>>(
&self, &self,
sp: S, sp: S,

View file

@ -67,6 +67,7 @@ pub struct NegativePositiveConflict<'a> {
} }
impl IntoDiagnostic<'_> for NegativePositiveConflict<'_> { impl IntoDiagnostic<'_> for NegativePositiveConflict<'_> {
#[track_caller]
fn into_diagnostic( fn into_diagnostic(
self, self,
handler: &Handler, handler: &Handler,

View file

@ -10,7 +10,7 @@ error[E0268]: `break` outside of a loop
| |
LL | break rust LL | break rust
| ^^^^^^^^^^ cannot `break` outside of a loop | ^^^^^^^^^^ cannot `break` outside of a loop
-Ztrack-diagnostics: created at compiler/rustc_passes/src/errors.rs:LL:CC -Ztrack-diagnostics: created at compiler/rustc_passes/src/loops.rs:LL:CC
error: internal compiler error: It looks like you're trying to break rust; would you like some ICE? error: internal compiler error: It looks like you're trying to break rust; would you like some ICE?

View file

@ -0,0 +1,14 @@
// compile-flags: -Z track-diagnostics
// error-pattern: created at
pub trait Foo {
fn bar();
}
impl <T> Foo for T {
default fn bar() {}
}
fn main() {}

View file

@ -0,0 +1,13 @@
error[E0658]: specialization is unstable
--> $DIR/track6.rs:11:5
|
LL | default fn bar() {}
| ^^^^^^^^^^^^^^^^^^^
-Ztrack-diagnostics: created at $COMPILER_DIR/rustc_session/src/parse.rs:93:5
|
= note: see issue #31844 <https://github.com/rust-lang/rust/issues/31844> for more information
= help: add `#![feature(specialization)]` to the crate attributes to enable
error: aborting due to previous error
For more information about this error, try `rustc --explain E0658`.