summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_passes/src/check_attr.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:57:31 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:57:31 +0000
commitdc0db358abe19481e475e10c32149b53370f1a1c (patch)
treeab8ce99c4b255ce46f99ef402c27916055b899ee /compiler/rustc_passes/src/check_attr.rs
parentReleasing progress-linux version 1.71.1+dfsg1-2~progress7.99u1. (diff)
downloadrustc-dc0db358abe19481e475e10c32149b53370f1a1c.tar.xz
rustc-dc0db358abe19481e475e10c32149b53370f1a1c.zip
Merging upstream version 1.72.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'compiler/rustc_passes/src/check_attr.rs')
-rw-r--r--compiler/rustc_passes/src/check_attr.rs62
1 files changed, 19 insertions, 43 deletions
diff --git a/compiler/rustc_passes/src/check_attr.rs b/compiler/rustc_passes/src/check_attr.rs
index c3189d1fe..073760f39 100644
--- a/compiler/rustc_passes/src/check_attr.rs
+++ b/compiler/rustc_passes/src/check_attr.rs
@@ -110,9 +110,6 @@ impl CheckAttrVisitor<'_> {
sym::no_coverage => self.check_no_coverage(hir_id, attr, span, target),
sym::non_exhaustive => self.check_non_exhaustive(hir_id, attr, span, target),
sym::marker => self.check_marker(hir_id, attr, span, target),
- sym::rustc_must_implement_one_of => {
- self.check_rustc_must_implement_one_of(attr, span, target)
- }
sym::target_feature => self.check_target_feature(hir_id, attr, span, target),
sym::thread_local => self.check_thread_local(attr, span, target),
sym::track_caller => {
@@ -159,12 +156,14 @@ impl CheckAttrVisitor<'_> {
| sym::rustc_dirty
| sym::rustc_if_this_changed
| sym::rustc_then_this_would_need => self.check_rustc_dirty_clean(&attr),
- sym::rustc_coinductive => self.check_rustc_coinductive(&attr, span, target),
+ sym::rustc_coinductive
+ | sym::rustc_must_implement_one_of
+ | sym::rustc_deny_explicit_impl
+ | sym::const_trait => self.check_must_be_applied_to_trait(&attr, span, target),
sym::cmse_nonsecure_entry => {
self.check_cmse_nonsecure_entry(hir_id, attr, span, target)
}
sym::collapse_debuginfo => self.check_collapse_debuginfo(attr, span, target),
- sym::const_trait => self.check_const_trait(attr, span, target),
sym::must_not_suspend => self.check_must_not_suspend(&attr, span, target),
sym::must_use => self.check_must_use(hir_id, &attr, target),
sym::rustc_pass_by_value => self.check_pass_by_value(&attr, span, target),
@@ -567,25 +566,6 @@ impl CheckAttrVisitor<'_> {
}
}
- /// Checks if the `#[rustc_must_implement_one_of]` attribute on a `target` is valid. Returns `true` if valid.
- fn check_rustc_must_implement_one_of(
- &self,
- attr: &Attribute,
- span: Span,
- target: Target,
- ) -> bool {
- match target {
- Target::Trait => true,
- _ => {
- self.tcx.sess.emit_err(errors::AttrShouldBeAppliedToTrait {
- attr_span: attr.span,
- defn_span: span,
- });
- false
- }
- }
- }
-
/// Checks if the `#[target_feature]` attribute on `item` is valid. Returns `true` if valid.
fn check_target_feature(
&self,
@@ -944,21 +924,28 @@ impl CheckAttrVisitor<'_> {
let mut is_valid = true;
if let Some(metas) = meta.meta_item_list() {
for i_meta in metas {
- match i_meta.name_or_empty() {
- sym::attr | sym::no_crate_inject => {}
- _ => {
+ match (i_meta.name_or_empty(), i_meta.meta_item()) {
+ (sym::attr | sym::no_crate_inject, _) => {}
+ (_, Some(m)) => {
self.tcx.emit_spanned_lint(
INVALID_DOC_ATTRIBUTES,
hir_id,
i_meta.span(),
errors::DocTestUnknown {
- path: rustc_ast_pretty::pprust::path_to_string(
- &i_meta.meta_item().unwrap().path,
- ),
+ path: rustc_ast_pretty::pprust::path_to_string(&m.path),
},
);
is_valid = false;
}
+ (_, None) => {
+ self.tcx.emit_spanned_lint(
+ INVALID_DOC_ATTRIBUTES,
+ hir_id,
+ i_meta.span(),
+ errors::DocTestLiteral,
+ );
+ is_valid = false;
+ }
}
}
} else {
@@ -1584,8 +1571,8 @@ impl CheckAttrVisitor<'_> {
}
}
- /// Checks if the `#[rustc_coinductive]` attribute is applied to a trait.
- fn check_rustc_coinductive(&self, attr: &Attribute, span: Span, target: Target) -> bool {
+ /// Checks if the attribute is applied to a trait.
+ fn check_must_be_applied_to_trait(&self, attr: &Attribute, span: Span, target: Target) -> bool {
match target {
Target::Trait => true,
_ => {
@@ -1979,17 +1966,6 @@ impl CheckAttrVisitor<'_> {
}
}
- /// `#[const_trait]` only applies to traits.
- fn check_const_trait(&self, attr: &Attribute, _span: Span, target: Target) -> bool {
- match target {
- Target::Trait => true,
- _ => {
- self.tcx.sess.emit_err(errors::ConstTrait { attr_span: attr.span });
- false
- }
- }
- }
-
fn check_stability_promotable(&self, attr: &Attribute, _span: Span, target: Target) -> bool {
match target {
Target::Expression => {