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.
Tested on x86_64-pc-solaris2.11, sparcv9-sun-solaris2.11, and x86_64-pc-linux-gnu.
Differential Revision: https://reviews.llvm.org/D64793
llvm-svn: 367866
46 lines
1.9 KiB
C++
46 lines
1.9 KiB
C++
// General tests that the correct versions of values-*.o are used on
|
|
// Solaris targets sane. Note that we use sysroot to make these tests
|
|
// independent of the host system.
|
|
|
|
// Check sparc-sun-solaris2.11, 32bit
|
|
// RUN: %clang -no-canonical-prefixes -ansi %s -### -o %t.o 2>&1 \
|
|
// RUN: --target=sparc-sun-solaris2.11 \
|
|
// RUN: --gcc-toolchain="" \
|
|
// RUN: --sysroot=%S/Inputs/solaris_sparc_tree \
|
|
// RUN: | FileCheck --check-prefix=CHECK-LD-SPARC32-ANSI %s
|
|
// CHECK-LD-SPARC32-ANSI: values-Xc.o
|
|
// CHECK-LD-SPARC32-ANSI: values-xpg6.o
|
|
|
|
// RUN: %clang -no-canonical-prefixes -std=c++98 %s -### -o %t.o 2>&1 \
|
|
// RUN: --target=sparc-sun-solaris2.11 \
|
|
// RUN: --gcc-toolchain="" \
|
|
// RUN: --sysroot=%S/Inputs/solaris_sparc_tree \
|
|
// RUN: | FileCheck --check-prefix=CHECK-LD-SPARC32-CPP98 %s
|
|
// CHECK-LD-SPARC32-CPP98: values-Xc.o
|
|
// CHECK-LD-SPARC32-CPP98: values-xpg6.o
|
|
|
|
// RUN: %clang -no-canonical-prefixes -std=c++11 %s -### -o %t.o 2>&1 \
|
|
// RUN: --target=sparc-sun-solaris2.11 \
|
|
// RUN: --gcc-toolchain="" \
|
|
// RUN: --sysroot=%S/Inputs/solaris_sparc_tree \
|
|
// RUN: | FileCheck --check-prefix=CHECK-LD-SPARC32-CPP11 %s
|
|
// CHECK-LD-SPARC32-CPP11: values-Xc.o
|
|
// CHECK-LD-SPARC32-CPP11: values-xpg6.o
|
|
|
|
// RUN: %clang -no-canonical-prefixes -std=gnu++98 %s -### -o %t.o 2>&1 \
|
|
// RUN: --target=sparc-sun-solaris2.11 \
|
|
// RUN: --gcc-toolchain="" \
|
|
// RUN: --sysroot=%S/Inputs/solaris_sparc_tree \
|
|
// RUN: | FileCheck --check-prefix=CHECK-LD-SPARC32-GNUPP98 %s
|
|
// CHECK-LD-SPARC32-GNUPP98: values-Xa.o
|
|
// CHECK-LD-SPARC32-GNUPP98: values-xpg6.o
|
|
|
|
// Check i386-pc-solaris2.11, 32bit
|
|
// RUN: %clang -no-canonical-prefixes -ANSI %s -### -o %t.o 2>&1 \
|
|
// RUN: --target=i386-pc-solaris2.11 \
|
|
// RUN: --gcc-toolchain="" \
|
|
// RUN: --sysroot=%S/Inputs/solaris_x86_tree \
|
|
// RUN: | FileCheck --check-prefix=CHECK-LD-X32-ANSI %s
|
|
// CHECK-LD-X32-ANSI: values-Xa.o
|
|
// CHECK-LD-X32-ANSI: values-xpg6.o
|