diff options
| author | Fangrui Song <maskray@google.com> | 2019-11-08 11:19:03 -0800 |
|---|---|---|
| committer | Fangrui Song <maskray@google.com> | 2019-11-08 11:21:32 -0800 |
| commit | 5b47efa20e0c482a60af5fea8dd7e3fae94c1a7e (patch) | |
| tree | b511ded22afbf1d97d5100cb08789b8b8afa8e9e | |
| parent | 885a05f48a5d320946c89590b73a764e5884fe4f (diff) | |
| download | bcm5719-llvm-5b47efa20e0c482a60af5fea8dd7e3fae94c1a7e.tar.gz bcm5719-llvm-5b47efa20e0c482a60af5fea8dd7e3fae94c1a7e.zip | |
[ELF] Fix stack-use-after-scope after D69592 and 69650
| -rw-r--r-- | lld/ELF/Relocations.cpp | 6 |
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); |

