2323#include " llvm/Support/VirtualFileSystem.h"
2424#include " llvm/Support/raw_ostream.h"
2525#include " gtest/gtest.h"
26+ #include < memory>
2627using namespace clang ;
2728using namespace clang ::driver;
2829
@@ -388,22 +389,27 @@ struct SimpleDiagnosticConsumer : public DiagnosticConsumer {
388389 std::vector<SmallString<32 >> Errors;
389390};
390391
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);
396400 EXPECT_STREQ (TheDriver.getTargetTriple ().c_str (), ExpectTriple.data ());
397401 EXPECT_EQ (Diags.getNumErrors (), 0u );
398402}
399403
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);
407413 EXPECT_EQ (Diags.getNumErrors (), NumOfErrors);
408414 EXPECT_STREQ (DiagConsumer->Errors .back ().c_str (), ExpectError.data ());
409415 Diags.Clear ();
@@ -422,41 +428,40 @@ TEST(DxcModeTest, TargetProfileValidation) {
422428 auto *DiagConsumer = new SimpleDiagnosticConsumer;
423429 IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions ();
424430 DiagnosticsEngine Diags (DiagID, &*DiagOpts, DiagConsumer);
425- Driver TheDriver (" /bin/clang" , " " , Diags, " " , InMemoryFileSystem);
426431
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);
443448 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);
447452
448453 // 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 );
460465}
461466
462467TEST (DxcModeTest, ValidatorVersionValidation) {
0 commit comments