Skip to content

Commit a393bbf

Browse files
committed
Collect constants within global_asm! in collector
This is currently a no-op, but will be useful when const in `global_asm!` can be pointers.
1 parent fe22941 commit a393bbf

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

compiler/rustc_monomorphize/src/collector.rs

+13-4
Original file line numberDiff line numberDiff line change
@@ -482,10 +482,19 @@ fn collect_items_rec<'tcx>(
482482
if let hir::ItemKind::GlobalAsm { asm, .. } = item.kind {
483483
for (op, op_sp) in asm.operands {
484484
match *op {
485-
hir::InlineAsmOperand::Const { .. } => {
486-
// Only constants which resolve to a plain integer
487-
// are supported. Therefore the value should not
488-
// depend on any other items.
485+
hir::InlineAsmOperand::Const { anon_const } => {
486+
match tcx.const_eval_poly(anon_const.def_id.to_def_id()) {
487+
Ok(val) => {
488+
collect_const_value(tcx, val, &mut used_items);
489+
}
490+
Err(ErrorHandled::TooGeneric(..)) => {
491+
span_bug!(*op_sp, "asm const cannot be resolved; too generic")
492+
}
493+
Err(err @ ErrorHandled::Reported(..)) => {
494+
err.emit_note(tcx);
495+
continue;
496+
}
497+
}
489498
}
490499
hir::InlineAsmOperand::SymFn { expr } => {
491500
let fn_ty = tcx.typeck(item_id.owner_id).expr_ty(expr);

0 commit comments

Comments
 (0)