Ver código fonte

Switched variable type from int to uint64_t in ConsumeDecimalNumber.

An Android test was occasionally crashing with a SEGV in ConsumeDecimalNumber
Switching a local variable from an int to uint64_t eliminated these crashes.
Speculating this is either a compiler, runtime library, or emulator issue.

Switching this type to uint64_t also eliminates a compiler warning
about comparing an int with a uint64_t.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=166399695
ld
cmumford 7 anos atrás
committed by Victor Costan
pai
commit
09a3c8e741
1 arquivos alterados com 2 adições e 1 exclusões
  1. +2
    -1
      util/logging.cc

+ 2
- 1
util/logging.cc Ver arquivo

@ -52,7 +52,8 @@ bool ConsumeDecimalNumber(Slice* in, uint64_t* val) {
char c = (*in)[0]; char c = (*in)[0];
if (c >= '0' && c <= '9') { if (c >= '0' && c <= '9') {
++digits; ++digits;
const int delta = (c - '0');
// |delta| intentionally unit64_t to avoid Android crash (see log).
const uint64_t delta = (c - '0');
static const uint64_t kMaxUint64 = ~static_cast<uint64_t>(0); static const uint64_t kMaxUint64 = ~static_cast<uint64_t>(0);
if (v > kMaxUint64/10 || if (v > kMaxUint64/10 ||
(v == kMaxUint64/10 && delta > kMaxUint64%10)) { (v == kMaxUint64/10 && delta > kMaxUint64%10)) {

Carregando…
Cancelar
Salvar