Skip to content

Commit 59d2c19

Browse files
authored
Rollup merge of #100831 - JhonnyBillM:migrate-symbol-mangling-to-diagnostics-structs, r=davidtwco
Migrate `symbol_mangling` module to new diagnostics structs
2 parents 24922b7 + 3ee6946 commit 59d2c19

File tree

7 files changed

+68
-5
lines changed

7 files changed

+68
-5
lines changed

Cargo.lock

+2
Original file line numberDiff line numberDiff line change
@@ -4156,7 +4156,9 @@ dependencies = [
41564156
"punycode",
41574157
"rustc-demangle",
41584158
"rustc_data_structures",
4159+
"rustc_errors",
41594160
"rustc_hir",
4161+
"rustc_macros",
41604162
"rustc_middle",
41614163
"rustc_session",
41624164
"rustc_span",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
symbol_mangling_invalid_symbol_name = symbol-name({$mangled_formatted})
2+
3+
symbol_mangling_invalid_trait_item = demangling({$demangling_formatted})
4+
5+
symbol_mangling_alt_invalid_trait_item = demangling-alt({$alt_demangling_formatted})
6+
7+
symbol_mangling_invalid_def_path = def-path({$def_path})

compiler/rustc_error_messages/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ fluent_messages! {
5454
ty_utils => "../locales/en-US/ty_utils.ftl",
5555
typeck => "../locales/en-US/typeck.ftl",
5656
mir_dataflow => "../locales/en-US/mir_dataflow.ftl",
57+
symbol_mangling => "../locales/en-US/symbol_mangling.ftl",
5758
}
5859

5960
pub use fluent_generated::{self as fluent, DEFAULT_LOCALE_RESOURCES};

compiler/rustc_symbol_mangling/Cargo.toml

+2
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,5 @@ rustc_hir = { path = "../rustc_hir" }
1818
rustc_target = { path = "../rustc_target" }
1919
rustc_data_structures = { path = "../rustc_data_structures" }
2020
rustc_session = { path = "../rustc_session" }
21+
rustc_macros = { path = "../rustc_macros" }
22+
rustc_errors = { path = "../rustc_errors" }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
//! Errors emitted by symbol_mangling.
2+
3+
use rustc_macros::SessionDiagnostic;
4+
use rustc_span::Span;
5+
6+
#[derive(SessionDiagnostic)]
7+
#[diag(symbol_mangling::invalid_symbol_name)]
8+
pub struct InvalidSymbolName {
9+
#[primary_span]
10+
pub span: Span,
11+
pub mangled_formatted: String,
12+
}
13+
14+
#[derive(SessionDiagnostic)]
15+
#[diag(symbol_mangling::invalid_trait_item)]
16+
pub struct InvalidTraitItem {
17+
#[primary_span]
18+
pub span: Span,
19+
pub demangling_formatted: String,
20+
}
21+
22+
#[derive(SessionDiagnostic)]
23+
#[diag(symbol_mangling::alt_invalid_trait_item)]
24+
pub struct AltInvalidTraitItem {
25+
#[primary_span]
26+
pub span: Span,
27+
pub alt_demangling_formatted: String,
28+
}
29+
30+
#[derive(SessionDiagnostic)]
31+
#[diag(symbol_mangling::invalid_def_path)]
32+
pub struct InvalidDefPath {
33+
#[primary_span]
34+
pub span: Span,
35+
pub def_path: String,
36+
}

compiler/rustc_symbol_mangling/src/lib.rs

+3
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@
9191
#![feature(never_type)]
9292
#![recursion_limit = "256"]
9393
#![allow(rustc::potential_query_instability)]
94+
#![deny(rustc::untranslatable_diagnostic)]
95+
#![deny(rustc::diagnostic_outside_of_impl)]
9496

9597
#[macro_use]
9698
extern crate rustc_middle;
@@ -110,6 +112,7 @@ use tracing::debug;
110112
mod legacy;
111113
mod v0;
112114

115+
pub mod errors;
113116
pub mod test;
114117
pub mod typeid;
115118

compiler/rustc_symbol_mangling/src/test.rs

+17-5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
//! def-path. This is used for unit testing the code that generates
55
//! paths etc in all kinds of annoying scenarios.
66
7+
use crate::errors::{AltInvalidTraitItem, InvalidDefPath, InvalidSymbolName, InvalidTraitItem};
78
use rustc_hir::def_id::LocalDefId;
89
use rustc_middle::ty::print::with_no_trimmed_paths;
910
use rustc_middle::ty::{subst::InternalSubsts, Instance, TyCtxt};
@@ -59,16 +60,27 @@ impl SymbolNamesTest<'_> {
5960
tcx.erase_regions(InternalSubsts::identity_for_item(tcx, def_id)),
6061
);
6162
let mangled = tcx.symbol_name(instance);
62-
tcx.sess.span_err(attr.span, &format!("symbol-name({})", mangled));
63+
tcx.sess.emit_err(InvalidSymbolName {
64+
span: attr.span,
65+
mangled_formatted: format!("{mangled}"),
66+
});
6367
if let Ok(demangling) = rustc_demangle::try_demangle(mangled.name) {
64-
tcx.sess.span_err(attr.span, &format!("demangling({})", demangling));
65-
tcx.sess.span_err(attr.span, &format!("demangling-alt({:#})", demangling));
68+
tcx.sess.emit_err(InvalidTraitItem {
69+
span: attr.span,
70+
demangling_formatted: format!("{demangling}"),
71+
});
72+
tcx.sess.emit_err(AltInvalidTraitItem {
73+
span: attr.span,
74+
alt_demangling_formatted: format!("{:#}", demangling),
75+
});
6676
}
6777
}
6878

6979
for attr in tcx.get_attrs(def_id.to_def_id(), DEF_PATH) {
70-
let path = with_no_trimmed_paths!(tcx.def_path_str(def_id.to_def_id()));
71-
tcx.sess.span_err(attr.span, &format!("def-path({})", path));
80+
tcx.sess.emit_err(InvalidDefPath {
81+
span: attr.span,
82+
def_path: with_no_trimmed_paths!(tcx.def_path_str(def_id.to_def_id())),
83+
});
7284
}
7385
}
7486
}

0 commit comments

Comments
 (0)