mirror of
https://github.com/abseil/abseil-cpp.git
synced 2026-06-04 12:07:05 +08:00
Fix "unsafe narrowing" warnings in absl, 2/n.
Addresses failures with the following, in some files: -Wshorten-64-to-32 -Wimplicit-int-conversion -Wsign-compare -Wsign-conversion -Wtautological-unsigned-zero-compare (This specific CL focuses on .cc files in dirs a-h.) Bug: chromium:1292951 PiperOrigin-RevId: 464541951 Change-Id: If23b63ccea8e9b730159ff1c7288e9300a40b6bd
This commit is contained in:
committed by
Copybara-Service
parent
dc370a8246
commit
16af2bbcb9
@@ -364,7 +364,7 @@ LowLevelAlloc::Arena::Arena(uint32_t flags_value)
|
||||
}
|
||||
|
||||
// L < meta_data_arena->mu
|
||||
LowLevelAlloc::Arena *LowLevelAlloc::NewArena(int32_t flags) {
|
||||
LowLevelAlloc::Arena *LowLevelAlloc::NewArena(uint32_t flags) {
|
||||
Arena *meta_data_arena = DefaultArena();
|
||||
#ifndef ABSL_LOW_LEVEL_ALLOC_ASYNC_SIGNAL_SAFE_MISSING
|
||||
if ((flags & LowLevelAlloc::kAsyncSignalSafe) != 0) {
|
||||
|
||||
@@ -103,7 +103,7 @@ class LowLevelAlloc {
|
||||
// the provided flags. For example, the call NewArena(kAsyncSignalSafe)
|
||||
// is itself async-signal-safe, as well as generatating an arena that provides
|
||||
// async-signal-safe Alloc/Free.
|
||||
static Arena *NewArena(int32_t flags);
|
||||
static Arena *NewArena(uint32_t flags);
|
||||
|
||||
// Destroys an arena allocated by NewArena and returns true,
|
||||
// provided no allocated blocks remain in the arena.
|
||||
|
||||
@@ -89,12 +89,14 @@ constexpr char kTruncated[] = " ... (message truncated)\n";
|
||||
bool VADoRawLog(char** buf, int* size, const char* format, va_list ap)
|
||||
ABSL_PRINTF_ATTRIBUTE(3, 0);
|
||||
bool VADoRawLog(char** buf, int* size, const char* format, va_list ap) {
|
||||
int n = vsnprintf(*buf, *size, format, ap);
|
||||
if (*size < 0)
|
||||
return false;
|
||||
int n = vsnprintf(*buf, static_cast<size_t>(*size), format, ap);
|
||||
bool result = true;
|
||||
if (n < 0 || n > *size) {
|
||||
result = false;
|
||||
if (static_cast<size_t>(*size) > sizeof(kTruncated)) {
|
||||
n = *size - sizeof(kTruncated); // room for truncation message
|
||||
n = *size - static_cast<int>(sizeof(kTruncated));
|
||||
} else {
|
||||
n = 0; // no room for truncation message
|
||||
}
|
||||
@@ -116,9 +118,11 @@ constexpr int kLogBufSize = 3000;
|
||||
bool DoRawLog(char** buf, int* size, const char* format, ...)
|
||||
ABSL_PRINTF_ATTRIBUTE(3, 4);
|
||||
bool DoRawLog(char** buf, int* size, const char* format, ...) {
|
||||
if (*size < 0)
|
||||
return false;
|
||||
va_list ap;
|
||||
va_start(ap, format);
|
||||
int n = vsnprintf(*buf, *size, format, ap);
|
||||
int n = vsnprintf(*buf, static_cast<size_t>(*size), format, ap);
|
||||
va_end(ap);
|
||||
if (n < 0 || n > *size) return false;
|
||||
*size -= n;
|
||||
@@ -206,7 +210,7 @@ void AsyncSignalSafeWriteToStderr(const char* s, size_t len) {
|
||||
#elif defined(ABSL_HAVE_POSIX_WRITE)
|
||||
write(STDERR_FILENO, s, len);
|
||||
#elif defined(ABSL_HAVE_RAW_IO)
|
||||
_write(/* stderr */ 2, s, len);
|
||||
_write(/* stderr */ 2, s, static_cast<unsigned>(len));
|
||||
#else
|
||||
// stderr logging unsupported on this platform
|
||||
(void) s;
|
||||
|
||||
@@ -66,8 +66,8 @@ constexpr int kSysNerr = 135;
|
||||
|
||||
std::array<std::string, kSysNerr>* NewStrErrorTable() {
|
||||
auto* table = new std::array<std::string, kSysNerr>;
|
||||
for (int i = 0; i < static_cast<int>(table->size()); ++i) {
|
||||
(*table)[i] = StrErrorInternal(i);
|
||||
for (size_t i = 0; i < table->size(); ++i) {
|
||||
(*table)[i] = StrErrorInternal(static_cast<int>(i));
|
||||
}
|
||||
return table;
|
||||
}
|
||||
@@ -77,8 +77,8 @@ std::array<std::string, kSysNerr>* NewStrErrorTable() {
|
||||
std::string StrError(int errnum) {
|
||||
absl::base_internal::ErrnoSaver errno_saver;
|
||||
static const auto* table = NewStrErrorTable();
|
||||
if (errnum >= 0 && errnum < static_cast<int>(table->size())) {
|
||||
return (*table)[errnum];
|
||||
if (errnum >= 0 && static_cast<size_t>(errnum) < table->size()) {
|
||||
return (*table)[static_cast<size_t>(errnum)];
|
||||
}
|
||||
return StrErrorInternal(errnum);
|
||||
}
|
||||
|
||||
@@ -117,7 +117,7 @@ int Win32NumCPUs() {
|
||||
}
|
||||
}
|
||||
free(info);
|
||||
return logicalProcessorCount;
|
||||
return static_cast<int>(logicalProcessorCount);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -128,7 +128,7 @@ static int GetNumCPUs() {
|
||||
#if defined(__myriad2__)
|
||||
return 1;
|
||||
#elif defined(_WIN32)
|
||||
const unsigned hardware_concurrency = Win32NumCPUs();
|
||||
const int hardware_concurrency = Win32NumCPUs();
|
||||
return hardware_concurrency ? hardware_concurrency : 1;
|
||||
#elif defined(_AIX)
|
||||
return sysconf(_SC_NPROCESSORS_ONLN);
|
||||
|
||||
@@ -291,7 +291,7 @@ static void WriteFailureInfo(int signo, void* ucontext, int cpu,
|
||||
// some platforms.
|
||||
static void PortableSleepForSeconds(int seconds) {
|
||||
#ifdef _WIN32
|
||||
Sleep(seconds * 1000);
|
||||
Sleep(static_cast<DWORD>(seconds * 1000));
|
||||
#else
|
||||
struct timespec sleep_time;
|
||||
sleep_time.tv_sec = seconds;
|
||||
@@ -325,9 +325,9 @@ static void AbslFailureSignalHandler(int signo, siginfo_t*, void* ucontext) {
|
||||
|
||||
const GetTidType this_tid = absl::base_internal::GetTID();
|
||||
GetTidType previous_failed_tid = 0;
|
||||
if (!failed_tid.compare_exchange_strong(
|
||||
previous_failed_tid, static_cast<intptr_t>(this_tid),
|
||||
std::memory_order_acq_rel, std::memory_order_relaxed)) {
|
||||
if (!failed_tid.compare_exchange_strong(previous_failed_tid, this_tid,
|
||||
std::memory_order_acq_rel,
|
||||
std::memory_order_relaxed)) {
|
||||
ABSL_RAW_LOG(
|
||||
ERROR,
|
||||
"Signal %d raised at PC=%p while already in AbslFailureSignalHandler()",
|
||||
|
||||
@@ -151,12 +151,12 @@ static const AbbrevPair kSubstitutionList[] = {
|
||||
// State needed for demangling. This struct is copied in almost every stack
|
||||
// frame, so every byte counts.
|
||||
typedef struct {
|
||||
int mangled_idx; // Cursor of mangled name.
|
||||
int out_cur_idx; // Cursor of output string.
|
||||
int prev_name_idx; // For constructors/destructors.
|
||||
signed int prev_name_length : 16; // For constructors/destructors.
|
||||
signed int nest_level : 15; // For nested names.
|
||||
unsigned int append : 1; // Append flag.
|
||||
int mangled_idx; // Cursor of mangled name.
|
||||
int out_cur_idx; // Cursor of output string.
|
||||
int prev_name_idx; // For constructors/destructors.
|
||||
unsigned int prev_name_length : 16; // For constructors/destructors.
|
||||
signed int nest_level : 15; // For nested names.
|
||||
unsigned int append : 1; // Append flag.
|
||||
// Note: for some reason MSVC can't pack "bool append : 1" into the same int
|
||||
// with the above two fields, so we use an int instead. Amusingly it can pack
|
||||
// "signed bool" as expected, but relying on that to continue to be a legal
|
||||
@@ -235,8 +235,8 @@ static size_t StrLen(const char *str) {
|
||||
}
|
||||
|
||||
// Returns true if "str" has at least "n" characters remaining.
|
||||
static bool AtLeastNumCharsRemaining(const char *str, int n) {
|
||||
for (int i = 0; i < n; ++i) {
|
||||
static bool AtLeastNumCharsRemaining(const char *str, size_t n) {
|
||||
for (size_t i = 0; i < n; ++i) {
|
||||
if (str[i] == '\0') {
|
||||
return false;
|
||||
}
|
||||
@@ -264,7 +264,7 @@ static void InitState(State *state, const char *mangled, char *out,
|
||||
state->parse_state.mangled_idx = 0;
|
||||
state->parse_state.out_cur_idx = 0;
|
||||
state->parse_state.prev_name_idx = 0;
|
||||
state->parse_state.prev_name_length = -1;
|
||||
state->parse_state.prev_name_length = 0;
|
||||
state->parse_state.nest_level = -1;
|
||||
state->parse_state.append = true;
|
||||
}
|
||||
@@ -356,8 +356,8 @@ static bool ZeroOrMore(ParseFunc parse_func, State *state) {
|
||||
// Append "str" at "out_cur_idx". If there is an overflow, out_cur_idx is
|
||||
// set to out_end_idx+1. The output string is ensured to
|
||||
// always terminate with '\0' as long as there is no overflow.
|
||||
static void Append(State *state, const char *const str, const int length) {
|
||||
for (int i = 0; i < length; ++i) {
|
||||
static void Append(State *state, const char *const str, const size_t length) {
|
||||
for (size_t i = 0; i < length; ++i) {
|
||||
if (state->parse_state.out_cur_idx + 1 <
|
||||
state->out_end_idx) { // +1 for '\0'
|
||||
state->out[state->parse_state.out_cur_idx++] = str[i];
|
||||
@@ -420,7 +420,7 @@ static bool EndsWith(State *state, const char chr) {
|
||||
|
||||
// Append "str" with some tweaks, iff "append" state is true.
|
||||
static void MaybeAppendWithLength(State *state, const char *const str,
|
||||
const int length) {
|
||||
const size_t length) {
|
||||
if (state->parse_state.append && length > 0) {
|
||||
// Append a space if the output buffer ends with '<' and "str"
|
||||
// starts with '<' to avoid <<<.
|
||||
@@ -432,14 +432,14 @@ static void MaybeAppendWithLength(State *state, const char *const str,
|
||||
if (state->parse_state.out_cur_idx < state->out_end_idx &&
|
||||
(IsAlpha(str[0]) || str[0] == '_')) {
|
||||
state->parse_state.prev_name_idx = state->parse_state.out_cur_idx;
|
||||
state->parse_state.prev_name_length = length;
|
||||
state->parse_state.prev_name_length = static_cast<unsigned int>(length);
|
||||
}
|
||||
Append(state, str, length);
|
||||
}
|
||||
}
|
||||
|
||||
// Appends a positive decimal number to the output if appending is enabled.
|
||||
static bool MaybeAppendDecimal(State *state, unsigned int val) {
|
||||
static bool MaybeAppendDecimal(State *state, int val) {
|
||||
// Max {32-64}-bit unsigned int is 20 digits.
|
||||
constexpr size_t kMaxLength = 20;
|
||||
char buf[kMaxLength];
|
||||
@@ -456,7 +456,7 @@ static bool MaybeAppendDecimal(State *state, unsigned int val) {
|
||||
} while (p > buf && val != 0);
|
||||
|
||||
// 'p' landed on the last character we set. How convenient.
|
||||
Append(state, p, kMaxLength - (p - buf));
|
||||
Append(state, p, kMaxLength - static_cast<size_t>(p - buf));
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -466,7 +466,7 @@ static bool MaybeAppendDecimal(State *state, unsigned int val) {
|
||||
// Returns true so that it can be placed in "if" conditions.
|
||||
static bool MaybeAppend(State *state, const char *const str) {
|
||||
if (state->parse_state.append) {
|
||||
int length = StrLen(str);
|
||||
size_t length = StrLen(str);
|
||||
MaybeAppendWithLength(state, str, length);
|
||||
}
|
||||
return true;
|
||||
@@ -521,10 +521,10 @@ static void MaybeCancelLastSeparator(State *state) {
|
||||
|
||||
// Returns true if the identifier of the given length pointed to by
|
||||
// "mangled_cur" is anonymous namespace.
|
||||
static bool IdentifierIsAnonymousNamespace(State *state, int length) {
|
||||
static bool IdentifierIsAnonymousNamespace(State *state, size_t length) {
|
||||
// Returns true if "anon_prefix" is a proper prefix of "mangled_cur".
|
||||
static const char anon_prefix[] = "_GLOBAL__N_";
|
||||
return (length > static_cast<int>(sizeof(anon_prefix) - 1) &&
|
||||
return (length > (sizeof(anon_prefix) - 1) &&
|
||||
StrPrefix(RemainingInput(state), anon_prefix));
|
||||
}
|
||||
|
||||
@@ -542,7 +542,7 @@ static bool ParseUnnamedTypeName(State *state);
|
||||
static bool ParseNumber(State *state, int *number_out);
|
||||
static bool ParseFloatNumber(State *state);
|
||||
static bool ParseSeqId(State *state);
|
||||
static bool ParseIdentifier(State *state, int length);
|
||||
static bool ParseIdentifier(State *state, size_t length);
|
||||
static bool ParseOperatorName(State *state, int *arity);
|
||||
static bool ParseSpecialName(State *state);
|
||||
static bool ParseCallOffset(State *state);
|
||||
@@ -786,7 +786,8 @@ static bool ParseSourceName(State *state) {
|
||||
if (guard.IsTooComplex()) return false;
|
||||
ParseState copy = state->parse_state;
|
||||
int length = -1;
|
||||
if (ParseNumber(state, &length) && ParseIdentifier(state, length)) {
|
||||
if (ParseNumber(state, &length) &&
|
||||
ParseIdentifier(state, static_cast<size_t>(length))) {
|
||||
return true;
|
||||
}
|
||||
state->parse_state = copy;
|
||||
@@ -864,7 +865,7 @@ static bool ParseNumber(State *state, int *number_out) {
|
||||
uint64_t number = 0;
|
||||
for (; *p != '\0'; ++p) {
|
||||
if (IsDigit(*p)) {
|
||||
number = number * 10 + (*p - '0');
|
||||
number = number * 10 + static_cast<uint64_t>(*p - '0');
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
@@ -879,7 +880,7 @@ static bool ParseNumber(State *state, int *number_out) {
|
||||
state->parse_state.mangled_idx += p - RemainingInput(state);
|
||||
if (number_out != nullptr) {
|
||||
// Note: possibly truncate "number".
|
||||
*number_out = number;
|
||||
*number_out = static_cast<int>(number);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -923,10 +924,10 @@ static bool ParseSeqId(State *state) {
|
||||
}
|
||||
|
||||
// <identifier> ::= <unqualified source code identifier> (of given length)
|
||||
static bool ParseIdentifier(State *state, int length) {
|
||||
static bool ParseIdentifier(State *state, size_t length) {
|
||||
ComplexityGuard guard(state);
|
||||
if (guard.IsTooComplex()) return false;
|
||||
if (length < 0 || !AtLeastNumCharsRemaining(RemainingInput(state), length)) {
|
||||
if (!AtLeastNumCharsRemaining(RemainingInput(state), length)) {
|
||||
return false;
|
||||
}
|
||||
if (IdentifierIsAnonymousNamespace(state, length)) {
|
||||
|
||||
@@ -278,13 +278,14 @@ void DumpStackTrace(int min_dropped_frames, int max_num_frames,
|
||||
void* stack_buf[kDefaultDumpStackFramesLimit];
|
||||
void** stack = stack_buf;
|
||||
int num_stack = kDefaultDumpStackFramesLimit;
|
||||
int allocated_bytes = 0;
|
||||
size_t allocated_bytes = 0;
|
||||
|
||||
if (num_stack >= max_num_frames) {
|
||||
// User requested fewer frames than we already have space for.
|
||||
num_stack = max_num_frames;
|
||||
} else {
|
||||
const size_t needed_bytes = max_num_frames * sizeof(stack[0]);
|
||||
const size_t needed_bytes =
|
||||
static_cast<size_t>(max_num_frames) * sizeof(stack[0]);
|
||||
void* p = Allocate(needed_bytes);
|
||||
if (p != nullptr) { // We got the space.
|
||||
num_stack = max_num_frames;
|
||||
@@ -293,12 +294,13 @@ void DumpStackTrace(int min_dropped_frames, int max_num_frames,
|
||||
}
|
||||
}
|
||||
|
||||
size_t depth = absl::GetStackTrace(stack, num_stack, min_dropped_frames + 1);
|
||||
for (size_t i = 0; i < depth; i++) {
|
||||
int depth = absl::GetStackTrace(stack, num_stack, min_dropped_frames + 1);
|
||||
for (int i = 0; i < depth; i++) {
|
||||
if (symbolize_stacktrace) {
|
||||
DumpPCAndSymbol(writer, writer_arg, stack[i], " ");
|
||||
DumpPCAndSymbol(writer, writer_arg, stack[static_cast<size_t>(i)],
|
||||
" ");
|
||||
} else {
|
||||
DumpPC(writer, writer_arg, stack[i], " ");
|
||||
DumpPC(writer, writer_arg, stack[static_cast<size_t>(i)], " ");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@ static uint32_t Hash32Len13to24(const char *s, size_t len) {
|
||||
uint32_t d = Fetch32(s + (len >> 1));
|
||||
uint32_t e = Fetch32(s);
|
||||
uint32_t f = Fetch32(s + len - 4);
|
||||
uint32_t h = len;
|
||||
uint32_t h = static_cast<uint32_t>(len);
|
||||
|
||||
return fmix(Mur(f, Mur(e, Mur(d, Mur(c, Mur(b, Mur(a, h)))))));
|
||||
}
|
||||
@@ -106,15 +106,15 @@ static uint32_t Hash32Len0to4(const char *s, size_t len) {
|
||||
uint32_t b = 0;
|
||||
uint32_t c = 9;
|
||||
for (size_t i = 0; i < len; i++) {
|
||||
signed char v = s[i];
|
||||
b = b * c1 + v;
|
||||
signed char v = static_cast<signed char>(s[i]);
|
||||
b = b * c1 + static_cast<uint32_t>(v);
|
||||
c ^= b;
|
||||
}
|
||||
return fmix(Mur(b, Mur(len, c)));
|
||||
return fmix(Mur(b, Mur(static_cast<uint32_t>(len), c)));
|
||||
}
|
||||
|
||||
static uint32_t Hash32Len5to12(const char *s, size_t len) {
|
||||
uint32_t a = len, b = len * 5, c = 9, d = b;
|
||||
uint32_t a = static_cast<uint32_t>(len), b = a * 5, c = 9, d = b;
|
||||
a += Fetch32(s);
|
||||
b += Fetch32(s + len - 4);
|
||||
c += Fetch32(s + ((len >> 1) & 4));
|
||||
@@ -129,7 +129,7 @@ uint32_t CityHash32(const char *s, size_t len) {
|
||||
}
|
||||
|
||||
// len > 24
|
||||
uint32_t h = len, g = c1 * len, f = g;
|
||||
uint32_t h = static_cast<uint32_t>(len), g = c1 * h, f = g;
|
||||
|
||||
uint32_t a0 = Rotate32(Fetch32(s + len - 4) * c1, 17) * c2;
|
||||
uint32_t a1 = Rotate32(Fetch32(s + len - 8) * c1, 17) * c2;
|
||||
@@ -230,11 +230,11 @@ static uint64_t HashLen0to16(const char *s, size_t len) {
|
||||
return HashLen16(len + (a << 3), Fetch32(s + len - 4), mul);
|
||||
}
|
||||
if (len > 0) {
|
||||
uint8_t a = s[0];
|
||||
uint8_t b = s[len >> 1];
|
||||
uint8_t c = s[len - 1];
|
||||
uint8_t a = static_cast<uint8_t>(s[0]);
|
||||
uint8_t b = static_cast<uint8_t>(s[len >> 1]);
|
||||
uint8_t c = static_cast<uint8_t>(s[len - 1]);
|
||||
uint32_t y = static_cast<uint32_t>(a) + (static_cast<uint32_t>(b) << 8);
|
||||
uint32_t z = len + (static_cast<uint32_t>(c) << 2);
|
||||
uint32_t z = static_cast<uint32_t>(len) + (static_cast<uint32_t>(c) << 2);
|
||||
return ShiftMix(y * k2 ^ z * k0) * k2;
|
||||
}
|
||||
return k2;
|
||||
|
||||
@@ -106,7 +106,8 @@ uint64_t LowLevelHash(const void* data, size_t len, uint64_t seed,
|
||||
} else if (len > 0) {
|
||||
// If we have at least 1 and at most 3 bytes, read all of the provided
|
||||
// bits into A, with some adjustments.
|
||||
a = ((ptr[0] << 16) | (ptr[len >> 1] << 8) | ptr[len - 1]);
|
||||
a = static_cast<uint64_t>((ptr[0] << 16) | (ptr[len >> 1] << 8) |
|
||||
ptr[len - 1]);
|
||||
b = 0;
|
||||
} else {
|
||||
a = 0;
|
||||
|
||||
Reference in New Issue
Block a user