From: Mark Dickinson <dickinsm@gmail.com> Date: Sat, 20 Nov 2010 10:43:10 +0000 (+0000) Subject: Issue #10325: Fix two issues in the fallback definitions of PY_LLONG_MAX and X-Git-Tag: v3.2b1~319 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6646cd45be26c532a1152cea6a6e0ba27838c645;p=python Issue #10325: Fix two issues in the fallback definitions of PY_LLONG_MAX and PY_ULLONG_MAX in pyport.h. Thanks Hallvard B Furuseth for the patch. --- diff --git a/Include/pyport.h b/Include/pyport.h index 568199b85d..62aa53ae21 100644 --- a/Include/pyport.h +++ b/Include/pyport.h @@ -62,15 +62,20 @@ Used in: PY_LONG_LONG #define PY_LLONG_MAX LLONG_MAX #define PY_ULLONG_MAX ULLONG_MAX #elif defined(__LONG_LONG_MAX__) -/* Otherwise, if GCC has a builtin define, use that. */ +/* Otherwise, if GCC has a builtin define, use that. (Definition of + * PY_LLONG_MIN assumes two's complement with no trap representation.) */ #define PY_LLONG_MAX __LONG_LONG_MAX__ -#define PY_LLONG_MIN (-PY_LLONG_MAX-1) -#define PY_ULLONG_MAX (__LONG_LONG_MAX__*2ULL + 1ULL) -#else -/* Otherwise, rely on two's complement. */ -#define PY_ULLONG_MAX (~0ULL) -#define PY_LLONG_MAX ((long long)(PY_ULLONG_MAX>>1)) -#define PY_LLONG_MIN (-PY_LLONG_MAX-1) +#define PY_LLONG_MIN (-PY_LLONG_MAX - 1) +#define PY_ULLONG_MAX (PY_LLONG_MAX * Py_ULL(2) + 1) +#elif defined(SIZEOF_LONG_LONG) +/* Otherwise compute from SIZEOF_LONG_LONG, assuming two's complement, no + padding bits, and no trap representation. Note: PY_ULLONG_MAX was + previously #defined as (~0ULL) here; but that'll give the wrong value in a + preprocessor expression on systems where long long != intmax_t. */ +#define PY_LLONG_MAX \ + (1 + 2 * ((Py_LL(1) << (CHAR_BIT * SIZEOF_LONG_LONG - 2)) - 1)) +#define PY_LLONG_MIN (-PY_LLONG_MAX - 1) +#define PY_ULLONG_MAX (PY_LLONG_MAX * Py_ULL(2) + 1) #endif /* LLONG_MAX */ #endif #endif /* HAVE_LONG_LONG */ diff --git a/Misc/NEWS b/Misc/NEWS index d5a002b125..917b7cd3b0 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -45,6 +45,12 @@ Tests - Issue #8886: Use context managers throughout test_zipfile. Patch by Eric Carstensen. +Build +----- + +- Issue #10325: Fix two issues in the fallback definitions for PY_ULLONG_MAX and + PY_LLONG_MAX that made them unsuitable for use in preprocessor conditionals. + What's New in Python 3.2 Alpha 4? =================================