Skip to content

Commit ae30e8c

Browse files
Rollup merge of rust-lang#112795 - He1pa:translation_builtin_macros, r=davidtwco
Migrate some rustc_builtin_macros to SessionDiagnostic Part of rust-lang#100717. ```@rustbot``` label +A-translation
2 parents 33a0812 + 453603a commit ae30e8c

11 files changed

+134
-32
lines changed

compiler/rustc_builtin_macros/messages.ftl

+25
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
builtin_macros_alloc_error_must_be_fn = alloc_error_handler must be a function
2+
builtin_macros_alloc_must_statics = allocators must be statics
23
34
builtin_macros_asm_clobber_abi = clobber_abi
45
builtin_macros_asm_clobber_no_reg = asm with `clobber_abi` must specify explicit registers for outputs
@@ -56,6 +57,9 @@ builtin_macros_bad_derive_target = `derive` may only be applied to `struct`s, `e
5657
.label = not applicable here
5758
.label2 = not a `struct`, `enum` or `union`
5859
60+
builtin_macros_bench_sig = functions used as benches must have signature `fn(&mut Bencher) -> impl Termination`
61+
62+
5963
builtin_macros_cannot_derive_union = this trait cannot be derived for unions
6064
6165
builtin_macros_cfg_accessible_has_args = `cfg_accessible` path cannot accept arguments
@@ -84,6 +88,7 @@ builtin_macros_concat_bytes_non_u8 = numeric literal is not a `u8`
8488
builtin_macros_concat_bytes_oob = numeric literal is out of bounds
8589
8690
builtin_macros_concat_bytestr = cannot concatenate a byte string literal
91+
builtin_macros_concat_c_str_lit = cannot concatenate a C string literal
8792
8893
builtin_macros_concat_idents_ident_args = `concat_idents!()` requires ident args
8994
@@ -111,6 +116,10 @@ builtin_macros_env_takes_args = `env!()` takes 1 or 2 arguments
111116
112117
builtin_macros_expected_one_cfg_pattern = expected 1 cfg-pattern
113118
119+
builtin_macros_expected_register_class_or_explicit_register = expected register class or explicit register
120+
121+
builtin_macros_export_macro_rules = cannot export macro_rules! macros from a `proc-macro` crate type currently
122+
114123
builtin_macros_format_duplicate_arg = duplicate argument named `{$ident}`
115124
.label1 = previously here
116125
.label2 = duplicate argument
@@ -158,6 +167,8 @@ builtin_macros_format_unused_args = multiple unused formatting arguments
158167
159168
builtin_macros_global_asm_clobber_abi = `clobber_abi` cannot be used with `global_asm!`
160169
170+
builtin_macros_invalid_crate_attribute = invalid crate attribute
171+
161172
builtin_macros_multiple_default_attrs = multiple `#[default]` attributes
162173
.note = only one `#[default]` attribute is needed
163174
.label = `#[default]` used here
@@ -177,19 +188,29 @@ builtin_macros_no_default_variant = no default declared
177188
.help = make a unit variant default by placing `#[default]` above it
178189
.suggestion = make `{$ident}` default
179190
191+
builtin_macros_non_abi = at least one abi must be provided as an argument to `clobber_abi`
192+
180193
builtin_macros_non_exhaustive_default = default variant must be exhaustive
181194
.label = declared `#[non_exhaustive]` here
182195
.help = consider a manual implementation of `Default`
183196
184197
builtin_macros_non_unit_default = the `#[default]` attribute may only be used on unit enum variants
185198
.help = consider a manual implementation of `Default`
186199
200+
builtin_macros_proc_macro = `proc-macro` crate types currently cannot export any items other than functions tagged with `#[proc_macro]`, `#[proc_macro_derive]`, or `#[proc_macro_attribute]`
201+
187202
builtin_macros_requires_cfg_pattern =
188203
macro requires a cfg-pattern as an argument
189204
.label = cfg-pattern required
190205
206+
builtin_macros_should_panic = functions using `#[should_panic]` must return `()`
207+
191208
builtin_macros_sugg = consider using a positional formatting argument instead
192209
210+
builtin_macros_test_arg_non_lifetime = functions used as tests can not have any non-lifetime generic parameters
211+
212+
builtin_macros_test_args = functions used as tests can not have any arguments
213+
193214
builtin_macros_test_bad_fn = {$kind} functions cannot be used for tests
194215
.label = `{$kind}` because of this
195216
@@ -198,6 +219,10 @@ builtin_macros_test_case_non_item = `#[test_case]` attribute is only allowed on
198219
builtin_macros_test_runner_invalid = `test_runner` argument must be a path
199220
builtin_macros_test_runner_nargs = `#![test_runner(..)]` accepts exactly 1 argument
200221
222+
builtin_macros_tests_not_support = building tests with panic=abort is not supported without `-Zpanic_abort_tests`
223+
224+
builtin_macros_trace_macros = trace_macros! accepts only `true` or `false`
225+
201226
builtin_macros_unexpected_lit = expected path to a trait, found literal
202227
.label = not a trait
203228
.str_lit = try using `#[derive({$sym})]`

compiler/rustc_builtin_macros/src/asm.rs

+4-8
Original file line numberDiff line numberDiff line change
@@ -371,11 +371,7 @@ fn parse_clobber_abi<'a>(p: &mut Parser<'a>, args: &mut AsmArgs) -> PResult<'a,
371371
p.expect(&token::OpenDelim(Delimiter::Parenthesis))?;
372372

373373
if p.eat(&token::CloseDelim(Delimiter::Parenthesis)) {
374-
let err = p.sess.span_diagnostic.struct_span_err(
375-
p.token.span,
376-
"at least one abi must be provided as an argument to `clobber_abi`",
377-
);
378-
return Err(err);
374+
return Err(p.sess.span_diagnostic.create_err(errors::NonABI { span: p.token.span }));
379375
}
380376

381377
let mut new_abis = Vec::new();
@@ -428,9 +424,9 @@ fn parse_reg<'a>(
428424
ast::InlineAsmRegOrRegClass::Reg(symbol)
429425
}
430426
_ => {
431-
return Err(
432-
p.struct_span_err(p.token.span, "expected register class or explicit register")
433-
);
427+
return Err(p.sess.create_err(errors::ExpectedRegisterClassOrExplicitRegister {
428+
span: p.token.span,
429+
}));
434430
}
435431
};
436432
p.bump();

compiler/rustc_builtin_macros/src/cmdline_attrs.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
//! Attributes injected into the crate root from command line using `-Z crate-attr`.
22
3+
use crate::errors;
34
use rustc_ast::attr::mk_attr;
45
use rustc_ast::token;
56
use rustc_ast::{self as ast, AttrItem, AttrStyle};
@@ -24,7 +25,9 @@ pub fn inject(krate: &mut ast::Crate, parse_sess: &ParseSess, attrs: &[String])
2425
};
2526
let end_span = parser.token.span;
2627
if parser.token != token::Eof {
27-
parse_sess.span_diagnostic.span_err(start_span.to(end_span), "invalid crate attribute");
28+
parse_sess
29+
.span_diagnostic
30+
.emit_err(errors::InvalidCrateAttr { span: start_span.to(end_span) });
2831
continue;
2932
}
3033

compiler/rustc_builtin_macros/src/concat.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ pub fn expand_concat(
3333
accumulator.push_str(&b.to_string());
3434
}
3535
Ok(ast::LitKind::CStr(..)) => {
36-
cx.span_err(e.span, "cannot concatenate a C string literal");
36+
cx.emit_err(errors::ConcatCStrLit{ span: e.span});
3737
has_errors = true;
3838
}
3939
Ok(ast::LitKind::Byte(..) | ast::LitKind::ByteStr(..)) => {

compiler/rustc_builtin_macros/src/concat_bytes.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ fn invalid_type_err(
2121
Ok(ast::LitKind::CStr(_, _)) => {
2222
// FIXME(c_str_literals): should concatenation of C string literals
2323
// include the null bytes in the end?
24-
cx.span_err(span, "cannot concatenate C string literals");
24+
cx.emit_err(errors::ConcatCStrLit { span: span });
2525
}
2626
Ok(ast::LitKind::Char(_)) => {
2727
let sugg =

compiler/rustc_builtin_macros/src/errors.rs

+88
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,83 @@ pub(crate) struct ConcatBytestr {
8787
pub(crate) span: Span,
8888
}
8989

90+
#[derive(Diagnostic)]
91+
#[diag(builtin_macros_concat_c_str_lit)]
92+
pub(crate) struct ConcatCStrLit {
93+
#[primary_span]
94+
pub(crate) span: Span,
95+
}
96+
97+
#[derive(Diagnostic)]
98+
#[diag(builtin_macros_export_macro_rules)]
99+
pub(crate) struct ExportMacroRules {
100+
#[primary_span]
101+
pub(crate) span: Span,
102+
}
103+
104+
#[derive(Diagnostic)]
105+
#[diag(builtin_macros_proc_macro)]
106+
pub(crate) struct ProcMacro {
107+
#[primary_span]
108+
pub(crate) span: Span,
109+
}
110+
111+
#[derive(Diagnostic)]
112+
#[diag(builtin_macros_invalid_crate_attribute)]
113+
pub(crate) struct InvalidCrateAttr {
114+
#[primary_span]
115+
pub(crate) span: Span,
116+
}
117+
118+
#[derive(Diagnostic)]
119+
#[diag(builtin_macros_non_abi)]
120+
pub(crate) struct NonABI {
121+
#[primary_span]
122+
pub(crate) span: Span,
123+
}
124+
125+
#[derive(Diagnostic)]
126+
#[diag(builtin_macros_trace_macros)]
127+
pub(crate) struct TraceMacros {
128+
#[primary_span]
129+
pub(crate) span: Span,
130+
}
131+
132+
#[derive(Diagnostic)]
133+
#[diag(builtin_macros_bench_sig)]
134+
pub(crate) struct BenchSig {
135+
#[primary_span]
136+
pub(crate) span: Span,
137+
}
138+
139+
#[derive(Diagnostic)]
140+
#[diag(builtin_macros_test_arg_non_lifetime)]
141+
pub(crate) struct TestArgNonLifetime {
142+
#[primary_span]
143+
pub(crate) span: Span,
144+
}
145+
146+
#[derive(Diagnostic)]
147+
#[diag(builtin_macros_should_panic)]
148+
pub(crate) struct ShouldPanic {
149+
#[primary_span]
150+
pub(crate) span: Span,
151+
}
152+
153+
#[derive(Diagnostic)]
154+
#[diag(builtin_macros_test_args)]
155+
pub(crate) struct TestArgs {
156+
#[primary_span]
157+
pub(crate) span: Span,
158+
}
159+
160+
#[derive(Diagnostic)]
161+
#[diag(builtin_macros_alloc_must_statics)]
162+
pub(crate) struct AllocMustStatics {
163+
#[primary_span]
164+
pub(crate) span: Span,
165+
}
166+
90167
#[derive(Diagnostic)]
91168
#[diag(builtin_macros_concat_bytes_invalid)]
92169
pub(crate) struct ConcatBytesInvalid {
@@ -201,6 +278,10 @@ pub(crate) struct BadDeriveTarget {
201278
pub(crate) item: Span,
202279
}
203280

281+
#[derive(Diagnostic)]
282+
#[diag(builtin_macros_tests_not_support)]
283+
pub(crate) struct TestsNotSupport {}
284+
204285
#[derive(Diagnostic)]
205286
#[diag(builtin_macros_unexpected_lit, code = "E0777")]
206287
pub(crate) struct BadDeriveLit {
@@ -732,3 +813,10 @@ pub(crate) struct TestRunnerNargs {
732813
#[primary_span]
733814
pub(crate) span: Span,
734815
}
816+
817+
#[derive(Diagnostic)]
818+
#[diag(builtin_macros_expected_register_class_or_explicit_register)]
819+
pub(crate) struct ExpectedRegisterClassOrExplicitRegister {
820+
#[primary_span]
821+
pub(crate) span: Span,
822+
}

compiler/rustc_builtin_macros/src/global_allocator.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::util::check_builtin_macro_attribute;
22

3+
use crate::errors;
34
use rustc_ast::expand::allocator::{
45
global_fn_name, AllocatorMethod, AllocatorTy, ALLOCATOR_METHODS,
56
};
@@ -34,7 +35,7 @@ pub fn expand(
3435
{
3536
(item, true, ecx.with_def_site_ctxt(ty.span))
3637
} else {
37-
ecx.sess.parse_sess.span_diagnostic.span_err(item.span(), "allocators must be statics");
38+
ecx.sess.parse_sess.span_diagnostic.emit_err(errors::AllocMustStatics{span: item.span()});
3839
return vec![orig_item];
3940
};
4041

compiler/rustc_builtin_macros/src/proc_macro_harness.rs

+5-9
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use crate::errors;
12
use rustc_ast::ptr::P;
23
use rustc_ast::visit::{self, Visitor};
34
use rustc_ast::{self as ast, attr, NodeId};
@@ -83,12 +84,7 @@ pub fn inject(
8384
impl<'a> CollectProcMacros<'a> {
8485
fn check_not_pub_in_root(&self, vis: &ast::Visibility, sp: Span) {
8586
if self.is_proc_macro_crate && self.in_root && vis.kind.is_pub() {
86-
self.handler.span_err(
87-
sp,
88-
"`proc-macro` crate types currently cannot export any items other \
89-
than functions tagged with `#[proc_macro]`, `#[proc_macro_derive]`, \
90-
or `#[proc_macro_attribute]`",
91-
);
87+
self.handler.emit_err(errors::ProcMacro { span: sp });
9288
}
9389
}
9490

@@ -157,9 +153,9 @@ impl<'a> Visitor<'a> for CollectProcMacros<'a> {
157153
fn visit_item(&mut self, item: &'a ast::Item) {
158154
if let ast::ItemKind::MacroDef(..) = item.kind {
159155
if self.is_proc_macro_crate && attr::contains_name(&item.attrs, sym::macro_export) {
160-
let msg =
161-
"cannot export macro_rules! macros from a `proc-macro` crate type currently";
162-
self.handler.span_err(self.source_map.guess_head_span(item.span), msg);
156+
self.handler.emit_err(errors::ExportMacroRules {
157+
span: self.source_map.guess_head_span(item.span),
158+
});
163159
}
164160
}
165161

compiler/rustc_builtin_macros/src/test.rs

+1-6
Original file line numberDiff line numberDiff line change
@@ -576,12 +576,7 @@ fn check_bench_signature(
576576
// N.B., inadequate check, but we're running
577577
// well before resolve, can't get too deep.
578578
if f.sig.decl.inputs.len() != 1 {
579-
return Err(cx.sess.parse_sess.span_diagnostic.span_err(
580-
i.span,
581-
"functions used as benches must have \
582-
signature `fn(&mut Bencher) -> impl Termination`",
583-
));
579+
return Err(cx.sess.parse_sess.span_diagnostic.emit_err(errors::BenchSig { span: i.span }));
584580
}
585-
586581
Ok(())
587582
}

compiler/rustc_builtin_macros/src/test_harness.rs

+1-4
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,7 @@ pub fn inject(krate: &mut ast::Crate, sess: &Session, resolver: &mut dyn Resolve
6363
// Silently allow compiling with panic=abort on these platforms,
6464
// but with old behavior (abort if a test fails).
6565
} else {
66-
span_diagnostic.err(
67-
"building tests with panic=abort is not supported \
68-
without `-Zpanic_abort_tests`",
69-
);
66+
span_diagnostic.emit_err(errors::TestsNotSupport {});
7067
}
7168
PanicStrategy::Unwind
7269
}

compiler/rustc_builtin_macros/src/trace_macros.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use crate::errors;
12
use rustc_ast::tokenstream::{TokenStream, TokenTree};
23
use rustc_expand::base::{self, ExtCtxt};
34
use rustc_span::symbol::kw;
@@ -20,7 +21,7 @@ pub fn expand_trace_macros(
2021
};
2122
err |= cursor.next().is_some();
2223
if err {
23-
cx.span_err(sp, "trace_macros! accepts only `true` or `false`")
24+
cx.emit_err(errors::TraceMacros { span: sp });
2425
} else {
2526
cx.set_trace_macros(value);
2627
}

0 commit comments

Comments
 (0)