}
if self.tcx.has_attr(def_id, sym::rustc_args_required_const) {
- bug!("reifying a fn ptr that requires const arguments");
+ span_bug!(
+ self.cur_span(),
+ "reifying a fn ptr that requires const arguments"
+ );
}
let instance = ty::Instance::resolve_for_fn_ptr(
let fn_ptr = self.memory.create_fn_alloc(FnVal::Instance(instance));
self.write_scalar(fn_ptr, dest)?;
}
- _ => bug!("reify fn pointer on {:?}", src.layout.ty),
+ _ => span_bug!(self.cur_span(), "reify fn pointer on {:?}", src.layout.ty),
}
}
// No change to value
self.write_immediate(*src, dest)?;
}
- _ => bug!("fn to unsafe fn cast on {:?}", cast_ty),
+ _ => span_bug!(self.cur_span(), "fn to unsafe fn cast on {:?}", cast_ty),
}
}
let fn_ptr = self.memory.create_fn_alloc(FnVal::Instance(instance));
self.write_scalar(fn_ptr, dest)?;
}
- _ => bug!("closure fn pointer on {:?}", src.layout.ty),
+ _ => span_bug!(self.cur_span(), "closure fn pointer on {:?}", src.layout.ty),
}
}
}
assert!(src.layout.ty.is_unsafe_ptr());
return match *src {
Immediate::ScalarPair(data, _) => Ok(data.into()),
- Immediate::Scalar(..) => bug!(
+ Immediate::Scalar(..) => span_bug!(
+ self.cur_span(),
"{:?} input to a fat-to-thin cast ({:?} -> {:?})",
*src,
src.layout.ty,
}
// Casts to bool are not permitted by rustc, no need to handle them here.
- _ => bug!("invalid int to {:?} cast", cast_ty),
+ _ => span_bug!(self.cur_span(), "invalid int to {:?} cast", cast_ty),
}
}
// float -> f64
Float(FloatTy::F64) => Scalar::from_f64(f.convert(&mut false).value),
// That's it.
- _ => bug!("invalid float to {:?} cast", dest_ty),
+ _ => span_bug!(self.cur_span(), "invalid float to {:?} cast", dest_ty),
}
}
self.write_immediate(val, dest)
}
- _ => bug!("invalid unsizing {:?} -> {:?}", src.layout.ty, cast_ty),
+ _ => {
+ span_bug!(self.cur_span(), "invalid unsizing {:?} -> {:?}", src.layout.ty, cast_ty)
+ }
}
}
assert_eq!(def_a, def_b);
if def_a.is_box() || def_b.is_box() {
if !def_a.is_box() || !def_b.is_box() {
- bug!("invalid unsizing between {:?} -> {:?}", src.layout.ty, cast_ty.ty);
+ span_bug!(
+ self.cur_span(),
+ "invalid unsizing between {:?} -> {:?}",
+ src.layout.ty,
+ cast_ty.ty
+ );
}
return self.unsize_into_ptr(
src,
}
Ok(())
}
- _ => bug!("unsize_into: invalid conversion: {:?} -> {:?}", src.layout, dest.layout),
+ _ => span_bug!(
+ self.cur_span(),
+ "unsize_into: invalid conversion: {:?} -> {:?}",
+ src.layout,
+ dest.layout
+ ),
}
}
}
if sized_size == Size::ZERO {
return Ok(None);
} else {
- bug!("Fields cannot be extern types, unless they are at offset 0")
+ span_bug!(
+ self.cur_span(),
+ "Fields cannot be extern types, unless they are at offset 0"
+ )
}
}
};
ty::Foreign(_) => Ok(None),
- _ => bug!("size_and_align_of::<{:?}> not supported", layout.ty),
+ _ => span_bug!(self.cur_span(), "size_and_align_of::<{:?}> not supported", layout.ty),
}
}
#[inline]
let bits = self.force_bits(val, layout_of.size)?;
let kind = match layout_of.abi {
Abi::Scalar(ref scalar) => scalar.value,
- _ => bug!("{} called on invalid type {:?}", intrinsic_name, ty),
+ _ => span_bug!(
+ self.cur_span(),
+ "{} called on invalid type {:?}",
+ intrinsic_name,
+ ty
+ ),
};
let (nonzero, intrinsic_name) = match intrinsic_name {
sym::cttz_nonzero => (true, sym::cttz),
if let Ok(imm) = self.try_read_immediate(op)? {
Ok(imm)
} else {
- bug!("primitive read failed for type: {:?}", op.layout.ty);
+ span_bug!(self.cur_span(), "primitive read failed for type: {:?}", op.layout.ty);
}
}
let val = if offset.bytes() == 0 { a } else { b };
Immediate::from(val)
}
- Immediate::Scalar(val) => {
- bug!("field access on non aggregate {:#?}, {:#?}", val, op.layout)
- }
+ Immediate::Scalar(val) => span_bug!(
+ self.cur_span(),
+ "field access on non aggregate {:#?}, {:#?}",
+ val,
+ op.layout
+ ),
};
Ok(OpTy { op: Operand::Immediate(immediate), layout: field_layout })
}
ty::ConstKind::Infer(..)
| ty::ConstKind::Bound(..)
| ty::ConstKind::Placeholder(..) => {
- bug!("eval_const_to_op: Unexpected ConstKind {:?}", val)
+ span_bug!(self.cur_span(), "eval_const_to_op: Unexpected ConstKind {:?}", val)
}
ty::ConstKind::Value(val_val) => val_val,
};
.discriminants(def_id, *self.tcx)
.find(|(_, var)| var.val == discr_bits)
}
- _ => bug!("tagged layout for non-adt non-generator"),
+ _ => span_bug!(self.cur_span(), "tagged layout for non-adt non-generator"),
}
.ok_or_else(|| err_ub!(InvalidTag(tag_val.erase_tag())))?;
// Return the cast value, and the index.
Le => l <= r,
Gt => l > r,
Ge => l >= r,
- _ => bug!("Invalid operation on char: {:?}", bin_op),
+ _ => span_bug!(self.cur_span(), "Invalid operation on char: {:?}", bin_op),
};
(Scalar::from_bool(res), false, self.tcx.types.bool)
}
BitAnd => l & r,
BitOr => l | r,
BitXor => l ^ r,
- _ => bug!("Invalid operation on bool: {:?}", bin_op),
+ _ => span_bug!(self.cur_span(), "Invalid operation on bool: {:?}", bin_op),
};
(Scalar::from_bool(res), false, self.tcx.types.bool)
}
Mul => ((l * r).value.into(), ty),
Div => ((l / r).value.into(), ty),
Rem => ((l % r).value.into(), ty),
- _ => bug!("invalid float op: `{:?}`", bin_op),
+ _ => span_bug!(self.cur_span(), "invalid float op: `{:?}`", bin_op),
};
(val, false, ty)
}
// For the remaining ops, the types must be the same on both sides
if left_layout.ty != right_layout.ty {
- bug!(
+ span_bug!(
+ self.cur_span(),
"invalid asymmetric binary op {:?}: {:?} ({:?}), {:?} ({:?})",
bin_op,
l,
));
}
- _ => bug!(
+ _ => span_bug!(
+ self.cur_span(),
"invalid binary op {:?}: {:?}, {:?} (both {:?})",
bin_op,
l,
M::binary_ptr_op(self, bin_op, left, right)
}
- _ => bug!("Invalid MIR: bad LHS type for binop: {:?}", left.layout.ty),
+ _ => span_bug!(
+ self.cur_span(),
+ "Invalid MIR: bad LHS type for binop: {:?}",
+ left.layout.ty
+ ),
}
}
let val = val.to_bool()?;
let res = match un_op {
Not => !val,
- _ => bug!("Invalid bool op {:?}", un_op),
+ _ => span_bug!(self.cur_span(), "Invalid bool op {:?}", un_op),
};
Ok((Scalar::from_bool(res), false, self.tcx.types.bool))
}
let res = match (un_op, fty) {
(Neg, FloatTy::F32) => Scalar::from_f32(-val.to_f32()?),
(Neg, FloatTy::F64) => Scalar::from_f64(-val.to_f64()?),
- _ => bug!("Invalid float op {:?}", un_op),
+ _ => span_bug!(self.cur_span(), "Invalid float op {:?}", un_op),
};
Ok((res, false, layout.ty))
}
ty::FnDef(..) => instance_ty.fn_sig(*self.tcx).abi(),
ty::Closure(..) => Abi::RustCall,
ty::Generator(..) => Abi::Rust,
- _ => bug!("unexpected callee ty: {:?}", instance_ty),
+ _ => span_bug!(self.cur_span(), "unexpected callee ty: {:?}", instance_ty),
}
};
let normalize_abi = |abi| match abi {