build: "popcount" name conflict on NetBSD #28983

Problem:
    NetBSD's libc already has a function by the same name.

Solution:
    Rename popcount to xpopcount and add #if defined(__NetBSD__) to
prefer NetBSD's own implementation.  This fixes #28983.
This commit is contained in:
Malte Dehling
2024-05-27 04:14:57 -07:00
committed by GitHub
parent 9a0239fdc8
commit 104800ce2e
2 changed files with 8 additions and 6 deletions

View File

@ -2354,8 +2354,8 @@ void nvim__redraw(Dict(redraw) *opts, Error *err)
} }
} }
int count = (win != NULL) + (buf != NULL); unsigned count = (win != NULL) + (buf != NULL);
VALIDATE(popcount(opts->is_set__redraw_) > count, "%s", "at least one action required", { VALIDATE(xpopcount(opts->is_set__redraw_) > count, "%s", "at least one action required", {
return; return;
}); });

View File

@ -78,13 +78,15 @@ int xctz(uint64_t x)
} }
/// Count number of set bits in bit field. /// Count number of set bits in bit field.
int popcount(uint64_t x) unsigned xpopcount(uint64_t x)
{ {
// Use compiler builtin if possible. // Use compiler builtin if possible.
#if defined(__clang__) || defined(__GNUC__) #if defined(__NetBSD__)
return __builtin_popcountll(x); return popcount64(x);
#elif defined(__clang__) || defined(__GNUC__)
return (unsigned)__builtin_popcountll(x);
#else #else
int count = 0; unsigned count = 0;
for (; x != 0; x >>= 1) { for (; x != 0; x >>= 1) {
if (x & 1) { if (x & 1) {
count++; count++;