diff --git a/compiler/rustc_builtin_macros/src/autodiff.rs b/compiler/rustc_builtin_macros/src/autodiff.rs
index dcd3c1ce8d917..234dbbe227b68 100644
--- a/compiler/rustc_builtin_macros/src/autodiff.rs
+++ b/compiler/rustc_builtin_macros/src/autodiff.rs
@@ -19,6 +19,8 @@ mod llvm_enzyme {
         self as ast, AssocItemKind, BindingMode, FnRetTy, FnSig, Generics, ItemKind, MetaItemInner,
         PatKind, TyKind,
     };
+    use rustc_attr_parsing::AttributeParser;
+    // use rustc_hir::Attribute;
     use rustc_expand::base::{Annotatable, ExtCtxt};
     use rustc_span::{Ident, Span, Symbol, kw, sym};
     use thin_vec::{ThinVec, thin_vec};
@@ -287,27 +289,61 @@ mod llvm_enzyme {
         // Don't add it multiple times:
         let orig_annotatable: Annotatable = match item {
             Annotatable::Item(ref mut iitem) => {
-                if !iitem.attrs.iter().any(|a| a.id == attr.id) {
+                if !AttributeParser::parse_limited(
+                    ecx.sess,
+                    &iitem.attrs,
+                    sym::rustc_autodiff,
+                    iitem.span,
+                    true,
+                )
+                .map_or(false, |parsed| {
+                    parsed.path().len() == 1 && parsed.path()[0] == sym::rustc_autodiff
+                }) {
                     iitem.attrs.push(attr);
                 }
-                if !iitem.attrs.iter().any(|a| a.id == inline_never.id) {
+
+                if !AttributeParser::parse_limited(
+                    ecx.sess,
+                    &iitem.attrs,
+                    sym::inline,
+                    iitem.span,
+                    true,
+                )
+                .map_or(false, |parsed| parsed.path().len() == 1 && parsed.path()[0] == sym::inline)
+                {
                     iitem.attrs.push(inline_never.clone());
                 }
                 Annotatable::Item(iitem.clone())
             }
             Annotatable::AssocItem(ref mut assoc_item, i @ Impl) => {
-                if !assoc_item.attrs.iter().any(|a| a.id == attr.id) {
+                if !AttributeParser::parse_limited(
+                    ecx.sess,
+                    &assoc_item.attrs,
+                    sym::rustc_autodiff,
+                    assoc_item.span,
+                    true,
+                )
+                .map_or(false, |parsed| {
+                    parsed.path().len() == 1 && parsed.path()[0] == sym::rustc_autodiff
+                }) {
                     assoc_item.attrs.push(attr);
                 }
-                if !assoc_item.attrs.iter().any(|a| a.id == inline_never.id) {
+                if !AttributeParser::parse_limited(
+                    ecx.sess,
+                    &assoc_item.attrs,
+                    sym::inline,
+                    assoc_item.span,
+                    true,
+                )
+                .map_or(false, |parsed| parsed.path().len() == 1 && parsed.path()[0] == sym::inline)
+                {
                     assoc_item.attrs.push(inline_never.clone());
                 }
                 Annotatable::AssocItem(assoc_item.clone(), i)
             }
-            _ => {
-                unreachable!("annotatable kind checked previously")
-            }
+            _ => unreachable!("annotatable kind checked previously"),
         };
+
         // Now update for d_fn
         rustc_ad_attr.item.args = rustc_ast::AttrArgs::Delimited(rustc_ast::DelimArgs {
             dspan: DelimSpan::dummy(),