[PATCH] D40743: Make rehash(0) work with ubsan's unsigned-integer-overflow.

Dan Albert via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Jan 8 13:53:20 PST 2018


danalbert added inline comments.


================
Comment at: include/__hash_table:2141
         __n = 2;
     else if (__n & (__n - 1))
         __n = __next_prime(__n);
----------------
mclow.lists wrote:
> danalbert wrote:
> > With `rehash(0)` this is `0 & (0 - 1)`, which triggers unsigned-integer-overflow.
> Grumble, grumble. That's not UB, that's just UBSan whining.
> On the other hand, this doesn't appear to change any behavior, and shuts UBSan up.
FWIW, this check isn't enabled in ubsan by default. Android uses it for testing and mititgation in a handful of projects because it does catch errors (stagefright was an unsigned overflow issue). It's good to keep the libc++ headers clean of these issues so we're not dictating the compile flags of libc++ users.


Repository:
  rCXX libc++

https://reviews.llvm.org/D40743





More information about the cfe-commits mailing list