Skip to content

Commit c90ab5a

Browse files
committed
improve inlining prevention
1 parent e54da7b commit c90ab5a

File tree

1 file changed

+30
-1
lines changed

1 file changed

+30
-1
lines changed

compiler/rustc_builtin_macros/src/autodiff.rs

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,17 +102,46 @@ pub fn expand(
102102
}));
103103
let mut rustc_ad_attr =
104104
P(ast::NormalAttr::from_ident(Ident::with_dummy_span(sym::rustc_autodiff)));
105+
let ts2: Vec<TokenTree> = vec![
106+
TokenTree::Token(
107+
Token::new(TokenKind::Ident(sym::never, false), span),
108+
Spacing::Joint,
109+
)];
110+
let never_arg = ast::DelimArgs {
111+
dspan: ast::tokenstream::DelimSpan::from_single(span),
112+
delim: ast::token::Delimiter::Parenthesis,
113+
tokens: ast::tokenstream::TokenStream::from_iter(ts2),
114+
};
115+
let inline_item = ast::AttrItem {
116+
path: ast::Path::from_ident(Ident::with_dummy_span(sym::inline)),
117+
args: ast::AttrArgs::Delimited(never_arg),
118+
tokens: None,
119+
};
120+
let inline_never_attr = P(ast::NormalAttr {
121+
item: inline_item,
122+
tokens: None,
123+
});
105124
let mut attr: ast::Attribute = ast::Attribute {
106125
kind: ast::AttrKind::Normal(rustc_ad_attr.clone()),
107126
//id: ast::DUMMY_TR_ID,
108127
id: ast::AttrId::from_u32(12341), // TODO: fix
109128
style: ast::AttrStyle::Outer,
110129
span,
111130
};
131+
let inline_never : ast::Attribute = ast::Attribute {
132+
kind: ast::AttrKind::Normal(inline_never_attr),
133+
//id: ast::DUMMY_TR_ID,
134+
id: ast::AttrId::from_u32(12342), // TODO: fix
135+
style: ast::AttrStyle::Outer,
136+
span,
137+
};
112138
// don't add it multiple times:
113-
if !orig_item.iter().any(|a| a.id == attr.id) {
139+
if !orig_item.attrs.iter().any(|a| a.id == attr.id) {
114140
orig_item.attrs.push(attr.clone());
115141
}
142+
if !orig_item.attrs.iter().any(|a| a.id == inline_never.id) {
143+
orig_item.attrs.push(inline_never);
144+
}
116145

117146
// Now update for d_fn
118147
rustc_ad_attr.item.args = rustc_ast::AttrArgs::Delimited(rustc_ast::DelimArgs {

0 commit comments

Comments
 (0)