mirror of
https://github.com/intel/llvm.git
synced 2026-01-26 21:53:12 +08:00
[include-cleaner] Add regression tests for outliving File&Source Manager
This commit is contained in:
@@ -558,5 +558,35 @@ TEST_F(PragmaIncludeTest, ExportInUnnamedBuffer) {
|
||||
PI.getExporters(llvm::cantFail(FM->getFileRef("foo.h")), *FM),
|
||||
testing::ElementsAre(llvm::cantFail(FM->getFileRef("exporter.h"))));
|
||||
}
|
||||
|
||||
TEST_F(PragmaIncludeTest, OutlivesFMAndSM) {
|
||||
Inputs.Code = R"cpp(
|
||||
#include "public.h"
|
||||
)cpp";
|
||||
Inputs.ExtraFiles["public.h"] = R"cpp(
|
||||
#include "private.h"
|
||||
#include "private2.h" // IWYU pragma: export
|
||||
)cpp";
|
||||
Inputs.ExtraFiles["private.h"] = R"cpp(
|
||||
// IWYU pragma: private, include "public.h"
|
||||
)cpp";
|
||||
Inputs.ExtraFiles["private2.h"] = R"cpp(
|
||||
// IWYU pragma: private
|
||||
)cpp";
|
||||
build(); // Fills up PI, file/source manager used is destroyed afterwards.
|
||||
Inputs.MakeAction = nullptr; // Don't populate PI anymore.
|
||||
|
||||
// Now this build gives us a new File&Source Manager.
|
||||
TestAST Processed = build();
|
||||
auto &FM = Processed.fileManager();
|
||||
auto PrivateFE = FM.getFile("private.h");
|
||||
assert(PrivateFE);
|
||||
EXPECT_EQ(PI.getPublic(PrivateFE.get()), "\"public.h\"");
|
||||
|
||||
auto Private2FE = FM.getFile("private2.h");
|
||||
assert(Private2FE);
|
||||
EXPECT_THAT(PI.getExporters(Private2FE.get(), FM),
|
||||
testing::ElementsAre(llvm::cantFail(FM.getFileRef("public.h"))));
|
||||
}
|
||||
} // namespace
|
||||
} // namespace clang::include_cleaner
|
||||
|
||||
Reference in New Issue
Block a user