23
23
#include " llvm/Support/VirtualFileSystem.h"
24
24
#include " llvm/Support/raw_ostream.h"
25
25
#include " gtest/gtest.h"
26
+ #include < memory>
26
27
using namespace clang ;
27
28
using namespace clang ::driver;
28
29
@@ -388,22 +389,27 @@ struct SimpleDiagnosticConsumer : public DiagnosticConsumer {
388
389
std::vector<SmallString<32 >> Errors;
389
390
};
390
391
391
- static void validateTargetProfile (StringRef TargetProfile,
392
- StringRef ExpectTriple, Driver &TheDriver,
393
- DiagnosticsEngine &Diags) {
394
- EXPECT_TRUE (TheDriver.BuildCompilation (
395
- {" clang" , " --driver-mode=dxc" , TargetProfile.data (), " foo.hlsl" }));
392
+ static void validateTargetProfile (
393
+ StringRef TargetProfile, StringRef ExpectTriple,
394
+ IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> &InMemoryFileSystem,
395
+ DiagnosticsEngine &Diags) {
396
+ Driver TheDriver (" /bin/clang" , " " , Diags, " " , InMemoryFileSystem);
397
+ std::unique_ptr<Compilation> C{TheDriver.BuildCompilation (
398
+ {" clang" , " --driver-mode=dxc" , TargetProfile.data (), " foo.hlsl" })};
399
+ EXPECT_TRUE (C);
396
400
EXPECT_STREQ (TheDriver.getTargetTriple ().c_str (), ExpectTriple.data ());
397
401
EXPECT_EQ (Diags.getNumErrors (), 0u );
398
402
}
399
403
400
- static void validateTargetProfile (StringRef TargetProfile,
401
- StringRef ExpectError, Driver &TheDriver,
402
- DiagnosticsEngine &Diags,
403
- SimpleDiagnosticConsumer *DiagConsumer,
404
- unsigned NumOfErrors) {
405
- EXPECT_TRUE (TheDriver.BuildCompilation (
406
- {" clang" , " --driver-mode=dxc" , TargetProfile.data (), " foo.hlsl" }));
404
+ static void validateTargetProfile (
405
+ StringRef TargetProfile, StringRef ExpectError,
406
+ IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> &InMemoryFileSystem,
407
+ DiagnosticsEngine &Diags, SimpleDiagnosticConsumer *DiagConsumer,
408
+ unsigned NumOfErrors) {
409
+ Driver TheDriver (" /bin/clang" , " " , Diags, " " , InMemoryFileSystem);
410
+ std::unique_ptr<Compilation> C{TheDriver.BuildCompilation (
411
+ {" clang" , " --driver-mode=dxc" , TargetProfile.data (), " foo.hlsl" })};
412
+ EXPECT_TRUE (C);
407
413
EXPECT_EQ (Diags.getNumErrors (), NumOfErrors);
408
414
EXPECT_STREQ (DiagConsumer->Errors .back ().c_str (), ExpectError.data ());
409
415
Diags.Clear ();
@@ -422,41 +428,40 @@ TEST(DxcModeTest, TargetProfileValidation) {
422
428
auto *DiagConsumer = new SimpleDiagnosticConsumer;
423
429
IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions ();
424
430
DiagnosticsEngine Diags (DiagID, &*DiagOpts, DiagConsumer);
425
- Driver TheDriver (" /bin/clang" , " " , Diags, " " , InMemoryFileSystem);
426
431
427
- validateTargetProfile (" -Tvs_6_0" , " dxil--shadermodel6.0-vertex" , TheDriver,
428
- Diags);
429
- validateTargetProfile (" -Ths_6_1" , " dxil--shadermodel6.1-hull" , TheDriver,
430
- Diags);
431
- validateTargetProfile (" -Tds_6_2" , " dxil--shadermodel6.2-domain" , TheDriver,
432
- Diags);
433
- validateTargetProfile (" -Tds_6_2" , " dxil--shadermodel6.2-domain" , TheDriver,
434
- Diags);
435
- validateTargetProfile (" -Tgs_6_3" , " dxil--shadermodel6.3-geometry" , TheDriver,
436
- Diags);
437
- validateTargetProfile (" -Tps_6_4" , " dxil--shadermodel6.4-pixel" , TheDriver,
438
- Diags);
439
- validateTargetProfile (" -Tcs_6_5" , " dxil--shadermodel6.5-compute" , TheDriver,
440
- Diags);
441
- validateTargetProfile (" -Tms_6_6" , " dxil--shadermodel6.6-mesh" , TheDriver,
442
- Diags);
432
+ validateTargetProfile (" -Tvs_6_0" , " dxil--shadermodel6.0-vertex" ,
433
+ InMemoryFileSystem, Diags);
434
+ validateTargetProfile (" -Ths_6_1" , " dxil--shadermodel6.1-hull" ,
435
+ InMemoryFileSystem, Diags);
436
+ validateTargetProfile (" -Tds_6_2" , " dxil--shadermodel6.2-domain" ,
437
+ InMemoryFileSystem, Diags);
438
+ validateTargetProfile (" -Tds_6_2" , " dxil--shadermodel6.2-domain" ,
439
+ InMemoryFileSystem, Diags);
440
+ validateTargetProfile (" -Tgs_6_3" , " dxil--shadermodel6.3-geometry" ,
441
+ InMemoryFileSystem, Diags);
442
+ validateTargetProfile (" -Tps_6_4" , " dxil--shadermodel6.4-pixel" ,
443
+ InMemoryFileSystem, Diags);
444
+ validateTargetProfile (" -Tcs_6_5" , " dxil--shadermodel6.5-compute" ,
445
+ InMemoryFileSystem, Diags);
446
+ validateTargetProfile (" -Tms_6_6" , " dxil--shadermodel6.6-mesh" ,
447
+ InMemoryFileSystem, Diags);
443
448
validateTargetProfile (" -Tas_6_7" , " dxil--shadermodel6.7-amplification" ,
444
- TheDriver , Diags);
445
- validateTargetProfile (" -Tlib_6_x" , " dxil--shadermodel6.15-library" , TheDriver,
446
- Diags);
449
+ InMemoryFileSystem , Diags);
450
+ validateTargetProfile (" -Tlib_6_x" , " dxil--shadermodel6.15-library" ,
451
+ InMemoryFileSystem, Diags);
447
452
448
453
// Invalid tests.
449
- validateTargetProfile (" -Tpss_6_1" , " invalid profile : pss_6_1" , TheDriver,
450
- Diags, DiagConsumer, 1 );
451
-
452
- validateTargetProfile (" -Tps_6_x" , " invalid profile : ps_6_x" , TheDriver,
453
- Diags, DiagConsumer, 2 );
454
- validateTargetProfile (" -Tlib_6_1" , " invalid profile : lib_6_1" , TheDriver,
455
- Diags, DiagConsumer, 3 );
456
- validateTargetProfile (" -Tfoo" , " invalid profile : foo" , TheDriver, Diags ,
457
- DiagConsumer, 4 );
458
- validateTargetProfile (" " , " target profile option (-T) is missing" , TheDriver,
459
- Diags, DiagConsumer, 5 );
454
+ validateTargetProfile (" -Tpss_6_1" , " invalid profile : pss_6_1" ,
455
+ InMemoryFileSystem, Diags, DiagConsumer, 1 );
456
+
457
+ validateTargetProfile (" -Tps_6_x" , " invalid profile : ps_6_x" ,
458
+ InMemoryFileSystem, Diags, DiagConsumer, 2 );
459
+ validateTargetProfile (" -Tlib_6_1" , " invalid profile : lib_6_1" ,
460
+ InMemoryFileSystem, Diags, DiagConsumer, 3 );
461
+ validateTargetProfile (" -Tfoo" , " invalid profile : foo" , InMemoryFileSystem ,
462
+ Diags, DiagConsumer, 4 );
463
+ validateTargetProfile (" " , " target profile option (-T) is missing" ,
464
+ InMemoryFileSystem, Diags, DiagConsumer, 5 );
460
465
}
461
466
462
467
TEST (DxcModeTest, ValidatorVersionValidation) {
0 commit comments