aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Demangle/ItaniumDemangle.cpp
diff options
context:
space:
mode:
authorKirill Stoimenov <kstoimenov@google.com>2022-04-26 20:24:06 +0000
committerKirill Stoimenov <kstoimenov@google.com>2022-04-26 20:24:06 +0000
commitaabeb5eb7f0aaa2c80147d904959c882cdeba1e5 (patch)
treec2cbd63fa7047f616693b1613147c35fbb38f1a3 /llvm/lib/Demangle/ItaniumDemangle.cpp
parentce8f42d4af2cf56c96f5a8cc4c4a02bf6b790ccc (diff)
downloadllvm-aabeb5eb7f0aaa2c80147d904959c882cdeba1e5.zip
llvm-aabeb5eb7f0aaa2c80147d904959c882cdeba1e5.tar.gz
llvm-aabeb5eb7f0aaa2c80147d904959c882cdeba1e5.tar.bz2
Revert "[demangler] Simplify OutputBuffer initialization"
Reverting due to a bot failure: https://lab.llvm.org/buildbot/#/builders/5/builds/22738 This reverts commit 5b3ca24a35e91bf9c19af856e7f92c69b17f989e.
Diffstat (limited to 'llvm/lib/Demangle/ItaniumDemangle.cpp')
-rw-r--r--llvm/lib/Demangle/ItaniumDemangle.cpp21
1 files changed, 16 insertions, 5 deletions
diff --git a/llvm/lib/Demangle/ItaniumDemangle.cpp b/llvm/lib/Demangle/ItaniumDemangle.cpp
index 9b646ea..1c9209d 100644
--- a/llvm/lib/Demangle/ItaniumDemangle.cpp
+++ b/llvm/lib/Demangle/ItaniumDemangle.cpp
@@ -375,12 +375,15 @@ char *llvm::itaniumDemangle(const char *MangledName, char *Buf,
int InternalStatus = demangle_success;
Demangler Parser(MangledName, MangledName + std::strlen(MangledName));
+ OutputBuffer OB;
+
Node *AST = Parser.parse();
if (AST == nullptr)
InternalStatus = demangle_invalid_mangled_name;
+ else if (!initializeOutputBuffer(Buf, N, OB, 1024))
+ InternalStatus = demangle_memory_alloc_failure;
else {
- OutputBuffer OB(Buf, N);
assert(Parser.ForwardTemplateRefs.empty());
AST->print(OB);
OB += '\0';
@@ -424,7 +427,9 @@ bool ItaniumPartialDemangler::partialDemangle(const char *MangledName) {
}
static char *printNode(const Node *RootNode, char *Buf, size_t *N) {
- OutputBuffer OB(Buf, N);
+ OutputBuffer OB;
+ if (!initializeOutputBuffer(Buf, N, OB, 128))
+ return nullptr;
RootNode->print(OB);
OB += '\0';
if (N != nullptr)
@@ -467,7 +472,9 @@ char *ItaniumPartialDemangler::getFunctionDeclContextName(char *Buf,
return nullptr;
const Node *Name = static_cast<const FunctionEncoding *>(RootNode)->getName();
- OutputBuffer OB(Buf, N);
+ OutputBuffer OB;
+ if (!initializeOutputBuffer(Buf, N, OB, 128))
+ return nullptr;
KeepGoingLocalFunction:
while (true) {
@@ -518,7 +525,9 @@ char *ItaniumPartialDemangler::getFunctionParameters(char *Buf,
return nullptr;
NodeArray Params = static_cast<FunctionEncoding *>(RootNode)->getParams();
- OutputBuffer OB(Buf, N);
+ OutputBuffer OB;
+ if (!initializeOutputBuffer(Buf, N, OB, 128))
+ return nullptr;
OB += '(';
Params.printWithComma(OB);
@@ -534,7 +543,9 @@ char *ItaniumPartialDemangler::getFunctionReturnType(
if (!isFunction())
return nullptr;
- OutputBuffer OB(Buf, N);
+ OutputBuffer OB;
+ if (!initializeOutputBuffer(Buf, N, OB, 128))
+ return nullptr;
if (const Node *Ret =
static_cast<const FunctionEncoding *>(RootNode)->getReturnType())