Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Driver] Properly use values-X[ca].o, values-xpg[46].o on Solaris
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
- Loading branch information
Showing
11 changed files
with
144 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
// 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=c89 %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-C89 %s | ||
// CHECK-LD-SPARC32-C89: values-Xc.o | ||
// CHECK-LD-SPARC32-C89: values-xpg4.o | ||
|
||
// RUN: %clang -no-canonical-prefixes -std=c90 %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-C90 %s | ||
// CHECK-LD-SPARC32-C90: values-Xc.o | ||
// CHECK-LD-SPARC32-C90: values-xpg4.o | ||
|
||
// RUN: %clang -no-canonical-prefixes -std=iso9899:199409 %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-C94 %s | ||
// CHECK-LD-SPARC32-C94: values-Xc.o | ||
// CHECK-LD-SPARC32-C94: values-xpg4.o | ||
|
||
// RUN: %clang -no-canonical-prefixes -std=c11 %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-C11 %s | ||
// CHECK-LD-SPARC32-C11: values-Xc.o | ||
// CHECK-LD-SPARC32-C11: values-xpg6.o | ||
|
||
// RUN: %clang -no-canonical-prefixes -std=gnu89 %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-GNU89 %s | ||
// CHECK-LD-SPARC32-GNU89: values-Xa.o | ||
// CHECK-LD-SPARC32-GNU89: values-xpg4.o | ||
|
||
// RUN: %clang -no-canonical-prefixes -std=gnu90 %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-GNU90 %s | ||
// CHECK-LD-SPARC32-GNU90: values-Xa.o | ||
// CHECK-LD-SPARC32-GNU90: values-xpg4.o | ||
|
||
// RUN: %clang -no-canonical-prefixes -std=gnu11 %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-GNU11 %s | ||
// CHECK-LD-SPARC32-GNU11: values-Xa.o | ||
// CHECK-LD-SPARC32-GNU11: 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-Xc.o | ||
// CHECK-LD-X32-ANSI: values-xpg6.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
// 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 |