aboutsummaryrefslogtreecommitdiff
path: root/clang/unittests/Tooling/CompilationDatabaseTest.cpp
diff options
context:
space:
mode:
authorKadir Cetinkaya <kadircet@google.com>2019-11-29 12:14:25 +0100
committerKadir Cetinkaya <kadircet@google.com>2019-12-04 15:13:12 +0100
commit45ef055d4ffda4d2b04b62f73e36cc6d5252758b (patch)
tree794fc137d9cd273993832f007345d34dd5739821 /clang/unittests/Tooling/CompilationDatabaseTest.cpp
parent3ee277b86b34ff41595832d029f176b8de1c81e5 (diff)
downloadllvm-45ef055d4ffda4d2b04b62f73e36cc6d5252758b.zip
llvm-45ef055d4ffda4d2b04b62f73e36cc6d5252758b.tar.gz
llvm-45ef055d4ffda4d2b04b62f73e36cc6d5252758b.tar.bz2
[clang][Tooling] Add support for .rsp files in compile_commands.json
Summary: Add support for .rsp files. Fixes https://github.com/clangd/clangd/issues/81 Patch By: liu hui(@lh123) Reviewers: sammccall, ilya-biryukov, hokein, kadircet Reviewed By: kadircet Subscribers: merge_guards_bot, mgorny, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits Tags: #clang-tools-extra, #clang Differential Revision: https://reviews.llvm.org/D70222
Diffstat (limited to 'clang/unittests/Tooling/CompilationDatabaseTest.cpp')
-rw-r--r--clang/unittests/Tooling/CompilationDatabaseTest.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/clang/unittests/Tooling/CompilationDatabaseTest.cpp b/clang/unittests/Tooling/CompilationDatabaseTest.cpp
index 87727fe..91685c0 100644
--- a/clang/unittests/Tooling/CompilationDatabaseTest.cpp
+++ b/clang/unittests/Tooling/CompilationDatabaseTest.cpp
@@ -859,5 +859,35 @@ TEST_F(TargetAndModeTest, TargetAndMode) {
"clang++ --driver-mode=g++ bar.cpp -D bar.cpp");
}
+class ExpandResponseFilesTest : public MemDBTest {
+public:
+ ExpandResponseFilesTest() : FS(new llvm::vfs::InMemoryFileSystem) {}
+
+protected:
+ void addFile(StringRef File, StringRef Content) {
+ ASSERT_TRUE(
+ FS->addFile(File, 0, llvm::MemoryBuffer::getMemBufferCopy(Content)));
+ }
+
+ std::string getCommand(llvm::StringRef F) {
+ auto Results = expandResponseFiles(std::make_unique<MemCDB>(Entries), FS)
+ ->getCompileCommands(path(F));
+ if (Results.empty())
+ return "none";
+ return llvm::join(Results[0].CommandLine, " ");
+ }
+
+ llvm::IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> FS;
+};
+
+TEST_F(ExpandResponseFilesTest, ExpandResponseFiles) {
+ addFile(path(StringRef("rsp1.rsp")), "-Dflag");
+
+ add("foo.cpp", "clang", "@rsp1.rsp");
+ add("bar.cpp", "clang", "-Dflag");
+ EXPECT_EQ(getCommand("foo.cpp"), "clang foo.cpp -D foo.cpp -Dflag");
+ EXPECT_EQ(getCommand("bar.cpp"), "clang bar.cpp -D bar.cpp -Dflag");
+}
+
} // end namespace tooling
} // end namespace clang