mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 16:24:46 +00:00
Rollup merge of #63642 - eddyb:wrap-it-up, r=rkruppe,Mark-Simulacrum
Rename overflowing_{add,sub,mul} intrinsics to wrapping_{add,sub,mul}. These confused @Gankra, and then, also me, especially since `overflowing_*` *methods* also exist, but they map to `*_with_overflow` intrinsics! r? @oli-obk / @nikomatsakis cc @Mark-Simulacrum (on the rustbuild workaround)
This commit is contained in:
commit
e8fb78bf6c
@ -102,8 +102,13 @@ fn main() {
|
||||
// FIXME: the fact that core here is excluded is due to core_arch from our stdarch submodule
|
||||
// being broken on the beta compiler with bootstrap passed, so this is a temporary workaround
|
||||
// (we've just snapped, so there are no cfg(bootstrap) related annotations in core).
|
||||
if stage == "0" && crate_name != Some("core") {
|
||||
cmd.arg("--cfg").arg("bootstrap");
|
||||
if stage == "0" {
|
||||
if crate_name != Some("core") {
|
||||
cmd.arg("--cfg").arg("bootstrap");
|
||||
} else {
|
||||
// NOTE(eddyb) see FIXME above, except now we need annotations again in core.
|
||||
cmd.arg("--cfg").arg("boostrap_stdarch_ignore_this");
|
||||
}
|
||||
}
|
||||
|
||||
// Print backtrace in case of ICE
|
||||
|
@ -1293,18 +1293,40 @@ extern "rust-intrinsic" {
|
||||
/// The stabilized versions of this intrinsic are available on the integer
|
||||
/// primitives via the `wrapping_add` method. For example,
|
||||
/// [`std::u32::wrapping_add`](../../std/primitive.u32.html#method.wrapping_add)
|
||||
#[cfg(boostrap_stdarch_ignore_this)]
|
||||
pub fn overflowing_add<T>(a: T, b: T) -> T;
|
||||
/// Returns (a - b) mod 2<sup>N</sup>, where N is the width of T in bits.
|
||||
/// The stabilized versions of this intrinsic are available on the integer
|
||||
/// primitives via the `wrapping_sub` method. For example,
|
||||
/// [`std::u32::wrapping_sub`](../../std/primitive.u32.html#method.wrapping_sub)
|
||||
#[cfg(boostrap_stdarch_ignore_this)]
|
||||
pub fn overflowing_sub<T>(a: T, b: T) -> T;
|
||||
/// Returns (a * b) mod 2<sup>N</sup>, where N is the width of T in bits.
|
||||
/// The stabilized versions of this intrinsic are available on the integer
|
||||
/// primitives via the `wrapping_mul` method. For example,
|
||||
/// [`std::u32::wrapping_mul`](../../std/primitive.u32.html#method.wrapping_mul)
|
||||
#[cfg(boostrap_stdarch_ignore_this)]
|
||||
pub fn overflowing_mul<T>(a: T, b: T) -> T;
|
||||
|
||||
/// Returns (a + b) mod 2<sup>N</sup>, where N is the width of T in bits.
|
||||
/// The stabilized versions of this intrinsic are available on the integer
|
||||
/// primitives via the `wrapping_add` method. For example,
|
||||
/// [`std::u32::wrapping_add`](../../std/primitive.u32.html#method.wrapping_add)
|
||||
#[cfg(not(boostrap_stdarch_ignore_this))]
|
||||
pub fn wrapping_add<T>(a: T, b: T) -> T;
|
||||
/// Returns (a - b) mod 2<sup>N</sup>, where N is the width of T in bits.
|
||||
/// The stabilized versions of this intrinsic are available on the integer
|
||||
/// primitives via the `wrapping_sub` method. For example,
|
||||
/// [`std::u32::wrapping_sub`](../../std/primitive.u32.html#method.wrapping_sub)
|
||||
#[cfg(not(boostrap_stdarch_ignore_this))]
|
||||
pub fn wrapping_sub<T>(a: T, b: T) -> T;
|
||||
/// Returns (a * b) mod 2<sup>N</sup>, where N is the width of T in bits.
|
||||
/// The stabilized versions of this intrinsic are available on the integer
|
||||
/// primitives via the `wrapping_mul` method. For example,
|
||||
/// [`std::u32::wrapping_mul`](../../std/primitive.u32.html#method.wrapping_mul)
|
||||
#[cfg(not(boostrap_stdarch_ignore_this))]
|
||||
pub fn wrapping_mul<T>(a: T, b: T) -> T;
|
||||
|
||||
/// Computes `a + b`, while saturating at numeric bounds.
|
||||
/// The stabilized versions of this intrinsic are available on the integer
|
||||
/// primitives via the `saturating_add` method. For example,
|
||||
|
@ -1112,7 +1112,13 @@ $EndFeature, "
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
pub const fn wrapping_add(self, rhs: Self) -> Self {
|
||||
intrinsics::overflowing_add(self, rhs)
|
||||
#[cfg(boostrap_stdarch_ignore_this)] {
|
||||
intrinsics::overflowing_add(self, rhs)
|
||||
}
|
||||
|
||||
#[cfg(not(boostrap_stdarch_ignore_this))] {
|
||||
intrinsics::wrapping_add(self, rhs)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1135,7 +1141,13 @@ $EndFeature, "
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
pub const fn wrapping_sub(self, rhs: Self) -> Self {
|
||||
intrinsics::overflowing_sub(self, rhs)
|
||||
#[cfg(boostrap_stdarch_ignore_this)] {
|
||||
intrinsics::overflowing_sub(self, rhs)
|
||||
}
|
||||
|
||||
#[cfg(not(boostrap_stdarch_ignore_this))] {
|
||||
intrinsics::wrapping_sub(self, rhs)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1157,7 +1169,13 @@ $EndFeature, "
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
pub const fn wrapping_mul(self, rhs: Self) -> Self {
|
||||
intrinsics::overflowing_mul(self, rhs)
|
||||
#[cfg(boostrap_stdarch_ignore_this)] {
|
||||
intrinsics::overflowing_mul(self, rhs)
|
||||
}
|
||||
|
||||
#[cfg(not(boostrap_stdarch_ignore_this))] {
|
||||
intrinsics::wrapping_mul(self, rhs)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -3031,7 +3049,13 @@ $EndFeature, "
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
pub const fn wrapping_add(self, rhs: Self) -> Self {
|
||||
intrinsics::overflowing_add(self, rhs)
|
||||
#[cfg(boostrap_stdarch_ignore_this)] {
|
||||
intrinsics::overflowing_add(self, rhs)
|
||||
}
|
||||
|
||||
#[cfg(not(boostrap_stdarch_ignore_this))] {
|
||||
intrinsics::wrapping_add(self, rhs)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -3053,7 +3077,13 @@ $EndFeature, "
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
pub const fn wrapping_sub(self, rhs: Self) -> Self {
|
||||
intrinsics::overflowing_sub(self, rhs)
|
||||
#[cfg(boostrap_stdarch_ignore_this)] {
|
||||
intrinsics::overflowing_sub(self, rhs)
|
||||
}
|
||||
|
||||
#[cfg(not(boostrap_stdarch_ignore_this))] {
|
||||
intrinsics::wrapping_sub(self, rhs)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -3076,7 +3106,13 @@ $EndFeature, "
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
pub const fn wrapping_mul(self, rhs: Self) -> Self {
|
||||
intrinsics::overflowing_mul(self, rhs)
|
||||
#[cfg(boostrap_stdarch_ignore_this)] {
|
||||
intrinsics::overflowing_mul(self, rhs)
|
||||
}
|
||||
|
||||
#[cfg(not(boostrap_stdarch_ignore_this))] {
|
||||
intrinsics::wrapping_mul(self, rhs)
|
||||
}
|
||||
}
|
||||
|
||||
doc_comment! {
|
||||
|
@ -328,7 +328,7 @@ impl IntrinsicCallMethods<'tcx> for Builder<'a, 'll, 'tcx> {
|
||||
},
|
||||
"ctlz" | "ctlz_nonzero" | "cttz" | "cttz_nonzero" | "ctpop" | "bswap" |
|
||||
"bitreverse" | "add_with_overflow" | "sub_with_overflow" |
|
||||
"mul_with_overflow" | "overflowing_add" | "overflowing_sub" | "overflowing_mul" |
|
||||
"mul_with_overflow" | "wrapping_add" | "wrapping_sub" | "wrapping_mul" |
|
||||
"unchecked_div" | "unchecked_rem" | "unchecked_shl" | "unchecked_shr" |
|
||||
"unchecked_add" | "unchecked_sub" | "unchecked_mul" | "exact_div" |
|
||||
"rotate_left" | "rotate_right" | "saturating_add" | "saturating_sub" => {
|
||||
@ -398,9 +398,9 @@ impl IntrinsicCallMethods<'tcx> for Builder<'a, 'll, 'tcx> {
|
||||
|
||||
return;
|
||||
},
|
||||
"overflowing_add" => self.add(args[0].immediate(), args[1].immediate()),
|
||||
"overflowing_sub" => self.sub(args[0].immediate(), args[1].immediate()),
|
||||
"overflowing_mul" => self.mul(args[0].immediate(), args[1].immediate()),
|
||||
"wrapping_add" => self.add(args[0].immediate(), args[1].immediate()),
|
||||
"wrapping_sub" => self.sub(args[0].immediate(), args[1].immediate()),
|
||||
"wrapping_mul" => self.mul(args[0].immediate(), args[1].immediate()),
|
||||
"exact_div" =>
|
||||
if signed {
|
||||
self.exactsdiv(args[0].immediate(), args[1].immediate())
|
||||
|
@ -110,18 +110,18 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
||||
};
|
||||
self.write_scalar(out_val, dest)?;
|
||||
}
|
||||
| "overflowing_add"
|
||||
| "overflowing_sub"
|
||||
| "overflowing_mul"
|
||||
| "wrapping_add"
|
||||
| "wrapping_sub"
|
||||
| "wrapping_mul"
|
||||
| "add_with_overflow"
|
||||
| "sub_with_overflow"
|
||||
| "mul_with_overflow" => {
|
||||
let lhs = self.read_immediate(args[0])?;
|
||||
let rhs = self.read_immediate(args[1])?;
|
||||
let (bin_op, ignore_overflow) = match intrinsic_name {
|
||||
"overflowing_add" => (BinOp::Add, true),
|
||||
"overflowing_sub" => (BinOp::Sub, true),
|
||||
"overflowing_mul" => (BinOp::Mul, true),
|
||||
"wrapping_add" => (BinOp::Add, true),
|
||||
"wrapping_sub" => (BinOp::Sub, true),
|
||||
"wrapping_mul" => (BinOp::Mul, true),
|
||||
"add_with_overflow" => (BinOp::Add, false),
|
||||
"sub_with_overflow" => (BinOp::Sub, false),
|
||||
"mul_with_overflow" => (BinOp::Mul, false),
|
||||
|
@ -537,9 +537,9 @@ impl Qualif for IsNotPromotable {
|
||||
| "cttz_nonzero"
|
||||
| "ctlz"
|
||||
| "ctlz_nonzero"
|
||||
| "overflowing_add"
|
||||
| "overflowing_sub"
|
||||
| "overflowing_mul"
|
||||
| "wrapping_add"
|
||||
| "wrapping_sub"
|
||||
| "wrapping_mul"
|
||||
| "unchecked_shl"
|
||||
| "unchecked_shr"
|
||||
| "rotate_left"
|
||||
|
@ -379,9 +379,9 @@ fn is_intrinsic_whitelisted(tcx: TyCtxt<'tcx>, def_id: DefId) -> bool {
|
||||
| "add_with_overflow" // ~> .overflowing_add
|
||||
| "sub_with_overflow" // ~> .overflowing_sub
|
||||
| "mul_with_overflow" // ~> .overflowing_mul
|
||||
| "overflowing_add" // ~> .wrapping_add
|
||||
| "overflowing_sub" // ~> .wrapping_sub
|
||||
| "overflowing_mul" // ~> .wrapping_mul
|
||||
| "wrapping_add" // ~> .wrapping_add
|
||||
| "wrapping_sub" // ~> .wrapping_sub
|
||||
| "wrapping_mul" // ~> .wrapping_mul
|
||||
| "saturating_add" // ~> .saturating_add
|
||||
| "saturating_sub" // ~> .saturating_sub
|
||||
| "unchecked_shl" // ~> .wrapping_shl
|
||||
|
@ -67,7 +67,7 @@ pub fn intrisic_operation_unsafety(intrinsic: &str) -> hir::Unsafety {
|
||||
match intrinsic {
|
||||
"size_of" | "min_align_of" | "needs_drop" |
|
||||
"add_with_overflow" | "sub_with_overflow" | "mul_with_overflow" |
|
||||
"overflowing_add" | "overflowing_sub" | "overflowing_mul" |
|
||||
"wrapping_add" | "wrapping_sub" | "wrapping_mul" |
|
||||
"saturating_add" | "saturating_sub" |
|
||||
"rotate_left" | "rotate_right" |
|
||||
"ctpop" | "ctlz" | "cttz" | "bswap" | "bitreverse" |
|
||||
@ -314,7 +314,7 @@ pub fn check_intrinsic_type(tcx: TyCtxt<'_>, it: &hir::ForeignItem) {
|
||||
(1, vec![param(0), param(0)], param(0)),
|
||||
"unchecked_add" | "unchecked_sub" | "unchecked_mul" =>
|
||||
(1, vec![param(0), param(0)], param(0)),
|
||||
"overflowing_add" | "overflowing_sub" | "overflowing_mul" =>
|
||||
"wrapping_add" | "wrapping_sub" | "wrapping_mul" =>
|
||||
(1, vec![param(0), param(0)], param(0)),
|
||||
"saturating_add" | "saturating_sub" =>
|
||||
(1, vec![param(0), param(0)], param(0)),
|
||||
|
Loading…
Reference in New Issue
Block a user