[PATCH] D64793: [Driver] Properly use values-X[ca].o, values-xpg[46].o on Solaris
Rainer Orth via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Jul 16 05:49:11 PDT 2019
ro created this revision.
ro added reviewers: fedor.sergeev, rsmith, mehdi_amini, rnk.
Herald added subscribers: kadircet, jrtc27, ilya-biryukov, mgorny, jyknight.
Herald added a project: clang.
`Builtins-*-sunos :: compiler_rt_logbf_test.c` currently FAILs on Solaris, both SPARC and
x86, 32 and 64-bit.
It turned out that this is due to different behaviour of `logb` depending on the C
standard compiled for, as documented on `logb(3M)`:
RETURN VALUES
Upon successful completion, these functions return the exponent of x.
If x is subnormal:
o For SUSv3-conforming applications compiled with the c99 com-
piler driver (see standards(7)), the exponent of x as if x
were normalized is returned.
o Otherwise, if compiled with the cc compiler driver, -1022,
-126, and -16382 are returned for logb(), logbf(), and
logbl(), respectively.
Studio c99 and gcc control this by linking with the appropriate version of `values-xpg[46].o`, but clang uses neither of those.
The following patch fixes this by following what gcc does, as corrected some time ago
in `Fix use of Solaris values-Xc.o (PR target/40411)`, https://gcc.gnu.org/ml/gcc-patches/2018-01/msg02350.html and https://gcc.gnu.org/ml/gcc-patches/2018-01/msg02384.html.
It makes use of `LangStandard::getLangStandardForName` to parse the `std=<std>`
values. However, I found that the function currently doesn't handle the alias forms
(like `c90` for `c89`). Given that it isn't currently used in the clang repo, I just added
that handling.
As a consequence, `ClangDriverTests` now also needs to be linked with `libclangFrontend`.
Tested on `x86_64-pc-solaris2.11`, `sparcv9-sun-solaris2.11`, and `x86_64-pc-linux-gnu`.
Ok for trunk (and a backport to the llvm 9 branch)?
Repository:
rC Clang
https://reviews.llvm.org/D64793
Files:
lib/Driver/ToolChains/Solaris.cpp
lib/Frontend/LangStandards.cpp
test/Driver/Inputs/solaris_sparc_tree/usr/lib/values-Xa.o
test/Driver/Inputs/solaris_sparc_tree/usr/lib/values-Xc.o
test/Driver/Inputs/solaris_sparc_tree/usr/lib/values-xpg4.o
test/Driver/Inputs/solaris_sparc_tree/usr/lib/values-xpg6.o
test/Driver/Inputs/solaris_x86_tree/usr/lib/values-Xa.o
test/Driver/Inputs/solaris_x86_tree/usr/lib/values-Xc.o
test/Driver/Inputs/solaris_x86_tree/usr/lib/values-xpg4.o
test/Driver/Inputs/solaris_x86_tree/usr/lib/values-xpg6.o
test/Driver/solaris-ld-values.c
test/Driver/solaris-ld-values.cpp
unittests/Driver/CMakeLists.txt
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D64793.210068.patch
Type: text/x-patch
Size: 8490 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190716/8dbef6a5/attachment.bin>
More information about the cfe-commits
mailing list