[flang-commits] [flang] c531171 - Fix invalid overflow check in flang
via flang-commits
flang-commits at lists.llvm.org
Wed Mar 30 07:47:47 PDT 2022
Author: serge-sans-paille
Date: 2022-03-30T16:47:33+02:00
New Revision: c531171d995728f55e5775d354a21dceed03edce
URL: https://github.com/llvm/llvm-project/commit/c531171d995728f55e5775d354a21dceed03edce
DIFF: https://github.com/llvm/llvm-project/commit/c531171d995728f55e5775d354a21dceed03edce.diff
LOG: Fix invalid overflow check in flang
Statically checking for overflow with
if constexpr (sizeof(std::size_t) <= sizeof(std::int64_t)) {
return static_cast<std::int64_t>(length);
}
Doesn't work if `sizeof(std::size_t) == sizeof(std::int64_t)` because std::size_t
is unsigned.
if `length == std::numeric_limits<size_t>` casting it to `int64_t` is going to overflow.
This code would be much simpler if returning a `uint64_t` instead of a signed
value...
Differential Revision: https://reviews.llvm.org/D122705
Added:
Modified:
flang/runtime/command.cpp
Removed:
################################################################################
diff --git a/flang/runtime/command.cpp b/flang/runtime/command.cpp
index 311107ee7dfad..fe54da2e6d68b 100644
--- a/flang/runtime/command.cpp
+++ b/flang/runtime/command.cpp
@@ -28,7 +28,7 @@ std::int32_t RTNAME(ArgumentCount)() {
// Returns the length of the \p string. Assumes \p string is valid.
static std::int64_t StringLength(const char *string) {
std::size_t length{std::strlen(string)};
- if constexpr (sizeof(std::size_t) <= sizeof(std::int64_t)) {
+ if constexpr (sizeof(std::size_t) < sizeof(std::int64_t)) {
return static_cast<std::int64_t>(length);
} else {
std::size_t max{std::numeric_limits<std::int64_t>::max()};
More information about the flang-commits
mailing list