1. 13 Dec, 2012 4 commits
  2. 12 Dec, 2012 6 commits
  3. 11 Dec, 2012 12 commits
    • Gregory P. Smith's avatar
    • Gregory P. Smith's avatar
    • Gregory P. Smith's avatar
    • Gregory P. Smith's avatar
      Fix the internals of our hash functions to used unsigned values during hash · 27dc02e8
      Gregory P. Smith authored
      computation as the overflow behavior of signed integers is undefined.
      
      NOTE: This change is smaller compared to 3.2 as much of this cleanup had
      already been done.  I added the comment that my change in 3.2 added so that the
      code would match up.  Otherwise this just adds or synchronizes appropriate UL
      designations on some constants to be pedantic.
      
      In practice we require compiling everything with -fwrapv which forces overflow
      to be defined as twos compliment but this keeps the code cleaner for checkers
      or in the case where someone has compiled it without -fwrapv or their
      compiler's equivalent.  We could work to get rid of the -fwrapv requirement
      in 3.4 but that requires more planning.
      
      Found by Clang trunk's Undefined Behavior Sanitizer (UBSan).
      
      Cleanup only - no functionality or hash values change.
      27dc02e8
    • Gregory P. Smith's avatar
      null merge, no change needed in 3.3. · a82fe52a
      Gregory P. Smith authored
      a82fe52a
    • Gregory P. Smith's avatar
      Keep y a Py_hash_t instead of Py_uhash_t as it is compared with == -1 and the · a6be61ec
      Gregory P. Smith authored
      compiler logic will do the right thing with just x as a Py_uhash_t.  This
      matches what was already done in the 3.3 version.
      
      cleanup only - no functionality or hash values change.
      a6be61ec
    • Gregory P. Smith's avatar
      Fix the internals of our hash functions to used unsigned values during hash · c2176e46
      Gregory P. Smith authored
      computation as the overflow behavior of signed integers is undefined.
      
      NOTE: This change is smaller compared to 3.2 as much of this cleanup had
      already been done.  I added the comment that my change in 3.2 added so that the
      code would match up.  Otherwise this just adds or synchronizes appropriate UL
      designations on some constants to be pedantic.
      
      In practice we require compiling everything with -fwrapv which forces overflow
      to be defined as twos compliment but this keeps the code cleaner for checkers
      or in the case where someone has compiled it without -fwrapv or their
      compiler's equivalent.
      
      Found by Clang trunk's Undefined Behavior Sanitizer (UBSan).
      
      Cleanup only - no functionality or hash values change.
      c2176e46
    • Gregory P. Smith's avatar
      Fix the internals of our hash functions to used unsigned values during hash · 27cbcd62
      Gregory P. Smith authored
      computation as the overflow behavior of signed integers is undefined.
      
      In practice we require compiling everything with -fwrapv which forces overflow
      to be defined as twos compliment but this keeps the code cleaner for checkers
      or in the case where someone has compiled it without -fwrapv or their
      compiler's equivalent.
      
      Found by Clang trunk's Undefined Behavior Sanitizer (UBSan).
      
      Cleanup only - no functionality or hash values change.
      27cbcd62
    • Gregory P. Smith's avatar
      Using 'long double' to force this structure to be worst case aligned is no · e348c8d1
      Gregory P. Smith authored
      longer required as of Python 2.5+ when the gc_refs changed from an int (4
      bytes) to a Py_ssize_t (8 bytes) as the minimum size is 16 bytes.
      
      The use of a 'long double' triggered a warning by Clang trunk's
      Undefined-Behavior Sanitizer as on many platforms a long double requires
      16-byte alignment but the Python memory allocator only guarantees 8 byte
      alignment.
      
      So our code would allocate and use these structures with technically improper
      alignment.  Though it didn't matter since the 'dummy' field is never used.
      This silences that warning.
      
      Spelunking into code history, the double was added in 2001 to force better
      alignment on some platforms and changed to a long double in 2002 to appease
      Tru64.  That issue should no loner be present since the upgrade from int to
      Py_ssize_t where the minimum structure size increased to 16 (unless anyone
      knows of a platform where ssize_t is 4 bytes?) or 24 bytes depending on if the
      build uses 4 or 8 byte pointers.
      
      We can probably get rid of the double and this union hack all together today.
      That is a slightly more invasive change that can be left for later.
      
      A more correct non-hacky alternative if any alignment issues are still found
      would be to use a compiler specific alignment declaration on the structure and
      determine which value to use at configure time.
      e348c8d1
    • Gregory P. Smith's avatar
      1 << 31 is invalid for signed integers, fix it by making 1 unsigned. · 60112ae3
      Gregory P. Smith authored
      Found by Clang trunk's Undefined-Behavior Sanitizer.  [more to come]
      60112ae3
    • Gregory P. Smith's avatar
      1 << 31 is invalid for signed integers, fix it by making 1 unsigned. · c0dd80e4
      Gregory P. Smith authored
      Found by Clang trunk's Undefined-Behavior Sanitizer.  [more to come]
      c0dd80e4
    • Gregory P. Smith's avatar
      1 << 31 is invalid for signed integers, fix it by making 1 unsigned. · 90555d0f
      Gregory P. Smith authored
      Found by Clang trunk's Undefined-Behavior Sanitizer.  [more to come]
      90555d0f
  4. 10 Dec, 2012 18 commits