Skip to content

Commit a2b3d81

Browse files
Call is_parsed_attribute rather than keeping track of a list of parsed attributes manually
1 parent 246733a commit a2b3d81

File tree

3 files changed

+6
-61
lines changed

3 files changed

+6
-61
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4255,6 +4255,7 @@ dependencies = [
42554255
"rustc-literal-escaper",
42564256
"rustc_ast",
42574257
"rustc_ast_pretty",
4258+
"rustc_attr_parsing",
42584259
"rustc_data_structures",
42594260
"rustc_errors",
42604261
"rustc_feature",

compiler/rustc_parse/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ bitflags = "2.4.1"
99
rustc-literal-escaper = "0.0.5"
1010
rustc_ast = { path = "../rustc_ast" }
1111
rustc_ast_pretty = { path = "../rustc_ast_pretty" }
12+
rustc_attr_parsing = { path = "../rustc_attr_parsing" }
1213
rustc_data_structures = { path = "../rustc_data_structures" }
1314
rustc_errors = { path = "../rustc_errors" }
1415
rustc_feature = { path = "../rustc_feature" }

compiler/rustc_parse/src/validate_attr.rs

Lines changed: 4 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
//! Meta-syntax validation logic of attributes for post-expansion.
22
3+
use std::slice;
4+
35
use rustc_ast::token::Delimiter;
46
use rustc_ast::tokenstream::DelimSpan;
57
use rustc_ast::{
68
self as ast, AttrArgs, Attribute, DelimArgs, MetaItem, MetaItemInner, MetaItemKind, NodeId,
79
Path, Safety,
810
};
11+
use rustc_attr_parsing::{AttributeParser, Late};
912
use rustc_errors::{Applicability, DiagCtxtHandle, FatalError, PResult};
1013
use rustc_feature::{AttributeSafety, AttributeTemplate, BUILTIN_ATTRIBUTE_MAP, BuiltinAttribute};
1114
use rustc_session::errors::report_lit_error;
@@ -266,67 +269,7 @@ pub fn check_builtin_meta_item(
266269
) {
267270
if !is_attr_template_compatible(&template, &meta.kind) {
268271
// attrs with new parsers are locally validated so excluded here
269-
if matches!(
270-
name,
271-
sym::inline
272-
| sym::export_stable
273-
| sym::ffi_const
274-
| sym::ffi_pure
275-
| sym::rustc_std_internal_symbol
276-
| sym::may_dangle
277-
| sym::rustc_as_ptr
278-
| sym::rustc_pub_transparent
279-
| sym::rustc_const_stable_indirect
280-
| sym::rustc_force_inline
281-
| sym::rustc_confusables
282-
| sym::rustc_skip_during_method_dispatch
283-
| sym::rustc_pass_by_value
284-
| sym::rustc_deny_explicit_impl
285-
| sym::rustc_do_not_implement_via_object
286-
| sym::rustc_coinductive
287-
| sym::const_trait
288-
| sym::stable
289-
| sym::unstable
290-
| sym::rustc_allowed_through_unstable_modules
291-
| sym::rustc_specialization_trait
292-
| sym::rustc_unsafe_specialization_marker
293-
| sym::rustc_allow_incoherent_impl
294-
| sym::rustc_coherence_is_core
295-
| sym::marker
296-
| sym::fundamental
297-
| sym::rustc_paren_sugar
298-
| sym::type_const
299-
| sym::repr
300-
// FIXME(#82232, #143834): temporarily renamed to mitigate `#[align]` nameres
301-
// ambiguity
302-
| sym::rustc_align
303-
| sym::deprecated
304-
| sym::optimize
305-
| sym::pointee
306-
| sym::cold
307-
| sym::target_feature
308-
| sym::rustc_allow_const_fn_unstable
309-
| sym::macro_use
310-
| sym::macro_escape
311-
| sym::naked
312-
| sym::no_mangle
313-
| sym::non_exhaustive
314-
| sym::omit_gdb_pretty_printer_section
315-
| sym::path
316-
| sym::ignore
317-
| sym::must_use
318-
| sym::track_caller
319-
| sym::link_name
320-
| sym::link_ordinal
321-
| sym::export_name
322-
| sym::rustc_macro_transparency
323-
| sym::link_section
324-
| sym::rustc_layout_scalar_valid_range_start
325-
| sym::rustc_layout_scalar_valid_range_end
326-
| sym::no_implicit_prelude
327-
| sym::automatically_derived
328-
| sym::coverage
329-
) {
272+
if AttributeParser::<Late>::is_parsed_attribute(slice::from_ref(&name)) {
330273
return;
331274
}
332275
emit_malformed_attribute(psess, style, meta.span, name, template);

0 commit comments

Comments
 (0)