summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKadir Cetinkaya <kadircet@google.com>2019-07-04 12:24:17 +0000
committerKadir Cetinkaya <kadircet@google.com>2019-07-04 12:24:17 +0000
commit5bec85a34c27c8b49ca780b8cdb9b2140a96f8cc (patch)
tree6430acd2c75e50f28fba8feeb942f9a7df81f3b0
parente712295f11bb90d38c8749a338293eaba06d96a5 (diff)
downloadbcm5719-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.cpp20
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;
OpenPOWER on IntegriCloud