Skip to content

Commit 17a2c5a

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 12e5b9d commit 17a2c5a

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
@@ -486,10 +486,19 @@ fn collect_items_rec<'tcx>(
486486
if let hir::ItemKind::GlobalAsm { asm, .. } = item.kind {
487487
for (op, op_sp) in asm.operands {
488488
match *op {
489-
hir::InlineAsmOperand::Const { .. } => {
490-
// Only constants which resolve to a plain integer
491-
// are supported. Therefore the value should not
492-
// depend on any other items.
489+
hir::InlineAsmOperand::Const { anon_const } => {
490+
match tcx.const_eval_poly(anon_const.def_id.to_def_id()) {
491+
Ok(val) => {
492+
collect_const_value(tcx, val, &mut used_items);
493+
}
494+
Err(ErrorHandled::TooGeneric(..)) => {
495+
span_bug!(*op_sp, "asm const cannot be resolved; too generic")
496+
}
497+
Err(err @ ErrorHandled::Reported(..)) => {
498+
err.emit_note(tcx);
499+
continue;
500+
}
501+
}
493502
}
494503
hir::InlineAsmOperand::SymFn { expr } => {
495504
let fn_ty = tcx.typeck(item_id.owner_id).expr_ty(expr);

0 commit comments

Comments
 (0)