diff options
author | Kadir Cetinkaya <kadircet@google.com> | 2019-11-29 12:14:25 +0100 |
---|---|---|
committer | Kadir Cetinkaya <kadircet@google.com> | 2019-12-04 15:13:12 +0100 |
commit | 45ef055d4ffda4d2b04b62f73e36cc6d5252758b (patch) | |
tree | 794fc137d9cd273993832f007345d34dd5739821 /clang/unittests/Tooling/CompilationDatabaseTest.cpp | |
parent | 3ee277b86b34ff41595832d029f176b8de1c81e5 (diff) | |
download | llvm-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.cpp | 30 |
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 |