Skip to content

Commit

Permalink
simplified attribute parsing. Added error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
nebulark committed May 10, 2024
1 parent 6fd06c6 commit df751da
Showing 1 changed file with 32 additions and 26 deletions.
58 changes: 32 additions & 26 deletions compiler/rustc_codegen_ssa/src/codegen_attrs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -460,45 +460,51 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, did: LocalDefId) -> CodegenFnAttrs {
let mut prefix = None;
let mut entry = None;
for item in l {
let Some(metaitem) = item.meta_item() else {
let Some(meta_item) = item.meta_item() else {
tcx.dcx().span_err(item.span(), "Expected name value pair.");
continue;
};

let [single_segment] = &metaitem.path.segments[..] else {
let Some(name_value_lit) = meta_item.name_value_literal() else {
tcx.dcx().span_err(item.span(), "Expected name value pair.");
continue;
};

let attrib_to_write = match single_segment.ident.name {
let attrib_to_write = match meta_item.name_or_empty() {
sym::prefix_nops => &mut prefix,
sym::entry_nops => &mut entry,
_ => {
tcx.dcx().span_err(metaitem.span, "Unexpected parameter.");
continue;
}
};

if let Some(metaitem) =
item.meta_item().map(|e| e.name_value_literal()).flatten()
{
let rustc_ast::LitKind::Int(val, _) = metaitem.kind else {
sym::entry_nops => &mut entry,
_ => {
tcx.dcx().span_err(
metaitem.span,
"Expected integer value between 0 and 255",
item.span(),
format!(
"Unexpected name. Allowed names: {}, {}",
sym::prefix_nops,
sym::entry_nops
),
);
continue;
};
}
};

let Ok(val) = val.get().try_into() else {
tcx.dcx().span_err(
metaitem.span,
"Integer value outside range between 0 and 255.",
);
continue;
};
let rustc_ast::LitKind::Int(val, _) = name_value_lit.kind else {
tcx.dcx().span_err(
name_value_lit.span,
"Expected integer value between 0 and 255.",
);
continue;
};

*attrib_to_write = Some(val);
}
let Ok(val) = val.get().try_into() else {
tcx.dcx().span_err(
name_value_lit.span,
"Integer value outside range between 0 and 255.",
);
continue;
};

*attrib_to_write = Some(val);
}

if let (None, None) = (prefix, entry) {
tcx.dcx().span_err(attr.span, "Must specify at least one parameter.");
}
Expand Down

0 comments on commit df751da

Please sign in to comment.