diff --git a/clang/unittests/Driver/ToolChainTest.cpp b/clang/unittests/Driver/ToolChainTest.cpp index 02ab9e743ebe..64bc616523f0 100644 --- a/clang/unittests/Driver/ToolChainTest.cpp +++ b/clang/unittests/Driver/ToolChainTest.cpp @@ -23,6 +23,7 @@ #include "llvm/Support/VirtualFileSystem.h" #include "llvm/Support/raw_ostream.h" #include "gtest/gtest.h" +#include using namespace clang; using namespace clang::driver; @@ -388,22 +389,27 @@ struct SimpleDiagnosticConsumer : public DiagnosticConsumer { std::vector> Errors; }; -static void validateTargetProfile(StringRef TargetProfile, - StringRef ExpectTriple, Driver &TheDriver, - DiagnosticsEngine &Diags) { - EXPECT_TRUE(TheDriver.BuildCompilation( - {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl"})); +static void validateTargetProfile( + StringRef TargetProfile, StringRef ExpectTriple, + IntrusiveRefCntPtr &InMemoryFileSystem, + DiagnosticsEngine &Diags) { + Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem); + std::unique_ptr C{TheDriver.BuildCompilation( + {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl"})}; + EXPECT_TRUE(C); EXPECT_STREQ(TheDriver.getTargetTriple().c_str(), ExpectTriple.data()); EXPECT_EQ(Diags.getNumErrors(), 0u); } -static void validateTargetProfile(StringRef TargetProfile, - StringRef ExpectError, Driver &TheDriver, - DiagnosticsEngine &Diags, - SimpleDiagnosticConsumer *DiagConsumer, - unsigned NumOfErrors) { - EXPECT_TRUE(TheDriver.BuildCompilation( - {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl"})); +static void validateTargetProfile( + StringRef TargetProfile, StringRef ExpectError, + IntrusiveRefCntPtr &InMemoryFileSystem, + DiagnosticsEngine &Diags, SimpleDiagnosticConsumer *DiagConsumer, + unsigned NumOfErrors) { + Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem); + std::unique_ptr C{TheDriver.BuildCompilation( + {"clang", "--driver-mode=dxc", TargetProfile.data(), "foo.hlsl"})}; + EXPECT_TRUE(C); EXPECT_EQ(Diags.getNumErrors(), NumOfErrors); EXPECT_STREQ(DiagConsumer->Errors.back().c_str(), ExpectError.data()); Diags.Clear(); @@ -422,41 +428,40 @@ TEST(DxcModeTest, TargetProfileValidation) { auto *DiagConsumer = new SimpleDiagnosticConsumer; IntrusiveRefCntPtr DiagOpts = new DiagnosticOptions(); DiagnosticsEngine Diags(DiagID, &*DiagOpts, DiagConsumer); - Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem); - validateTargetProfile("-Tvs_6_0", "dxil--shadermodel6.0-vertex", TheDriver, - Diags); - validateTargetProfile("-Ths_6_1", "dxil--shadermodel6.1-hull", TheDriver, - Diags); - validateTargetProfile("-Tds_6_2", "dxil--shadermodel6.2-domain", TheDriver, - Diags); - validateTargetProfile("-Tds_6_2", "dxil--shadermodel6.2-domain", TheDriver, - Diags); - validateTargetProfile("-Tgs_6_3", "dxil--shadermodel6.3-geometry", TheDriver, - Diags); - validateTargetProfile("-Tps_6_4", "dxil--shadermodel6.4-pixel", TheDriver, - Diags); - validateTargetProfile("-Tcs_6_5", "dxil--shadermodel6.5-compute", TheDriver, - Diags); - validateTargetProfile("-Tms_6_6", "dxil--shadermodel6.6-mesh", TheDriver, - Diags); + validateTargetProfile("-Tvs_6_0", "dxil--shadermodel6.0-vertex", + InMemoryFileSystem, Diags); + validateTargetProfile("-Ths_6_1", "dxil--shadermodel6.1-hull", + InMemoryFileSystem, Diags); + validateTargetProfile("-Tds_6_2", "dxil--shadermodel6.2-domain", + InMemoryFileSystem, Diags); + validateTargetProfile("-Tds_6_2", "dxil--shadermodel6.2-domain", + InMemoryFileSystem, Diags); + validateTargetProfile("-Tgs_6_3", "dxil--shadermodel6.3-geometry", + InMemoryFileSystem, Diags); + validateTargetProfile("-Tps_6_4", "dxil--shadermodel6.4-pixel", + InMemoryFileSystem, Diags); + validateTargetProfile("-Tcs_6_5", "dxil--shadermodel6.5-compute", + InMemoryFileSystem, Diags); + validateTargetProfile("-Tms_6_6", "dxil--shadermodel6.6-mesh", + InMemoryFileSystem, Diags); validateTargetProfile("-Tas_6_7", "dxil--shadermodel6.7-amplification", - TheDriver, Diags); - validateTargetProfile("-Tlib_6_x", "dxil--shadermodel6.15-library", TheDriver, - Diags); + InMemoryFileSystem, Diags); + validateTargetProfile("-Tlib_6_x", "dxil--shadermodel6.15-library", + InMemoryFileSystem, Diags); // Invalid tests. - validateTargetProfile("-Tpss_6_1", "invalid profile : pss_6_1", TheDriver, - Diags, DiagConsumer, 1); + validateTargetProfile("-Tpss_6_1", "invalid profile : pss_6_1", + InMemoryFileSystem, Diags, DiagConsumer, 1); - validateTargetProfile("-Tps_6_x", "invalid profile : ps_6_x", TheDriver, - Diags, DiagConsumer, 2); - validateTargetProfile("-Tlib_6_1", "invalid profile : lib_6_1", TheDriver, - Diags, DiagConsumer, 3); - validateTargetProfile("-Tfoo", "invalid profile : foo", TheDriver, Diags, - DiagConsumer, 4); - validateTargetProfile("", "target profile option (-T) is missing", TheDriver, - Diags, DiagConsumer, 5); + validateTargetProfile("-Tps_6_x", "invalid profile : ps_6_x", + InMemoryFileSystem, Diags, DiagConsumer, 2); + validateTargetProfile("-Tlib_6_1", "invalid profile : lib_6_1", + InMemoryFileSystem, Diags, DiagConsumer, 3); + validateTargetProfile("-Tfoo", "invalid profile : foo", InMemoryFileSystem, + Diags, DiagConsumer, 4); + validateTargetProfile("", "target profile option (-T) is missing", + InMemoryFileSystem, Diags, DiagConsumer, 5); } TEST(DxcModeTest, ValidatorVersionValidation) {