protocolbuffers/protobuf

Signed / unsigned comparison warning on MSVC

Open

#15.028 geöffnet am 11. Dez. 2023

Auf GitHub ansehen
 (1 Kommentar) (0 Reaktionen) (0 zugewiesene Personen)C++ (16.128 Forks)batch import
c++help wanted

Repository-Metriken

Stars
 (71.223 Stars)
PR-Merge-Metriken
 (Durchschn. Merge 2T 11h) (185 gemergte PRs in 30 T)

Beschreibung

What version of protobuf and what language are you using? Version: v25.1 (actually a bit after, main from 20231123. Relevant code hasn't changed since then) Language: C++

What operating system (Linux, Windows, ...) and version? Windows 11 Pro 22H2

What runtime / compiler are you using (e.g., python version or gcc version) MS Visual Studio 17.8.0 (tool version 14.37.32822)

What did you do? Compile something that makes use of include/google/protobuf/map.h

What did you expect to see Warning-free compilation

What did you see instead? Warnings from Abseil : include\absl\log\internal\check_op.h(340,1): warning C4018: '>=': signed/unsigned mismatch This is from an Abseil macro that generates Check_GEImpl(), used in map.h

Anything else we should know about your project / environment

map.h line 1041 (in current main) invokes

ABSL_DCHECK_GE(new_num_buckets, kMinTableSize);

the first arg is map_index_t which resolves to uint32_t, whereas the second is defined at line 528 as

enum { kMinTableSize = 16 / sizeof(void*) };

I'm guess MSVC is choosing a signed type for the enum which is causing the problem. Changing it to

enum : unsigned int { kMinTableSize = 16 / sizeof(void*) };

makes the warnings go away

Contributor Guide