[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