Skip to content

Commit 5645cd5

Browse files
committed
ADD - IntoDiagnostic conformance for TargetDataLayoutErrors in rustc_errors
This way we comply with the Coherence rule given that IntoDiagnostic trait is defined in rustc_errors, and almost all other crates depend on it.
1 parent c0983a9 commit 5645cd5

File tree

8 files changed

+70
-72
lines changed

8 files changed

+70
-72
lines changed
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
errors_target_invalid_address_space = invalid address space `{$addr_space}` for `{$cause}` in "data-layout": {$err}
2+
3+
errors_target_invalid_bits = invalid {$kind} `{$bit}` for `{$cause}` in "data-layout": {$err}
4+
5+
errors_target_missing_alignment = missing alignment for `{$cause}` in "data-layout"
6+
7+
errors_target_invalid_alignment = invalid alignment for `{$cause}` in "data-layout": {$err}
8+
9+
errors_target_inconsistent_architecture = inconsistent target specification: "data-layout" claims architecture is {$dl}-endian, while "target-endian" is `{$target}`
10+
11+
errors_target_inconsistent_pointer_width = inconsistent target specification: "data-layout" claims pointers are {$pointer_size}-bit, while "target-pointer-width" is `{$target}`
12+
13+
errors_target_invalid_bits_size = {$err}

Diff for: compiler/rustc_error_messages/locales/en-US/session.ftl

-14
Original file line numberDiff line numberDiff line change
@@ -39,20 +39,6 @@ session_unstable_virtual_function_elimination = `-Zvirtual-function-elimination`
3939
4040
session_unsupported_dwarf_version = requested DWARF version {$dwarf_version} is greater than 5
4141
42-
session_target_invalid_address_space = invalid address space `{$addr_space}` for `{$cause}` in "data-layout": {$err}
43-
44-
session_target_invalid_bits = invalid {$kind} `{$bit}` for `{$cause}` in "data-layout": {$err}
45-
46-
session_target_missing_alignment = missing alignment for `{$cause}` in "data-layout"
47-
48-
session_target_invalid_alignment = invalid alignment for `{$cause}` in "data-layout": {$err}
49-
50-
session_target_inconsistent_architecture = inconsistent target specification: "data-layout" claims architecture is {$dl}-endian, while "target-endian" is `{$target}`
51-
52-
session_target_inconsistent_pointer_width = inconsistent target specification: "data-layout" claims pointers are {$pointer_size}-bit, while "target-pointer-width" is `{$target}`
53-
54-
session_target_invalid_bits_size = {$err}
55-
5642
session_target_stack_protector_not_supported = `-Z stack-protector={$stack_protector}` is not supported for target {$target_triple} and will be ignored
5743
5844
session_split_debuginfo_unstable_platform = `-Csplit-debuginfo={$debuginfo}` is unstable on this platform

Diff for: compiler/rustc_error_messages/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ fluent_messages! {
4646
compiletest => "../locales/en-US/compiletest.ftl",
4747
const_eval => "../locales/en-US/const_eval.ftl",
4848
driver => "../locales/en-US/driver.ftl",
49+
errors => "../locales/en-US/errors.ftl",
4950
expand => "../locales/en-US/expand.ftl",
5051
hir_analysis => "../locales/en-US/hir_analysis.ftl",
5152
infer => "../locales/en-US/infer.ftl",

Diff for: compiler/rustc_errors/src/diagnostic_impls.rs

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
use crate::{fluent, DiagnosticBuilder, Handler, IntoDiagnostic};
2+
use rustc_target::abi::TargetDataLayoutErrors;
3+
4+
impl IntoDiagnostic<'_, !> for TargetDataLayoutErrors<'_> {
5+
fn into_diagnostic(self, handler: &Handler) -> DiagnosticBuilder<'_, !> {
6+
let mut diag;
7+
match self {
8+
TargetDataLayoutErrors::InvalidAddressSpace { addr_space, err, cause } => {
9+
diag = handler.struct_fatal(fluent::errors::target_invalid_address_space);
10+
diag.set_arg("addr_space", addr_space);
11+
diag.set_arg("cause", cause);
12+
diag.set_arg("err", err);
13+
diag
14+
}
15+
TargetDataLayoutErrors::InvalidBits { kind, bit, cause, err } => {
16+
diag = handler.struct_fatal(fluent::errors::target_invalid_bits);
17+
diag.set_arg("kind", kind);
18+
diag.set_arg("bit", bit);
19+
diag.set_arg("cause", cause);
20+
diag.set_arg("err", err);
21+
diag
22+
}
23+
TargetDataLayoutErrors::MissingAlignment { cause } => {
24+
diag = handler.struct_fatal(fluent::errors::target_missing_alignment);
25+
diag.set_arg("cause", cause);
26+
diag
27+
}
28+
TargetDataLayoutErrors::InvalidAlignment { cause, err } => {
29+
diag = handler.struct_fatal(fluent::errors::target_invalid_alignment);
30+
diag.set_arg("cause", cause);
31+
diag.set_arg("err", err);
32+
diag
33+
}
34+
TargetDataLayoutErrors::InconsistentTargetArchitecture { dl, target } => {
35+
diag = handler.struct_fatal(fluent::errors::target_inconsistent_architecture);
36+
diag.set_arg("dl", dl);
37+
diag.set_arg("target", target);
38+
diag
39+
}
40+
TargetDataLayoutErrors::InconsistentTargetPointerWidth { pointer_size, target } => {
41+
diag = handler.struct_fatal(fluent::errors::target_inconsistent_pointer_width);
42+
diag.set_arg("pointer_size", pointer_size);
43+
diag.set_arg("target", target);
44+
diag
45+
}
46+
TargetDataLayoutErrors::InvalidBitsSize { err } => {
47+
diag = handler.struct_fatal(fluent::errors::target_invalid_bits_size);
48+
diag.set_arg("err", err);
49+
diag
50+
}
51+
}
52+
}
53+
}

Diff for: compiler/rustc_errors/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ use termcolor::{Color, ColorSpec};
5151
pub mod annotate_snippet_emitter_writer;
5252
mod diagnostic;
5353
mod diagnostic_builder;
54+
mod diagnostic_impls;
5455
pub mod emitter;
5556
pub mod json;
5657
mod lock;

Diff for: compiler/rustc_middle/src/ty/context.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ use rustc_query_system::ich::StableHashingContext;
5656
use rustc_serialize::opaque::{FileEncodeResult, FileEncoder};
5757
use rustc_session::config::{CrateType, OutputFilenames};
5858
use rustc_session::cstore::CrateStoreDyn;
59-
use rustc_session::errors::TargetDataLayoutErrorsWrapper;
6059
use rustc_session::lint::Lint;
6160
use rustc_session::Limit;
6261
use rustc_session::Session;
@@ -1249,7 +1248,7 @@ impl<'tcx> TyCtxt<'tcx> {
12491248
output_filenames: OutputFilenames,
12501249
) -> GlobalCtxt<'tcx> {
12511250
let data_layout = TargetDataLayout::parse(&s.target).unwrap_or_else(|err| {
1252-
s.emit_fatal(TargetDataLayoutErrorsWrapper(err));
1251+
s.emit_fatal(err);
12531252
});
12541253
let interners = CtxtInterners::new(arena);
12551254
let common_types = CommonTypes::new(

Diff for: compiler/rustc_session/src/config.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
44
pub use crate::options::*;
55

6-
use crate::errors::TargetDataLayoutErrorsWrapper;
76
use crate::search_paths::SearchPath;
87
use crate::utils::{CanonicalizedPath, NativeLib, NativeLibKind};
98
use crate::{early_error, early_warn, Session};
@@ -900,7 +899,7 @@ fn default_configuration(sess: &Session) -> CrateConfig {
900899
let max_atomic_width = sess.target.max_atomic_width();
901900
let atomic_cas = sess.target.atomic_cas;
902901
let layout = TargetDataLayout::parse(&sess.target).unwrap_or_else(|err| {
903-
sess.emit_fatal(TargetDataLayoutErrorsWrapper(err));
902+
sess.emit_fatal(err);
904903
});
905904

906905
let mut ret = CrateConfig::default();

Diff for: compiler/rustc_session/src/errors.rs

-54
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ use rustc_errors::{
66
};
77
use rustc_macros::Diagnostic;
88
use rustc_span::{Span, Symbol};
9-
use rustc_target::abi::TargetDataLayoutErrors;
109
use rustc_target::spec::{SplitDebuginfo, StackProtector, TargetTriple};
1110

1211
#[derive(Diagnostic)]
@@ -47,59 +46,6 @@ pub struct FeatureDiagnosticHelp {
4746
pub feature: Symbol,
4847
}
4948

50-
pub struct TargetDataLayoutErrorsWrapper<'a>(pub TargetDataLayoutErrors<'a>);
51-
52-
impl IntoDiagnostic<'_, !> for TargetDataLayoutErrorsWrapper<'_> {
53-
fn into_diagnostic(self, handler: &Handler) -> DiagnosticBuilder<'_, !> {
54-
let mut diag;
55-
match self.0 {
56-
TargetDataLayoutErrors::InvalidAddressSpace { addr_space, err, cause } => {
57-
diag = handler.struct_fatal(fluent::session::target_invalid_address_space);
58-
diag.set_arg("addr_space", addr_space);
59-
diag.set_arg("cause", cause);
60-
diag.set_arg("err", err);
61-
diag
62-
}
63-
TargetDataLayoutErrors::InvalidBits { kind, bit, cause, err } => {
64-
diag = handler.struct_fatal(fluent::session::target_invalid_bits);
65-
diag.set_arg("kind", kind);
66-
diag.set_arg("bit", bit);
67-
diag.set_arg("cause", cause);
68-
diag.set_arg("err", err);
69-
diag
70-
}
71-
TargetDataLayoutErrors::MissingAlignment { cause } => {
72-
diag = handler.struct_fatal(fluent::session::target_missing_alignment);
73-
diag.set_arg("cause", cause);
74-
diag
75-
}
76-
TargetDataLayoutErrors::InvalidAlignment { cause, err } => {
77-
diag = handler.struct_fatal(fluent::session::target_invalid_alignment);
78-
diag.set_arg("cause", cause);
79-
diag.set_arg("err", err);
80-
diag
81-
}
82-
TargetDataLayoutErrors::InconsistentTargetArchitecture { dl, target } => {
83-
diag = handler.struct_fatal(fluent::session::target_inconsistent_architecture);
84-
diag.set_arg("dl", dl);
85-
diag.set_arg("target", target);
86-
diag
87-
}
88-
TargetDataLayoutErrors::InconsistentTargetPointerWidth { pointer_size, target } => {
89-
diag = handler.struct_fatal(fluent::session::target_inconsistent_pointer_width);
90-
diag.set_arg("pointer_size", pointer_size);
91-
diag.set_arg("target", target);
92-
diag
93-
}
94-
TargetDataLayoutErrors::InvalidBitsSize { err } => {
95-
diag = handler.struct_fatal(fluent::session::target_invalid_bits_size);
96-
diag.set_arg("err", err);
97-
diag
98-
}
99-
}
100-
}
101-
}
102-
10349
#[derive(Diagnostic)]
10450
#[diag(session::not_circumvent_feature)]
10551
pub struct NotCircumventFeature;

0 commit comments

Comments
 (0)