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.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
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)?