• Andres Freund's avatar
    Error out for clang on x86-32 without SSE2 support, no -fexcess-precision. · bd1463e3
    Andres Freund authored
    As clang currently doesn't support -fexcess-precision=standard,
    compiling x86-32 code with SSE2 disabled, can lead to problems with
    floating point overflow checks and the like.
    
    This issue was noticed because clang, on at least some BSDs, defaults
    to i386 compatibility, whereas it defaults to pentium4 on Linux.  Our
    forced usage of __builtin_isinf() lead to some overflow checks not
    triggering when compiling for i386, e.g. when the result of the
    calculation didn't overflow in 80bit registers, but did so in 64bit.
    
    While we could just fall back to a non-builtin isinf, it seems likely
    that the use of 80bit registers leads to other problems (which is why
    we force the flag for GCC already).  Therefore error out when
    detecting clang in that situation.
    
    Reported-By: Victor Wagner
    Analyzed-By: Andrew Gierth and Andres Freund
    Author: Andres Freund
    Discussion: https://postgr.es/m/20180905005130.ewk4xcs5dgyzcy45@alap3.anarazel.de
    Backpatch: 9.3-, all supported versions are affected
    bd1463e3
configure 550 KB