llvm-undname: Add support for local static thread guards
llvm-svn: 361835
This commit is contained in:
parent
eb006d3268
commit
88ab281b4d
|
@ -223,7 +223,7 @@ private:
|
|||
demangleSpecialTableSymbolNode(StringView &MangledName,
|
||||
SpecialIntrinsicKind SIK);
|
||||
LocalStaticGuardVariableNode *
|
||||
demangleLocalStaticGuard(StringView &MangledName);
|
||||
demangleLocalStaticGuard(StringView &MangledName, bool IsThread);
|
||||
VariableSymbolNode *demangleUntypedVariable(ArenaAllocator &Arena,
|
||||
StringView &MangledName,
|
||||
StringView VariableName);
|
||||
|
|
|
@ -408,6 +408,7 @@ struct LocalStaticGuardIdentifierNode : public IdentifierNode {
|
|||
|
||||
void output(OutputStream &OS, OutputFlags Flags) const override;
|
||||
|
||||
bool IsThread = false;
|
||||
uint32_t ScopeIndex = 0;
|
||||
};
|
||||
|
||||
|
|
|
@ -293,9 +293,10 @@ Demangler::demangleSpecialTableSymbolNode(StringView &MangledName,
|
|||
}
|
||||
|
||||
LocalStaticGuardVariableNode *
|
||||
Demangler::demangleLocalStaticGuard(StringView &MangledName) {
|
||||
Demangler::demangleLocalStaticGuard(StringView &MangledName, bool IsThread) {
|
||||
LocalStaticGuardIdentifierNode *LSGI =
|
||||
Arena.alloc<LocalStaticGuardIdentifierNode>();
|
||||
LSGI->IsThread = IsThread;
|
||||
QualifiedNameNode *QN = demangleNameScopeChain(MangledName, LSGI);
|
||||
LocalStaticGuardVariableNode *LSGVN =
|
||||
Arena.alloc<LocalStaticGuardVariableNode>();
|
||||
|
@ -443,7 +444,9 @@ SymbolNode *Demangler::demangleSpecialIntrinsic(StringView &MangledName) {
|
|||
case SpecialIntrinsicKind::VcallThunk:
|
||||
return demangleVcallThunkNode(MangledName);
|
||||
case SpecialIntrinsicKind::LocalStaticGuard:
|
||||
return demangleLocalStaticGuard(MangledName);
|
||||
return demangleLocalStaticGuard(MangledName, /*IsThread=*/false);
|
||||
case SpecialIntrinsicKind::LocalStaticThreadGuard:
|
||||
return demangleLocalStaticGuard(MangledName, /*IsThread=*/true);
|
||||
case SpecialIntrinsicKind::RttiTypeDescriptor: {
|
||||
TypeNode *T = demangleType(MangledName, QualifierMangleMode::Result);
|
||||
if (Error)
|
||||
|
|
|
@ -349,7 +349,10 @@ void IntrinsicFunctionIdentifierNode::output(OutputStream &OS,
|
|||
|
||||
void LocalStaticGuardIdentifierNode::output(OutputStream &OS,
|
||||
OutputFlags Flags) const {
|
||||
OS << "`local static guard'";
|
||||
if (IsThread)
|
||||
OS << "`local static thread guard'";
|
||||
else
|
||||
OS << "`local static guard'";
|
||||
if (ScopeIndex > 0)
|
||||
OS << "{" << ScopeIndex << "}";
|
||||
}
|
||||
|
|
|
@ -230,6 +230,9 @@
|
|||
??__F_decisionToDFA@XPathLexer@@0V?$vector@VDFA@dfa@antlr4@@V?$allocator@VDFA@dfa@antlr4@@@std@@@std@@A@YAXXZ
|
||||
; CHECK: void __cdecl `dynamic atexit destructor for `private: static class std::vector<class antlr4::dfa::DFA, class std::allocator<class antlr4::dfa::DFA>> XPathLexer::_decisionToDFA''(void)
|
||||
|
||||
??__J?1??f@@YAAAUS@@XZ@51
|
||||
; CHECK: `struct S & __cdecl f(void)'::`2'::`local static thread guard'{2}
|
||||
|
||||
??__K_deg@@YAHO@Z
|
||||
; CHECK: int __cdecl operator ""_deg(long double)
|
||||
|
||||
|
|
Loading…
Reference in New Issue