Skip to content

Commit 875a429

Browse files
committed
simplified attribute parsing. Added error handling
1 parent 1498771 commit 875a429

File tree

1 file changed

+32
-26
lines changed

1 file changed

+32
-26
lines changed

compiler/rustc_codegen_ssa/src/codegen_attrs.rs

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -472,45 +472,51 @@ fn codegen_fn_attrs(tcx: TyCtxt<'_>, did: LocalDefId) -> CodegenFnAttrs {
472472
let mut prefix = None;
473473
let mut entry = None;
474474
for item in l {
475-
let Some(metaitem) = item.meta_item() else {
475+
let Some(meta_item) = item.meta_item() else {
476+
tcx.dcx().span_err(item.span(), "Expected name value pair.");
476477
continue;
477478
};
478479

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

483-
let attrib_to_write = match single_segment.ident.name {
485+
let attrib_to_write = match meta_item.name_or_empty() {
484486
sym::prefix_nops => &mut prefix,
485-
sym::entry_nops => &mut entry,
486-
_ => {
487-
tcx.dcx().span_err(metaitem.span, "Unexpected parameter.");
488-
continue;
489-
}
490-
};
491-
492-
if let Some(metaitem) =
493-
item.meta_item().map(|e| e.name_value_literal()).flatten()
494-
{
495-
let rustc_ast::LitKind::Int(val, _) = metaitem.kind else {
487+
sym::entry_nops => &mut entry,
488+
_ => {
496489
tcx.dcx().span_err(
497-
metaitem.span,
498-
"Expected integer value between 0 and 255",
490+
item.span(),
491+
format!(
492+
"Unexpected name. Allowed names: {}, {}",
493+
sym::prefix_nops,
494+
sym::entry_nops
495+
),
499496
);
500497
continue;
501-
};
498+
}
499+
};
502500

503-
let Ok(val) = val.get().try_into() else {
504-
tcx.dcx().span_err(
505-
metaitem.span,
506-
"Integer value outside range between 0 and 255.",
507-
);
508-
continue;
509-
};
501+
let rustc_ast::LitKind::Int(val, _) = name_value_lit.kind else {
502+
tcx.dcx().span_err(
503+
name_value_lit.span,
504+
"Expected integer value between 0 and 255.",
505+
);
506+
continue;
507+
};
510508

511-
*attrib_to_write = Some(val);
512-
}
509+
let Ok(val) = val.get().try_into() else {
510+
tcx.dcx().span_err(
511+
name_value_lit.span,
512+
"Integer value outside range between 0 and 255.",
513+
);
514+
continue;
515+
};
516+
517+
*attrib_to_write = Some(val);
513518
}
519+
514520
if let (None, None) = (prefix, entry) {
515521
tcx.dcx().span_err(attr.span, "Must specify at least one parameter.");
516522
}

0 commit comments

Comments
 (0)