diff options
| author | Kadir Cetinkaya <kadircet@google.com> | 2019-07-04 12:24:17 +0000 |
|---|---|---|
| committer | Kadir Cetinkaya <kadircet@google.com> | 2019-07-04 12:24:17 +0000 |
| commit | 5bec85a34c27c8b49ca780b8cdb9b2140a96f8cc (patch) | |
| tree | 6430acd2c75e50f28fba8feeb942f9a7df81f3b0 | |
| parent | e712295f11bb90d38c8749a338293eaba06d96a5 (diff) | |
| download | bcm5719-llvm-5bec85a34c27c8b49ca780b8cdb9b2140a96f8cc.tar.gz bcm5719-llvm-5bec85a34c27c8b49ca780b8cdb9b2140a96f8cc.zip | |
[clangd] Fix a lifetime bug in QueryDriver
llvm-svn: 365134
| -rw-r--r-- | clang-tools-extra/clangd/QueryDriverDatabase.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/clang-tools-extra/clangd/QueryDriverDatabase.cpp b/clang-tools-extra/clangd/QueryDriverDatabase.cpp index c68596dff10..4a413c48515 100644 --- a/clang-tools-extra/clangd/QueryDriverDatabase.cpp +++ b/clang-tools-extra/clangd/QueryDriverDatabase.cpp @@ -48,6 +48,7 @@ #include "llvm/Support/Regex.h" #include "llvm/Support/ScopedPrinter.h" #include <algorithm> +#include <map> #include <string> #include <vector> @@ -221,16 +222,19 @@ public: llvm::SmallString<128> Driver(Cmd->CommandLine.front()); llvm::sys::fs::make_absolute(Cmd->Directory, Driver); + llvm::StringRef Ext = llvm::sys::path::extension(File).trim('.'); + auto Key = std::make_pair(Driver.str(), Ext); - llvm::ArrayRef<std::string> SystemIncludes; + std::vector<std::string> SystemIncludes; { std::lock_guard<std::mutex> Lock(Mu); - llvm::StringRef Ext = llvm::sys::path::extension(File).trim('.'); - auto It = DriverToIncludesCache.try_emplace({Driver, Ext}); - if (It.second) - It.first->second = extractSystemIncludes(Driver, Ext, QueryDriverRegex); - SystemIncludes = It.first->second; + auto It = DriverToIncludesCache.find(Key); + if (It != DriverToIncludesCache.end()) + SystemIncludes = It->second; + else + DriverToIncludesCache[Key] = SystemIncludes = + extractSystemIncludes(Key.first, Key.second, QueryDriverRegex); } return addSystemIncludes(*Cmd, SystemIncludes); @@ -239,8 +243,8 @@ public: private: mutable std::mutex Mu; // Caches includes extracted from a driver. - mutable llvm::DenseMap<std::pair<StringRef, StringRef>, - std::vector<std::string>> + mutable std::map<std::pair<std::string, std::string>, + std::vector<std::string>> DriverToIncludesCache; mutable llvm::Regex QueryDriverRegex; |

