Ralf Wildenhues <[EMAIL PROTECTED]> writes: > This is pgcc 6.0-8 64-bit target on x86-64 Linux, but as indicated > above, the issue is present in 5.2-1 as well.
Thanks for checking that. Can you please run the following program on that platform and send us the output? If it outputs "preprocessor thinks BITSET_WORD_BITS = 64", then we have an obvious fix to regex_internal.h. Thanks. #include <limits.h> /* Maximum value of a bitset word. It must be useful in preprocessor contexts, and must be consistent with bitset_word. */ #define BITSET_WORD_MAX ULONG_MAX /* Number of bits in a bitset word. Avoid greater-than-32-bit integers and unconditional shifts by more than 31 bits, as they're not portable. */ #if BITSET_WORD_MAX == 0xffffffff # define BITSET_WORD_BITS 32 #elif BITSET_WORD_MAX >> 31 >> 5 == 1 # define BITSET_WORD_BITS 36 #elif BITSET_WORD_MAX >> 31 >> 16 == 1 # define BITSET_WORD_BITS 48 #elif BITSET_WORD_MAX >> 31 >> 28 == 1 # define BITSET_WORD_BITS 60 #elif BITSET_WORD_MAX >> 31 >> 31 >> 1 == 1 # define BITSET_WORD_BITS 64 #elif BITSET_WORD_MAX >> 31 >> 31 >> 9 == 1 # define BITSET_WORD_BITS 72 #elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 3 == 1 # define BITSET_WORD_BITS 128 #elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 7 == 1 # define BITSET_WORD_BITS 256 #elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 7 > 1 # define BITSET_WORD_BITS 257 /* any value > SBC_MAX will do here */ # if BITSET_WORD_BITS <= SBC_MAX # error "Invalid SBC_MAX" # endif #elif BITSET_WORD_MAX == (0xffffffff + 2) * 0xffffffff /* Work around a bug in PGC GNU/Linux x86-64 5.2-1 and 6.0-8 (and probably other versions), where the preprocessor mishandles large unsigned values and thinks they are signed. */ # define BITSET_WORD_BITS 64 #else # error "Add case for new bitset_word size" #endif #include <stdio.h> int main(void) { printf("ULONG_MAX = %lu\nsizeof(ulong) = %lu\n", ULONG_MAX, (unsigned long) sizeof(unsigned long)); printf("%lu\n", BITSET_WORD_MAX >> 31 >> 31 >> 1); printf("BITSET_WORD_BITS = %d\n", BITSET_WORD_BITS); #if BITSET_WORD_BITS == 32 printf("preprocessor thinks BITSET_WORD_BITS = 32\n"); #elif BITSET_WORD_BITS == 64 printf("preprocessor thinks BITSET_WORD_BITS = 64\n"); #else printf("preprocessor has some other value for BITSET_WORD_BITS\n"); #endif return 0; } _______________________________________________ bug-gnulib mailing list bug-gnulib@gnu.org http://lists.gnu.org/mailman/listinfo/bug-gnulib