From fca0b585ffaa8f4a5d1a464cb0a7215428fb4fd7 Mon Sep 17 00:00:00 2001 From: Manuel Drehwald Date: Sun, 31 Mar 2024 15:49:57 -0400 Subject: [PATCH] prevent ice by first checking that macro is applicable (#91) --- compiler/rustc_builtin_macros/src/autodiff.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/compiler/rustc_builtin_macros/src/autodiff.rs b/compiler/rustc_builtin_macros/src/autodiff.rs index 66dd7f746b789..b901b89cb41ff 100644 --- a/compiler/rustc_builtin_macros/src/autodiff.rs +++ b/compiler/rustc_builtin_macros/src/autodiff.rs @@ -88,9 +88,6 @@ pub fn expand( return vec![item]; } }; - let mut orig_item: P = item.clone().expect_item(); - let primal = orig_item.ident.clone(); - // Allow using `#[autodiff(...)]` only on a Fn let (has_ret, sig, sig_span) = if let Annotatable::Item(item) = &item && let ItemKind::Fn(box ast::Fn { sig, .. }) = &item.kind @@ -100,6 +97,11 @@ pub fn expand( ecx.sess.dcx().emit_err(errors::AutoDiffInvalidApplication { span: item.span() }); return vec![item]; }; + + // Now we know that item is a Item::Fn + let mut orig_item: P = item.clone().expect_item(); + let primal = orig_item.ident.clone(); + // create TokenStream from vec elemtents: // meta_item doesn't have a .tokens field let comma: Token = Token::new(TokenKind::Comma, Span::default());