|
6 | 6 | #include "swift/Basic/SourceManager.h"
|
7 | 7 | #include "swift/ClangImporter/ClangImporter.h"
|
8 | 8 | #include "swift/ClangImporter/ClangImporterOptions.h"
|
9 |
| -#include "clang/Basic/FileManager.h" |
10 |
| -#include "clang/Basic/FileSystemOptions.h" |
11 |
| -#include "clang/Basic/FileSystemStatCache.h" |
12 |
| -#include "clang/Frontend/CompilerInstance.h" |
13 | 9 | #include "llvm/Support/FileSystem.h"
|
14 | 10 | #include "llvm/Support/Path.h"
|
15 | 11 | #include "llvm/Support/raw_ostream.h"
|
@@ -58,6 +54,7 @@ TEST(ClangImporterTest, emitPCHInMemory) {
|
58 | 54 | // Create the includes.
|
59 | 55 | std::string include = createFilename(temp, "include");
|
60 | 56 | ASSERT_FALSE(llvm::sys::fs::create_directory(include));
|
| 57 | + options.ExtraArgs.emplace_back("-nosysteminc"); |
61 | 58 | options.ExtraArgs.emplace_back((llvm::Twine("-I") + include).str());
|
62 | 59 | ASSERT_FALSE(emitFileWithContents(include, "module.modulemap",
|
63 | 60 | "module A {\n"
|
@@ -91,105 +88,3 @@ TEST(ClangImporterTest, emitPCHInMemory) {
|
91 | 88 | ASSERT_FALSE(emitFileWithContents(PCH, "garbage"));
|
92 | 89 | ASSERT_TRUE(importer->canReadPCH(PCH));
|
93 | 90 | }
|
94 |
| - |
95 |
| -class ForgetfulStatCache : public clang::FileSystemStatCache { |
96 |
| -private: |
97 |
| - std::unique_ptr<clang::MemorizeStatCalls> RealStatCache; |
98 |
| - |
99 |
| -public: |
100 |
| - ForgetfulStatCache() { |
101 |
| - RealStatCache = std::make_unique<clang::MemorizeStatCalls>(); |
102 |
| - } |
103 |
| - ~ForgetfulStatCache() = default; |
104 |
| - |
105 |
| - std::error_code getStat(StringRef Path, llvm::vfs::Status &Status, |
106 |
| - bool isFile, |
107 |
| - std::unique_ptr<llvm::vfs::File> *F, |
108 |
| - llvm::vfs::FileSystem &FS) override { |
109 |
| - if (llvm::sys::path::extension(Path) == ".pcm") { |
110 |
| - const auto UID = llvm::sys::fs::UniqueID(1, std::numeric_limits<uint64_t>::max()); |
111 |
| - Status = llvm::vfs::Status(Path, UID, |
112 |
| - /*MTime*/{}, /*User*/0, /*Group*/0, |
113 |
| - /*Size*/0, |
114 |
| - llvm::sys::fs::file_type::regular_file, |
115 |
| - llvm::sys::fs::perms::all_all); |
116 |
| - return std::error_code(); |
117 |
| - } |
118 |
| - |
119 |
| - return clang::FileSystemStatCache::get(Path, Status, isFile, F, |
120 |
| - RealStatCache.get(), FS); |
121 |
| - } |
122 |
| -}; |
123 |
| - |
124 |
| -TEST(ClangImporterTest, missingSubmodule) { |
125 |
| - // Create a temporary cache on disk and clean it up at the end. |
126 |
| - ClangImporterOptions options; |
127 |
| - SmallString<256> temp; |
128 |
| - ASSERT_FALSE(llvm::sys::fs::createUniqueDirectory( |
129 |
| - "ClangImporterTest.missingSubmodule", temp)); |
130 |
| - SWIFT_DEFER { llvm::sys::fs::remove_directories(temp); }; |
131 |
| - |
132 |
| - // Create a cache subdirectory for the modules and PCH. |
133 |
| - std::string cache = createFilename(temp, "cache"); |
134 |
| - ASSERT_FALSE(llvm::sys::fs::create_directory(cache)); |
135 |
| - options.ModuleCachePath = cache; |
136 |
| - options.PrecompiledHeaderOutputDir = cache; |
137 |
| - |
138 |
| - // Create the includes. |
139 |
| - std::string include1 = createFilename(temp, "include1"); |
140 |
| - ASSERT_FALSE(llvm::sys::fs::create_directory(include1)); |
141 |
| - |
142 |
| - std::string include2 = createFilename(temp, "include2"); |
143 |
| - ASSERT_FALSE(llvm::sys::fs::create_directory(include2)); |
144 |
| - |
145 |
| - options.ExtraArgs.emplace_back((llvm::Twine("-I") + include1).str()); |
146 |
| - options.ExtraArgs.emplace_back((llvm::Twine("-I") + include2).str()); |
147 |
| - options.ExtraArgs.emplace_back("-DEXTRA_C_DEFINE=2"); |
148 |
| - |
149 |
| - ASSERT_FALSE(emitFileWithContents(include1, "module.modulemap", |
150 |
| - "module CLib1 {\n" |
151 |
| - " umbrella header \"" + include1 + "/Clib1.h\"\n" |
152 |
| - " export * \n" |
153 |
| - "}\n" |
154 |
| - "module CLib2 {\n" |
155 |
| - " umbrella header \"" + include2 + "/Clib2.h\"\n" |
156 |
| - " export * \n" |
157 |
| - "}\n")); |
158 |
| - ASSERT_FALSE(emitFileWithContents(include1, "CLib1.h", |
159 |
| - "#if !defined(EXTRA_C_DEFINE) || EXTRA_C_DEFINE != 2\n" |
160 |
| - "#error \"unexpected compiler flags\"\n" |
161 |
| - "#endif\n" |
162 |
| - "void foo(void);\n")); |
163 |
| - ASSERT_FALSE(emitFileWithContents(include2, "CLib2.h", |
164 |
| - "#if !defined(EXTRA_C_DEFINE) || EXTRA_C_DEFINE != 2\n" |
165 |
| - "#error \"unexpected compiler flags\"\n" |
166 |
| - "#endif\n" |
167 |
| - "void foo(void);\n")); |
168 |
| - |
169 |
| - // Set up the importer. |
170 |
| - swift::LangOptions langOpts; |
171 |
| - langOpts.Target = llvm::Triple("x86_64", "apple", "darwin"); |
172 |
| - swift::TypeCheckerOptions typeckOpts; |
173 |
| - INITIALIZE_LLVM(); |
174 |
| - swift::SearchPathOptions searchPathOpts; |
175 |
| - swift::SourceManager sourceMgr; |
176 |
| - swift::DiagnosticEngine diags(sourceMgr); |
177 |
| - std::unique_ptr<ASTContext> context( |
178 |
| - ASTContext::get(langOpts, typeckOpts, searchPathOpts, sourceMgr, diags)); |
179 |
| - auto importer = ClangImporter::create(*context, options); |
180 |
| - |
181 |
| - // Install a stats cache that conveniently "forgets" that PCMs have different |
182 |
| - // underlying FileEntry values. |
183 |
| - importer->getClangInstance() |
184 |
| - .getFileManager() |
185 |
| - .setStatCache(std::make_unique<ForgetfulStatCache>()); |
186 |
| - |
187 |
| - context->addModuleLoader(std::move(importer)); |
188 |
| - |
189 |
| - auto CLib1 = context->getIdentifier("CLib1"); |
190 |
| - auto CLib2 = context->getIdentifier("CLib2"); |
191 |
| - // The first load succeeds and primes the ModuleManager with PCM data. |
192 |
| - (void)context->getModule({ Located<Identifier>{ CLib1, {} } }); |
193 |
| - // The second load fails because we collide in the ModuleManager. |
194 |
| - ASSERT_TRUE(context->getModule({ Located<Identifier>{ CLib2, {} } }) == nullptr); |
195 |
| -} |
0 commit comments