Commit cd2c8601 authored by Ng Zhi An's avatar Ng Zhi An Committed by Commit Bot

Pull safe_conversions from chromium

Change-Id: I3d62b93d5a643c06626b34a8d69b09a7d50ec439
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2491382Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
Reviewed-by: 's avatarClemens Backes <clemensb@chromium.org>
Commit-Queue: Zhi An Ng <zhin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#70745}
parent 9a02964a
...@@ -357,9 +357,17 @@ struct DstRangeRelationToSrcRangeImpl< ...@@ -357,9 +357,17 @@ struct DstRangeRelationToSrcRangeImpl<
using SrcLimits = std::numeric_limits<Src>; using SrcLimits = std::numeric_limits<Src>;
using DstLimits = NarrowingRange<Dst, Src, Bounds>; using DstLimits = NarrowingRange<Dst, Src, Bounds>;
using Promotion = decltype(Src() + Dst()); using Promotion = decltype(Src() + Dst());
bool ge_zero = false;
// Converting floating-point to integer will discard fractional part, so
// values in (-1.0, -0.0) will truncate to 0 and fit in Dst.
if (std::is_floating_point<Src>::value) {
ge_zero = value > Src(-1);
} else {
ge_zero = value >= Src(0);
}
return RangeCheck( return RangeCheck(
value >= Src(0) && (DstLimits::lowest() == 0 || ge_zero && (DstLimits::lowest() == 0 ||
static_cast<Dst>(value) >= DstLimits::lowest()), static_cast<Dst>(value) >= DstLimits::lowest()),
static_cast<Promotion>(SrcLimits::max()) <= static_cast<Promotion>(SrcLimits::max()) <=
static_cast<Promotion>(DstLimits::max()) || static_cast<Promotion>(DstLimits::max()) ||
static_cast<Promotion>(value) <= static_cast<Promotion>(value) <=
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment