diff --git a/llvm/include/llvm/MC/MCPseudoProbe.h b/llvm/include/llvm/MC/MCPseudoProbe.h --- a/llvm/include/llvm/MC/MCPseudoProbe.h +++ b/llvm/include/llvm/MC/MCPseudoProbe.h @@ -271,7 +271,7 @@ MCDecodedPseudoProbeInlineTree(const InlineSite &Site) : ISite(Site){}; // Return false if it's a dummy inline site - bool hasInlineSite() const { return std::get<0>(ISite) != 0; } + bool hasInlineSite() const { return !isRoot() && !Parent->isRoot(); } }; /// Instances of this class represent the pseudo probes inserted into a compile diff --git a/llvm/lib/MC/MCPseudoProbe.cpp b/llvm/lib/MC/MCPseudoProbe.cpp --- a/llvm/lib/MC/MCPseudoProbe.cpp +++ b/llvm/lib/MC/MCPseudoProbe.cpp @@ -230,8 +230,7 @@ // It will add the string of each node's inline site during iteration. // Note that it won't include the probe's belonging function(leaf location) while (Cur->hasInlineSite()) { - StringRef FuncName = - getProbeFNameForGUID(GUID2FuncMAP, std::get<0>(Cur->ISite)); + StringRef FuncName = getProbeFNameForGUID(GUID2FuncMAP, Cur->Parent->Guid); ContextStack.emplace_back( MCPseduoProbeFrameLocation(FuncName, std::get<1>(Cur->ISite))); Cur = static_cast(Cur->Parent); @@ -417,7 +416,7 @@ // If the incoming node is null, all its children nodes should be disgarded. if (Cur) { // Switch/add to a new tree node(inlinee) - Cur = Cur->getOrAddNode(std::make_tuple(Cur->Guid, Index)); + Cur = Cur->getOrAddNode(std::make_tuple(Guid, Index)); Cur->Guid = Guid; } @@ -574,5 +573,5 @@ MCDecodedPseudoProbeInlineTree *InlinerNode = Probe->getInlineTreeNode(); if (!InlinerNode->hasInlineSite()) return nullptr; - return getFuncDescForGUID(std::get<0>(InlinerNode->ISite)); + return getFuncDescForGUID(InlinerNode->Parent->Guid); }