1. 17 8月, 2020 1 次提交
  2. 27 9月, 2018 1 次提交
    • R
      fix aliasing-based undefined behavior in string functions · 4d0a8217
      Rich Felker 提交于
      use the GNU C may_alias attribute if available, and fallback to naive
      byte-by-byte loops if __GNUC__ is not defined.
      
      this patch has been written to minimize changes so that history
      remains reviewable; it does not attempt to bring the affected code
      into a more consistent or elegant form.
      4d0a8217
  3. 23 9月, 2018 1 次提交
    • R
      fix undefined pointer comparison in memmove · debadaa2
      Rich Felker 提交于
      the comparison must take place in the address space model as an
      integer type, since comparing pointers that are not pointing into the
      same array is undefined.
      
      the subsequent d<s comparison however is valid, because it's only
      reached in the case where the source and dest overlap, in which case
      they are necessarily pointing to parts of the same array.
      
      to make the comparison, use an unsigned range check for dist(s,d)>=n,
      algebraically !(-n<s-d<n). subtracting n yields !(-2*n<s-d-n<0), which
      mapped into unsigned modular arithmetic is !(-2*n<s-d-n) or rather
      -2*n>=s-d-n.
      debadaa2
  4. 11 9月, 2012 1 次提交
    • R
      reenable word-at-at-time copying in memmove · 1701e4f3
      Rich Felker 提交于
      before restrict was added, memove called memcpy for forward copies and
      used a byte-at-a-time loop for reverse copies. this was changed to
      avoid invoking UB now that memcpy has an undefined copying order,
      making memmove considerably slower.
      
      performance is still rather bad, so I'll be adding asm soon.
      1701e4f3
  5. 07 9月, 2012 1 次提交
    • R
      remove dependency of memmove on memcpy direction · 594318fd
      Rich Felker 提交于
      this commit introduces a performance regression in many uses of
      memmove, which will need to be addressed before the next release. i'm
      making it as a temporary measure so that the restrict patch can be
      committed without invoking undefined behavior when memmove calls
      memcpy with overlapping regions.
      594318fd
  6. 12 2月, 2011 1 次提交