NFC: Fix -Wsign-compare warnings on 32-bit builds

Comparing 32-bit `ptrdiff_t` against 32-bit `unsigned` results in
`-Wsign-compare` warnings for both GCC and Clang.

The warning for the cases in question appear to identify an issue
where the `ptrdiff_t` value would be mutated via conversion to an
unsigned type.

The warning is resolved by using the usual arithmetic conversions to
safely preserve the value of the `unsigned` operand while trying to
convert to a signed type. Host platforms where `unsigned` has the same
width as `unsigned long long` will need to make a different change, but
using an explicit cast has disadvantages that can be avoided for now.

Reviewed By: dantrushin

Differential Revision: https://reviews.llvm.org/D89612
This commit is contained in:
Hubert Tong 2020-10-20 20:50:38 -04:00
parent 15e772e8dc
commit 134ffa8138
2 changed files with 4 additions and 4 deletions

View File

@ -2186,9 +2186,9 @@ void ASTStmtReader::VisitRecoveryExpr(RecoveryExpr *E) {
unsigned NumArgs = Record.readInt();
E->BeginLoc = readSourceLocation();
E->EndLoc = readSourceLocation();
assert(
(NumArgs == std::distance(E->children().begin(), E->children().end())) &&
"Wrong NumArgs!");
assert((NumArgs + 0LL ==
std::distance(E->children().begin(), E->children().end())) &&
"Wrong NumArgs!");
(void)NumArgs;
for (Stmt *&Child : E->children())
Child = Record.readSubStmt();

View File

@ -401,7 +401,7 @@ void StackMaps::parseStatepointOpers(const MachineInstr &MI,
SmallVector<unsigned, 8> GCPtrIndices;
unsigned GCPtrIdx = (unsigned)SO.getFirstGCPtrIdx();
assert((int)GCPtrIdx != -1);
assert(MOI - MI.operands_begin() == GCPtrIdx);
assert(MOI - MI.operands_begin() == GCPtrIdx + 0LL);
while (NumGCPointers--) {
GCPtrIndices.push_back(GCPtrIdx);
GCPtrIdx = StackMaps::getNextMetaArgIdx(&MI, GCPtrIdx);