summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFangrui Song <maskray@google.com>2019-11-08 11:19:03 -0800
committerFangrui Song <maskray@google.com>2019-11-08 11:21:32 -0800
commit5b47efa20e0c482a60af5fea8dd7e3fae94c1a7e (patch)
treeb511ded22afbf1d97d5100cb08789b8b8afa8e9e
parent885a05f48a5d320946c89590b73a764e5884fe4f (diff)
downloadbcm5719-llvm-5b47efa20e0c482a60af5fea8dd7e3fae94c1a7e.tar.gz
bcm5719-llvm-5b47efa20e0c482a60af5fea8dd7e3fae94c1a7e.zip
[ELF] Fix stack-use-after-scope after D69592 and 69650
-rw-r--r--lld/ELF/Relocations.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/lld/ELF/Relocations.cpp b/lld/ELF/Relocations.cpp
index 98abbe13fba..a4fc1ffbd1e 100644
--- a/lld/ELF/Relocations.cpp
+++ b/lld/ELF/Relocations.cpp
@@ -701,7 +701,8 @@ static std::vector<UndefinedDiag> undefs;
// the reference name ref.
static bool canSuggestExternCForCXX(StringRef ref, StringRef def) {
llvm::ItaniumPartialDemangler d;
- if (d.partialDemangle(def.str().c_str()))
+ std::string name = def.str();
+ if (d.partialDemangle(name.c_str()))
return false;
char *buf = d.getFunctionName(nullptr, nullptr);
if (!buf)
@@ -779,8 +780,9 @@ static const Symbol *getAlternativeSpelling(const Undefined &sym,
// The reference may be a mangled name while the definition is not. Suggest a
// missing extern "C".
if (name.startswith("_Z")) {
+ std::string buf = name.str();
llvm::ItaniumPartialDemangler d;
- if (!d.partialDemangle(name.str().c_str()))
+ if (!d.partialDemangle(buf.c_str()))
if (char *buf = d.getFunctionName(nullptr, nullptr)) {
const Symbol *s = suggest(buf);
free(buf);
OpenPOWER on IntegriCloud