@@ -168,6 +168,155 @@ TEST(ToolChainTest, VFSGCCInstallationRelativeDir) {
168
168
S);
169
169
}
170
170
171
+ TEST (ToolChainTest, VFSSolarisMultiGCCInstallation) {
172
+ IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions ();
173
+
174
+ IntrusiveRefCntPtr<DiagnosticIDs> DiagID (new DiagnosticIDs ());
175
+ struct TestDiagnosticConsumer : public DiagnosticConsumer {};
176
+ IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> InMemoryFileSystem (
177
+ new llvm::vfs::InMemoryFileSystem);
178
+
179
+ const char *EmptyFiles[] = {
180
+ // Sort entries so the latest version doesn't come first.
181
+ " /usr/gcc/7/lib/gcc/sparcv9-sun-solaris2.11/7.5.0/32/crtbegin.o" ,
182
+ " /usr/gcc/7/lib/gcc/sparcv9-sun-solaris2.11/7.5.0/crtbegin.o" ,
183
+ " /usr/gcc/7/lib/gcc/x86_64-pc-solaris2.11/7.5.0/32/crtbegin.o" ,
184
+ " /usr/gcc/7/lib/gcc/x86_64-pc-solaris2.11/7.5.0/crtbegin.o" ,
185
+ " /usr/gcc/11/lib/gcc/sparcv9-sun-solaris2.11/11.4.0/crtbegin.o" ,
186
+ " /usr/gcc/11/lib/gcc/sparcv9-sun-solaris2.11/11.4.0/sparcv8plus/"
187
+ " crtbegin.o" ,
188
+ " /usr/gcc/11/lib/gcc/x86_64-pc-solaris2.11/11.4.0/32/crtbegin.o" ,
189
+ " /usr/gcc/11/lib/gcc/x86_64-pc-solaris2.11/11.4.0/crtbegin.o" ,
190
+ " /usr/gcc/4.7/lib/gcc/i386-pc-solaris2.11/4.7.3/amd64/crtbegin.o" ,
191
+ " /usr/gcc/4.7/lib/gcc/i386-pc-solaris2.11/4.7.3/crtbegin.o" ,
192
+ " /usr/gcc/4.7/lib/gcc/sparc-sun-solaris2.11/4.7.3/crtbegin.o" ,
193
+ " /usr/gcc/4.7/lib/gcc/sparc-sun-solaris2.11/4.7.3/sparcv9/crtbegin.o" ,
194
+ };
195
+
196
+ for (const char *Path : EmptyFiles)
197
+ InMemoryFileSystem->addFile (Path, 0 ,
198
+ llvm::MemoryBuffer::getMemBuffer (" \n " ));
199
+
200
+ {
201
+ DiagnosticsEngine Diags (DiagID, &*DiagOpts, new TestDiagnosticConsumer);
202
+ Driver TheDriver (" /bin/clang" , " i386-pc-solaris2.11" , Diags,
203
+ " clang LLVM compiler" , InMemoryFileSystem);
204
+ std::unique_ptr<Compilation> C (
205
+ TheDriver.BuildCompilation ({" -v" , " --gcc-toolchain=" , " --sysroot=" }));
206
+ ASSERT_TRUE (C);
207
+ std::string S;
208
+ {
209
+ llvm::raw_string_ostream OS (S);
210
+ C->getDefaultToolChain ().printVerboseInfo (OS);
211
+ }
212
+ if (is_style_windows (llvm::sys::path::Style::native))
213
+ std::replace (S.begin (), S.end (), ' \\ ' , ' /' );
214
+ EXPECT_EQ (" Found candidate GCC installation: "
215
+ " /usr/gcc/11/lib/gcc/x86_64-pc-solaris2.11/11.4.0\n "
216
+ " Selected GCC installation: "
217
+ " /usr/gcc/11/lib/gcc/x86_64-pc-solaris2.11/11.4.0\n "
218
+ " Candidate multilib: .;@m64\n "
219
+ " Candidate multilib: 32;@m32\n "
220
+ " Selected multilib: 32;@m32\n " ,
221
+ S);
222
+ }
223
+
224
+ {
225
+ DiagnosticsEngine Diags (DiagID, &*DiagOpts, new TestDiagnosticConsumer);
226
+ Driver TheDriver (" /bin/clang" , " amd64-pc-solaris2.11" , Diags,
227
+ " clang LLVM compiler" , InMemoryFileSystem);
228
+ std::unique_ptr<Compilation> C (
229
+ TheDriver.BuildCompilation ({" -v" , " --gcc-toolchain=" , " --sysroot=" }));
230
+ ASSERT_TRUE (C);
231
+ std::string S;
232
+ {
233
+ llvm::raw_string_ostream OS (S);
234
+ C->getDefaultToolChain ().printVerboseInfo (OS);
235
+ }
236
+ if (is_style_windows (llvm::sys::path::Style::native))
237
+ std::replace (S.begin (), S.end (), ' \\ ' , ' /' );
238
+ EXPECT_EQ (" Found candidate GCC installation: "
239
+ " /usr/gcc/11/lib/gcc/x86_64-pc-solaris2.11/11.4.0\n "
240
+ " Selected GCC installation: "
241
+ " /usr/gcc/11/lib/gcc/x86_64-pc-solaris2.11/11.4.0\n "
242
+ " Candidate multilib: .;@m64\n "
243
+ " Candidate multilib: 32;@m32\n "
244
+ " Selected multilib: .;@m64\n " ,
245
+ S);
246
+ }
247
+
248
+ {
249
+ DiagnosticsEngine Diags (DiagID, &*DiagOpts, new TestDiagnosticConsumer);
250
+ Driver TheDriver (" /bin/clang" , " x86_64-pc-solaris2.11" , Diags,
251
+ " clang LLVM compiler" , InMemoryFileSystem);
252
+ std::unique_ptr<Compilation> C (
253
+ TheDriver.BuildCompilation ({" -v" , " --gcc-toolchain=" , " --sysroot=" }));
254
+ ASSERT_TRUE (C);
255
+ std::string S;
256
+ {
257
+ llvm::raw_string_ostream OS (S);
258
+ C->getDefaultToolChain ().printVerboseInfo (OS);
259
+ }
260
+ if (is_style_windows (llvm::sys::path::Style::native))
261
+ std::replace (S.begin (), S.end (), ' \\ ' , ' /' );
262
+ EXPECT_EQ (" Found candidate GCC installation: "
263
+ " /usr/gcc/11/lib/gcc/x86_64-pc-solaris2.11/11.4.0\n "
264
+ " Selected GCC installation: "
265
+ " /usr/gcc/11/lib/gcc/x86_64-pc-solaris2.11/11.4.0\n "
266
+ " Candidate multilib: .;@m64\n "
267
+ " Candidate multilib: 32;@m32\n "
268
+ " Selected multilib: .;@m64\n " ,
269
+ S);
270
+ }
271
+
272
+ {
273
+ DiagnosticsEngine Diags (DiagID, &*DiagOpts, new TestDiagnosticConsumer);
274
+ Driver TheDriver (" /bin/clang" , " sparc-sun-solaris2.11" , Diags,
275
+ " clang LLVM compiler" , InMemoryFileSystem);
276
+ std::unique_ptr<Compilation> C (
277
+ TheDriver.BuildCompilation ({" -v" , " --gcc-toolchain=" , " --sysroot=" }));
278
+ ASSERT_TRUE (C);
279
+ std::string S;
280
+ {
281
+ llvm::raw_string_ostream OS (S);
282
+ C->getDefaultToolChain ().printVerboseInfo (OS);
283
+ }
284
+ if (is_style_windows (llvm::sys::path::Style::native))
285
+ std::replace (S.begin (), S.end (), ' \\ ' , ' /' );
286
+ EXPECT_EQ (" Found candidate GCC installation: "
287
+ " /usr/gcc/11/lib/gcc/sparcv9-sun-solaris2.11/11.4.0\n "
288
+ " Selected GCC installation: "
289
+ " /usr/gcc/11/lib/gcc/sparcv9-sun-solaris2.11/11.4.0\n "
290
+ " Candidate multilib: .;@m64\n "
291
+ " Candidate multilib: sparcv8plus;@m32\n "
292
+ " Selected multilib: sparcv8plus;@m32\n " ,
293
+ S);
294
+ }
295
+ {
296
+ DiagnosticsEngine Diags (DiagID, &*DiagOpts, new TestDiagnosticConsumer);
297
+ Driver TheDriver (" /bin/clang" , " sparcv9-sun-solaris2.11" , Diags,
298
+ " clang LLVM compiler" , InMemoryFileSystem);
299
+ std::unique_ptr<Compilation> C (
300
+ TheDriver.BuildCompilation ({" -v" , " --gcc-toolchain=" , " --sysroot=" }));
301
+ ASSERT_TRUE (C);
302
+ std::string S;
303
+ {
304
+ llvm::raw_string_ostream OS (S);
305
+ C->getDefaultToolChain ().printVerboseInfo (OS);
306
+ }
307
+ if (is_style_windows (llvm::sys::path::Style::native))
308
+ std::replace (S.begin (), S.end (), ' \\ ' , ' /' );
309
+ EXPECT_EQ (" Found candidate GCC installation: "
310
+ " /usr/gcc/11/lib/gcc/sparcv9-sun-solaris2.11/11.4.0\n "
311
+ " Selected GCC installation: "
312
+ " /usr/gcc/11/lib/gcc/sparcv9-sun-solaris2.11/11.4.0\n "
313
+ " Candidate multilib: .;@m64\n "
314
+ " Candidate multilib: sparcv8plus;@m32\n "
315
+ " Selected multilib: .;@m64\n " ,
316
+ S);
317
+ }
318
+ }
319
+
171
320
TEST (ToolChainTest, DefaultDriverMode) {
172
321
IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions ();
173
322
0 commit comments