Fix ICE for invalid return activity and proper error handling

This commit is contained in:
Marcelo Domínguez 2025-03-07 17:37:50 +01:00 committed by Sa4dUs
parent 6b29bb6680
commit cf8e1f5e0f
6 changed files with 100 additions and 49 deletions

View file

@ -1,9 +1,7 @@
use std::str::FromStr;
use rustc_abi::ExternAbi;
use rustc_ast::expand::autodiff_attrs::{
AutoDiffAttrs, DiffActivity, DiffMode, valid_input_activity, valid_ret_activity,
};
use rustc_ast::expand::autodiff_attrs::{AutoDiffAttrs, DiffActivity, DiffMode};
use rustc_ast::{MetaItem, MetaItemInner, attr};
use rustc_attr_parsing::ReprAttr::ReprAlign;
use rustc_attr_parsing::{AttributeKind, InlineAttr, InstructionSetAttr, OptimizeAttr};
@ -930,21 +928,6 @@ fn autodiff_attrs(tcx: TyCtxt<'_>, id: DefId) -> Option<AutoDiffAttrs> {
}
}
// Validate input and return activities
let mut msg = "".to_string();
for &input in &arg_activities {
if !valid_input_activity(mode, input) {
msg = format!("Invalid input activity {} for {} mode", input, mode);
}
}
if !valid_ret_activity(mode, ret_activity) {
msg = format!("Invalid return activity {} for {} mode", ret_activity, mode);
}
if msg != "".to_string() {
tcx.dcx().struct_span_err(attr.span(), msg).with_note("invalid activity").emit();
return Some(AutoDiffAttrs::error());
}
Some(AutoDiffAttrs { mode, ret_activity, input_activity: arg_activities })
}