ro created this revision.
ro added a reviewer: MaskRay.
ro added a project: clang.
Herald added subscribers: pengfei, jrtc27, fedor.sergeev, jyknight.
Herald added a project: All.
ro requested review of this revision.
As described in Issue #53709
<https://github.com/llvm/llvm-project/issues/53709>, since
28d58d8fe2094af6902dee7b4d68ec30a3e9d737
<https://reviews.llvm.org/rG28d58d8fe2094af6902dee7b4d68ec30a3e9d737> `clang`
doesn't find the latest of several parallel GCC installations on Solaris, but
only the first in directory order, which is pretty random.
Since this breaks basic functionality of the Solaris port, this patch restores
scanning all prefixes for GCC installations.
Tested on `sparcv9-sun-solaris2.11`, `amd64-pc-solaris2.11`, and
`x86_64-pc-linux-gnu`.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D157275
Files:
clang/lib/Driver/ToolChains/Gnu.cpp
clang/test/Driver/Inputs/solaris_multi_gcc_tree/usr/gcc/11/lib/gcc/sparcv9-sun-solaris2.11/11.4.0/crtbegin.o
clang/test/Driver/Inputs/solaris_multi_gcc_tree/usr/gcc/11/lib/gcc/sparcv9-sun-solaris2.11/11.4.0/sparcv8plus/crtbegin.o
clang/test/Driver/Inputs/solaris_multi_gcc_tree/usr/gcc/11/lib/gcc/x86_64-pc-solaris2.11/11.4.0/32/crtbegin.o
clang/test/Driver/Inputs/solaris_multi_gcc_tree/usr/gcc/11/lib/gcc/x86_64-pc-solaris2.11/11.4.0/crtbegin.o
clang/test/Driver/Inputs/solaris_multi_gcc_tree/usr/gcc/4.7/lib/gcc/i386-pc-solaris2.11/4.7.3/amd64/crtbegin.o
clang/test/Driver/Inputs/solaris_multi_gcc_tree/usr/gcc/4.7/lib/gcc/i386-pc-solaris2.11/4.7.3/crtbegin.o
clang/test/Driver/Inputs/solaris_multi_gcc_tree/usr/gcc/4.7/lib/gcc/sparc-sun-solaris2.11/4.7.3/crtbegin.o
clang/test/Driver/Inputs/solaris_multi_gcc_tree/usr/gcc/4.7/lib/gcc/sparc-sun-solaris2.11/4.7.3/sparcv9/crtbegin.o
clang/test/Driver/Inputs/solaris_multi_gcc_tree/usr/gcc/7/lib/gcc/sparcv9-sun-solaris2.11/7.5.0/32/crtbegin.o
clang/test/Driver/Inputs/solaris_multi_gcc_tree/usr/gcc/7/lib/gcc/sparcv9-sun-solaris2.11/7.5.0/crtbegin.o
clang/test/Driver/Inputs/solaris_multi_gcc_tree/usr/gcc/7/lib/gcc/x86_64-pc-solaris2.11/7.5.0/32/crtbegin.o
clang/test/Driver/Inputs/solaris_multi_gcc_tree/usr/gcc/7/lib/gcc/x86_64-pc-solaris2.11/7.5.0/crtbegin.o
clang/test/Driver/solaris-multi-gcc-search.test
Index: clang/test/Driver/solaris-multi-gcc-search.test
===================================================================
--- /dev/null
+++ clang/test/Driver/solaris-multi-gcc-search.test
@@ -0,0 +1,60 @@
+/// Check that clang uses the latest available Solaris GCC installation.
+
+/// Check sparc-sun-solaris2.11, 32-bit
+// RUN: %clang -v 2>&1 --target=sparc-sun-solaris2.11 \
+// RUN: --gcc-toolchain="" \
+// RUN: --sysroot=%S/Inputs/solaris_multi_gcc_tree \
+// RUN: | FileCheck --check-prefix=CHECK-SPARC %s
+// CHECK-SPARC-DAG: Found candidate GCC installation:
{{.*}}4.7/lib/gcc/sparc-sun-solaris2.11/4.7.3
+// CHECK-SPARC-DAG: Found candidate GCC installation:
{{.*}}7/lib/gcc/sparcv9-sun-solaris2.11/7.5.0
+// CHECK-SPARC-DAG: Found candidate GCC installation:
{{.*}}11/lib/gcc/sparcv9-sun-solaris2.11/11.4.0
+// CHECK-SPARC: Selected GCC installation:
{{.*}}11/lib/gcc/sparcv9-sun-solaris2.11/11.4.0
+// CHECK-SPARC-NEXT: Candidate multilib: .;@m64
+// CHECK-SPARC-NEXT: Candidate multilib: sparcv8plus;@m32
+// CHECK-SPARC-NEXT: Selected multilib: sparcv8plus;@m32
+
+/// Check i386-pc-solaris2.11, 32-bit
+// RUN: %clang -v 2>&1 --target=i386-pc-solaris2.11 \
+// RUN: --gcc-toolchain="" \
+// RUN: --sysroot=%S/Inputs/solaris_multi_gcc_tree \
+// RUN: | FileCheck --check-prefix=CHECK-I386 %s
+// CHECK-I386-DAG: Found candidate GCC installation:
{{.*}}4.7/lib/gcc/i386-pc-solaris2.11/4.7.3
+// CHECK-I386-DAG: Found candidate GCC installation:
{{.*}}7/lib/gcc/x86_64-pc-solaris2.11/7.5.0
+// CHECK-I386-DAG: Found candidate GCC installation:
{{.*}}11/lib/gcc/x86_64-pc-solaris2.11/11.4.0
+// CHECK-I386: Selected GCC installation:
{{.*}}11/lib/gcc/x86_64-pc-solaris2.11/11.4.0
+// CHECK-I386-NEXT: Candidate multilib: .;@m64
+// CHECK-I386-NEXT: Candidate multilib: 32;@m32
+// CHECK-I386-NEXT: Selected multilib: 32;@m32
+
+/// Check sparcv9-sun-solaris2.11, 64-bit
+// RUN: %clang -v 2>&1 --target=sparcv9-sun-solaris2.11 \
+// RUN: --gcc-toolchain="" \
+// RUN: --sysroot=%S/Inputs/solaris_multi_gcc_tree \
+// RUN: | FileCheck --check-prefix=CHECK-SPARCV9 %s
+// CHECK-SPARCV9-DAG: Found candidate GCC installation:
{{.*}}4.7/lib/gcc/sparc-sun-solaris2.11/4.7.3
+// CHECK-SPARCV9-DAG: Found candidate GCC installation:
{{.*}}7/lib/gcc/sparcv9-sun-solaris2.11/7.5.0
+// CHECK-SPARCV9-DAG: Found candidate GCC installation:
{{.*}}11/lib/gcc/sparcv9-sun-solaris2.11/11.4.0
+// CHECK-SPARCV9: Selected GCC installation:
{{.*}}11/lib/gcc/sparcv9-sun-solaris2.11/11.4.0
+// CHECK-SPARCV9-NEXT: Candidate multilib: .;@m64
+// CHECK-SPARCV9-NEXT: Candidate multilib: sparcv8plus;@m32
+// CHECK-SPARCV9-NEXT: Selected multilib: .;@m64
+
+/// Check x86_64-pc-solaris2.11, 64-bit
+// RUN: %clang -v 2>&1 --target=x86_64-pc-solaris2.11 \
+// RUN: --gcc-toolchain="" \
+// RUN: --sysroot=%S/Inputs/solaris_multi_gcc_tree \
+// RUN: | FileCheck --check-prefix=CHECK-X86_64 %s
+
+/// Check amd64-pc-solaris2.11, 64-bit
+// RUN: %clang -v 2>&1 --target=amd64-pc-solaris2.11 \
+// RUN: --gcc-toolchain="" \
+// RUN: --sysroot=%S/Inputs/solaris_multi_gcc_tree \
+// RUN: | FileCheck --check-prefix=CHECK-X86_64 %s
+// CHECK-X86_64-DAG: Found candidate GCC installation:
{{.*}}4.7/lib/gcc/i386-pc-solaris2.11/4.7.3
+// CHECK-X86_64-DAG: Found candidate GCC installation:
{{.*}}7/lib/gcc/x86_64-pc-solaris2.11/7.5.0
+
+// CHECK-X86_64-DAG: Found candidate GCC installation:
{{.*}}11/lib/gcc/x86_64-pc-solaris2.11/11.4.0
+// CHECK-X86_64: Selected GCC installation:
{{.*}}11/lib/gcc/x86_64-pc-solaris2.11/11.4.0
+// CHECK-X86_64-NEXT: Candidate multilib: .;@m64
+// CHECK-X86_64-NEXT: Candidate multilib: 32;@m32
+// CHECK-X86_64-NEXT: Selected multilib: .;@m64
Index: clang/lib/Driver/ToolChains/Gnu.cpp
===================================================================
--- clang/lib/Driver/ToolChains/Gnu.cpp
+++ clang/lib/Driver/ToolChains/Gnu.cpp
@@ -2190,7 +2190,10 @@
}
// Skip other prefixes once a GCC installation is found.
- if (Version > VersionZero)
+ // Solaris GCC installations live in separate Prefixes per Version
+ // (/usr/gcc/<Version>) that arrive in directory order, so check all
+ // of them to determine the latest.
+ if (Version > VersionZero && !TargetTriple.isOSSolaris())
break;
}
}
Index: clang/test/Driver/solaris-multi-gcc-search.test
===================================================================
--- /dev/null
+++ clang/test/Driver/solaris-multi-gcc-search.test
@@ -0,0 +1,60 @@
+/// Check that clang uses the latest available Solaris GCC installation.
+
+/// Check sparc-sun-solaris2.11, 32-bit
+// RUN: %clang -v 2>&1 --target=sparc-sun-solaris2.11 \
+// RUN: --gcc-toolchain="" \
+// RUN: --sysroot=%S/Inputs/solaris_multi_gcc_tree \
+// RUN: | FileCheck --check-prefix=CHECK-SPARC %s
+// CHECK-SPARC-DAG: Found candidate GCC installation: {{.*}}4.7/lib/gcc/sparc-sun-solaris2.11/4.7.3
+// CHECK-SPARC-DAG: Found candidate GCC installation: {{.*}}7/lib/gcc/sparcv9-sun-solaris2.11/7.5.0
+// CHECK-SPARC-DAG: Found candidate GCC installation: {{.*}}11/lib/gcc/sparcv9-sun-solaris2.11/11.4.0
+// CHECK-SPARC: Selected GCC installation: {{.*}}11/lib/gcc/sparcv9-sun-solaris2.11/11.4.0
+// CHECK-SPARC-NEXT: Candidate multilib: .;@m64
+// CHECK-SPARC-NEXT: Candidate multilib: sparcv8plus;@m32
+// CHECK-SPARC-NEXT: Selected multilib: sparcv8plus;@m32
+
+/// Check i386-pc-solaris2.11, 32-bit
+// RUN: %clang -v 2>&1 --target=i386-pc-solaris2.11 \
+// RUN: --gcc-toolchain="" \
+// RUN: --sysroot=%S/Inputs/solaris_multi_gcc_tree \
+// RUN: | FileCheck --check-prefix=CHECK-I386 %s
+// CHECK-I386-DAG: Found candidate GCC installation: {{.*}}4.7/lib/gcc/i386-pc-solaris2.11/4.7.3
+// CHECK-I386-DAG: Found candidate GCC installation: {{.*}}7/lib/gcc/x86_64-pc-solaris2.11/7.5.0
+// CHECK-I386-DAG: Found candidate GCC installation: {{.*}}11/lib/gcc/x86_64-pc-solaris2.11/11.4.0
+// CHECK-I386: Selected GCC installation: {{.*}}11/lib/gcc/x86_64-pc-solaris2.11/11.4.0
+// CHECK-I386-NEXT: Candidate multilib: .;@m64
+// CHECK-I386-NEXT: Candidate multilib: 32;@m32
+// CHECK-I386-NEXT: Selected multilib: 32;@m32
+
+/// Check sparcv9-sun-solaris2.11, 64-bit
+// RUN: %clang -v 2>&1 --target=sparcv9-sun-solaris2.11 \
+// RUN: --gcc-toolchain="" \
+// RUN: --sysroot=%S/Inputs/solaris_multi_gcc_tree \
+// RUN: | FileCheck --check-prefix=CHECK-SPARCV9 %s
+// CHECK-SPARCV9-DAG: Found candidate GCC installation: {{.*}}4.7/lib/gcc/sparc-sun-solaris2.11/4.7.3
+// CHECK-SPARCV9-DAG: Found candidate GCC installation: {{.*}}7/lib/gcc/sparcv9-sun-solaris2.11/7.5.0
+// CHECK-SPARCV9-DAG: Found candidate GCC installation: {{.*}}11/lib/gcc/sparcv9-sun-solaris2.11/11.4.0
+// CHECK-SPARCV9: Selected GCC installation: {{.*}}11/lib/gcc/sparcv9-sun-solaris2.11/11.4.0
+// CHECK-SPARCV9-NEXT: Candidate multilib: .;@m64
+// CHECK-SPARCV9-NEXT: Candidate multilib: sparcv8plus;@m32
+// CHECK-SPARCV9-NEXT: Selected multilib: .;@m64
+
+/// Check x86_64-pc-solaris2.11, 64-bit
+// RUN: %clang -v 2>&1 --target=x86_64-pc-solaris2.11 \
+// RUN: --gcc-toolchain="" \
+// RUN: --sysroot=%S/Inputs/solaris_multi_gcc_tree \
+// RUN: | FileCheck --check-prefix=CHECK-X86_64 %s
+
+/// Check amd64-pc-solaris2.11, 64-bit
+// RUN: %clang -v 2>&1 --target=amd64-pc-solaris2.11 \
+// RUN: --gcc-toolchain="" \
+// RUN: --sysroot=%S/Inputs/solaris_multi_gcc_tree \
+// RUN: | FileCheck --check-prefix=CHECK-X86_64 %s
+// CHECK-X86_64-DAG: Found candidate GCC installation: {{.*}}4.7/lib/gcc/i386-pc-solaris2.11/4.7.3
+// CHECK-X86_64-DAG: Found candidate GCC installation: {{.*}}7/lib/gcc/x86_64-pc-solaris2.11/7.5.0
+
+// CHECK-X86_64-DAG: Found candidate GCC installation: {{.*}}11/lib/gcc/x86_64-pc-solaris2.11/11.4.0
+// CHECK-X86_64: Selected GCC installation: {{.*}}11/lib/gcc/x86_64-pc-solaris2.11/11.4.0
+// CHECK-X86_64-NEXT: Candidate multilib: .;@m64
+// CHECK-X86_64-NEXT: Candidate multilib: 32;@m32
+// CHECK-X86_64-NEXT: Selected multilib: .;@m64
Index: clang/lib/Driver/ToolChains/Gnu.cpp
===================================================================
--- clang/lib/Driver/ToolChains/Gnu.cpp
+++ clang/lib/Driver/ToolChains/Gnu.cpp
@@ -2190,7 +2190,10 @@
}
// Skip other prefixes once a GCC installation is found.
- if (Version > VersionZero)
+ // Solaris GCC installations live in separate Prefixes per Version
+ // (/usr/gcc/<Version>) that arrive in directory order, so check all
+ // of them to determine the latest.
+ if (Version > VersionZero && !TargetTriple.isOSSolaris())
break;
}
}
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits