Author: Chris Bieneman Date: 2022-08-18T16:06:41-05:00 New Revision: 0ac597f3cacf60479ffd36b03766fa7462dabd78
URL: https://github.com/llvm/llvm-project/commit/0ac597f3cacf60479ffd36b03766fa7462dabd78 DIFF: https://github.com/llvm/llvm-project/commit/0ac597f3cacf60479ffd36b03766fa7462dabd78.diff LOG: [NFC] Move DXC driver tests The DXC driver tests don't really belong mixed in with the toolchain tests. This pulls them out to their own file and moves the SimpleDiagnosticConsumer into a header so it can be used by both DXC and toolchain tests. fast-forwarded. Added: clang/unittests/Driver/DXCModeTest.cpp clang/unittests/Driver/SimpleDiagnosticConsumer.h Modified: clang/unittests/Driver/CMakeLists.txt clang/unittests/Driver/ToolChainTest.cpp Removed: ################################################################################ diff --git a/clang/unittests/Driver/CMakeLists.txt b/clang/unittests/Driver/CMakeLists.txt index aced8f4c467ef..01149587d44e3 100644 --- a/clang/unittests/Driver/CMakeLists.txt +++ b/clang/unittests/Driver/CMakeLists.txt @@ -7,6 +7,7 @@ set(LLVM_LINK_COMPONENTS add_clang_unittest(ClangDriverTests DistroTest.cpp + DXCModeTest.cpp ToolChainTest.cpp ModuleCacheTest.cpp MultilibTest.cpp diff --git a/clang/unittests/Driver/DXCModeTest.cpp b/clang/unittests/Driver/DXCModeTest.cpp new file mode 100644 index 0000000000000..9ff431bb6cbb7 --- /dev/null +++ b/clang/unittests/Driver/DXCModeTest.cpp @@ -0,0 +1,239 @@ +//===- unittests/Driver/DXCModeTest.cpp --- DXC Mode tests ----------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// Unit tests for driver DXCMode. +// +//===----------------------------------------------------------------------===// + +#include "clang/Basic/DiagnosticIDs.h" +#include "clang/Basic/DiagnosticOptions.h" +#include "clang/Basic/LLVM.h" +#include "clang/Basic/TargetOptions.h" +#include "clang/Driver/Compilation.h" +#include "clang/Driver/Driver.h" +#include "clang/Driver/ToolChain.h" +#include "clang/Frontend/CompilerInstance.h" +#include "llvm/Support/VirtualFileSystem.h" +#include "llvm/Support/raw_ostream.h" +#include "gtest/gtest.h" +#include <memory> + +#include "SimpleDiagnosticConsumer.h" + +using namespace clang; +using namespace clang::driver; + +static void validateTargetProfile( + StringRef TargetProfile, StringRef ExpectTriple, + IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> &InMemoryFileSystem, + DiagnosticsEngine &Diags) { + Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem); + std::unique_ptr<Compilation> 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, + IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> &InMemoryFileSystem, + DiagnosticsEngine &Diags, SimpleDiagnosticConsumer *DiagConsumer, + unsigned NumOfErrors) { + Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem); + std::unique_ptr<Compilation> 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(); + DiagConsumer->clear(); +} + +TEST(DxcModeTest, TargetProfileValidation) { + IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs()); + + IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> InMemoryFileSystem( + new llvm::vfs::InMemoryFileSystem); + + InMemoryFileSystem->addFile("foo.hlsl", 0, + llvm::MemoryBuffer::getMemBuffer("\n")); + + auto *DiagConsumer = new SimpleDiagnosticConsumer; + IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions(); + DiagnosticsEngine Diags(DiagID, &*DiagOpts, DiagConsumer); + + 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", + InMemoryFileSystem, Diags); + validateTargetProfile("-Tlib_6_x", "dxil--shadermodel6.15-library", + InMemoryFileSystem, Diags); + + // Invalid tests. + validateTargetProfile("-Tpss_6_1", "invalid profile : pss_6_1", + InMemoryFileSystem, Diags, DiagConsumer, 1); + + 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) { + IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs()); + + IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> InMemoryFileSystem( + new llvm::vfs::InMemoryFileSystem); + + InMemoryFileSystem->addFile("foo.hlsl", 0, + llvm::MemoryBuffer::getMemBuffer("\n")); + + auto *DiagConsumer = new SimpleDiagnosticConsumer; + IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions(); + DiagnosticsEngine Diags(DiagID, &*DiagOpts, DiagConsumer); + Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem); + std::unique_ptr<Compilation> C(TheDriver.BuildCompilation( + {"clang", "--driver-mode=dxc", "-Tlib_6_7", "foo.hlsl"})); + EXPECT_TRUE(C); + EXPECT_TRUE(!C->containsError()); + + auto &TC = C->getDefaultToolChain(); + bool ContainsError = false; + auto Args = TheDriver.ParseArgStrings({"-validator-version", "1.1"}, false, + ContainsError); + EXPECT_FALSE(ContainsError); + auto DAL = std::make_unique<llvm::opt::DerivedArgList>(Args); + for (auto *A : Args) + DAL->append(A); + + std::unique_ptr<llvm::opt::DerivedArgList> TranslatedArgs{ + TC.TranslateArgs(*DAL, "0", Action::OffloadKind::OFK_None)}; + EXPECT_NE(TranslatedArgs, nullptr); + if (TranslatedArgs) { + auto *A = TranslatedArgs->getLastArg( + clang::driver::options::OPT_dxil_validator_version); + EXPECT_NE(A, nullptr); + if (A) + EXPECT_STREQ(A->getValue(), "1.1"); + } + EXPECT_EQ(Diags.getNumErrors(), 0u); + + // Invalid tests. + Args = TheDriver.ParseArgStrings({"-validator-version", "0.1"}, false, + ContainsError); + EXPECT_FALSE(ContainsError); + DAL = std::make_unique<llvm::opt::DerivedArgList>(Args); + for (auto *A : Args) + DAL->append(A); + + TranslatedArgs.reset( + TC.TranslateArgs(*DAL, "0", Action::OffloadKind::OFK_None)); + EXPECT_EQ(Diags.getNumErrors(), 1u); + EXPECT_STREQ(DiagConsumer->Errors.back().c_str(), + "invalid validator version : 0.1\nIf validator major version is " + "0, minor version must also be 0."); + Diags.Clear(); + DiagConsumer->clear(); + + Args = TheDriver.ParseArgStrings({"-validator-version", "1"}, false, + ContainsError); + EXPECT_FALSE(ContainsError); + DAL = std::make_unique<llvm::opt::DerivedArgList>(Args); + for (auto *A : Args) + DAL->append(A); + + TranslatedArgs.reset( + TC.TranslateArgs(*DAL, "0", Action::OffloadKind::OFK_None)); + EXPECT_EQ(Diags.getNumErrors(), 2u); + EXPECT_STREQ(DiagConsumer->Errors.back().c_str(), + "invalid validator version : 1\nFormat of validator version is " + "\"<major>.<minor>\" (ex:\"1.4\")."); + Diags.Clear(); + DiagConsumer->clear(); + + Args = TheDriver.ParseArgStrings({"-validator-version", "-Tlib_6_7"}, false, + ContainsError); + EXPECT_FALSE(ContainsError); + DAL = std::make_unique<llvm::opt::DerivedArgList>(Args); + for (auto *A : Args) + DAL->append(A); + + TranslatedArgs.reset( + TC.TranslateArgs(*DAL, "0", Action::OffloadKind::OFK_None)); + EXPECT_EQ(Diags.getNumErrors(), 3u); + EXPECT_STREQ( + DiagConsumer->Errors.back().c_str(), + "invalid validator version : -Tlib_6_7\nFormat of validator version is " + "\"<major>.<minor>\" (ex:\"1.4\")."); + Diags.Clear(); + DiagConsumer->clear(); + + Args = TheDriver.ParseArgStrings({"-validator-version", "foo"}, false, + ContainsError); + EXPECT_FALSE(ContainsError); + DAL = std::make_unique<llvm::opt::DerivedArgList>(Args); + for (auto *A : Args) + DAL->append(A); + + TranslatedArgs.reset( + TC.TranslateArgs(*DAL, "0", Action::OffloadKind::OFK_None)); + EXPECT_EQ(Diags.getNumErrors(), 4u); + EXPECT_STREQ( + DiagConsumer->Errors.back().c_str(), + "invalid validator version : foo\nFormat of validator version is " + "\"<major>.<minor>\" (ex:\"1.4\")."); + Diags.Clear(); + DiagConsumer->clear(); +} + +TEST(DxcModeTest, DefaultEntry) { + IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> InMemoryFileSystem( + new llvm::vfs::InMemoryFileSystem); + + InMemoryFileSystem->addFile("foo.hlsl", 0, + llvm::MemoryBuffer::getMemBuffer("\n")); + + const char *Args[] = {"clang", "--driver-mode=dxc", "-Tcs_6_7", "foo.hlsl"}; + + IntrusiveRefCntPtr<DiagnosticsEngine> Diags = + CompilerInstance::createDiagnostics(new DiagnosticOptions()); + + CreateInvocationOptions CIOpts; + CIOpts.Diags = Diags; + std::unique_ptr<CompilerInvocation> CInvok = + createInvocation(Args, std::move(CIOpts)); + EXPECT_TRUE(CInvok); + // Make sure default entry is "main". + EXPECT_STREQ(CInvok->getTargetOpts().HLSLEntry.c_str(), "main"); + + const char *EntryArgs[] = {"clang", "--driver-mode=dxc", "-Ebar", "-Tcs_6_7", + "foo.hlsl"}; + CInvok = createInvocation(EntryArgs, std::move(CIOpts)); + EXPECT_TRUE(CInvok); + // Make sure "-E" will set entry. + EXPECT_STREQ(CInvok->getTargetOpts().HLSLEntry.c_str(), "bar"); +} diff --git a/clang/unittests/Driver/SimpleDiagnosticConsumer.h b/clang/unittests/Driver/SimpleDiagnosticConsumer.h new file mode 100644 index 0000000000000..f11cccd64e379 --- /dev/null +++ b/clang/unittests/Driver/SimpleDiagnosticConsumer.h @@ -0,0 +1,39 @@ +//===- unittests/Driver/SimpleDiagnosticConsumer.h ------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// Simple diagnostic consumer to grab up diagnostics for testing. +// +//===----------------------------------------------------------------------===// + +#ifndef CLANG_UNITTESTS_SIMPLEDIAGNOSTICCONSUMER_H +#define CLANG_UNITTESTS_SIMPLEDIAGNOSTICCONSUMER_H + +#include "clang/Basic/Diagnostic.h" +#include "llvm/ADT/SmallString.h" + +struct SimpleDiagnosticConsumer : public clang::DiagnosticConsumer { + void HandleDiagnostic(clang::DiagnosticsEngine::Level DiagLevel, + const clang::Diagnostic &Info) override { + if (DiagLevel == clang::DiagnosticsEngine::Level::Error) { + Errors.emplace_back(); + Info.FormatDiagnostic(Errors.back()); + } else { + Msgs.emplace_back(); + Info.FormatDiagnostic(Msgs.back()); + } + } + void clear() override { + Msgs.clear(); + Errors.clear(); + DiagnosticConsumer::clear(); + } + std::vector<llvm::SmallString<32>> Msgs; + std::vector<llvm::SmallString<32>> Errors; +}; + +#endif // CLANG_UNITTESTS_SIMPLEDIAGNOSTICCONSUMER_H diff --git a/clang/unittests/Driver/ToolChainTest.cpp b/clang/unittests/Driver/ToolChainTest.cpp index e1c4e4eb2f55b..3faa285bf9112 100644 --- a/clang/unittests/Driver/ToolChainTest.cpp +++ b/clang/unittests/Driver/ToolChainTest.cpp @@ -26,6 +26,9 @@ #include "llvm/Support/raw_ostream.h" #include "gtest/gtest.h" #include <memory> + +#include "SimpleDiagnosticConsumer.h" + using namespace clang; using namespace clang::driver; @@ -391,215 +394,6 @@ struct SimpleDiagnosticConsumer : public DiagnosticConsumer { std::vector<SmallString<32>> Errors; }; -static void validateTargetProfile( - StringRef TargetProfile, StringRef ExpectTriple, - IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> &InMemoryFileSystem, - DiagnosticsEngine &Diags) { - Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem); - std::unique_ptr<Compilation> 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, - IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> &InMemoryFileSystem, - DiagnosticsEngine &Diags, SimpleDiagnosticConsumer *DiagConsumer, - unsigned NumOfErrors) { - Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem); - std::unique_ptr<Compilation> 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(); - DiagConsumer->clear(); -} - -TEST(DxcModeTest, TargetProfileValidation) { - IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs()); - - IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> InMemoryFileSystem( - new llvm::vfs::InMemoryFileSystem); - - InMemoryFileSystem->addFile("foo.hlsl", 0, - llvm::MemoryBuffer::getMemBuffer("\n")); - - auto *DiagConsumer = new SimpleDiagnosticConsumer; - IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions(); - DiagnosticsEngine Diags(DiagID, &*DiagOpts, DiagConsumer); - - 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", - InMemoryFileSystem, Diags); - validateTargetProfile("-Tlib_6_x", "dxil--shadermodel6.15-library", - InMemoryFileSystem, Diags); - - // Invalid tests. - validateTargetProfile("-Tpss_6_1", "invalid profile : pss_6_1", - InMemoryFileSystem, Diags, DiagConsumer, 1); - - 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) { - IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs()); - - IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> InMemoryFileSystem( - new llvm::vfs::InMemoryFileSystem); - - InMemoryFileSystem->addFile("foo.hlsl", 0, - llvm::MemoryBuffer::getMemBuffer("\n")); - - auto *DiagConsumer = new SimpleDiagnosticConsumer; - IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions(); - DiagnosticsEngine Diags(DiagID, &*DiagOpts, DiagConsumer); - Driver TheDriver("/bin/clang", "", Diags, "", InMemoryFileSystem); - std::unique_ptr<Compilation> C(TheDriver.BuildCompilation( - {"clang", "--driver-mode=dxc", "-Tlib_6_7", "foo.hlsl"})); - EXPECT_TRUE(C); - EXPECT_TRUE(!C->containsError()); - - auto &TC = C->getDefaultToolChain(); - bool ContainsError = false; - auto Args = TheDriver.ParseArgStrings({"-validator-version", "1.1"}, false, - ContainsError); - EXPECT_FALSE(ContainsError); - auto DAL = std::make_unique<llvm::opt::DerivedArgList>(Args); - for (auto *A : Args) - DAL->append(A); - - std::unique_ptr<llvm::opt::DerivedArgList> TranslatedArgs{ - TC.TranslateArgs(*DAL, "0", Action::OffloadKind::OFK_None)}; - EXPECT_NE(TranslatedArgs, nullptr); - if (TranslatedArgs) { - auto *A = TranslatedArgs->getLastArg( - clang::driver::options::OPT_dxil_validator_version); - EXPECT_NE(A, nullptr); - if (A) - EXPECT_STREQ(A->getValue(), "1.1"); - } - EXPECT_EQ(Diags.getNumErrors(), 0u); - - // Invalid tests. - Args = TheDriver.ParseArgStrings({"-validator-version", "0.1"}, false, - ContainsError); - EXPECT_FALSE(ContainsError); - DAL = std::make_unique<llvm::opt::DerivedArgList>(Args); - for (auto *A : Args) - DAL->append(A); - - TranslatedArgs.reset( - TC.TranslateArgs(*DAL, "0", Action::OffloadKind::OFK_None)); - EXPECT_EQ(Diags.getNumErrors(), 1u); - EXPECT_STREQ(DiagConsumer->Errors.back().c_str(), - "invalid validator version : 0.1\nIf validator major version is " - "0, minor version must also be 0."); - Diags.Clear(); - DiagConsumer->clear(); - - Args = TheDriver.ParseArgStrings({"-validator-version", "1"}, false, - ContainsError); - EXPECT_FALSE(ContainsError); - DAL = std::make_unique<llvm::opt::DerivedArgList>(Args); - for (auto *A : Args) - DAL->append(A); - - TranslatedArgs.reset( - TC.TranslateArgs(*DAL, "0", Action::OffloadKind::OFK_None)); - EXPECT_EQ(Diags.getNumErrors(), 2u); - EXPECT_STREQ(DiagConsumer->Errors.back().c_str(), - "invalid validator version : 1\nFormat of validator version is " - "\"<major>.<minor>\" (ex:\"1.4\")."); - Diags.Clear(); - DiagConsumer->clear(); - - Args = TheDriver.ParseArgStrings({"-validator-version", "-Tlib_6_7"}, false, - ContainsError); - EXPECT_FALSE(ContainsError); - DAL = std::make_unique<llvm::opt::DerivedArgList>(Args); - for (auto *A : Args) - DAL->append(A); - - TranslatedArgs.reset( - TC.TranslateArgs(*DAL, "0", Action::OffloadKind::OFK_None)); - EXPECT_EQ(Diags.getNumErrors(), 3u); - EXPECT_STREQ( - DiagConsumer->Errors.back().c_str(), - "invalid validator version : -Tlib_6_7\nFormat of validator version is " - "\"<major>.<minor>\" (ex:\"1.4\")."); - Diags.Clear(); - DiagConsumer->clear(); - - Args = TheDriver.ParseArgStrings({"-validator-version", "foo"}, false, - ContainsError); - EXPECT_FALSE(ContainsError); - DAL = std::make_unique<llvm::opt::DerivedArgList>(Args); - for (auto *A : Args) - DAL->append(A); - - TranslatedArgs.reset( - TC.TranslateArgs(*DAL, "0", Action::OffloadKind::OFK_None)); - EXPECT_EQ(Diags.getNumErrors(), 4u); - EXPECT_STREQ( - DiagConsumer->Errors.back().c_str(), - "invalid validator version : foo\nFormat of validator version is " - "\"<major>.<minor>\" (ex:\"1.4\")."); - Diags.Clear(); - DiagConsumer->clear(); -} - -TEST(DxcModeTest, DefaultEntry) { - IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> InMemoryFileSystem( - new llvm::vfs::InMemoryFileSystem); - - InMemoryFileSystem->addFile("foo.hlsl", 0, - llvm::MemoryBuffer::getMemBuffer("\n")); - - const char *Args[] = {"clang", "--driver-mode=dxc", "-Tcs_6_7", "foo.hlsl"}; - - IntrusiveRefCntPtr<DiagnosticsEngine> Diags = - CompilerInstance::createDiagnostics(new DiagnosticOptions()); - - CreateInvocationOptions CIOpts; - CIOpts.Diags = Diags; - std::unique_ptr<CompilerInvocation> CInvok = - createInvocation(Args, std::move(CIOpts)); - EXPECT_TRUE(CInvok); - // Make sure default entry is "main". - EXPECT_STREQ(CInvok->getTargetOpts().HLSLEntry.c_str(), "main"); - - const char *EntryArgs[] = {"clang", "--driver-mode=dxc", "-Ebar", "-Tcs_6_7", "foo.hlsl"}; - CInvok = createInvocation(EntryArgs, std::move(CIOpts)); - EXPECT_TRUE(CInvok); - // Make sure "-E" will set entry. - EXPECT_STREQ(CInvok->getTargetOpts().HLSLEntry.c_str(), "bar"); -} - TEST(ToolChainTest, Toolsets) { // Ignore this test on Windows hosts. llvm::Triple Host(llvm::sys::getProcessTriple()); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits