Use AnonConst for asm! constants
This commit is contained in:
parent
cbd6ec7604
commit
32be124e30
37 changed files with 281 additions and 242 deletions
|
@ -347,7 +347,7 @@ impl ExprVisitor<'tcx> {
|
|||
}
|
||||
|
||||
fn check_asm(&self, asm: &hir::InlineAsm<'tcx>) {
|
||||
for (idx, (op, _op_sp)) in asm.operands.iter().enumerate() {
|
||||
for (idx, (op, op_sp)) in asm.operands.iter().enumerate() {
|
||||
match *op {
|
||||
hir::InlineAsmOperand::In { reg, ref expr } => {
|
||||
self.check_asm_operand_type(idx, reg, expr, asm.template, None);
|
||||
|
@ -372,14 +372,15 @@ impl ExprVisitor<'tcx> {
|
|||
);
|
||||
}
|
||||
}
|
||||
hir::InlineAsmOperand::Const { ref expr } => {
|
||||
let ty = self.typeck_results.expr_ty_adjusted(expr);
|
||||
match ty.kind() {
|
||||
hir::InlineAsmOperand::Const { ref anon_const } => {
|
||||
let anon_const_def_id = self.tcx.hir().local_def_id(anon_const.hir_id);
|
||||
let value = ty::Const::from_anon_const(self.tcx, anon_const_def_id);
|
||||
match value.ty.kind() {
|
||||
ty::Int(_) | ty::Uint(_) | ty::Float(_) => {}
|
||||
_ => {
|
||||
let msg =
|
||||
"asm `const` arguments must be integer or floating-point values";
|
||||
self.tcx.sess.span_err(expr.span, msg);
|
||||
self.tcx.sess.span_err(*op_sp, msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1067,7 +1067,6 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> {
|
|||
for (op, _op_sp) in asm.operands.iter().rev() {
|
||||
match op {
|
||||
hir::InlineAsmOperand::In { expr, .. }
|
||||
| hir::InlineAsmOperand::Const { expr, .. }
|
||||
| hir::InlineAsmOperand::Sym { expr, .. } => {
|
||||
succ = self.propagate_through_expr(expr, succ)
|
||||
}
|
||||
|
@ -1085,6 +1084,7 @@ impl<'a, 'tcx> Liveness<'a, 'tcx> {
|
|||
}
|
||||
succ = self.propagate_through_expr(in_expr, succ);
|
||||
}
|
||||
hir::InlineAsmOperand::Const { .. } => {}
|
||||
}
|
||||
}
|
||||
succ
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue