Rollup merge of #142539 - GrigorenkoPV:attributes/may_dangle, r=jdonszelmann
Port `#[may_dangle]` to the new attribute system Very similar to rust-lang/rust#142498. This is a part of rust-lang/rust#131229, so r? `@jdonszelmann`
This commit is contained in:
@@ -163,6 +163,9 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
|
||||
Attribute::Parsed(AttributeKind::AsPtr(attr_span)) => {
|
||||
self.check_applied_to_fn_or_method(hir_id, *attr_span, span, target)
|
||||
}
|
||||
&Attribute::Parsed(AttributeKind::MayDangle(attr_span)) => {
|
||||
self.check_may_dangle(hir_id, attr_span)
|
||||
}
|
||||
Attribute::Unparsed(_) => {
|
||||
match attr.path().as_slice() {
|
||||
[sym::diagnostic, sym::do_not_recommend, ..] => {
|
||||
@@ -236,7 +239,6 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
|
||||
[sym::collapse_debuginfo, ..] => self.check_collapse_debuginfo(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::may_dangle, ..] => self.check_may_dangle(hir_id, attr),
|
||||
[sym::rustc_pass_by_value, ..] => self.check_pass_by_value(attr, span, target),
|
||||
[sym::rustc_allow_incoherent_impl, ..] => {
|
||||
self.check_allow_incoherent_impl(attr, span, target)
|
||||
@@ -1619,7 +1621,7 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
|
||||
}
|
||||
|
||||
/// Checks if `#[may_dangle]` is applied to a lifetime or type generic parameter in `Drop` impl.
|
||||
fn check_may_dangle(&self, hir_id: HirId, attr: &Attribute) {
|
||||
fn check_may_dangle(&self, hir_id: HirId, attr_span: Span) {
|
||||
if let hir::Node::GenericParam(param) = self.tcx.hir_node(hir_id)
|
||||
&& matches!(
|
||||
param.kind,
|
||||
@@ -1636,7 +1638,7 @@ impl<'tcx> CheckAttrVisitor<'tcx> {
|
||||
return;
|
||||
}
|
||||
|
||||
self.dcx().emit_err(errors::InvalidMayDangle { attr_span: attr.span() });
|
||||
self.dcx().emit_err(errors::InvalidMayDangle { attr_span });
|
||||
}
|
||||
|
||||
/// Checks if `#[cold]` is applied to a non-function.
|
||||
|
||||
Reference in New Issue
Block a user