Skip to content
  • Chandler Carruth's avatar
    Disable transforms that introduce calls to exp10*() on Linux due to · f5689f83
    Chandler Carruth authored
    widespread glibc bugs.
    
    The glibc implementation of exp10 has a very serious precision bug in
    version 2.15 (and older versions). This is still very widely used (the
    current Ubuntu LTS for example uses it) and so it isn't reasonable to
    make transforms that produce these functions. This fixes many
    miscompiles introduced when we started transforming pow(10.0, ...) into
    exp10, and it may have fixed other latent miscompiles where exp10
    provided sufficient precision but exp10f did not.
    
    This is all really horrible. The primary bug has been fixed for over
    a year and glibc 2.18 works correctly for the test cases I have, but it
    will be 2017 before the LTS using 2.15 is no longer supported by Ubuntu
    (and thus reasonable for folks to be relying on). =[ We're either going
    to need to live without these optimizations, or find a way to switch
    behavior more dynamically than using simply the fact that the OS is
    "Linux".
    
    To make matters worse, there appears to be significant testing and
    fixing of numerous other bugs in the exp10 family of functions right now
    in glibc. While those haven't been causing problems I've seen in the
    wild, it gives me concerns that we may need to wait until an even later
    release of glibc before we can reliably transform code into exp10.
    
    llvm-svn: 198093
    f5689f83
Loading