[test] Fix memory leak in validateTargetProfile
Unfortunatly fixing leak expose use-after-free if delete more then one Compilation for the same Driver, so I am changing validateTargetProfile to create own Driver each time. The test was added by D122865.
This commit is contained in:
parent
21ef59a55e
commit
0fbafb5a1c
|
@ -23,6 +23,7 @@
|
|||
#include "llvm/Support/VirtualFileSystem.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include "gtest/gtest.h"
|
||||
#include <memory>
|
||||
using namespace clang;
|
||||
using namespace clang::driver;
|
||||
|
||||
|
@ -388,22 +389,27 @@ struct SimpleDiagnosticConsumer : public DiagnosticConsumer {
|
|||
std::vector<SmallString<32>> 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<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, 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<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();
|
||||
|
@ -422,41 +428,40 @@ TEST(DxcModeTest, TargetProfileValidation) {
|
|||
auto *DiagConsumer = new SimpleDiagnosticConsumer;
|
||||
IntrusiveRefCntPtr<DiagnosticOptions> 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) {
|
||||
|
|
Loading…
Reference in a new issue