pgsql: Error out for clang on x86-32 without SSE2 support, no -fexcess-

From: Andres Freund <andres(at)anarazel(dot)de>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Error out for clang on x86-32 without SSE2 support, no -fexcess-
Date: 2018-09-21 01:29:38
Message-ID: E1g3AGI-0002uq-4r@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Error out for clang on x86-32 without SSE2 support, no -fexcess-precision.

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

Branch
------
REL9_3_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/978515df2278f570837d3335909300e270081a9f

Modified Files
--------------
configure | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
configure.in | 18 ++++++++++++++++++
2 files changed, 78 insertions(+)

Browse pgsql-committers by date

  From Date Subject
Next Message Michael Paquier 2018-09-21 04:53:16 Re: pgsql: Make WAL segment size configurable at initdb time.
Previous Message Andres Freund 2018-09-21 01:29:36 pgsql: Error out for clang on x86-32 without SSE2 support, no -fexcess-