Fix portability issues in pg_bitutils
Alvaro Herrera <alvherre@alvh.no-ip.org>
Fix portability issues in pg_bitutils We were using uint64 function arguments as "long int" arguments to compiler builtins, which fails on machines where long ints are 32 bits: the upper half of the uint64 was being ignored. Fix by using the "ll" builtin variants instead, which on those machines take 64 bit arguments. Also, remove configure tests for __builtin_popcountl() (as well as "long" variants for ctz and clz): the theory here is that any compiler version will provide all widths or none, so one test suffices. Were this theory to be wrong, we'd have to add tests for __builtin_popcountll() and friends, which would be tedious. Per failures in buildfarm member lapwing and ensuing discussion.
Files
| Path | Change | +/− |
|---|---|---|
| config/c-compiler.m4 | modified | +0 −58 |
| configure | modified | +38 −114 |
| configure.in | modified | +2 −5 |
| src/include/pg_config.h.in | modified | +6 −15 |
| src/include/pg_config.h.win32 | modified | +6 −15 |
| src/port/pg_bitutils.c | modified | +35 −38 |