Summary:
UBSan buildbot caught an undefined behavior in itostr with INT64_MIN.
The negation cannot be represented in the promoted operand (long long).
Negation is well defined on unsigned value though so this commit does
the negation after the static cast.
Reviewers: jhenderson, chandlerc, lattner
Reviewed By: lattner
Subscribers: dexonsmith, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D82200
inline std::string itostr(int64_t X) {
if (X < 0)
- return utostr(static_cast<uint64_t>(-X), true);
+ return utostr(-static_cast<uint64_t>(X), true);
else
return utostr(static_cast<uint64_t>(X));
}