LLVMFuzzerTestOneInput:
    8|     32|extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
    9|     32|  char *str = new char[size+1];
   10|     32|  memcpy(str, data, size);
   11|     32|  str[size] = 0;
   12|     32|  free(__cxa_demangle(str, 0, 0, 0));
   13|     32|  delete [] str;
   14|     32|  return 0;
   15|     32|}

__cxa_demangle:
  381|     32|__cxa_demangle(const char *MangledName, char *Buf, size_t *N, int *Status) {
  382|     32|  if (MangledName == nullptr || (Buf != nullptr && N == nullptr)) {
  ------------------
  |  Branch (382:7): [True: 0, False: 32]
  |  Branch (382:34): [True: 0, False: 32]
  |  Branch (382:52): [True: 0, False: 0]
  ------------------
  383|      0|    if (Status)
  ------------------
  |  Branch (383:9): [True: 0, False: 0]
  ------------------
  384|      0|      *Status = demangle_invalid_args;
  385|      0|    return nullptr;
  386|      0|  }
  387|       |
  388|     32|  int InternalStatus = demangle_success;
  389|     32|  Demangler Parser(MangledName, MangledName + std::strlen(MangledName));
  390|     32|  Node *AST = Parser.parse();
  391|       |
  392|     32|  if (AST == nullptr)
  ------------------
  |  Branch (392:7): [True: 32, False: 0]
  ------------------
  393|     32|    InternalStatus = demangle_invalid_mangled_name;
  394|      0|  else {
  395|      0|    OutputBuffer O(Buf, N);
  396|      0|    DEMANGLE_ASSERT(Parser.ForwardTemplateRefs.empty(), "");
  ------------------
  |  |   14|      0|#define DEMANGLE_ASSERT(expr, msg) _LIBCXXABI_ASSERT(expr, msg)
  |  |  ------------------
  |  |  |  |   19|      0|    do {                                                                                                               \
  |  |  |  |   20|      0|      if (!(expr)) {                                                                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   21|      0|        char const* __msg = (msg);                                                                                     \
  |  |  |  |   22|      0|        ::__abort_message("%s:%d: %s", __FILE__, __LINE__, __msg);                                                     \
  |  |  |  |   23|      0|      }                                                                                                                \
  |  |  |  |   24|      0|    } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (24:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  397|      0|    AST->print(O);
  398|      0|    O += '\0';
  399|      0|    if (N != nullptr)
  ------------------
  |  Branch (399:9): [True: 0, False: 0]
  ------------------
  400|      0|      *N = O.getCurrentPosition();
  401|      0|    Buf = O.getBuffer();
  402|      0|  }
  403|       |
  404|     32|  if (Status)
  ------------------
  |  Branch (404:7): [True: 0, False: 32]
  ------------------
  405|      0|    *Status = InternalStatus;
  406|     32|  return InternalStatus == demangle_success ? Buf : nullptr;
  ------------------
  |  Branch (406:10): [True: 0, False: 32]
  ------------------
  407|     32|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_120BumpPointerAllocatorC2Ev:
  320|     32|      : BlockList(new (InitialBuffer) BlockMeta{nullptr, 0}) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_120BumpPointerAllocatorD2Ev:
  344|     32|  ~BumpPointerAllocator() { reset(); }
cxa_demangle.cpp:_ZN12_GLOBAL__N_120BumpPointerAllocator5resetEv:
  334|     32|  void reset() {
  335|  39.3k|    while (BlockList) {
  ------------------
  |  Branch (335:12): [True: 39.3k, False: 32]
  ------------------
  336|  39.3k|      BlockMeta* Tmp = BlockList;
  337|  39.3k|      BlockList = BlockList->Next;
  338|  39.3k|      if (reinterpret_cast<char*>(Tmp) != InitialBuffer)
  ------------------
  |  Branch (338:11): [True: 39.3k, False: 32]
  ------------------
  339|  39.3k|        std::free(Tmp);
  340|  39.3k|    }
  341|     32|    BlockList = new (InitialBuffer) BlockMeta{nullptr, 0};
  342|     32|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle11SpecialNameEJRA31_KcRPNS2_4NodeEEEEPT_DpOT0_:
  353|    323|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|    323|    return new (Alloc.allocate(sizeof(T)))
  355|    323|        T(std::forward<Args>(args)...);
  356|    323|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_120BumpPointerAllocator8allocateEm:
  322|  4.83M|  void* allocate(size_t N) {
  323|  4.83M|    N = (N + 15u) & ~15u;
  324|  4.83M|    if (N + BlockList->Current >= UsableAllocSize) {
  ------------------
  |  Branch (324:9): [True: 39.3k, False: 4.79M]
  ------------------
  325|  39.3k|      if (N > UsableAllocSize)
  ------------------
  |  Branch (325:11): [True: 51, False: 39.2k]
  ------------------
  326|     51|        return allocateMassive(N);
  327|  39.2k|      grow();
  328|  39.2k|    }
  329|  4.83M|    BlockList->Current += N;
  330|  4.83M|    return static_cast<void*>(reinterpret_cast<char*>(BlockList + 1) +
  331|  4.83M|                              BlockList->Current - N);
  332|  4.83M|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_120BumpPointerAllocator15allocateMassiveEm:
  309|     51|  void* allocateMassive(size_t NBytes) {
  310|     51|    NBytes += sizeof(BlockMeta);
  311|     51|    BlockMeta* NewMeta = reinterpret_cast<BlockMeta*>(std::malloc(NBytes));
  312|     51|    if (NewMeta == nullptr)
  ------------------
  |  Branch (312:9): [True: 0, False: 51]
  ------------------
  313|      0|      std::terminate();
  314|     51|    BlockList->Next = new (NewMeta) BlockMeta{BlockList->Next, 0};
  315|     51|    return static_cast<void*>(NewMeta + 1);
  316|     51|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_120BumpPointerAllocator4growEv:
  302|  39.2k|  void grow() {
  303|  39.2k|    char* NewMeta = static_cast<char *>(std::malloc(AllocSize));
  304|  39.2k|    if (NewMeta == nullptr)
  ------------------
  |  Branch (304:9): [True: 0, False: 39.2k]
  ------------------
  305|      0|      std::terminate();
  306|  39.2k|    BlockList = new (NewMeta) BlockMeta{BlockList, 0};
  307|  39.2k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle21CtorVtableSpecialNameEJRPNS2_4NodeES6_EEEPT_DpOT0_:
  353|    323|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|    323|    return new (Alloc.allocate(sizeof(T)))
  355|    323|        T(std::forward<Args>(args)...);
  356|    323|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle11SpecialNameEJRA22_KcRPNS2_4NodeEEEEPT_DpOT0_:
  353|  2.94k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  2.94k|    return new (Alloc.allocate(sizeof(T)))
  355|  2.94k|        T(std::forward<Args>(args)...);
  356|  2.94k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle8NameTypeEJRA22_KcEEEPT_DpOT0_:
  353|    606|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|    606|    return new (Alloc.allocate(sizeof(T)))
  355|    606|        T(std::forward<Args>(args)...);
  356|    606|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle8NameTypeEJRNSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEEEPT_DpOT0_:
  353|   142k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|   142k|    return new (Alloc.allocate(sizeof(T)))
  355|   142k|        T(std::forward<Args>(args)...);
  356|   142k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle10ModuleNameEJRPS3_RPNS2_4NodeERbEEEPT_DpOT0_:
  353|  1.02k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  1.02k|    return new (Alloc.allocate(sizeof(T)))
  355|  1.02k|        T(std::forward<Args>(args)...);
  356|  1.02k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle11SpecialNameEJRA24_KcRPNS2_10ModuleNameEEEEPT_DpOT0_:
  353|  1.02k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  1.02k|    return new (Alloc.allocate(sizeof(T)))
  355|  1.02k|        T(std::forward<Args>(args)...);
  356|  1.02k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle8NameTypeEJNSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEEEPT_DpOT0_:
  353|  21.7k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  21.7k|    return new (Alloc.allocate(sizeof(T)))
  355|  21.7k|        T(std::forward<Args>(args)...);
  356|  21.7k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle24ForwardTemplateReferenceEJRmEEEPT_DpOT0_:
  353|  1.09k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  1.09k|    return new (Alloc.allocate(sizeof(T)))
  355|  1.09k|        T(std::forward<Args>(args)...);
  356|  1.09k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle8NameTypeEJRA5_KcEEEPT_DpOT0_:
  353|   836k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|   836k|    return new (Alloc.allocate(sizeof(T)))
  355|   836k|        T(std::forward<Args>(args)...);
  356|   836k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle10BinaryExprEJRPNS2_4NodeERNSt3__117basic_string_viewIcNS7_11char_traitsIcEEEES6_RNS4_4PrecEEEEPT_DpOT0_:
  353|    323|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|    323|    return new (Alloc.allocate(sizeof(T)))
  355|    323|        T(std::forward<Args>(args)...);
  356|    323|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle10PrefixExprEJRNSt3__117basic_string_viewIcNS4_11char_traitsIcEEEERPNS2_4NodeERNSA_4PrecEEEEPT_DpOT0_:
  353|    323|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|    323|    return new (Alloc.allocate(sizeof(T)))
  355|    323|        T(std::forward<Args>(args)...);
  356|    323|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle7NewExprEJRNS2_9NodeArrayERPNS2_4NodeES5_RbbNS6_4PrecEEEEPT_DpOT0_:
  353|    326|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|    326|    return new (Alloc.allocate(sizeof(T)))
  355|    326|        T(std::forward<Args>(args)...);
  356|    326|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle10DeleteExprEJRPNS2_4NodeERbbNS4_4PrecEEEEPT_DpOT0_:
  353|    781|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|    781|    return new (Alloc.allocate(sizeof(T)))
  355|    781|        T(std::forward<Args>(args)...);
  356|    781|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle14IntegerLiteralEJRNSt3__117basic_string_viewIcNS4_11char_traitsIcEEEES9_EEEPT_DpOT0_:
  353|  18.7k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  18.7k|    return new (Alloc.allocate(sizeof(T)))
  355|  18.7k|        T(std::forward<Args>(args)...);
  356|  18.7k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle8BoolExprEJiEEEPT_DpOT0_:
  353|      6|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|      6|    return new (Alloc.allocate(sizeof(T)))
  355|      6|        T(std::forward<Args>(args)...);
  356|      6|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle16FloatLiteralImplIeEEJRNSt3__117basic_string_viewIcNS5_11char_traitsIcEEEEEEEPT_DpOT0_:
  353|    826|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|    826|    return new (Alloc.allocate(sizeof(T)))
  355|    826|        T(std::forward<Args>(args)...);
  356|    826|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle8NameTypeEJRA8_KcEEEPT_DpOT0_:
  353|   202k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|   202k|    return new (Alloc.allocate(sizeof(T)))
  355|   202k|        T(std::forward<Args>(args)...);
  356|   202k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle26SyntheticTemplateParamNameEJRNS2_17TemplateParamKindERjEEEPT_DpOT0_:
  353|    351|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|    351|    return new (Alloc.allocate(sizeof(T)))
  355|    351|        T(std::forward<Args>(args)...);
  356|    351|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle21TypeTemplateParamDeclEJRPNS2_4NodeEEEEPT_DpOT0_:
  353|     74|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|     74|    return new (Alloc.allocate(sizeof(T)))
  355|     74|        T(std::forward<Args>(args)...);
  356|     74|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle24NonTypeTemplateParamDeclEJRPNS2_4NodeES6_EEEPT_DpOT0_:
  353|    265|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|    265|    return new (Alloc.allocate(sizeof(T)))
  355|    265|        T(std::forward<Args>(args)...);
  356|    265|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle25TemplateTemplateParamDeclEJRPNS2_4NodeERNS2_9NodeArrayES6_EEEPT_DpOT0_:
  353|     12|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|     12|    return new (Alloc.allocate(sizeof(T)))
  355|     12|        T(std::forward<Args>(args)...);
  356|     12|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle21TemplateParamPackDeclEJRPNS2_4NodeEEEEPT_DpOT0_:
  353|    121|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|    121|    return new (Alloc.allocate(sizeof(T)))
  355|    121|        T(std::forward<Args>(args)...);
  356|    121|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle15ClosureTypeNameEJRNS2_9NodeArrayERPNS2_4NodeES5_S8_RNSt3__117basic_string_viewIcNS9_11char_traitsIcEEEEEEEPT_DpOT0_:
  353|      6|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|      6|    return new (Alloc.allocate(sizeof(T)))
  355|      6|        T(std::forward<Args>(args)...);
  356|      6|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle8NameTypeEJRA16_KcEEEPT_DpOT0_:
  353|    176|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|    176|    return new (Alloc.allocate(sizeof(T)))
  355|    176|        T(std::forward<Args>(args)...);
  356|    176|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle11EnumLiteralEJRPNS2_4NodeERNSt3__117basic_string_viewIcNS7_11char_traitsIcEEEEEEEPT_DpOT0_:
  353|  20.4k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  20.4k|    return new (Alloc.allocate(sizeof(T)))
  355|  20.4k|        T(std::forward<Args>(args)...);
  356|  20.4k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle13FunctionParamEJRNSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEEEPT_DpOT0_:
  353|  23.4k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  23.4k|    return new (Alloc.allocate(sizeof(T)))
  355|  23.4k|        T(std::forward<Args>(args)...);
  356|  23.4k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle8FoldExprEJRbNSt3__117basic_string_viewIcNS5_11char_traitsIcEEEERPNS2_4NodeESC_EEEPT_DpOT0_:
  353|      3|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|      3|    return new (Alloc.allocate(sizeof(T)))
  355|      3|        T(std::forward<Args>(args)...);
  356|      3|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle10BracedExprEJRPNS2_4NodeES6_bEEEPT_DpOT0_:
  353|  15.1k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  15.1k|    return new (Alloc.allocate(sizeof(T)))
  355|  15.1k|        T(std::forward<Args>(args)...);
  356|  15.1k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle15BracedRangeExprEJRPNS2_4NodeES6_S6_EEEPT_DpOT0_:
  353|  7.59k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  7.59k|    return new (Alloc.allocate(sizeof(T)))
  355|  7.59k|        T(std::forward<Args>(args)...);
  356|  7.59k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle12InitListExprEJDnNS2_9NodeArrayEEEEPT_DpOT0_:
  353|  1.04k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  1.04k|    return new (Alloc.allocate(sizeof(T)))
  355|  1.04k|        T(std::forward<Args>(args)...);
  356|  1.04k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle13EnclosingExprEJRA10_KcRPNS2_4NodeENS7_4PrecEEEEPT_DpOT0_:
  353|    360|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|    360|    return new (Alloc.allocate(sizeof(T)))
  355|    360|        T(std::forward<Args>(args)...);
  356|    360|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle15ExprRequirementEJRPNS2_4NodeERbS6_EEEPT_DpOT0_:
  353|  18.8k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  18.8k|    return new (Alloc.allocate(sizeof(T)))
  355|  18.8k|        T(std::forward<Args>(args)...);
  356|  18.8k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle17NestedRequirementEJRPNS2_4NodeEEEEPT_DpOT0_:
  353|  3.01k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  3.01k|    return new (Alloc.allocate(sizeof(T)))
  355|  3.01k|        T(std::forward<Args>(args)...);
  356|  3.01k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle12RequiresExprEJRNS2_9NodeArrayES4_EEEPT_DpOT0_:
  353|  21.8k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  21.8k|    return new (Alloc.allocate(sizeof(T)))
  355|  21.8k|        T(std::forward<Args>(args)...);
  356|  21.8k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle13SubobjectExprEJRPNS2_4NodeES6_RNSt3__117basic_string_viewIcNS7_11char_traitsIcEEEENS2_9NodeArrayERbEEEPT_DpOT0_:
  353|      1|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|      1|    return new (Alloc.allocate(sizeof(T)))
  355|      1|        T(std::forward<Args>(args)...);
  356|      1|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle22ParameterPackExpansionEJRPNS2_4NodeEEEEPT_DpOT0_:
  353|  1.33k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  1.33k|    return new (Alloc.allocate(sizeof(T)))
  355|  1.33k|        T(std::forward<Args>(args)...);
  356|  1.33k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle19SizeofParamPackExprEJRPNS2_4NodeEEEEPT_DpOT0_:
  353|      6|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|      6|    return new (Alloc.allocate(sizeof(T)))
  355|      6|        T(std::forward<Args>(args)...);
  356|      6|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle13EnclosingExprEJRA11_KcRPNS2_4NodeEEEEPT_DpOT0_:
  353|  1.34k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  1.34k|    return new (Alloc.allocate(sizeof(T)))
  355|  1.34k|        T(std::forward<Args>(args)...);
  356|  1.34k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle13NodeArrayNodeEJNS2_9NodeArrayEEEEPT_DpOT0_:
  353|  1.34k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  1.34k|    return new (Alloc.allocate(sizeof(T)))
  355|  1.34k|        T(std::forward<Args>(args)...);
  356|  1.34k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle12InitListExprEJRPNS2_4NodeENS2_9NodeArrayEEEEPT_DpOT0_:
  353|  7.59k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  7.59k|    return new (Alloc.allocate(sizeof(T)))
  355|  7.59k|        T(std::forward<Args>(args)...);
  356|  7.59k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle8NameTypeEJRA6_KcEEEPT_DpOT0_:
  353|   146k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|   146k|    return new (Alloc.allocate(sizeof(T)))
  355|   146k|        T(std::forward<Args>(args)...);
  356|   146k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle13QualifiedNameEJRPNS2_4NodeES6_EEEPT_DpOT0_:
  353|      3|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|      3|    return new (Alloc.allocate(sizeof(T)))
  355|      3|        T(std::forward<Args>(args)...);
  356|      3|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle22ConversionOperatorTypeEJRPNS2_4NodeEEEEPT_DpOT0_:
  353|  2.55k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  2.55k|    return new (Alloc.allocate(sizeof(T)))
  355|  2.55k|        T(std::forward<Args>(args)...);
  356|  2.55k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle13EnclosingExprEJRA9_KcRPNS2_4NodeEEEEPT_DpOT0_:
  353|  22.6k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  22.6k|    return new (Alloc.allocate(sizeof(T)))
  355|  22.6k|        T(std::forward<Args>(args)...);
  356|  22.6k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle8NameTypeEJRA4_KcEEEPT_DpOT0_:
  353|   335k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|   335k|    return new (Alloc.allocate(sizeof(T)))
  355|   335k|        T(std::forward<Args>(args)...);
  356|   335k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle19SpecialSubstitutionEJRNS2_14SpecialSubKindEEEEPT_DpOT0_:
  353|  21.3k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  21.3k|    return new (Alloc.allocate(sizeof(T)))
  355|  21.3k|        T(std::forward<Args>(args)...);
  356|  21.3k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle21StructuredBindingNameEJNS2_9NodeArrayEEEEPT_DpOT0_:
  353|    339|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|    339|    return new (Alloc.allocate(sizeof(T)))
  355|    339|        T(std::forward<Args>(args)...);
  356|    339|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle27ExpandedSpecialSubstitutionEJPNS2_19SpecialSubstitutionEEEEPT_DpOT0_:
  353|  6.50k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  6.50k|    return new (Alloc.allocate(sizeof(T)))
  355|  6.50k|        T(std::forward<Args>(args)...);
  356|  6.50k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle12CtorDtorNameEJRPNS2_4NodeEbRiEEEPT_DpOT0_:
  353|  13.3k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  13.3k|    return new (Alloc.allocate(sizeof(T)))
  355|  13.3k|        T(std::forward<Args>(args)...);
  356|  13.3k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle20MemberLikeFriendNameEJRPNS2_4NodeES6_EEEPT_DpOT0_:
  353|  6.48k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  6.48k|    return new (Alloc.allocate(sizeof(T)))
  355|  6.48k|        T(std::forward<Args>(args)...);
  356|  6.48k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle10NestedNameEJRPNS2_4NodeES6_EEEPT_DpOT0_:
  353|  15.8k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  15.8k|    return new (Alloc.allocate(sizeof(T)))
  355|  15.8k|        T(std::forward<Args>(args)...);
  356|  15.8k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle19parse_discriminatorEPKcS2_:
   35|  3.73k|                                                  const char *last) {
   36|       |  // parse but ignore discriminator
   37|  3.73k|  if (first != last) {
  ------------------
  |  Branch (37:7): [True: 3.73k, False: 0]
  ------------------
   38|  3.73k|    if (*first == '_') {
  ------------------
  |  Branch (38:9): [True: 0, False: 3.73k]
  ------------------
   39|      0|      const char *t1 = first + 1;
   40|      0|      if (t1 != last) {
  ------------------
  |  Branch (40:11): [True: 0, False: 0]
  ------------------
   41|      0|        if (std::isdigit(*t1))
  ------------------
  |  Branch (41:13): [True: 0, False: 0]
  ------------------
   42|      0|          first = t1 + 1;
   43|      0|        else if (*t1 == '_') {
  ------------------
  |  Branch (43:18): [True: 0, False: 0]
  ------------------
   44|      0|          for (++t1; t1 != last && std::isdigit(*t1); ++t1)
  ------------------
  |  Branch (44:22): [True: 0, False: 0]
  |  Branch (44:36): [True: 0, False: 0]
  ------------------
   45|      0|            ;
   46|      0|          if (t1 != last && *t1 == '_')
  ------------------
  |  Branch (46:15): [True: 0, False: 0]
  |  Branch (46:29): [True: 0, False: 0]
  ------------------
   47|      0|            first = t1 + 1;
   48|      0|        }
   49|      0|      }
   50|  3.73k|    } else if (std::isdigit(*first)) {
  ------------------
  |  Branch (50:16): [True: 346, False: 3.39k]
  ------------------
   51|    346|      const char *t1 = first + 1;
   52|    669|      for (; t1 != last && std::isdigit(*t1); ++t1)
  ------------------
  |  Branch (52:14): [True: 669, False: 0]
  |  Branch (52:28): [True: 323, False: 346]
  ------------------
   53|    323|        ;
   54|    346|      if (t1 == last)
  ------------------
  |  Branch (54:11): [True: 0, False: 346]
  ------------------
   55|      0|        first = last;
   56|    346|    }
   57|  3.73k|  }
   58|  3.73k|  return first;
   59|  3.73k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle8NameTypeEJRA15_KcEEEPT_DpOT0_:
  353|  62.9k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  62.9k|    return new (Alloc.allocate(sizeof(T)))
  355|  62.9k|        T(std::forward<Args>(args)...);
  356|  62.9k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle9LocalNameEJRPNS2_4NodeES6_EEEPT_DpOT0_:
  353|  3.73k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  3.73k|    return new (Alloc.allocate(sizeof(T)))
  355|  3.73k|        T(std::forward<Args>(args)...);
  356|  3.73k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle13ParameterPackEJNS2_9NodeArrayEEEEPT_DpOT0_:
  353|    327|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|    327|    return new (Alloc.allocate(sizeof(T)))
  355|    327|        T(std::forward<Args>(args)...);
  356|    327|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle12TemplateArgsEJNS2_9NodeArrayERPNS2_4NodeEEEEPT_DpOT0_:
  353|  9.02k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  9.02k|    return new (Alloc.allocate(sizeof(T)))
  355|  9.02k|        T(std::forward<Args>(args)...);
  356|  9.02k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle20NameWithTemplateArgsEJRPNS2_4NodeES6_EEEPT_DpOT0_:
  353|  8.70k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  8.70k|    return new (Alloc.allocate(sizeof(T)))
  355|  8.70k|        T(std::forward<Args>(args)...);
  356|  8.70k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle20TemplateArgumentPackEJRNS2_9NodeArrayEEEEPT_DpOT0_:
  353|    330|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|    330|    return new (Alloc.allocate(sizeof(T)))
  355|    330|        T(std::forward<Args>(args)...);
  356|    330|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle25TemplateParamQualifiedArgEJRPNS2_4NodeES6_EEEPT_DpOT0_:
  353|    253|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|    253|    return new (Alloc.allocate(sizeof(T)))
  355|    253|        T(std::forward<Args>(args)...);
  356|    253|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator17allocateNodeArrayEm:
  358|  54.8k|  void *allocateNodeArray(size_t sz) {
  359|  54.8k|    return Alloc.allocate(sizeof(Node *) * sz);
  360|  54.8k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle23ExplicitObjectParameterEJRPNS2_4NodeEEEEPT_DpOT0_:
  353|    108|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|    108|    return new (Alloc.allocate(sizeof(T)))
  355|    108|        T(std::forward<Args>(args)...);
  356|    108|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle16FunctionEncodingEJRPNS2_4NodeES6_RNS2_9NodeArrayES6_S6_RNS2_10QualifiersERNS2_15FunctionRefQualEEEEPT_DpOT0_:
  353|  2.08k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  2.08k|    return new (Alloc.allocate(sizeof(T)))
  355|  2.08k|        T(std::forward<Args>(args)...);
  356|  2.08k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle12FunctionTypeEJRPNS2_4NodeERNS2_9NodeArrayERNS2_10QualifiersERNS2_15FunctionRefQualES6_EEEPT_DpOT0_:
  353|  9.90k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  9.90k|    return new (Alloc.allocate(sizeof(T)))
  355|  9.90k|        T(std::forward<Args>(args)...);
  356|  9.90k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle13ObjCProtoNameEJRPNS2_4NodeERNSt3__117basic_string_viewIcNS7_11char_traitsIcEEEEEEEPT_DpOT0_:
  353|      3|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|      3|    return new (Alloc.allocate(sizeof(T)))
  355|      3|        T(std::forward<Args>(args)...);
  356|      3|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle17VendorExtQualTypeEJRPNS2_4NodeERNSt3__117basic_string_viewIcNS7_11char_traitsIcEEEES6_EEEPT_DpOT0_:
  353|  57.1k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  57.1k|    return new (Alloc.allocate(sizeof(T)))
  355|  57.1k|        T(std::forward<Args>(args)...);
  356|  57.1k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle8QualTypeEJRPNS2_4NodeERNS2_10QualifiersEEEEPT_DpOT0_:
  353|   191k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|   191k|    return new (Alloc.allocate(sizeof(T)))
  355|   191k|        T(std::forward<Args>(args)...);
  356|   191k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle8NameTypeEJRA12_KcEEEPT_DpOT0_:
  353|   358k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|   358k|    return new (Alloc.allocate(sizeof(T)))
  355|   358k|        T(std::forward<Args>(args)...);
  356|   358k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle8NameTypeEJRA14_KcEEEPT_DpOT0_:
  353|   381k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|   381k|    return new (Alloc.allocate(sizeof(T)))
  355|   381k|        T(std::forward<Args>(args)...);
  356|   381k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle8NameTypeEJRA13_KcEEEPT_DpOT0_:
  353|  65.6k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  65.6k|    return new (Alloc.allocate(sizeof(T)))
  355|  65.6k|        T(std::forward<Args>(args)...);
  356|  65.6k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle8NameTypeEJRA10_KcEEEPT_DpOT0_:
  353|  41.0k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  41.0k|    return new (Alloc.allocate(sizeof(T)))
  355|  41.0k|        T(std::forward<Args>(args)...);
  356|  41.0k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle8NameTypeEJRA19_KcEEEPT_DpOT0_:
  353|  83.4k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  83.4k|    return new (Alloc.allocate(sizeof(T)))
  355|  83.4k|        T(std::forward<Args>(args)...);
  356|  83.4k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle8NameTypeEJRA9_KcEEEPT_DpOT0_:
  353|   187k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|   187k|    return new (Alloc.allocate(sizeof(T)))
  355|   187k|        T(std::forward<Args>(args)...);
  356|   187k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle8NameTypeEJRA18_KcEEEPT_DpOT0_:
  353|   117k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|   117k|    return new (Alloc.allocate(sizeof(T)))
  355|   117k|        T(std::forward<Args>(args)...);
  356|   117k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle8NameTypeEJRA7_KcEEEPT_DpOT0_:
  353|   194k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|   194k|    return new (Alloc.allocate(sizeof(T)))
  355|   194k|        T(std::forward<Args>(args)...);
  356|   194k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle8NameTypeEJRA11_KcEEEPT_DpOT0_:
  353|   513k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|   513k|    return new (Alloc.allocate(sizeof(T)))
  355|   513k|        T(std::forward<Args>(args)...);
  356|   513k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle8NameTypeEJRA21_KcEEEPT_DpOT0_:
  353|    490|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|    490|    return new (Alloc.allocate(sizeof(T)))
  355|    490|        T(std::forward<Args>(args)...);
  356|    490|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle8NameTypeEJRA27_KcEEEPT_DpOT0_:
  353|    176|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|    176|    return new (Alloc.allocate(sizeof(T)))
  355|    176|        T(std::forward<Args>(args)...);
  356|    176|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle10BitIntTypeEJRPNS2_4NodeERbEEEPT_DpOT0_:
  353|      3|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|      3|    return new (Alloc.allocate(sizeof(T)))
  355|      3|        T(std::forward<Args>(args)...);
  356|      3|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle10VectorTypeEJRPNS2_4NodeES6_EEEPT_DpOT0_:
  353|      6|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|      6|    return new (Alloc.allocate(sizeof(T)))
  355|      6|        T(std::forward<Args>(args)...);
  356|      6|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle9ArrayTypeEJRPNS2_4NodeES6_EEEPT_DpOT0_:
  353|  58.6k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  58.6k|    return new (Alloc.allocate(sizeof(T)))
  355|  58.6k|        T(std::forward<Args>(args)...);
  356|  58.6k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle19PointerToMemberTypeEJRPNS2_4NodeES6_EEEPT_DpOT0_:
  353|  93.5k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  93.5k|    return new (Alloc.allocate(sizeof(T)))
  355|  93.5k|        T(std::forward<Args>(args)...);
  356|  93.5k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle22ElaboratedTypeSpefTypeEJRNSt3__117basic_string_viewIcNS4_11char_traitsIcEEEERPNS2_4NodeEEEEPT_DpOT0_:
  353|  2.83k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  2.83k|    return new (Alloc.allocate(sizeof(T)))
  355|  2.83k|        T(std::forward<Args>(args)...);
  356|  2.83k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle11PointerTypeEJRPNS2_4NodeEEEEPT_DpOT0_:
  353|   166k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|   166k|    return new (Alloc.allocate(sizeof(T)))
  355|   166k|        T(std::forward<Args>(args)...);
  356|   166k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle13ReferenceTypeEJRPNS2_4NodeENS2_13ReferenceKindEEEEPT_DpOT0_:
  353|   164k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|   164k|    return new (Alloc.allocate(sizeof(T)))
  355|   164k|        T(std::forward<Args>(args)...);
  356|   164k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle20PostfixQualifiedTypeEJRPNS2_4NodeERA9_KcEEEPT_DpOT0_:
  353|  64.3k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  64.3k|    return new (Alloc.allocate(sizeof(T)))
  355|  64.3k|        T(std::forward<Args>(args)...);
  356|  64.3k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116DefaultAllocator8makeNodeINS_16itanium_demangle20PostfixQualifiedTypeEJRPNS2_4NodeERA11_KcEEEPT_DpOT0_:
  353|  14.1k|  template<typename T, typename ...Args> T *makeNode(Args &&...args) {
  354|  14.1k|    return new (Alloc.allocate(sizeof(T)))
  355|  14.1k|        T(std::forward<Args>(args)...);
  356|  14.1k|  }

cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_EC2EPKcS7_:
 2809|     32|      : First(First_), Last(Last_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm32EEC2Ev:
   74|     64|  PODSmallVector() : First(Inline), Last(First), Cap(Inline + N) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm8EEC2Ev:
   74|  15.6k|  PODSmallVector() : First(Inline), Last(First), Cap(Inline + N) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS1_IPNS0_4NodeELm8EEELm4EEC2Ev:
   74|  15.0k|  PODSmallVector() : First(Inline), Last(First), Cap(Inline + N) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_24ForwardTemplateReferenceELm4EEC2Ev:
   74|     32|  PODSmallVector() : First(Inline), Last(First), Cap(Inline + N) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_24ForwardTemplateReferenceELm4EED2Ev:
  153|     32|  ~PODSmallVector() {
  154|     32|    if (!isInline())
  ------------------
  |  Branch (154:9): [True: 3, False: 29]
  ------------------
  155|      3|      std::free(First);
  156|     32|  }
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_24ForwardTemplateReferenceELm4EE8isInlineEv:
   48|     52|  bool isInline() const { return First == Inline; }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS1_IPNS0_4NodeELm8EEELm4EED2Ev:
  153|  15.0k|  ~PODSmallVector() {
  154|  15.0k|    if (!isInline())
  ------------------
  |  Branch (154:9): [True: 0, False: 15.0k]
  ------------------
  155|      0|      std::free(First);
  156|  15.0k|  }
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS1_IPNS0_4NodeELm8EEELm4EE8isInlineEv:
   48|  75.1k|  bool isInline() const { return First == Inline; }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm8EED2Ev:
  153|  15.6k|  ~PODSmallVector() {
  154|  15.6k|    if (!isInline())
  ------------------
  |  Branch (154:9): [True: 454, False: 15.2k]
  ------------------
  155|    454|      std::free(First);
  156|  15.6k|  }
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm8EE8isInlineEv:
   48|  76.7k|  bool isInline() const { return First == Inline; }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm32EED2Ev:
  153|     64|  ~PODSmallVector() {
  154|     64|    if (!isInline())
  ------------------
  |  Branch (154:9): [True: 48, False: 16]
  ------------------
  155|     48|      std::free(First);
  156|     64|  }
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm32EE8isInlineEv:
   48|    526|  bool isInline() const { return First == Inline; }
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle9NodeArray5emptyEv:
  324|    611|  bool empty() const { return NumElements == 0; }
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle9NodeArray5beginEv:
  327|    981|  Node **begin() const { return Elements; }
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle9NodeArray3endEv:
  328|    981|  Node **end() const { return Elements + NumElements; }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E5parseEb:
 6138|     32|Node *AbstractManglingParser<Derived, Alloc>::parse(bool ParseParams) {
 6139|     32|  if (consumeIf("_Z") || consumeIf("__Z")) {
  ------------------
  |  Branch (6139:7): [True: 19, False: 13]
  |  Branch (6139:7): [True: 19, False: 13]
  |  Branch (6139:26): [True: 0, False: 13]
  ------------------
 6140|     19|    Node *Encoding = getDerived().parseEncoding(ParseParams);
 6141|     19|    if (Encoding == nullptr)
  ------------------
  |  Branch (6141:9): [True: 19, False: 0]
  ------------------
 6142|     19|      return nullptr;
 6143|      0|    if (look() == '.') {
  ------------------
  |  Branch (6143:9): [True: 0, False: 0]
  ------------------
 6144|      0|      Encoding =
 6145|      0|          make<DotSuffix>(Encoding, std::string_view(First, Last - First));
 6146|      0|      First = Last;
 6147|      0|    }
 6148|      0|    if (numLeft() != 0)
  ------------------
  |  Branch (6148:9): [True: 0, False: 0]
  ------------------
 6149|      0|      return nullptr;
 6150|      0|    return Encoding;
 6151|      0|  }
 6152|       |
 6153|     13|  if (consumeIf("___Z") || consumeIf("____Z")) {
  ------------------
  |  Branch (6153:7): [True: 1, False: 12]
  |  Branch (6153:7): [True: 1, False: 12]
  |  Branch (6153:28): [True: 0, False: 12]
  ------------------
 6154|      1|    Node *Encoding = getDerived().parseEncoding(ParseParams);
 6155|      1|    if (Encoding == nullptr || !consumeIf("_block_invoke"))
  ------------------
  |  Branch (6155:9): [True: 1, False: 0]
  |  Branch (6155:9): [True: 1, False: 0]
  |  Branch (6155:32): [True: 0, False: 0]
  ------------------
 6156|      1|      return nullptr;
 6157|      0|    bool RequireNumber = consumeIf('_');
 6158|      0|    if (parseNumber().empty() && RequireNumber)
  ------------------
  |  Branch (6158:9): [True: 0, False: 0]
  |  Branch (6158:9): [True: 0, False: 0]
  |  Branch (6158:34): [True: 0, False: 0]
  ------------------
 6159|      0|      return nullptr;
 6160|      0|    if (look() == '.')
  ------------------
  |  Branch (6160:9): [True: 0, False: 0]
  ------------------
 6161|      0|      First = Last;
 6162|      0|    if (numLeft() != 0)
  ------------------
  |  Branch (6162:9): [True: 0, False: 0]
  ------------------
 6163|      0|      return nullptr;
 6164|      0|    return make<SpecialName>("invocation function for block in ", Encoding);
 6165|      0|  }
 6166|       |
 6167|     12|  Node *Ty = getDerived().parseType();
 6168|     12|  if (numLeft() != 0)
  ------------------
  |  Branch (6168:7): [True: 11, False: 1]
  ------------------
 6169|     11|    return nullptr;
 6170|      1|  return Ty;
 6171|     12|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E9consumeIfENSt3__117basic_string_viewIcNS6_11char_traitsIcEEEE:
 2847|  3.48M|  bool consumeIf(std::string_view S) {
 2848|  3.48M|    if (starts_with(std::string_view(First, Last - First), S)) {
  ------------------
  |  Branch (2848:9): [True: 77.2k, False: 3.40M]
  ------------------
 2849|  77.2k|      First += S.size();
 2850|  77.2k|      return true;
 2851|  77.2k|    }
 2852|  3.40M|    return false;
 2853|  3.48M|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E10getDerivedEv:
 2811|  7.70M|  Derived &getDerived() { return static_cast<Derived &>(*this); }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E13parseEncodingEb:
 5631|  13.0k|Node *AbstractManglingParser<Derived, Alloc>::parseEncoding(bool ParseParams) {
 5632|       |  // The template parameters of an encoding are unrelated to those of the
 5633|       |  // enclosing context.
 5634|  13.0k|  SaveTemplateParams SaveTemplateParamsScope(this);
 5635|       |
 5636|  13.0k|  if (look() == 'G' || look() == 'T')
  ------------------
  |  Branch (5636:7): [True: 1.02k, False: 11.9k]
  |  Branch (5636:24): [True: 3.97k, False: 8.00k]
  ------------------
 5637|  4.99k|    return getDerived().parseSpecialName();
 5638|       |
 5639|  8.00k|  auto IsEndOfEncoding = [&] {
 5640|       |    // The set of chars that can potentially follow an <encoding> (none of which
 5641|       |    // can start a <type>). Enumerating these allows us to avoid speculative
 5642|       |    // parsing.
 5643|  8.00k|    return numLeft() == 0 || look() == 'E' || look() == '.' || look() == '_';
 5644|  8.00k|  };
 5645|       |
 5646|  8.00k|  NameState NameInfo(this);
 5647|  8.00k|  Node *Name = getDerived().parseName(&NameInfo);
 5648|  8.00k|  if (Name == nullptr)
  ------------------
  |  Branch (5648:7): [True: 4.15k, False: 3.84k]
  ------------------
 5649|  4.15k|    return nullptr;
 5650|       |
 5651|  3.84k|  if (resolveForwardTemplateRefs(NameInfo))
  ------------------
  |  Branch (5651:7): [True: 0, False: 3.84k]
  ------------------
 5652|      0|    return nullptr;
 5653|       |
 5654|  3.84k|  if (IsEndOfEncoding())
  ------------------
  |  Branch (5654:7): [True: 1, False: 3.84k]
  ------------------
 5655|      1|    return Name;
 5656|       |
 5657|       |  // ParseParams may be false at the top level only, when called from parse().
 5658|       |  // For example in the mangled name _Z3fooILZ3BarEET_f, ParseParams may be
 5659|       |  // false when demangling 3fooILZ3BarEET_f but is always true when demangling
 5660|       |  // 3Bar.
 5661|  3.84k|  if (!ParseParams) {
  ------------------
  |  Branch (5661:7): [True: 0, False: 3.84k]
  ------------------
 5662|      0|    while (consume())
  ------------------
  |  Branch (5662:12): [True: 0, False: 0]
  ------------------
 5663|      0|      ;
 5664|      0|    return Name;
 5665|      0|  }
 5666|       |
 5667|  3.84k|  Node *Attrs = nullptr;
 5668|  3.84k|  if (consumeIf("Ua9enable_ifI")) {
  ------------------
  |  Branch (5668:7): [True: 49, False: 3.79k]
  ------------------
 5669|     49|    size_t BeforeArgs = Names.size();
 5670|  2.32k|    while (!consumeIf('E')) {
  ------------------
  |  Branch (5670:12): [True: 2.32k, False: 0]
  ------------------
 5671|  2.32k|      Node *Arg = getDerived().parseTemplateArg();
 5672|  2.32k|      if (Arg == nullptr)
  ------------------
  |  Branch (5672:11): [True: 49, False: 2.27k]
  ------------------
 5673|     49|        return nullptr;
 5674|  2.27k|      Names.push_back(Arg);
 5675|  2.27k|    }
 5676|      0|    Attrs = make<EnableIfAttr>(popTrailingNodeArray(BeforeArgs));
 5677|      0|    if (!Attrs)
  ------------------
  |  Branch (5677:9): [True: 0, False: 0]
  ------------------
 5678|      0|      return nullptr;
 5679|      0|  }
 5680|       |
 5681|  3.79k|  Node *ReturnType = nullptr;
 5682|  3.79k|  if (!NameInfo.CtorDtorConversion && NameInfo.EndsWithTemplateArgs) {
  ------------------
  |  Branch (5682:7): [True: 2.53k, False: 1.26k]
  |  Branch (5682:39): [True: 333, False: 2.20k]
  ------------------
 5683|    333|    ReturnType = getDerived().parseType();
 5684|    333|    if (ReturnType == nullptr)
  ------------------
  |  Branch (5684:9): [True: 0, False: 333]
  ------------------
 5685|      0|      return nullptr;
 5686|    333|  }
 5687|       |
 5688|  3.79k|  NodeArray Params;
 5689|  3.79k|  if (!consumeIf('v')) {
  ------------------
  |  Branch (5689:7): [True: 3.79k, False: 0]
  ------------------
 5690|  3.79k|    size_t ParamsBegin = Names.size();
 5691|  1.46M|    do {
 5692|  1.46M|      Node *Ty = getDerived().parseType();
 5693|  1.46M|      if (Ty == nullptr)
  ------------------
  |  Branch (5693:11): [True: 1.71k, False: 1.45M]
  ------------------
 5694|  1.71k|        return nullptr;
 5695|       |
 5696|  1.45M|      const bool IsFirstParam = ParamsBegin == Names.size();
 5697|  1.45M|      if (NameInfo.HasExplicitObjectParameter && IsFirstParam)
  ------------------
  |  Branch (5697:11): [True: 1.75k, False: 1.45M]
  |  Branch (5697:50): [True: 108, False: 1.65k]
  ------------------
 5698|    108|        Ty = make<ExplicitObjectParameter>(Ty);
 5699|       |
 5700|  1.45M|      if (Ty == nullptr)
  ------------------
  |  Branch (5700:11): [True: 0, False: 1.45M]
  ------------------
 5701|      0|        return nullptr;
 5702|       |
 5703|  1.45M|      Names.push_back(Ty);
 5704|  1.45M|    } while (!IsEndOfEncoding() && look() != 'Q');
  ------------------
  |  Branch (5704:14): [True: 1.45M, False: 2.08k]
  |  Branch (5704:36): [True: 1.45M, False: 0]
  ------------------
 5705|  2.08k|    Params = popTrailingNodeArray(ParamsBegin);
 5706|  2.08k|  }
 5707|       |
 5708|  2.08k|  Node *Requires = nullptr;
 5709|  2.08k|  if (consumeIf('Q')) {
  ------------------
  |  Branch (5709:7): [True: 0, False: 2.08k]
  ------------------
 5710|      0|    Requires = getDerived().parseConstraintExpr();
 5711|      0|    if (!Requires)
  ------------------
  |  Branch (5711:9): [True: 0, False: 0]
  ------------------
 5712|      0|      return nullptr;
 5713|      0|  }
 5714|       |
 5715|  2.08k|  return make<FunctionEncoding>(ReturnType, Name, Params, Attrs, Requires,
 5716|  2.08k|                                NameInfo.CVQualifiers,
 5717|  2.08k|                                NameInfo.ReferenceQualifier);
 5718|  2.08k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E18SaveTemplateParamsC2EPS5_:
 2783|  15.0k|    SaveTemplateParams(AbstractManglingParser *TheParser) : Parser(TheParser) {
 2784|  15.0k|      OldParams = std::move(Parser->TemplateParams);
 2785|  15.0k|      OldOuterParams = std::move(Parser->OuterTemplateParams);
 2786|  15.0k|      Parser->TemplateParams.clear();
 2787|  15.0k|      Parser->OuterTemplateParams.clear();
 2788|  15.0k|    }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS1_IPNS0_4NodeELm8EEELm4EEaSEOS6_:
   93|  30.0k|  PODSmallVector &operator=(PODSmallVector &&Other) {
   94|  30.0k|    if (Other.isInline()) {
  ------------------
  |  Branch (94:9): [True: 30.0k, False: 0]
  ------------------
   95|  30.0k|      if (!isInline()) {
  ------------------
  |  Branch (95:11): [True: 0, False: 30.0k]
  ------------------
   96|      0|        std::free(First);
   97|      0|        clearInline();
   98|      0|      }
   99|  30.0k|      std::copy(Other.begin(), Other.end(), First);
  100|  30.0k|      Last = First + Other.size();
  101|  30.0k|      Other.clear();
  102|  30.0k|      return *this;
  103|  30.0k|    }
  104|       |
  105|      0|    if (isInline()) {
  ------------------
  |  Branch (105:9): [True: 0, False: 0]
  ------------------
  106|      0|      First = Other.First;
  107|      0|      Last = Other.Last;
  108|      0|      Cap = Other.Cap;
  109|      0|      Other.clearInline();
  110|      0|      return *this;
  111|      0|    }
  112|       |
  113|      0|    std::swap(First, Other.First);
  114|      0|    std::swap(Last, Other.Last);
  115|      0|    std::swap(Cap, Other.Cap);
  116|      0|    Other.clear();
  117|      0|    return *this;
  118|      0|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS1_IPNS0_4NodeELm8EEELm4EE5beginEv:
  138|   218k|  T *begin() { return First; }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS1_IPNS0_4NodeELm8EEELm4EE3endEv:
  139|  30.0k|  T *end() { return Last; }
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS1_IPNS0_4NodeELm8EEELm4EE4sizeEv:
  142|   294k|  size_t size() const { return static_cast<size_t>(Last - First); }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm8EEaSEOS4_:
   93|  30.0k|  PODSmallVector &operator=(PODSmallVector &&Other) {
   94|  30.0k|    if (Other.isInline()) {
  ------------------
  |  Branch (94:9): [True: 28.8k, False: 1.21k]
  ------------------
   95|  28.8k|      if (!isInline()) {
  ------------------
  |  Branch (95:11): [True: 149, False: 28.6k]
  ------------------
   96|    149|        std::free(First);
   97|    149|        clearInline();
   98|    149|      }
   99|  28.8k|      std::copy(Other.begin(), Other.end(), First);
  100|  28.8k|      Last = First + Other.size();
  101|  28.8k|      Other.clear();
  102|  28.8k|      return *this;
  103|  28.8k|    }
  104|       |
  105|  1.21k|    if (isInline()) {
  ------------------
  |  Branch (105:9): [True: 760, False: 454]
  ------------------
  106|    760|      First = Other.First;
  107|    760|      Last = Other.Last;
  108|    760|      Cap = Other.Cap;
  109|    760|      Other.clearInline();
  110|    760|      return *this;
  111|    760|    }
  112|       |
  113|    454|    std::swap(First, Other.First);
  114|    454|    std::swap(Last, Other.Last);
  115|    454|    std::swap(Cap, Other.Cap);
  116|    454|    Other.clear();
  117|    454|    return *this;
  118|  1.21k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm8EE11clearInlineEv:
   50|    909|  void clearInline() {
   51|    909|    First = Inline;
   52|    909|    Last = Inline;
   53|    909|    Cap = Inline + N;
   54|    909|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm8EE5beginEv:
  138|  90.7k|  T *begin() { return First; }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm8EE3endEv:
  139|  28.8k|  T *end() { return Last; }
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm8EE4sizeEv:
  142|   154k|  size_t size() const { return static_cast<size_t>(Last - First); }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS1_IPNS0_4NodeELm8EEELm4EE5clearEv:
  151|  47.2k|  void clear() { Last = First; }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm8EE5clearEv:
  151|  45.9k|  void clear() { Last = First; }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E16parseSpecialNameEv:
 5486|  4.99k|Node *AbstractManglingParser<Derived, Alloc>::parseSpecialName() {
 5487|  4.99k|  switch (look()) {
  ------------------
  |  Branch (5487:11): [True: 0, False: 4.99k]
  ------------------
 5488|  3.97k|  case 'T':
  ------------------
  |  Branch (5488:3): [True: 3.97k, False: 1.02k]
  ------------------
 5489|  3.97k|    switch (look(1)) {
 5490|       |    // TA <template-arg>    # template parameter object
 5491|       |    //
 5492|       |    // Not yet in the spec: https://github.com/itanium-cxx-abi/cxx-abi/issues/63
 5493|    323|    case 'A': {
  ------------------
  |  Branch (5493:5): [True: 323, False: 3.64k]
  ------------------
 5494|    323|      First += 2;
 5495|    323|      Node *Arg = getDerived().parseTemplateArg();
 5496|    323|      if (Arg == nullptr)
  ------------------
  |  Branch (5496:11): [True: 0, False: 323]
  ------------------
 5497|      0|        return nullptr;
 5498|    323|      return make<SpecialName>("template parameter object for ", Arg);
 5499|    323|    }
 5500|       |    // TV <type>    # virtual table
 5501|      0|    case 'V': {
  ------------------
  |  Branch (5501:5): [True: 0, False: 3.97k]
  ------------------
 5502|      0|      First += 2;
 5503|      0|      Node *Ty = getDerived().parseType();
 5504|      0|      if (Ty == nullptr)
  ------------------
  |  Branch (5504:11): [True: 0, False: 0]
  ------------------
 5505|      0|        return nullptr;
 5506|      0|      return make<SpecialName>("vtable for ", Ty);
 5507|      0|    }
 5508|       |    // TT <type>    # VTT structure (construction vtable index)
 5509|      0|    case 'T': {
  ------------------
  |  Branch (5509:5): [True: 0, False: 3.97k]
  ------------------
 5510|      0|      First += 2;
 5511|      0|      Node *Ty = getDerived().parseType();
 5512|      0|      if (Ty == nullptr)
  ------------------
  |  Branch (5512:11): [True: 0, False: 0]
  ------------------
 5513|      0|        return nullptr;
 5514|      0|      return make<SpecialName>("VTT for ", Ty);
 5515|      0|    }
 5516|       |    // TI <type>    # typeinfo structure
 5517|      0|    case 'I': {
  ------------------
  |  Branch (5517:5): [True: 0, False: 3.97k]
  ------------------
 5518|      0|      First += 2;
 5519|      0|      Node *Ty = getDerived().parseType();
 5520|      0|      if (Ty == nullptr)
  ------------------
  |  Branch (5520:11): [True: 0, False: 0]
  ------------------
 5521|      0|        return nullptr;
 5522|      0|      return make<SpecialName>("typeinfo for ", Ty);
 5523|      0|    }
 5524|       |    // TS <type>    # typeinfo name (null-terminated byte string)
 5525|      0|    case 'S': {
  ------------------
  |  Branch (5525:5): [True: 0, False: 3.97k]
  ------------------
 5526|      0|      First += 2;
 5527|      0|      Node *Ty = getDerived().parseType();
 5528|      0|      if (Ty == nullptr)
  ------------------
  |  Branch (5528:11): [True: 0, False: 0]
  ------------------
 5529|      0|        return nullptr;
 5530|      0|      return make<SpecialName>("typeinfo name for ", Ty);
 5531|      0|    }
 5532|       |    // Tc <call-offset> <call-offset> <base encoding>
 5533|      0|    case 'c': {
  ------------------
  |  Branch (5533:5): [True: 0, False: 3.97k]
  ------------------
 5534|      0|      First += 2;
 5535|      0|      if (parseCallOffset() || parseCallOffset())
  ------------------
  |  Branch (5535:11): [True: 0, False: 0]
  |  Branch (5535:32): [True: 0, False: 0]
  ------------------
 5536|      0|        return nullptr;
 5537|      0|      Node *Encoding = getDerived().parseEncoding();
 5538|      0|      if (Encoding == nullptr)
  ------------------
  |  Branch (5538:11): [True: 0, False: 0]
  ------------------
 5539|      0|        return nullptr;
 5540|      0|      return make<SpecialName>("covariant return thunk to ", Encoding);
 5541|      0|    }
 5542|       |    // extension ::= TC <first type> <number> _ <second type>
 5543|       |    //               # construction vtable for second-in-first
 5544|    323|    case 'C': {
  ------------------
  |  Branch (5544:5): [True: 323, False: 3.64k]
  ------------------
 5545|    323|      First += 2;
 5546|    323|      Node *FirstType = getDerived().parseType();
 5547|    323|      if (FirstType == nullptr)
  ------------------
  |  Branch (5547:11): [True: 0, False: 323]
  ------------------
 5548|      0|        return nullptr;
 5549|    323|      if (parseNumber(true).empty() || !consumeIf('_'))
  ------------------
  |  Branch (5549:11): [True: 0, False: 323]
  |  Branch (5549:11): [True: 0, False: 323]
  |  Branch (5549:40): [True: 0, False: 323]
  ------------------
 5550|      0|        return nullptr;
 5551|    323|      Node *SecondType = getDerived().parseType();
 5552|    323|      if (SecondType == nullptr)
  ------------------
  |  Branch (5552:11): [True: 0, False: 323]
  ------------------
 5553|      0|        return nullptr;
 5554|    323|      return make<CtorVtableSpecialName>(SecondType, FirstType);
 5555|    323|    }
 5556|       |    // TW <object name> # Thread-local wrapper
 5557|      0|    case 'W': {
  ------------------
  |  Branch (5557:5): [True: 0, False: 3.97k]
  ------------------
 5558|      0|      First += 2;
 5559|      0|      Node *Name = getDerived().parseName();
 5560|      0|      if (Name == nullptr)
  ------------------
  |  Branch (5560:11): [True: 0, False: 0]
  ------------------
 5561|      0|        return nullptr;
 5562|      0|      return make<SpecialName>("thread-local wrapper routine for ", Name);
 5563|      0|    }
 5564|       |    // TH <object name> # Thread-local initialization
 5565|      0|    case 'H': {
  ------------------
  |  Branch (5565:5): [True: 0, False: 3.97k]
  ------------------
 5566|      0|      First += 2;
 5567|      0|      Node *Name = getDerived().parseName();
 5568|      0|      if (Name == nullptr)
  ------------------
  |  Branch (5568:11): [True: 0, False: 0]
  ------------------
 5569|      0|        return nullptr;
 5570|      0|      return make<SpecialName>("thread-local initialization routine for ", Name);
 5571|      0|    }
 5572|       |    // T <call-offset> <base encoding>
 5573|  3.32k|    default: {
  ------------------
  |  Branch (5573:5): [True: 3.32k, False: 646]
  ------------------
 5574|  3.32k|      ++First;
 5575|  3.32k|      bool IsVirt = look() == 'v';
 5576|  3.32k|      if (parseCallOffset())
  ------------------
  |  Branch (5576:11): [True: 0, False: 3.32k]
  ------------------
 5577|      0|        return nullptr;
 5578|  3.32k|      Node *BaseEncoding = getDerived().parseEncoding();
 5579|  3.32k|      if (BaseEncoding == nullptr)
  ------------------
  |  Branch (5579:11): [True: 380, False: 2.94k]
  ------------------
 5580|    380|        return nullptr;
 5581|  2.94k|      if (IsVirt)
  ------------------
  |  Branch (5581:11): [True: 0, False: 2.94k]
  ------------------
 5582|      0|        return make<SpecialName>("virtual thunk to ", BaseEncoding);
 5583|  2.94k|      else
 5584|  2.94k|        return make<SpecialName>("non-virtual thunk to ", BaseEncoding);
 5585|  2.94k|    }
 5586|  3.97k|    }
 5587|  1.02k|  case 'G':
  ------------------
  |  Branch (5587:3): [True: 1.02k, False: 3.97k]
  ------------------
 5588|  1.02k|    switch (look(1)) {
  ------------------
  |  Branch (5588:13): [True: 0, False: 1.02k]
  ------------------
 5589|       |    // GV <object name> # Guard variable for one-time initialization
 5590|      0|    case 'V': {
  ------------------
  |  Branch (5590:5): [True: 0, False: 1.02k]
  ------------------
 5591|      0|      First += 2;
 5592|      0|      Node *Name = getDerived().parseName();
 5593|      0|      if (Name == nullptr)
  ------------------
  |  Branch (5593:11): [True: 0, False: 0]
  ------------------
 5594|      0|        return nullptr;
 5595|      0|      return make<SpecialName>("guard variable for ", Name);
 5596|      0|    }
 5597|       |    // GR <object name> # reference temporary for object
 5598|       |    // GR <object name> _             # First temporary
 5599|       |    // GR <object name> <seq-id> _    # Subsequent temporaries
 5600|      0|    case 'R': {
  ------------------
  |  Branch (5600:5): [True: 0, False: 1.02k]
  ------------------
 5601|      0|      First += 2;
 5602|      0|      Node *Name = getDerived().parseName();
 5603|      0|      if (Name == nullptr)
  ------------------
  |  Branch (5603:11): [True: 0, False: 0]
  ------------------
 5604|      0|        return nullptr;
 5605|      0|      size_t Count;
 5606|      0|      bool ParsedSeqId = !parseSeqId(&Count);
 5607|      0|      if (!consumeIf('_') && ParsedSeqId)
  ------------------
  |  Branch (5607:11): [True: 0, False: 0]
  |  Branch (5607:30): [True: 0, False: 0]
  ------------------
 5608|      0|        return nullptr;
 5609|      0|      return make<SpecialName>("reference temporary for ", Name);
 5610|      0|    }
 5611|       |    // GI <module-name> v
 5612|  1.02k|    case 'I': {
  ------------------
  |  Branch (5612:5): [True: 1.02k, False: 0]
  ------------------
 5613|  1.02k|      First += 2;
 5614|  1.02k|      ModuleName *Module = nullptr;
 5615|  1.02k|      if (getDerived().parseModuleNameOpt(Module))
  ------------------
  |  Branch (5615:11): [True: 0, False: 1.02k]
  ------------------
 5616|      0|        return nullptr;
 5617|  1.02k|      if (Module == nullptr)
  ------------------
  |  Branch (5617:11): [True: 0, False: 1.02k]
  ------------------
 5618|      0|        return nullptr;
 5619|  1.02k|      return make<SpecialName>("initializer for module ", Module);
 5620|  1.02k|    }
 5621|  1.02k|    }
 5622|  4.99k|  }
 5623|      0|  return nullptr;
 5624|  4.99k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_11SpecialNameEJRA31_KcRPNS0_4NodeEEEESC_DpOT0_:
 2827|    323|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|    323|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|    323|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle11SpecialNameC2ENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEPKNS0_4NodeE:
 1032|  4.29k|      : Node(KSpecialName), Special(Special_), Child(Child_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle4NodeC2ENS1_4KindENS1_4PrecENS1_5CacheES4_S4_:
  221|  4.78M|      : K(K_), Precedence(Precedence_), RHSComponentCache(RHSComponentCache_),
  222|  4.78M|        ArrayCache(ArrayCache_), FunctionCache(FunctionCache_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E15parseCallOffsetEv:
 5453|  3.32k|bool AbstractManglingParser<Alloc, Derived>::parseCallOffset() {
 5454|       |  // Just scan through the call offset, we never add this information into the
 5455|       |  // output.
 5456|  3.32k|  if (consumeIf('h'))
  ------------------
  |  Branch (5456:7): [True: 2.94k, False: 380]
  ------------------
 5457|  2.94k|    return parseNumber(true).empty() || !consumeIf('_');
  ------------------
  |  Branch (5457:12): [True: 0, False: 2.94k]
  |  Branch (5457:41): [True: 0, False: 2.94k]
  ------------------
 5458|    380|  if (consumeIf('v'))
  ------------------
  |  Branch (5458:7): [True: 380, False: 0]
  ------------------
 5459|    380|    return parseNumber(true).empty() || !consumeIf('_') ||
  ------------------
  |  Branch (5459:12): [True: 0, False: 380]
  |  Branch (5459:41): [True: 0, False: 380]
  ------------------
 5460|    380|           parseNumber(true).empty() || !consumeIf('_');
  ------------------
  |  Branch (5460:12): [True: 0, False: 380]
  |  Branch (5460:41): [True: 0, False: 380]
  ------------------
 5461|      0|  return true;
 5462|    380|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_21CtorVtableSpecialNameEJRPNS0_4NodeESA_EEES9_DpOT0_:
 2827|    323|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|    323|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|    323|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle21CtorVtableSpecialNameC2EPKNS0_4NodeES4_:
 1048|    323|      : Node(KCtorVtableSpecialName),
 1049|    323|        FirstType(FirstType_), SecondType(SecondType_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_11SpecialNameEJRA22_KcRPNS0_4NodeEEEESC_DpOT0_:
 2827|  2.94k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  2.94k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  2.94k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E10parseSeqIdEPm:
 5778|  16.5k|bool AbstractManglingParser<Alloc, Derived>::parseSeqId(size_t *Out) {
 5779|  16.5k|  if (!(look() >= '0' && look() <= '9') &&
  ------------------
  |  Branch (5779:9): [True: 16.5k, False: 0]
  |  Branch (5779:26): [True: 16.5k, False: 0]
  ------------------
 5780|  16.5k|      !(look() >= 'A' && look() <= 'Z'))
  ------------------
  |  Branch (5780:9): [True: 0, False: 0]
  |  Branch (5780:26): [True: 0, False: 0]
  ------------------
 5781|      0|    return true;
 5782|       |
 5783|  16.5k|  size_t Id = 0;
 5784|  33.0k|  while (true) {
  ------------------
  |  Branch (5784:10): [Folded - Ignored]
  ------------------
 5785|  33.0k|    if (look() >= '0' && look() <= '9') {
  ------------------
  |  Branch (5785:9): [True: 33.0k, False: 0]
  |  Branch (5785:26): [True: 16.5k, False: 16.5k]
  ------------------
 5786|  16.5k|      Id *= 36;
 5787|  16.5k|      Id += static_cast<size_t>(look() - '0');
 5788|  16.5k|    } else if (look() >= 'A' && look() <= 'Z') {
  ------------------
  |  Branch (5788:16): [True: 16.5k, False: 0]
  |  Branch (5788:33): [True: 0, False: 16.5k]
  ------------------
 5789|      0|      Id *= 36;
 5790|      0|      Id += static_cast<size_t>(look() - 'A') + 10;
 5791|  16.5k|    } else {
 5792|  16.5k|      *Out = Id;
 5793|  16.5k|      return false;
 5794|  16.5k|    }
 5795|  16.5k|    ++First;
 5796|  16.5k|  }
 5797|  16.5k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E18parseModuleNameOptERPNS0_10ModuleNameE:
 3215|   156k|    ModuleName *&Module) {
 3216|   157k|  while (consumeIf('W')) {
  ------------------
  |  Branch (3216:10): [True: 1.02k, False: 156k]
  ------------------
 3217|  1.02k|    bool IsPartition = consumeIf('P');
 3218|  1.02k|    Node *Sub = getDerived().parseSourceName(nullptr);
 3219|  1.02k|    if (!Sub)
  ------------------
  |  Branch (3219:9): [True: 0, False: 1.02k]
  ------------------
 3220|      0|      return true;
 3221|  1.02k|    Module =
 3222|  1.02k|        static_cast<ModuleName *>(make<ModuleName>(Module, Sub, IsPartition));
 3223|  1.02k|    Subs.push_back(Module);
 3224|  1.02k|  }
 3225|       |
 3226|   156k|  return false;
 3227|   156k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E15parseSourceNameEPNS5_9NameStateE:
 3334|   137k|Node *AbstractManglingParser<Derived, Alloc>::parseSourceName(NameState *) {
 3335|   137k|  size_t Length = 0;
 3336|   137k|  if (parsePositiveInteger(&Length))
  ------------------
  |  Branch (3336:7): [True: 0, False: 137k]
  ------------------
 3337|      0|    return nullptr;
 3338|   137k|  if (numLeft() < Length || Length == 0)
  ------------------
  |  Branch (3338:7): [True: 2, False: 137k]
  |  Branch (3338:29): [True: 1, False: 137k]
  ------------------
 3339|      3|    return nullptr;
 3340|   137k|  std::string_view Name(First, Length);
 3341|   137k|  First += Length;
 3342|   137k|  if (starts_with(Name, "_GLOBAL__N"))
  ------------------
  |  Branch (3342:7): [True: 0, False: 137k]
  ------------------
 3343|      0|    return make<NameType>("(anonymous namespace)");
 3344|   137k|  return make<NameType>(Name);
 3345|   137k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E20parsePositiveIntegerEPm:
 3895|   207k|bool AbstractManglingParser<Alloc, Derived>::parsePositiveInteger(size_t *Out) {
 3896|   207k|  *Out = 0;
 3897|   207k|  if (look() < '0' || look() > '9')
  ------------------
  |  Branch (3897:7): [True: 1, False: 207k]
  |  Branch (3897:23): [True: 5, False: 207k]
  ------------------
 3898|      6|    return true;
 3899|   472k|  while (look() >= '0' && look() <= '9') {
  ------------------
  |  Branch (3899:10): [True: 450k, False: 21.9k]
  |  Branch (3899:27): [True: 265k, False: 185k]
  ------------------
 3900|   265k|    *Out *= 10;
 3901|   265k|    *Out += static_cast<size_t>(consume() - '0');
 3902|   265k|  }
 3903|   207k|  return false;
 3904|   207k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_8NameTypeEJRA22_KcEEEPNS0_4NodeEDpOT0_:
 2827|    606|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|    606|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|    606|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle8NameTypeC2ENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEE:
  503|  3.69M|  NameType(std::string_view Name_) : Node(KNameType), Name(Name_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_8NameTypeEJRNSt3__117basic_string_viewIcNS8_11char_traitsIcEEEEEEEPNS0_4NodeEDpOT0_:
 2827|   142k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|   142k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|   142k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_10ModuleNameEJRPS7_RPNS0_4NodeERbEEESB_DpOT0_:
 2827|  1.02k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  1.02k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  1.02k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle10ModuleNameC2EPS1_PNS0_4NodeEb:
 1103|  1.02k|      : Node(KModuleName), Parent(Parent_), Name(Name_),
 1104|  1.02k|        IsPartition(IsPartition_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_11SpecialNameEJRA24_KcRPNS0_10ModuleNameEEEEPNS0_4NodeEDpOT0_:
 2827|  1.02k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  1.02k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  1.02k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E9NameStateC2EPS5_:
 2931|  8.00k|        : ForwardTemplateRefsBegin(Enclosing->ForwardTemplateRefs.size()) {}
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_24ForwardTemplateReferenceELm4EE4sizeEv:
  142|  15.7k|  size_t size() const { return static_cast<size_t>(Last - First); }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E9parseNameEPNS5_9NameStateE:
 3046|   158k|Node *AbstractManglingParser<Derived, Alloc>::parseName(NameState *State) {
 3047|   158k|  if (look() == 'N')
  ------------------
  |  Branch (3047:7): [True: 9.18k, False: 149k]
  ------------------
 3048|  9.18k|    return getDerived().parseNestedName(State);
 3049|   149k|  if (look() == 'Z')
  ------------------
  |  Branch (3049:7): [True: 9.65k, False: 140k]
  ------------------
 3050|  9.65k|    return getDerived().parseLocalName(State);
 3051|       |
 3052|   140k|  Node *Result = nullptr;
 3053|   140k|  bool IsSubst = false;
 3054|       |
 3055|   140k|  Result = getDerived().parseUnscopedName(State, &IsSubst);
 3056|   140k|  if (!Result)
  ------------------
  |  Branch (3056:7): [True: 2.72k, False: 137k]
  ------------------
 3057|  2.72k|    return nullptr;
 3058|       |
 3059|   137k|  if (look() == 'I') {
  ------------------
  |  Branch (3059:7): [True: 1.64k, False: 135k]
  ------------------
 3060|       |    //        ::= <unscoped-template-name> <template-args>
 3061|  1.64k|    if (!IsSubst)
  ------------------
  |  Branch (3061:9): [True: 713, False: 934]
  ------------------
 3062|       |      // An unscoped-template-name is substitutable.
 3063|    713|      Subs.push_back(Result);
 3064|  1.64k|    Node *TA = getDerived().parseTemplateArgs(State != nullptr);
 3065|  1.64k|    if (TA == nullptr)
  ------------------
  |  Branch (3065:9): [True: 1.30k, False: 343]
  ------------------
 3066|  1.30k|      return nullptr;
 3067|    343|    if (State)
  ------------------
  |  Branch (3067:9): [True: 334, False: 9]
  ------------------
 3068|    334|      State->EndsWithTemplateArgs = true;
 3069|    343|    Result = make<NameWithTemplateArgs>(Result, TA);
 3070|   135k|  } else if (IsSubst) {
  ------------------
  |  Branch (3070:14): [True: 0, False: 135k]
  ------------------
 3071|       |    // The substitution case must be followed by <template-args>.
 3072|      0|    return nullptr;
 3073|      0|  }
 3074|       |
 3075|   136k|  return Result;
 3076|   137k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E15parseNestedNameEPNS5_9NameStateE:
 3586|  9.18k|AbstractManglingParser<Derived, Alloc>::parseNestedName(NameState *State) {
 3587|  9.18k|  if (!consumeIf('N'))
  ------------------
  |  Branch (3587:7): [True: 0, False: 9.18k]
  ------------------
 3588|      0|    return nullptr;
 3589|       |
 3590|       |  // 'H' specifies that the encoding that follows
 3591|       |  // has an explicit object parameter.
 3592|  9.18k|  if (!consumeIf('H')) {
  ------------------
  |  Branch (3592:7): [True: 9.02k, False: 156]
  ------------------
 3593|  9.02k|    Qualifiers CVTmp = parseCVQualifiers();
 3594|  9.02k|    if (State)
  ------------------
  |  Branch (3594:9): [True: 193, False: 8.83k]
  ------------------
 3595|    193|      State->CVQualifiers = CVTmp;
 3596|       |
 3597|  9.02k|    if (consumeIf('O')) {
  ------------------
  |  Branch (3597:9): [True: 0, False: 9.02k]
  ------------------
 3598|      0|      if (State)
  ------------------
  |  Branch (3598:11): [True: 0, False: 0]
  ------------------
 3599|      0|        State->ReferenceQualifier = FrefQualRValue;
 3600|  9.02k|    } else if (consumeIf('R')) {
  ------------------
  |  Branch (3600:16): [True: 0, False: 9.02k]
  ------------------
 3601|      0|      if (State)
  ------------------
  |  Branch (3601:11): [True: 0, False: 0]
  ------------------
 3602|      0|        State->ReferenceQualifier = FrefQualLValue;
 3603|  9.02k|    } else {
 3604|  9.02k|      if (State)
  ------------------
  |  Branch (3604:11): [True: 193, False: 8.83k]
  ------------------
 3605|    193|        State->ReferenceQualifier = FrefQualNone;
 3606|  9.02k|    }
 3607|  9.02k|  } else if (State) {
  ------------------
  |  Branch (3607:14): [True: 108, False: 48]
  ------------------
 3608|    108|    State->HasExplicitObjectParameter = true;
 3609|    108|  }
 3610|       |
 3611|  9.18k|  Node *SoFar = nullptr;
 3612|  42.5k|  while (!consumeIf('E')) {
  ------------------
  |  Branch (3612:10): [True: 33.3k, False: 9.16k]
  ------------------
 3613|  33.3k|    if (State)
  ------------------
  |  Branch (3613:9): [True: 301, False: 33.0k]
  ------------------
 3614|       |      // Only set end-with-template on the case that does that.
 3615|    301|      State->EndsWithTemplateArgs = false;
 3616|       |
 3617|  33.3k|    if (look() == 'T') {
  ------------------
  |  Branch (3617:9): [True: 0, False: 33.3k]
  ------------------
 3618|       |      //          ::= <template-param>
 3619|      0|      if (SoFar != nullptr)
  ------------------
  |  Branch (3619:11): [True: 0, False: 0]
  ------------------
 3620|      0|        return nullptr; // Cannot have a prefix.
 3621|      0|      SoFar = getDerived().parseTemplateParam();
 3622|  33.3k|    } else if (look() == 'I') {
  ------------------
  |  Branch (3622:16): [True: 8.35k, False: 25.0k]
  ------------------
 3623|       |      //          ::= <template-prefix> <template-args>
 3624|  8.35k|      if (SoFar == nullptr)
  ------------------
  |  Branch (3624:11): [True: 0, False: 8.35k]
  ------------------
 3625|      0|        return nullptr; // Must have a prefix.
 3626|  8.35k|      Node *TA = getDerived().parseTemplateArgs(State != nullptr);
 3627|  8.35k|      if (TA == nullptr)
  ------------------
  |  Branch (3627:11): [True: 0, False: 8.35k]
  ------------------
 3628|      0|        return nullptr;
 3629|  8.35k|      if (SoFar->getKind() == Node::KNameWithTemplateArgs)
  ------------------
  |  Branch (3629:11): [True: 0, False: 8.35k]
  ------------------
 3630|       |        // Semantically <template-args> <template-args> cannot be generated by a
 3631|       |        // C++ entity.  There will always be [something like] a name between
 3632|       |        // them.
 3633|      0|        return nullptr;
 3634|  8.35k|      if (State)
  ------------------
  |  Branch (3634:11): [True: 0, False: 8.35k]
  ------------------
 3635|      0|        State->EndsWithTemplateArgs = true;
 3636|  8.35k|      SoFar = make<NameWithTemplateArgs>(SoFar, TA);
 3637|  25.0k|    } else if (look() == 'D' && (look(1) == 't' || look(1) == 'T')) {
  ------------------
  |  Branch (3637:16): [True: 6.72k, False: 18.3k]
  |  Branch (3637:34): [True: 0, False: 6.72k]
  |  Branch (3637:52): [True: 0, False: 6.72k]
  ------------------
 3638|       |      //          ::= <decltype>
 3639|      0|      if (SoFar != nullptr)
  ------------------
  |  Branch (3639:11): [True: 0, False: 0]
  ------------------
 3640|      0|        return nullptr; // Cannot have a prefix.
 3641|      0|      SoFar = getDerived().parseDecltype();
 3642|  25.0k|    } else {
 3643|  25.0k|      ModuleName *Module = nullptr;
 3644|       |
 3645|  25.0k|      if (look() == 'S') {
  ------------------
  |  Branch (3645:11): [True: 9.01k, False: 16.0k]
  ------------------
 3646|       |        //          ::= <substitution>
 3647|  9.01k|        Node *S = nullptr;
 3648|  9.01k|        if (look(1) == 't') {
  ------------------
  |  Branch (3648:13): [True: 11, False: 9.00k]
  ------------------
 3649|     11|          First += 2;
 3650|     11|          S = make<NameType>("std");
 3651|  9.00k|        } else {
 3652|  9.00k|          S = getDerived().parseSubstitution();
 3653|  9.00k|        }
 3654|  9.01k|        if (!S)
  ------------------
  |  Branch (3654:13): [True: 0, False: 9.01k]
  ------------------
 3655|      0|          return nullptr;
 3656|  9.01k|        if (S->getKind() == Node::KModuleName) {
  ------------------
  |  Branch (3656:13): [True: 0, False: 9.01k]
  ------------------
 3657|      0|          Module = static_cast<ModuleName *>(S);
 3658|  9.01k|        } else if (SoFar != nullptr) {
  ------------------
  |  Branch (3658:20): [True: 0, False: 9.01k]
  ------------------
 3659|      0|          return nullptr; // Cannot have a prefix.
 3660|  9.01k|        } else {
 3661|  9.01k|          SoFar = S;
 3662|  9.01k|          continue; // Do not push a new substitution.
 3663|  9.01k|        }
 3664|  9.01k|      }
 3665|       |
 3666|       |      //          ::= [<prefix>] <unqualified-name>
 3667|  16.0k|      SoFar = getDerived().parseUnqualifiedName(State, SoFar, Module);
 3668|  16.0k|    }
 3669|       |
 3670|  24.3k|    if (SoFar == nullptr)
  ------------------
  |  Branch (3670:9): [True: 11, False: 24.3k]
  ------------------
 3671|     11|      return nullptr;
 3672|  24.3k|    Subs.push_back(SoFar);
 3673|       |
 3674|       |    // No longer used.
 3675|       |    // <data-member-prefix> := <member source-name> [<template-args>] M
 3676|  24.3k|    consumeIf('M');
 3677|  24.3k|  }
 3678|       |
 3679|  9.16k|  if (SoFar == nullptr || Subs.empty())
  ------------------
  |  Branch (3679:7): [True: 0, False: 9.16k]
  |  Branch (3679:27): [True: 0, False: 9.16k]
  ------------------
 3680|      0|    return nullptr;
 3681|       |
 3682|  9.16k|  Subs.pop_back();
 3683|  9.16k|  return SoFar;
 3684|  9.16k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E17parseCVQualifiersEv:
 4697|   309k|Qualifiers AbstractManglingParser<Alloc, Derived>::parseCVQualifiers() {
 4698|   309k|  Qualifiers CVR = QualNone;
 4699|   309k|  if (consumeIf('r'))
  ------------------
  |  Branch (4699:7): [True: 158k, False: 151k]
  ------------------
 4700|   158k|    CVR |= QualRestrict;
 4701|   309k|  if (consumeIf('V'))
  ------------------
  |  Branch (4701:7): [True: 35.9k, False: 273k]
  ------------------
 4702|  35.9k|    CVR |= QualVolatile;
 4703|   309k|  if (consumeIf('K'))
  ------------------
  |  Branch (4703:7): [True: 24.4k, False: 285k]
  ------------------
 4704|  24.4k|    CVR |= QualConst;
 4705|   309k|  return CVR;
 4706|   309k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangleoRERNS0_10QualifiersES1_:
  421|   218k|inline Qualifiers operator|=(Qualifiers &Q1, Qualifiers Q2) {
  422|   218k|  return Q1 = static_cast<Qualifiers>(Q1 | Q2);
  423|   218k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E18parseTemplateParamEv:
 5877|  66.7k|Node *AbstractManglingParser<Derived, Alloc>::parseTemplateParam() {
 5878|  66.7k|  const char *Begin = First;
 5879|  66.7k|  if (!consumeIf('T'))
  ------------------
  |  Branch (5879:7): [True: 0, False: 66.7k]
  ------------------
 5880|      0|    return nullptr;
 5881|       |
 5882|  66.7k|  size_t Level = 0;
 5883|  66.7k|  if (consumeIf('L')) {
  ------------------
  |  Branch (5883:7): [True: 0, False: 66.7k]
  ------------------
 5884|      0|    if (parsePositiveInteger(&Level))
  ------------------
  |  Branch (5884:9): [True: 0, False: 0]
  ------------------
 5885|      0|      return nullptr;
 5886|      0|    ++Level;
 5887|      0|    if (!consumeIf('_'))
  ------------------
  |  Branch (5887:9): [True: 0, False: 0]
  ------------------
 5888|      0|      return nullptr;
 5889|      0|  }
 5890|       |
 5891|  66.7k|  size_t Index = 0;
 5892|  66.7k|  if (!consumeIf('_')) {
  ------------------
  |  Branch (5892:7): [True: 10, False: 66.7k]
  ------------------
 5893|     10|    if (parsePositiveInteger(&Index))
  ------------------
  |  Branch (5893:9): [True: 4, False: 6]
  ------------------
 5894|      4|      return nullptr;
 5895|      6|    ++Index;
 5896|      6|    if (!consumeIf('_'))
  ------------------
  |  Branch (5896:9): [True: 0, False: 6]
  ------------------
 5897|      0|      return nullptr;
 5898|      6|  }
 5899|       |
 5900|       |  // We don't track enclosing template parameter levels well enough to reliably
 5901|       |  // substitute them all within a <constraint-expression>, so print the
 5902|       |  // parameter numbering instead for now.
 5903|       |  // TODO: Track all enclosing template parameters and substitute them here.
 5904|  66.7k|  if (HasIncompleteTemplateParameterTracking) {
  ------------------
  |  Branch (5904:7): [True: 6, False: 66.7k]
  ------------------
 5905|      6|    return make<NameType>(std::string_view(Begin, First - 1 - Begin));
 5906|      6|  }
 5907|       |
 5908|       |  // If we're in a context where this <template-param> refers to a
 5909|       |  // <template-arg> further ahead in the mangled name (currently just conversion
 5910|       |  // operator types), then we should only look it up in the right context.
 5911|       |  // This can only happen at the outermost level.
 5912|  66.7k|  if (PermitForwardTemplateReferences && Level == 0) {
  ------------------
  |  Branch (5912:7): [True: 1.09k, False: 65.6k]
  |  Branch (5912:42): [True: 1.09k, False: 0]
  ------------------
 5913|  1.09k|    Node *ForwardRef = make<ForwardTemplateReference>(Index);
 5914|  1.09k|    if (!ForwardRef)
  ------------------
  |  Branch (5914:9): [True: 0, False: 1.09k]
  ------------------
 5915|      0|      return nullptr;
 5916|  1.09k|    DEMANGLE_ASSERT(ForwardRef->getKind() == Node::KForwardTemplateReference,
  ------------------
  |  |   14|  1.09k|#define DEMANGLE_ASSERT(expr, msg) _LIBCXXABI_ASSERT(expr, msg)
  |  |  ------------------
  |  |  |  |   19|  1.09k|    do {                                                                                                               \
  |  |  |  |   20|  1.09k|      if (!(expr)) {                                                                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:11): [True: 0, False: 1.09k]
  |  |  |  |  ------------------
  |  |  |  |   21|      0|        char const* __msg = (msg);                                                                                     \
  |  |  |  |   22|      0|        ::__abort_message("%s:%d: %s", __FILE__, __LINE__, __msg);                                                     \
  |  |  |  |   23|      0|      }                                                                                                                \
  |  |  |  |   24|  1.09k|    } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (24:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5917|  1.09k|                    "");
 5918|  1.09k|    ForwardTemplateRefs.push_back(
 5919|  1.09k|        static_cast<ForwardTemplateReference *>(ForwardRef));
 5920|  1.09k|    return ForwardRef;
 5921|  1.09k|  }
 5922|       |
 5923|  65.6k|  if (Level >= TemplateParams.size() || !TemplateParams[Level] ||
  ------------------
  |  Branch (5923:7): [True: 819, False: 64.7k]
  |  Branch (5923:41): [True: 2.85k, False: 61.9k]
  ------------------
 5924|  65.6k|      Index >= TemplateParams[Level]->size()) {
  ------------------
  |  Branch (5924:7): [True: 0, False: 61.9k]
  ------------------
 5925|       |    // Itanium ABI 5.1.8: In a generic lambda, uses of auto in the parameter
 5926|       |    // list are mangled as the corresponding artificial template type parameter.
 5927|  3.67k|    if (ParsingLambdaParamsAtLevel == Level && Level <= TemplateParams.size()) {
  ------------------
  |  Branch (5927:9): [True: 3.67k, False: 0]
  |  Branch (5927:48): [True: 3.67k, False: 0]
  ------------------
 5928|       |      // This will be popped by the ScopedTemplateParamList in
 5929|       |      // parseUnnamedTypeName.
 5930|  3.67k|      if (Level == TemplateParams.size())
  ------------------
  |  Branch (5930:11): [True: 819, False: 2.85k]
  ------------------
 5931|    819|        TemplateParams.push_back(nullptr);
 5932|  3.67k|      return make<NameType>("auto");
 5933|  3.67k|    }
 5934|       |
 5935|      0|    return nullptr;
 5936|  3.67k|  }
 5937|       |
 5938|  61.9k|  return (*TemplateParams[Level])[Index];
 5939|  65.6k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_8NameTypeEJNSt3__117basic_string_viewIcNS8_11char_traitsIcEEEEEEEPNS0_4NodeEDpOT0_:
 2827|  21.7k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  21.7k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  21.7k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_24ForwardTemplateReferenceEJRmEEEPNS0_4NodeEDpOT0_:
 2827|  1.09k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  1.09k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  1.09k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle24ForwardTemplateReferenceC2Em:
 1574|  1.09k|      : Node(KForwardTemplateReference, Cache::Unknown, Cache::Unknown,
 1575|  1.09k|             Cache::Unknown),
 1576|  1.09k|        Index(Index_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle4NodeC2ENS1_4KindENS1_5CacheES3_S3_:
  225|   687k|      : Node(K_, Prec::Primary, RHSComponentCache_, ArrayCache_,
  226|   687k|             FunctionCache_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_24ForwardTemplateReferenceELm4EE9push_backERKS3_:
  121|  1.09k|  void push_back(const T &Elem) {
  122|  1.09k|    if (Last == Cap)
  ------------------
  |  Branch (122:9): [True: 20, False: 1.07k]
  ------------------
  123|     20|      reserve(size() * 2);
  124|  1.09k|    *Last++ = Elem;
  125|  1.09k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_24ForwardTemplateReferenceELm4EE7reserveEm:
   56|     20|  void reserve(size_t NewCap) {
   57|     20|    size_t S = size();
   58|     20|    if (isInline()) {
  ------------------
  |  Branch (58:9): [True: 3, False: 17]
  ------------------
   59|      3|      auto *Tmp = static_cast<T *>(std::malloc(NewCap * sizeof(T)));
   60|      3|      if (Tmp == nullptr)
  ------------------
  |  Branch (60:11): [True: 0, False: 3]
  ------------------
   61|      0|        std::abort();
   62|      3|      std::copy(First, Last, Tmp);
   63|      3|      First = Tmp;
   64|     17|    } else {
   65|     17|      First = static_cast<T *>(std::realloc(First, NewCap * sizeof(T)));
   66|     17|      if (First == nullptr)
  ------------------
  |  Branch (66:11): [True: 0, False: 17]
  ------------------
   67|      0|        std::abort();
   68|     17|    }
   69|     20|    Last = First + S;
   70|     20|    Cap = First + NewCap;
   71|     20|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS1_IPNS0_4NodeELm8EEELm4EEixEm:
  147|   188k|  T &operator[](size_t Index) {
  148|   188k|    DEMANGLE_ASSERT(Index < size(), "Invalid access!");
  ------------------
  |  |   14|   188k|#define DEMANGLE_ASSERT(expr, msg) _LIBCXXABI_ASSERT(expr, msg)
  |  |  ------------------
  |  |  |  |   19|   188k|    do {                                                                                                               \
  |  |  |  |   20|   188k|      if (!(expr)) {                                                                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:11): [True: 0, False: 188k]
  |  |  |  |  ------------------
  |  |  |  |   21|      0|        char const* __msg = (msg);                                                                                     \
  |  |  |  |   22|      0|        ::__abort_message("%s:%d: %s", __FILE__, __LINE__, __msg);                                                     \
  |  |  |  |   23|      0|      }                                                                                                                \
  |  |  |  |   24|   188k|    } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (24:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  149|   188k|    return *(begin() + Index);
  150|   188k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS1_IPNS0_4NodeELm8EEELm4EE9push_backERKS5_:
  121|  3.07k|  void push_back(const T &Elem) {
  122|  3.07k|    if (Last == Cap)
  ------------------
  |  Branch (122:9): [True: 0, False: 3.07k]
  ------------------
  123|      0|      reserve(size() * 2);
  124|  3.07k|    *Last++ = Elem;
  125|  3.07k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_8NameTypeEJRA5_KcEEEPNS0_4NodeEDpOT0_:
 2827|   836k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|   836k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|   836k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm8EEixEm:
  147|  61.9k|  T &operator[](size_t Index) {
  148|  61.9k|    DEMANGLE_ASSERT(Index < size(), "Invalid access!");
  ------------------
  |  |   14|  61.9k|#define DEMANGLE_ASSERT(expr, msg) _LIBCXXABI_ASSERT(expr, msg)
  |  |  ------------------
  |  |  |  |   19|  61.9k|    do {                                                                                                               \
  |  |  |  |   20|  61.9k|      if (!(expr)) {                                                                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:11): [True: 0, False: 61.9k]
  |  |  |  |  ------------------
  |  |  |  |   21|      0|        char const* __msg = (msg);                                                                                     \
  |  |  |  |   22|      0|        ::__abort_message("%s:%d: %s", __FILE__, __LINE__, __msg);                                                     \
  |  |  |  |   23|      0|      }                                                                                                                \
  |  |  |  |   24|  61.9k|    } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (24:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  149|  61.9k|    return *(begin() + Index);
  150|  61.9k|  }
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle4Node7getKindEv:
  255|  92.3k|  Kind getKind() const { return K; }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E13parseDecltypeEv:
 4032|  22.6k|Node *AbstractManglingParser<Derived, Alloc>::parseDecltype() {
 4033|  22.6k|  if (!consumeIf('D'))
  ------------------
  |  Branch (4033:7): [True: 0, False: 22.6k]
  ------------------
 4034|      0|    return nullptr;
 4035|  22.6k|  if (!consumeIf('t') && !consumeIf('T'))
  ------------------
  |  Branch (4035:7): [True: 22.6k, False: 0]
  |  Branch (4035:26): [True: 0, False: 22.6k]
  ------------------
 4036|      0|    return nullptr;
 4037|  22.6k|  Node *E = getDerived().parseExpr();
 4038|  22.6k|  if (E == nullptr)
  ------------------
  |  Branch (4038:7): [True: 2, False: 22.6k]
  ------------------
 4039|      2|    return nullptr;
 4040|  22.6k|  if (!consumeIf('E'))
  ------------------
  |  Branch (4040:7): [True: 0, False: 22.6k]
  ------------------
 4041|      0|    return nullptr;
 4042|  22.6k|  return make<EnclosingExpr>("decltype", E);
 4043|  22.6k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E9parseExprEv:
 5156|   134k|Node *AbstractManglingParser<Derived, Alloc>::parseExpr() {
 5157|   134k|  bool Global = consumeIf("gs");
 5158|       |
 5159|   134k|  const auto *Op = parseOperatorEncoding();
 5160|   134k|  if (Op) {
  ------------------
  |  Branch (5160:7): [True: 1.83k, False: 132k]
  ------------------
 5161|  1.83k|    auto Sym = Op->getSymbol();
 5162|  1.83k|    switch (Op->getKind()) {
  ------------------
  |  Branch (5162:13): [True: 0, False: 1.83k]
  ------------------
 5163|    334|    case OperatorInfo::Binary:
  ------------------
  |  Branch (5163:5): [True: 334, False: 1.50k]
  ------------------
 5164|       |      // Binary operator: lhs @ rhs
 5165|    334|      return getDerived().parseBinaryExpr(Sym, Op->getPrecedence());
 5166|    323|    case OperatorInfo::Prefix:
  ------------------
  |  Branch (5166:5): [True: 323, False: 1.51k]
  ------------------
 5167|       |      // Prefix unary operator: @ expr
 5168|    323|      return getDerived().parsePrefixExpr(Sym, Op->getPrecedence());
 5169|      0|    case OperatorInfo::Postfix: {
  ------------------
  |  Branch (5169:5): [True: 0, False: 1.83k]
  ------------------
 5170|       |      // Postfix unary operator: expr @
 5171|      0|      if (consumeIf('_'))
  ------------------
  |  Branch (5171:11): [True: 0, False: 0]
  ------------------
 5172|      0|        return getDerived().parsePrefixExpr(Sym, Op->getPrecedence());
 5173|      0|      Node *Ex = getDerived().parseExpr();
 5174|      0|      if (Ex == nullptr)
  ------------------
  |  Branch (5174:11): [True: 0, False: 0]
  ------------------
 5175|      0|        return nullptr;
 5176|      0|      return make<PostfixExpr>(Ex, Sym, Op->getPrecedence());
 5177|      0|    }
 5178|      0|    case OperatorInfo::Array: {
  ------------------
  |  Branch (5178:5): [True: 0, False: 1.83k]
  ------------------
 5179|       |      // Array Index:  lhs [ rhs ]
 5180|      0|      Node *Base = getDerived().parseExpr();
 5181|      0|      if (Base == nullptr)
  ------------------
  |  Branch (5181:11): [True: 0, False: 0]
  ------------------
 5182|      0|        return nullptr;
 5183|      0|      Node *Index = getDerived().parseExpr();
 5184|      0|      if (Index == nullptr)
  ------------------
  |  Branch (5184:11): [True: 0, False: 0]
  ------------------
 5185|      0|        return nullptr;
 5186|      0|      return make<ArraySubscriptExpr>(Base, Index, Op->getPrecedence());
 5187|      0|    }
 5188|      0|    case OperatorInfo::Member: {
  ------------------
  |  Branch (5188:5): [True: 0, False: 1.83k]
  ------------------
 5189|       |      // Member access lhs @ rhs
 5190|      0|      Node *LHS = getDerived().parseExpr();
 5191|      0|      if (LHS == nullptr)
  ------------------
  |  Branch (5191:11): [True: 0, False: 0]
  ------------------
 5192|      0|        return nullptr;
 5193|      0|      Node *RHS = getDerived().parseExpr();
 5194|      0|      if (RHS == nullptr)
  ------------------
  |  Branch (5194:11): [True: 0, False: 0]
  ------------------
 5195|      0|        return nullptr;
 5196|      0|      return make<MemberExpr>(LHS, Sym, RHS, Op->getPrecedence());
 5197|      0|    }
 5198|    398|    case OperatorInfo::New: {
  ------------------
  |  Branch (5198:5): [True: 398, False: 1.43k]
  ------------------
 5199|       |      // New
 5200|       |      // # new (expr-list) type [(init)]
 5201|       |      // [gs] nw <expression>* _ <type> [pi <expression>*] E
 5202|       |      // # new[] (expr-list) type [(init)]
 5203|       |      // [gs] na <expression>* _ <type> [pi <expression>*] E
 5204|    398|      size_t Exprs = Names.size();
 5205|    398|      while (!consumeIf('_')) {
  ------------------
  |  Branch (5205:14): [True: 0, False: 398]
  ------------------
 5206|      0|        Node *Ex = getDerived().parseExpr();
 5207|      0|        if (Ex == nullptr)
  ------------------
  |  Branch (5207:13): [True: 0, False: 0]
  ------------------
 5208|      0|          return nullptr;
 5209|      0|        Names.push_back(Ex);
 5210|      0|      }
 5211|    398|      NodeArray ExprList = popTrailingNodeArray(Exprs);
 5212|    398|      Node *Ty = getDerived().parseType();
 5213|    398|      if (Ty == nullptr)
  ------------------
  |  Branch (5213:11): [True: 72, False: 326]
  ------------------
 5214|     72|        return nullptr;
 5215|    326|      bool HaveInits = consumeIf("pi");
 5216|    326|      size_t InitsBegin = Names.size();
 5217|    326|      while (!consumeIf('E')) {
  ------------------
  |  Branch (5217:14): [True: 0, False: 326]
  ------------------
 5218|      0|        if (!HaveInits)
  ------------------
  |  Branch (5218:13): [True: 0, False: 0]
  ------------------
 5219|      0|          return nullptr;
 5220|      0|        Node *Init = getDerived().parseExpr();
 5221|      0|        if (Init == nullptr)
  ------------------
  |  Branch (5221:13): [True: 0, False: 0]
  ------------------
 5222|      0|          return Init;
 5223|      0|        Names.push_back(Init);
 5224|      0|      }
 5225|    326|      NodeArray Inits = popTrailingNodeArray(InitsBegin);
 5226|    326|      return make<NewExpr>(ExprList, Ty, Inits, Global,
 5227|    326|                           /*IsArray=*/Op->getFlag(), Op->getPrecedence());
 5228|    326|    }
 5229|    781|    case OperatorInfo::Del: {
  ------------------
  |  Branch (5229:5): [True: 781, False: 1.05k]
  ------------------
 5230|       |      // Delete
 5231|    781|      Node *Ex = getDerived().parseExpr();
 5232|    781|      if (Ex == nullptr)
  ------------------
  |  Branch (5232:11): [True: 0, False: 781]
  ------------------
 5233|      0|        return nullptr;
 5234|    781|      return make<DeleteExpr>(Ex, Global, /*IsArray=*/Op->getFlag(),
 5235|    781|                              Op->getPrecedence());
 5236|    781|    }
 5237|      0|    case OperatorInfo::Call: {
  ------------------
  |  Branch (5237:5): [True: 0, False: 1.83k]
  ------------------
 5238|       |      // Function Call
 5239|      0|      Node *Callee = getDerived().parseExpr();
 5240|      0|      if (Callee == nullptr)
  ------------------
  |  Branch (5240:11): [True: 0, False: 0]
  ------------------
 5241|      0|        return nullptr;
 5242|      0|      size_t ExprsBegin = Names.size();
 5243|      0|      while (!consumeIf('E')) {
  ------------------
  |  Branch (5243:14): [True: 0, False: 0]
  ------------------
 5244|      0|        Node *E = getDerived().parseExpr();
 5245|      0|        if (E == nullptr)
  ------------------
  |  Branch (5245:13): [True: 0, False: 0]
  ------------------
 5246|      0|          return nullptr;
 5247|      0|        Names.push_back(E);
 5248|      0|      }
 5249|      0|      return make<CallExpr>(Callee, popTrailingNodeArray(ExprsBegin),
 5250|      0|                            /*IsParen=*/Op->getFlag(), Op->getPrecedence());
 5251|      0|    }
 5252|      0|    case OperatorInfo::CCast: {
  ------------------
  |  Branch (5252:5): [True: 0, False: 1.83k]
  ------------------
 5253|       |      // C Cast: (type)expr
 5254|      0|      Node *Ty;
 5255|      0|      {
 5256|      0|        ScopedOverride<bool> SaveTemp(TryToParseTemplateArgs, false);
 5257|      0|        Ty = getDerived().parseType();
 5258|      0|      }
 5259|      0|      if (Ty == nullptr)
  ------------------
  |  Branch (5259:11): [True: 0, False: 0]
  ------------------
 5260|      0|        return nullptr;
 5261|       |
 5262|      0|      size_t ExprsBegin = Names.size();
 5263|      0|      bool IsMany = consumeIf('_');
 5264|      0|      while (!consumeIf('E')) {
  ------------------
  |  Branch (5264:14): [True: 0, False: 0]
  ------------------
 5265|      0|        Node *E = getDerived().parseExpr();
 5266|      0|        if (E == nullptr)
  ------------------
  |  Branch (5266:13): [True: 0, False: 0]
  ------------------
 5267|      0|          return E;
 5268|      0|        Names.push_back(E);
 5269|      0|        if (!IsMany)
  ------------------
  |  Branch (5269:13): [True: 0, False: 0]
  ------------------
 5270|      0|          break;
 5271|      0|      }
 5272|      0|      NodeArray Exprs = popTrailingNodeArray(ExprsBegin);
 5273|      0|      if (!IsMany && Exprs.size() != 1)
  ------------------
  |  Branch (5273:11): [True: 0, False: 0]
  |  Branch (5273:22): [True: 0, False: 0]
  ------------------
 5274|      0|        return nullptr;
 5275|      0|      return make<ConversionExpr>(Ty, Exprs, Op->getPrecedence());
 5276|      0|    }
 5277|      0|    case OperatorInfo::Conditional: {
  ------------------
  |  Branch (5277:5): [True: 0, False: 1.83k]
  ------------------
 5278|       |      // Conditional operator: expr ? expr : expr
 5279|      0|      Node *Cond = getDerived().parseExpr();
 5280|      0|      if (Cond == nullptr)
  ------------------
  |  Branch (5280:11): [True: 0, False: 0]
  ------------------
 5281|      0|        return nullptr;
 5282|      0|      Node *LHS = getDerived().parseExpr();
 5283|      0|      if (LHS == nullptr)
  ------------------
  |  Branch (5283:11): [True: 0, False: 0]
  ------------------
 5284|      0|        return nullptr;
 5285|      0|      Node *RHS = getDerived().parseExpr();
 5286|      0|      if (RHS == nullptr)
  ------------------
  |  Branch (5286:11): [True: 0, False: 0]
  ------------------
 5287|      0|        return nullptr;
 5288|      0|      return make<ConditionalExpr>(Cond, LHS, RHS, Op->getPrecedence());
 5289|      0|    }
 5290|      0|    case OperatorInfo::NamedCast: {
  ------------------
  |  Branch (5290:5): [True: 0, False: 1.83k]
  ------------------
 5291|       |      // Named cast operation, @<type>(expr)
 5292|      0|      Node *Ty = getDerived().parseType();
 5293|      0|      if (Ty == nullptr)
  ------------------
  |  Branch (5293:11): [True: 0, False: 0]
  ------------------
 5294|      0|        return nullptr;
 5295|      0|      Node *Ex = getDerived().parseExpr();
 5296|      0|      if (Ex == nullptr)
  ------------------
  |  Branch (5296:11): [True: 0, False: 0]
  ------------------
 5297|      0|        return nullptr;
 5298|      0|      return make<CastExpr>(Sym, Ty, Ex, Op->getPrecedence());
 5299|      0|    }
 5300|      0|    case OperatorInfo::OfIdOp: {
  ------------------
  |  Branch (5300:5): [True: 0, False: 1.83k]
  ------------------
 5301|       |      // [sizeof/alignof/typeid] ( <type>|<expr> )
 5302|      0|      Node *Arg =
 5303|      0|          Op->getFlag() ? getDerived().parseType() : getDerived().parseExpr();
  ------------------
  |  Branch (5303:11): [True: 0, False: 0]
  ------------------
 5304|      0|      if (!Arg)
  ------------------
  |  Branch (5304:11): [True: 0, False: 0]
  ------------------
 5305|      0|        return nullptr;
 5306|      0|      return make<EnclosingExpr>(Sym, Arg, Op->getPrecedence());
 5307|      0|    }
 5308|      0|    case OperatorInfo::NameOnly: {
  ------------------
  |  Branch (5308:5): [True: 0, False: 1.83k]
  ------------------
 5309|       |      // Not valid as an expression operand.
 5310|      0|      return nullptr;
 5311|      0|    }
 5312|  1.83k|    }
 5313|  1.83k|    DEMANGLE_UNREACHABLE;
  ------------------
  |  |   67|      0|#define DEMANGLE_UNREACHABLE __builtin_unreachable()
  ------------------
 5314|  1.83k|  }
 5315|       |
 5316|   132k|  if (numLeft() < 2)
  ------------------
  |  Branch (5316:7): [True: 0, False: 132k]
  ------------------
 5317|      0|    return nullptr;
 5318|       |
 5319|   132k|  if (look() == 'L')
  ------------------
  |  Branch (5319:7): [True: 827, False: 131k]
  ------------------
 5320|    827|    return getDerived().parseExprPrimary();
 5321|   131k|  if (look() == 'T')
  ------------------
  |  Branch (5321:7): [True: 53.3k, False: 78.0k]
  ------------------
 5322|  53.3k|    return getDerived().parseTemplateParam();
 5323|  78.0k|  if (look() == 'f') {
  ------------------
  |  Branch (5323:7): [True: 23.4k, False: 54.6k]
  ------------------
 5324|       |    // Disambiguate a fold expression from a <function-param>.
 5325|  23.4k|    if (look(1) == 'p' || (look(1) == 'L' && std::isdigit(look(2))))
  ------------------
  |  Branch (5325:9): [True: 3, False: 23.4k]
  |  Branch (5325:28): [True: 23.3k, False: 3]
  |  Branch (5325:46): [True: 23.3k, False: 0]
  ------------------
 5326|  23.4k|      return getDerived().parseFunctionParam();
 5327|      3|    return getDerived().parseFoldExpr();
 5328|  23.4k|  }
 5329|  54.6k|  if (consumeIf("il")) {
  ------------------
  |  Branch (5329:7): [True: 1.19k, False: 53.4k]
  ------------------
 5330|  1.19k|    size_t InitsBegin = Names.size();
 5331|  3.57k|    while (!consumeIf('E')) {
  ------------------
  |  Branch (5331:12): [True: 2.53k, False: 1.04k]
  ------------------
 5332|  2.53k|      Node *E = getDerived().parseBracedExpr();
 5333|  2.53k|      if (E == nullptr)
  ------------------
  |  Branch (5333:11): [True: 152, False: 2.38k]
  ------------------
 5334|    152|        return nullptr;
 5335|  2.38k|      Names.push_back(E);
 5336|  2.38k|    }
 5337|  1.04k|    return make<InitListExpr>(nullptr, popTrailingNodeArray(InitsBegin));
 5338|  1.19k|  }
 5339|  53.4k|  if (consumeIf("mc"))
  ------------------
  |  Branch (5339:7): [True: 0, False: 53.4k]
  ------------------
 5340|      0|    return parsePointerToMemberConversionExpr(Node::Prec::Unary);
 5341|  53.4k|  if (consumeIf("nx")) {
  ------------------
  |  Branch (5341:7): [True: 404, False: 53.0k]
  ------------------
 5342|    404|    Node *Ex = getDerived().parseExpr();
 5343|    404|    if (Ex == nullptr)
  ------------------
  |  Branch (5343:9): [True: 44, False: 360]
  ------------------
 5344|     44|      return Ex;
 5345|    360|    return make<EnclosingExpr>("noexcept ", Ex, Node::Prec::Unary);
 5346|    404|  }
 5347|  53.0k|  if (look() == 'r' && (look(1) == 'q' || look(1) == 'Q'))
  ------------------
  |  Branch (5347:7): [True: 21.8k, False: 31.1k]
  |  Branch (5347:25): [True: 21.8k, False: 0]
  |  Branch (5347:43): [True: 0, False: 0]
  ------------------
 5348|  21.8k|    return parseRequiresExpr();
 5349|  31.1k|  if (consumeIf("so"))
  ------------------
  |  Branch (5349:7): [True: 1, False: 31.1k]
  ------------------
 5350|      1|    return parseSubobjectExpr();
 5351|  31.1k|  if (consumeIf("sp")) {
  ------------------
  |  Branch (5351:7): [True: 0, False: 31.1k]
  ------------------
 5352|      0|    Node *Child = getDerived().parseExpr();
 5353|      0|    if (Child == nullptr)
  ------------------
  |  Branch (5353:9): [True: 0, False: 0]
  ------------------
 5354|      0|      return nullptr;
 5355|      0|    return make<ParameterPackExpansion>(Child);
 5356|      0|  }
 5357|  31.1k|  if (consumeIf("sZ")) {
  ------------------
  |  Branch (5357:7): [True: 6, False: 31.1k]
  ------------------
 5358|      6|    if (look() == 'T') {
  ------------------
  |  Branch (5358:9): [True: 6, False: 0]
  ------------------
 5359|      6|      Node *R = getDerived().parseTemplateParam();
 5360|      6|      if (R == nullptr)
  ------------------
  |  Branch (5360:11): [True: 0, False: 6]
  ------------------
 5361|      0|        return nullptr;
 5362|      6|      return make<SizeofParamPackExpr>(R);
 5363|      6|    }
 5364|      0|    Node *FP = getDerived().parseFunctionParam();
 5365|      0|    if (FP == nullptr)
  ------------------
  |  Branch (5365:9): [True: 0, False: 0]
  ------------------
 5366|      0|      return nullptr;
 5367|      0|    return make<EnclosingExpr>("sizeof... ", FP);
 5368|      0|  }
 5369|  31.1k|  if (consumeIf("sP")) {
  ------------------
  |  Branch (5369:7): [True: 1.38k, False: 29.7k]
  ------------------
 5370|  1.38k|    size_t ArgsBegin = Names.size();
 5371|  14.2k|    while (!consumeIf('E')) {
  ------------------
  |  Branch (5371:12): [True: 12.9k, False: 1.34k]
  ------------------
 5372|  12.9k|      Node *Arg = getDerived().parseTemplateArg();
 5373|  12.9k|      if (Arg == nullptr)
  ------------------
  |  Branch (5373:11): [True: 44, False: 12.8k]
  ------------------
 5374|     44|        return nullptr;
 5375|  12.8k|      Names.push_back(Arg);
 5376|  12.8k|    }
 5377|  1.34k|    auto *Pack = make<NodeArrayNode>(popTrailingNodeArray(ArgsBegin));
 5378|  1.34k|    if (!Pack)
  ------------------
  |  Branch (5378:9): [True: 0, False: 1.34k]
  ------------------
 5379|      0|      return nullptr;
 5380|  1.34k|    return make<EnclosingExpr>("sizeof... ", Pack);
 5381|  1.34k|  }
 5382|  29.7k|  if (consumeIf("tl")) {
  ------------------
  |  Branch (5382:7): [True: 7.62k, False: 22.1k]
  ------------------
 5383|  7.62k|    Node *Ty = getDerived().parseType();
 5384|  7.62k|    if (Ty == nullptr)
  ------------------
  |  Branch (5384:9): [True: 11, False: 7.61k]
  ------------------
 5385|     11|      return nullptr;
 5386|  7.61k|    size_t InitsBegin = Names.size();
 5387|  30.5k|    while (!consumeIf('E')) {
  ------------------
  |  Branch (5387:12): [True: 22.9k, False: 7.59k]
  ------------------
 5388|  22.9k|      Node *E = getDerived().parseBracedExpr();
 5389|  22.9k|      if (E == nullptr)
  ------------------
  |  Branch (5389:11): [True: 22, False: 22.9k]
  ------------------
 5390|     22|        return nullptr;
 5391|  22.9k|      Names.push_back(E);
 5392|  22.9k|    }
 5393|  7.59k|    return make<InitListExpr>(Ty, popTrailingNodeArray(InitsBegin));
 5394|  7.61k|  }
 5395|  22.1k|  if (consumeIf("tr"))
  ------------------
  |  Branch (5395:7): [True: 0, False: 22.1k]
  ------------------
 5396|      0|    return make<NameType>("throw");
 5397|  22.1k|  if (consumeIf("tw")) {
  ------------------
  |  Branch (5397:7): [True: 0, False: 22.1k]
  ------------------
 5398|      0|    Node *Ex = getDerived().parseExpr();
 5399|      0|    if (Ex == nullptr)
  ------------------
  |  Branch (5399:9): [True: 0, False: 0]
  ------------------
 5400|      0|      return nullptr;
 5401|      0|    return make<ThrowExpr>(Ex);
 5402|      0|  }
 5403|  22.1k|  if (consumeIf('u')) {
  ------------------
  |  Branch (5403:7): [True: 0, False: 22.1k]
  ------------------
 5404|      0|    Node *Name = getDerived().parseSourceName(/*NameState=*/nullptr);
 5405|      0|    if (!Name)
  ------------------
  |  Branch (5405:9): [True: 0, False: 0]
  ------------------
 5406|      0|      return nullptr;
 5407|       |    // Special case legacy __uuidof mangling. The 't' and 'z' appear where the
 5408|       |    // standard encoding expects a <template-arg>, and would be otherwise be
 5409|       |    // interpreted as <type> node 'short' or 'ellipsis'. However, neither
 5410|       |    // __uuidof(short) nor __uuidof(...) can actually appear, so there is no
 5411|       |    // actual conflict here.
 5412|      0|    bool IsUUID = false;
 5413|      0|    Node *UUID = nullptr;
 5414|      0|    if (Name->getBaseName() == "__uuidof") {
  ------------------
  |  Branch (5414:9): [True: 0, False: 0]
  ------------------
 5415|      0|      if (consumeIf('t')) {
  ------------------
  |  Branch (5415:11): [True: 0, False: 0]
  ------------------
 5416|      0|        UUID = getDerived().parseType();
 5417|      0|        IsUUID = true;
 5418|      0|      } else if (consumeIf('z')) {
  ------------------
  |  Branch (5418:18): [True: 0, False: 0]
  ------------------
 5419|      0|        UUID = getDerived().parseExpr();
 5420|      0|        IsUUID = true;
 5421|      0|      }
 5422|      0|    }
 5423|      0|    size_t ExprsBegin = Names.size();
 5424|      0|    if (IsUUID) {
  ------------------
  |  Branch (5424:9): [True: 0, False: 0]
  ------------------
 5425|      0|      if (UUID == nullptr)
  ------------------
  |  Branch (5425:11): [True: 0, False: 0]
  ------------------
 5426|      0|        return nullptr;
 5427|      0|      Names.push_back(UUID);
 5428|      0|    } else {
 5429|      0|      while (!consumeIf('E')) {
  ------------------
  |  Branch (5429:14): [True: 0, False: 0]
  ------------------
 5430|      0|        Node *E = getDerived().parseTemplateArg();
 5431|      0|        if (E == nullptr)
  ------------------
  |  Branch (5431:13): [True: 0, False: 0]
  ------------------
 5432|      0|          return E;
 5433|      0|        Names.push_back(E);
 5434|      0|      }
 5435|      0|    }
 5436|      0|    return make<CallExpr>(Name, popTrailingNodeArray(ExprsBegin),
 5437|      0|                          /*IsParen=*/false, Node::Prec::Postfix);
 5438|      0|  }
 5439|       |
 5440|       |  // Only unresolved names remain.
 5441|  22.1k|  return getDerived().parseUnresolvedName(Global);
 5442|  22.1k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E21parseOperatorEncodingEv:
 3440|   160k|AbstractManglingParser<Derived, Alloc>::parseOperatorEncoding() {
 3441|   160k|  if (numLeft() < 2)
  ------------------
  |  Branch (3441:7): [True: 3, False: 160k]
  ------------------
 3442|      3|    return nullptr;
 3443|       |
 3444|       |  // We can't use lower_bound as that can link to symbols in the C++ library,
 3445|       |  // and this must remain independent of that.
 3446|   160k|  size_t lower = 0u, upper = NumOps - 1; // Inclusive bounds.
 3447|  1.11M|  while (upper != lower) {
  ------------------
  |  Branch (3447:10): [True: 955k, False: 160k]
  ------------------
 3448|   955k|    size_t middle = (upper + lower) / 2;
 3449|   955k|    if (Ops[middle] < First)
  ------------------
  |  Branch (3449:9): [True: 264k, False: 690k]
  ------------------
 3450|   264k|      lower = middle + 1;
 3451|   690k|    else
 3452|   690k|      upper = middle;
 3453|   955k|  }
 3454|   160k|  if (Ops[lower] != First)
  ------------------
  |  Branch (3454:7): [True: 132k, False: 28.2k]
  ------------------
 3455|   132k|    return nullptr;
 3456|       |
 3457|  28.2k|  First += 2;
 3458|  28.2k|  return &Ops[lower];
 3459|   160k|}
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E12OperatorInfoltEPKc:
 2996|   955k|    bool operator<(const char *Peek) const {
 2997|   955k|      return Enc[0] < Peek[0] || (Enc[0] == Peek[0] && Enc[1] < Peek[1]);
  ------------------
  |  Branch (2997:14): [True: 187k, False: 768k]
  |  Branch (2997:35): [True: 136k, False: 632k]
  |  Branch (2997:56): [True: 77.4k, False: 58.6k]
  ------------------
 2998|   955k|    }
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E12OperatorInfoneEPKc:
 3002|   160k|    bool operator!=(const char *Peek) const { return !this->operator==(Peek); }
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E12OperatorInfoeqEPKc:
 2999|   160k|    bool operator==(const char *Peek) const {
 3000|   160k|      return Enc[0] == Peek[0] && Enc[1] == Peek[1];
  ------------------
  |  Branch (3000:14): [True: 60.2k, False: 100k]
  |  Branch (3000:35): [True: 28.2k, False: 32.0k]
  ------------------
 3001|   160k|    }
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E12OperatorInfo9getSymbolEv:
 3005|  1.83k|    std::string_view getSymbol() const {
 3006|  1.83k|      std::string_view Res = Name;
 3007|  1.83k|      if (Kind < Unnameable) {
  ------------------
  |  Branch (3007:11): [True: 1.83k, False: 0]
  ------------------
 3008|  1.83k|        DEMANGLE_ASSERT(starts_with(Res, "operator"),
  ------------------
  |  |   14|  1.83k|#define DEMANGLE_ASSERT(expr, msg) _LIBCXXABI_ASSERT(expr, msg)
  |  |  ------------------
  |  |  |  |   19|  1.83k|    do {                                                                                                               \
  |  |  |  |   20|  1.83k|      if (!(expr)) {                                                                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:11): [True: 0, False: 1.83k]
  |  |  |  |  ------------------
  |  |  |  |   21|      0|        char const* __msg = (msg);                                                                                     \
  |  |  |  |   22|      0|        ::__abort_message("%s:%d: %s", __FILE__, __LINE__, __msg);                                                     \
  |  |  |  |   23|      0|      }                                                                                                                \
  |  |  |  |   24|  1.83k|    } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (24:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3009|  1.83k|                        "operator name does not start with 'operator'");
 3010|  1.83k|        Res.remove_prefix(sizeof("operator") - 1);
 3011|  1.83k|        if (starts_with(Res, ' '))
  ------------------
  |  Branch (3011:13): [True: 1.17k, False: 660]
  ------------------
 3012|  1.17k|          Res.remove_prefix(1);
 3013|  1.83k|      }
 3014|  1.83k|      return Res;
 3015|  1.83k|    }
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E12OperatorInfo7getKindEv:
 3017|  71.7k|    OIKind getKind() const { return Kind; }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E15parseBinaryExprENSt3__117basic_string_viewIcNS6_11char_traitsIcEEEENS0_4Node4PrecE:
 4676|    334|                                                        Node::Prec Prec) {
 4677|    334|  Node *LHS = getDerived().parseExpr();
 4678|    334|  if (LHS == nullptr)
  ------------------
  |  Branch (4678:7): [True: 0, False: 334]
  ------------------
 4679|      0|    return nullptr;
 4680|    334|  Node *RHS = getDerived().parseExpr();
 4681|    334|  if (RHS == nullptr)
  ------------------
  |  Branch (4681:7): [True: 11, False: 323]
  ------------------
 4682|     11|    return nullptr;
 4683|    323|  return make<BinaryExpr>(LHS, Kind, RHS, Prec);
 4684|    334|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_10BinaryExprEJRPNS0_4NodeERNSt3__117basic_string_viewIcNSB_11char_traitsIcEEEESA_RNS8_4PrecEEEES9_DpOT0_:
 2827|    323|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|    323|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|    323|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle10BinaryExprC2EPKNS0_4NodeENSt3__117basic_string_viewIcNS5_11char_traitsIcEEEES4_NS2_4PrecE:
 1864|    323|      : Node(KBinaryExpr, Prec_), LHS(LHS_), InfixOperator(InfixOperator_),
 1865|    323|        RHS(RHS_) {}
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E12OperatorInfo13getPrecedenceEv:
 3019|  1.76k|    Node::Prec getPrecedence() const { return Prec; }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E15parsePrefixExprENSt3__117basic_string_viewIcNS6_11char_traitsIcEEEENS0_4Node4PrecE:
 4666|    323|                                                        Node::Prec Prec) {
 4667|    323|  Node *E = getDerived().parseExpr();
 4668|    323|  if (E == nullptr)
  ------------------
  |  Branch (4668:7): [True: 0, False: 323]
  ------------------
 4669|      0|    return nullptr;
 4670|    323|  return make<PrefixExpr>(Kind, E, Prec);
 4671|    323|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_10PrefixExprEJRNSt3__117basic_string_viewIcNS8_11char_traitsIcEEEERPNS0_4NodeERNSE_4PrecEEEESF_DpOT0_:
 2827|    323|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|    323|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|    323|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle10PrefixExprC2ENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEPNS0_4NodeENS7_4PrecE:
 2172|    323|      : Node(KPrefixExpr, Prec_), Prefix(Prefix_), Child(Child_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_7NewExprEJRNS0_9NodeArrayERPNS0_4NodeES9_RbbNSA_4PrecEEEESB_DpOT0_:
 2827|    326|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|    326|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|    326|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle7NewExprC2ENS0_9NodeArrayEPNS0_4NodeES2_bbNS3_4PrecE:
 2113|    326|      : Node(KNewExpr, Prec_), ExprList(ExprList_), Type(Type_),
 2114|    326|        InitList(InitList_), IsGlobal(IsGlobal_), IsArray(IsArray_) {}
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E12OperatorInfo7getFlagEv:
 3018|  1.10k|    bool getFlag() const { return Flag; }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_10DeleteExprEJRPNS0_4NodeERbbNS8_4PrecEEEES9_DpOT0_:
 2827|    781|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|    781|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|    781|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle10DeleteExprC2EPNS0_4NodeEbbNS2_4PrecE:
 2148|    781|      : Node(KDeleteExpr, Prec_), Op(Op_), IsGlobal(IsGlobal_),
 2149|    781|        IsArray(IsArray_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle13EnclosingExprC2ENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEPKNS0_4NodeENS7_4PrecE:
 2015|  24.3k|      : Node(KEnclosingExpr, Prec_), Prefix(Prefix_), Infix(Infix_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E16parseExprPrimaryEv:
 4779|  39.9k|Node *AbstractManglingParser<Derived, Alloc>::parseExprPrimary() {
 4780|  39.9k|  if (!consumeIf('L'))
  ------------------
  |  Branch (4780:7): [True: 0, False: 39.9k]
  ------------------
 4781|      0|    return nullptr;
 4782|  39.9k|  switch (look()) {
 4783|      3|  case 'w':
  ------------------
  |  Branch (4783:3): [True: 3, False: 39.9k]
  ------------------
 4784|      3|    ++First;
 4785|      3|    return getDerived().parseIntegerLiteral("wchar_t");
 4786|      6|  case 'b':
  ------------------
  |  Branch (4786:3): [True: 6, False: 39.9k]
  ------------------
 4787|      6|    if (consumeIf("b0E"))
  ------------------
  |  Branch (4787:9): [True: 6, False: 0]
  ------------------
 4788|      6|      return make<BoolExpr>(0);
 4789|      0|    if (consumeIf("b1E"))
  ------------------
  |  Branch (4789:9): [True: 0, False: 0]
  ------------------
 4790|      0|      return make<BoolExpr>(1);
 4791|      0|    return nullptr;
 4792|      0|  case 'c':
  ------------------
  |  Branch (4792:3): [True: 0, False: 39.9k]
  ------------------
 4793|      0|    ++First;
 4794|      0|    return getDerived().parseIntegerLiteral("char");
 4795|      0|  case 'a':
  ------------------
  |  Branch (4795:3): [True: 0, False: 39.9k]
  ------------------
 4796|      0|    ++First;
 4797|      0|    return getDerived().parseIntegerLiteral("signed char");
 4798|  9.78k|  case 'h':
  ------------------
  |  Branch (4798:3): [True: 9.78k, False: 30.2k]
  ------------------
 4799|  9.78k|    ++First;
 4800|  9.78k|    return getDerived().parseIntegerLiteral("unsigned char");
 4801|      0|  case 's':
  ------------------
  |  Branch (4801:3): [True: 0, False: 39.9k]
  ------------------
 4802|      0|    ++First;
 4803|      0|    return getDerived().parseIntegerLiteral("short");
 4804|  8.93k|  case 't':
  ------------------
  |  Branch (4804:3): [True: 8.93k, False: 31.0k]
  ------------------
 4805|  8.93k|    ++First;
 4806|  8.93k|    return getDerived().parseIntegerLiteral("unsigned short");
 4807|      0|  case 'i':
  ------------------
  |  Branch (4807:3): [True: 0, False: 39.9k]
  ------------------
 4808|      0|    ++First;
 4809|      0|    return getDerived().parseIntegerLiteral("");
 4810|      0|  case 'j':
  ------------------
  |  Branch (4810:3): [True: 0, False: 39.9k]
  ------------------
 4811|      0|    ++First;
 4812|      0|    return getDerived().parseIntegerLiteral("u");
 4813|      0|  case 'l':
  ------------------
  |  Branch (4813:3): [True: 0, False: 39.9k]
  ------------------
 4814|      0|    ++First;
 4815|      0|    return getDerived().parseIntegerLiteral("l");
 4816|      0|  case 'm':
  ------------------
  |  Branch (4816:3): [True: 0, False: 39.9k]
  ------------------
 4817|      0|    ++First;
 4818|      0|    return getDerived().parseIntegerLiteral("ul");
 4819|      0|  case 'x':
  ------------------
  |  Branch (4819:3): [True: 0, False: 39.9k]
  ------------------
 4820|      0|    ++First;
 4821|      0|    return getDerived().parseIntegerLiteral("ll");
 4822|      0|  case 'y':
  ------------------
  |  Branch (4822:3): [True: 0, False: 39.9k]
  ------------------
 4823|      0|    ++First;
 4824|      0|    return getDerived().parseIntegerLiteral("ull");
 4825|      0|  case 'n':
  ------------------
  |  Branch (4825:3): [True: 0, False: 39.9k]
  ------------------
 4826|      0|    ++First;
 4827|      0|    return getDerived().parseIntegerLiteral("__int128");
 4828|      3|  case 'o':
  ------------------
  |  Branch (4828:3): [True: 3, False: 39.9k]
  ------------------
 4829|      3|    ++First;
 4830|      3|    return getDerived().parseIntegerLiteral("unsigned __int128");
 4831|      0|  case 'f':
  ------------------
  |  Branch (4831:3): [True: 0, False: 39.9k]
  ------------------
 4832|      0|    ++First;
 4833|      0|    return getDerived().template parseFloatingLiteral<float>();
 4834|      0|  case 'd':
  ------------------
  |  Branch (4834:3): [True: 0, False: 39.9k]
  ------------------
 4835|      0|    ++First;
 4836|      0|    return getDerived().template parseFloatingLiteral<double>();
 4837|    827|  case 'e':
  ------------------
  |  Branch (4837:3): [True: 827, False: 39.1k]
  ------------------
 4838|    827|    ++First;
 4839|       |#if defined(__powerpc__) || defined(__s390__)
 4840|       |    // Handle cases where long doubles encoded with e have the same size
 4841|       |    // and representation as doubles.
 4842|       |    return getDerived().template parseFloatingLiteral<double>();
 4843|       |#else
 4844|    827|    return getDerived().template parseFloatingLiteral<long double>();
 4845|      0|#endif
 4846|      5|  case '_':
  ------------------
  |  Branch (4846:3): [True: 5, False: 39.9k]
  ------------------
 4847|      5|    if (consumeIf("_Z")) {
  ------------------
  |  Branch (4847:9): [True: 5, False: 0]
  ------------------
 4848|      5|      Node *R = getDerived().parseEncoding();
 4849|      5|      if (R != nullptr && consumeIf('E'))
  ------------------
  |  Branch (4849:11): [True: 2, False: 3]
  |  Branch (4849:27): [True: 0, False: 2]
  ------------------
 4850|      0|        return R;
 4851|      5|    }
 4852|      5|    return nullptr;
 4853|      1|  case 'A': {
  ------------------
  |  Branch (4853:3): [True: 1, False: 39.9k]
  ------------------
 4854|      1|    Node *T = getDerived().parseType();
 4855|      1|    if (T == nullptr)
  ------------------
  |  Branch (4855:9): [True: 1, False: 0]
  ------------------
 4856|      1|      return nullptr;
 4857|       |    // FIXME: We need to include the string contents in the mangling.
 4858|      0|    if (consumeIf('E'))
  ------------------
  |  Branch (4858:9): [True: 0, False: 0]
  ------------------
 4859|      0|      return make<StringLiteral>(T);
 4860|      0|    return nullptr;
 4861|      0|  }
 4862|      0|  case 'D':
  ------------------
  |  Branch (4862:3): [True: 0, False: 39.9k]
  ------------------
 4863|      0|    if (consumeIf("Dn") && (consumeIf('0'), consumeIf('E')))
  ------------------
  |  Branch (4863:9): [True: 0, False: 0]
  |  Branch (4863:9): [True: 0, False: 0]
  |  Branch (4863:28): [True: 0, False: 0]
  ------------------
 4864|      0|      return make<NameType>("nullptr");
 4865|      0|    return nullptr;
 4866|      0|  case 'T':
  ------------------
  |  Branch (4866:3): [True: 0, False: 39.9k]
  ------------------
 4867|       |    // Invalid mangled name per
 4868|       |    //   http://sourcerytools.com/pipermail/cxx-abi-dev/2011-August/002422.html
 4869|      0|    return nullptr;
 4870|      0|  case 'U': {
  ------------------
  |  Branch (4870:3): [True: 0, False: 39.9k]
  ------------------
 4871|       |    // FIXME: Should we support LUb... for block literals?
 4872|      0|    if (look(1) != 'l')
  ------------------
  |  Branch (4872:9): [True: 0, False: 0]
  ------------------
 4873|      0|      return nullptr;
 4874|      0|    Node *T = parseUnnamedTypeName(nullptr);
 4875|      0|    if (!T || !consumeIf('E'))
  ------------------
  |  Branch (4875:9): [True: 0, False: 0]
  |  Branch (4875:15): [True: 0, False: 0]
  ------------------
 4876|      0|      return nullptr;
 4877|      0|    return make<LambdaExpr>(T);
 4878|      0|  }
 4879|  20.4k|  default: {
  ------------------
  |  Branch (4879:3): [True: 20.4k, False: 19.5k]
  ------------------
 4880|       |    // might be named type
 4881|  20.4k|    Node *T = getDerived().parseType();
 4882|  20.4k|    if (T == nullptr)
  ------------------
  |  Branch (4882:9): [True: 0, False: 20.4k]
  ------------------
 4883|      0|      return nullptr;
 4884|  20.4k|    std::string_view N = parseNumber(/*AllowNegative=*/true);
 4885|  20.4k|    if (N.empty())
  ------------------
  |  Branch (4885:9): [True: 0, False: 20.4k]
  ------------------
 4886|      0|      return nullptr;
 4887|  20.4k|    if (!consumeIf('E'))
  ------------------
  |  Branch (4887:9): [True: 0, False: 20.4k]
  ------------------
 4888|      0|      return nullptr;
 4889|  20.4k|    return make<EnumLiteral>(T, N);
 4890|  20.4k|  }
 4891|  39.9k|  }
 4892|  39.9k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E19parseIntegerLiteralENSt3__117basic_string_viewIcNS6_11char_traitsIcEEEE:
 4688|  18.7k|    std::string_view Lit) {
 4689|  18.7k|  std::string_view Tmp = parseNumber(true);
 4690|  18.7k|  if (!Tmp.empty() && consumeIf('E'))
  ------------------
  |  Branch (4690:7): [True: 18.7k, False: 0]
  |  Branch (4690:23): [True: 18.7k, False: 0]
  ------------------
 4691|  18.7k|    return make<IntegerLiteral>(Lit, Tmp);
 4692|      0|  return nullptr;
 4693|  18.7k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_14IntegerLiteralEJRNSt3__117basic_string_viewIcNS8_11char_traitsIcEEEESD_EEEPNS0_4NodeEDpOT0_:
 2827|  18.7k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  18.7k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  18.7k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14IntegerLiteralC2ENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEES6_:
 2448|  18.7k|      : Node(KIntegerLiteral), Type(Type_), Value(Value_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_8BoolExprEJiEEEPNS0_4NodeEDpOT0_:
 2827|      6|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|      6|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|      6|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle8BoolExprC2Eb:
 2379|      6|  BoolExpr(bool Value_) : Node(KBoolExpr), Value(Value_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E20parseFloatingLiteralIeEEPNS0_4NodeEv:
 5762|    827|Node *AbstractManglingParser<Alloc, Derived>::parseFloatingLiteral() {
 5763|    827|  const size_t N = FloatData<Float>::mangled_size;
 5764|    827|  if (numLeft() <= N)
  ------------------
  |  Branch (5764:7): [True: 0, False: 827]
  ------------------
 5765|      0|    return nullptr;
 5766|    827|  std::string_view Data(First, N);
 5767|    827|  for (char C : Data)
  ------------------
  |  Branch (5767:15): [True: 16.5k, False: 827]
  ------------------
 5768|  16.5k|    if (!(C >= '0' && C <= '9') && !(C >= 'a' && C <= 'f'))
  ------------------
  |  Branch (5768:11): [True: 16.5k, False: 0]
  |  Branch (5768:23): [True: 9.09k, False: 7.44k]
  |  Branch (5768:38): [True: 7.44k, False: 0]
  |  Branch (5768:50): [True: 7.44k, False: 0]
  ------------------
 5769|      0|      return nullptr;
 5770|    827|  First += N;
 5771|    827|  if (!consumeIf('E'))
  ------------------
  |  Branch (5771:7): [True: 1, False: 826]
  ------------------
 5772|      1|    return nullptr;
 5773|    826|  return make<FloatLiteralImpl<Float>>(Data);
 5774|    827|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_16FloatLiteralImplIeEEJRNSt3__117basic_string_viewIcNS9_11char_traitsIcEEEEEEEPNS0_4NodeEDpOT0_:
 2827|    826|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|    826|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|    826|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle16FloatLiteralImplIeEC2ENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
 2582|    826|      : Node(KindForClass), Contents(Contents_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_8NameTypeEJRA8_KcEEEPNS0_4NodeEDpOT0_:
 2827|   202k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|   202k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|   202k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E20parseUnnamedTypeNameEPNS5_9NameStateE:
 3238|    611|AbstractManglingParser<Derived, Alloc>::parseUnnamedTypeName(NameState *State) {
 3239|       |  // <template-params> refer to the innermost <template-args>. Clear out any
 3240|       |  // outer args that we may have inserted into TemplateParams.
 3241|    611|  if (State != nullptr)
  ------------------
  |  Branch (3241:7): [True: 506, False: 105]
  ------------------
 3242|    506|    TemplateParams.clear();
 3243|       |
 3244|    611|  if (consumeIf("Ut")) {
  ------------------
  |  Branch (3244:7): [True: 0, False: 611]
  ------------------
 3245|      0|    std::string_view Count = parseNumber();
 3246|      0|    if (!consumeIf('_'))
  ------------------
  |  Branch (3246:9): [True: 0, False: 0]
  ------------------
 3247|      0|      return nullptr;
 3248|      0|    return make<UnnamedTypeName>(Count);
 3249|      0|  }
 3250|    611|  if (consumeIf("Ul")) {
  ------------------
  |  Branch (3250:7): [True: 611, False: 0]
  ------------------
 3251|    611|    ScopedOverride<size_t> SwapParams(ParsingLambdaParamsAtLevel,
 3252|    611|                                      TemplateParams.size());
 3253|    611|    ScopedTemplateParamList LambdaTemplateParams(this);
 3254|       |
 3255|    611|    size_t ParamsBegin = Names.size();
 3256|    662|    while (getDerived().isTemplateParamDecl()) {
  ------------------
  |  Branch (3256:12): [True: 51, False: 611]
  ------------------
 3257|     51|      Node *T =
 3258|     51|          getDerived().parseTemplateParamDecl(LambdaTemplateParams.params());
 3259|     51|      if (T == nullptr)
  ------------------
  |  Branch (3259:11): [True: 0, False: 51]
  ------------------
 3260|      0|        return nullptr;
 3261|     51|      Names.push_back(T);
 3262|     51|    }
 3263|    611|    NodeArray TempParams = popTrailingNodeArray(ParamsBegin);
 3264|       |
 3265|       |    // FIXME: If TempParams is empty and none of the function parameters
 3266|       |    // includes 'auto', we should remove LambdaTemplateParams from the
 3267|       |    // TemplateParams list. Unfortunately, we don't find out whether there are
 3268|       |    // any 'auto' parameters until too late in an example such as:
 3269|       |    //
 3270|       |    //   template<typename T> void f(
 3271|       |    //       decltype([](decltype([]<typename T>(T v) {}),
 3272|       |    //                   auto) {})) {}
 3273|       |    //   template<typename T> void f(
 3274|       |    //       decltype([](decltype([]<typename T>(T w) {}),
 3275|       |    //                   int) {})) {}
 3276|       |    //
 3277|       |    // Here, the type of v is at level 2 but the type of w is at level 1. We
 3278|       |    // don't find this out until we encounter the type of the next parameter.
 3279|       |    //
 3280|       |    // However, compilers can't actually cope with the former example in
 3281|       |    // practice, and it's likely to be made ill-formed in future, so we don't
 3282|       |    // need to support it here.
 3283|       |    //
 3284|       |    // If we encounter an 'auto' in the function parameter types, we will
 3285|       |    // recreate a template parameter scope for it, but any intervening lambdas
 3286|       |    // will be parsed in the 'wrong' template parameter depth.
 3287|    611|    if (TempParams.empty())
  ------------------
  |  Branch (3287:9): [True: 560, False: 51]
  ------------------
 3288|    560|      TemplateParams.pop_back();
 3289|       |
 3290|    611|    Node *Requires1 = nullptr;
 3291|    611|    if (consumeIf('Q')) {
  ------------------
  |  Branch (3291:9): [True: 0, False: 611]
  ------------------
 3292|      0|      Requires1 = getDerived().parseConstraintExpr();
 3293|      0|      if (Requires1 == nullptr)
  ------------------
  |  Branch (3293:11): [True: 0, False: 0]
  ------------------
 3294|      0|        return nullptr;
 3295|      0|    }
 3296|       |
 3297|    611|    if (!consumeIf("v")) {
  ------------------
  |  Branch (3297:9): [True: 611, False: 0]
  ------------------
 3298|  12.5k|      do {
 3299|  12.5k|        Node *P = getDerived().parseType();
 3300|  12.5k|        if (P == nullptr)
  ------------------
  |  Branch (3300:13): [True: 605, False: 11.9k]
  ------------------
 3301|    605|          return nullptr;
 3302|  11.9k|        Names.push_back(P);
 3303|  11.9k|      } while (look() != 'E' && look() != 'Q');
  ------------------
  |  Branch (3303:16): [True: 11.9k, False: 6]
  |  Branch (3303:33): [True: 11.9k, False: 0]
  ------------------
 3304|    611|    }
 3305|      6|    NodeArray Params = popTrailingNodeArray(ParamsBegin);
 3306|       |
 3307|      6|    Node *Requires2 = nullptr;
 3308|      6|    if (consumeIf('Q')) {
  ------------------
  |  Branch (3308:9): [True: 0, False: 6]
  ------------------
 3309|      0|      Requires2 = getDerived().parseConstraintExpr();
 3310|      0|      if (Requires2 == nullptr)
  ------------------
  |  Branch (3310:11): [True: 0, False: 0]
  ------------------
 3311|      0|        return nullptr;
 3312|      0|    }
 3313|       |
 3314|      6|    if (!consumeIf('E'))
  ------------------
  |  Branch (3314:9): [True: 0, False: 6]
  ------------------
 3315|      0|      return nullptr;
 3316|       |
 3317|      6|    std::string_view Count = parseNumber();
 3318|      6|    if (!consumeIf('_'))
  ------------------
  |  Branch (3318:9): [True: 0, False: 6]
  ------------------
 3319|      0|      return nullptr;
 3320|      6|    return make<ClosureTypeName>(TempParams, Requires1, Params, Requires2,
 3321|      6|                                 Count);
 3322|      6|  }
 3323|      0|  if (consumeIf("Ub")) {
  ------------------
  |  Branch (3323:7): [True: 0, False: 0]
  ------------------
 3324|      0|    (void)parseNumber();
 3325|      0|    if (!consumeIf('_'))
  ------------------
  |  Branch (3325:9): [True: 0, False: 0]
  ------------------
 3326|      0|      return nullptr;
 3327|      0|    return make<NameType>("'block-literal'");
 3328|      0|  }
 3329|      0|  return nullptr;
 3330|      0|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E23ScopedTemplateParamListC2EPS5_:
 2753|    623|        : Parser(TheParser),
 2754|    623|          OldNumTemplateParamLists(TheParser->TemplateParams.size()) {
 2755|    623|      Parser->TemplateParams.push_back(&Params);
 2756|    623|    }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E19isTemplateParamDeclEv:
 2885|  1.68k|  bool isTemplateParamDecl() {
 2886|  1.68k|    return look() == 'T' &&
  ------------------
  |  Branch (2886:12): [True: 1.08k, False: 605]
  ------------------
 2887|  1.68k|           std::string_view("yptnk").find(look(1)) != std::string_view::npos;
  ------------------
  |  Branch (2887:12): [True: 339, False: 741]
  ------------------
 2888|  1.68k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E22parseTemplateParamDeclEPNS0_14PODSmallVectorIPNS0_4NodeELm8EEE:
 5948|    472|    TemplateParamList *Params) {
 5949|    472|  auto InventTemplateParamName = [&](TemplateParamKind Kind) {
 5950|    472|    unsigned Index = NumSyntheticTemplateParameters[(int)Kind]++;
 5951|    472|    Node *N = make<SyntheticTemplateParamName>(Kind, Index);
 5952|    472|    if (N && Params)
 5953|    472|      Params->push_back(N);
 5954|    472|    return N;
 5955|    472|  };
 5956|       |
 5957|    472|  if (consumeIf("Ty")) {
  ------------------
  |  Branch (5957:7): [True: 74, False: 398]
  ------------------
 5958|     74|    Node *Name = InventTemplateParamName(TemplateParamKind::Type);
 5959|     74|    if (!Name)
  ------------------
  |  Branch (5959:9): [True: 0, False: 74]
  ------------------
 5960|      0|      return nullptr;
 5961|     74|    return make<TypeTemplateParamDecl>(Name);
 5962|     74|  }
 5963|       |
 5964|    398|  if (consumeIf("Tk")) {
  ------------------
  |  Branch (5964:7): [True: 0, False: 398]
  ------------------
 5965|       |    // We don't track enclosing template parameter levels well enough to
 5966|       |    // reliably demangle template parameter substitutions, so print an arbitrary
 5967|       |    // string in place of a parameter for now.
 5968|       |    // TODO: Track all enclosing template parameters and demangle substitutions.
 5969|      0|    ScopedOverride<bool> SaveIncompleteTemplateParameterTrackingExpr(
 5970|      0|        HasIncompleteTemplateParameterTracking, true);
 5971|      0|    Node *Constraint = getDerived().parseName();
 5972|      0|    if (!Constraint)
  ------------------
  |  Branch (5972:9): [True: 0, False: 0]
  ------------------
 5973|      0|      return nullptr;
 5974|      0|    Node *Name = InventTemplateParamName(TemplateParamKind::Type);
 5975|      0|    if (!Name)
  ------------------
  |  Branch (5975:9): [True: 0, False: 0]
  ------------------
 5976|      0|      return nullptr;
 5977|      0|    return make<ConstrainedTypeTemplateParamDecl>(Constraint, Name);
 5978|      0|  }
 5979|       |
 5980|    398|  if (consumeIf("Tn")) {
  ------------------
  |  Branch (5980:7): [True: 265, False: 133]
  ------------------
 5981|    265|    Node *Name = InventTemplateParamName(TemplateParamKind::NonType);
 5982|    265|    if (!Name)
  ------------------
  |  Branch (5982:9): [True: 0, False: 265]
  ------------------
 5983|      0|      return nullptr;
 5984|    265|    Node *Type = parseType();
 5985|    265|    if (!Type)
  ------------------
  |  Branch (5985:9): [True: 0, False: 265]
  ------------------
 5986|      0|      return nullptr;
 5987|    265|    return make<NonTypeTemplateParamDecl>(Name, Type);
 5988|    265|  }
 5989|       |
 5990|    133|  if (consumeIf("Tt")) {
  ------------------
  |  Branch (5990:7): [True: 12, False: 121]
  ------------------
 5991|     12|    Node *Name = InventTemplateParamName(TemplateParamKind::Template);
 5992|     12|    if (!Name)
  ------------------
  |  Branch (5992:9): [True: 0, False: 12]
  ------------------
 5993|      0|      return nullptr;
 5994|     12|    size_t ParamsBegin = Names.size();
 5995|     12|    ScopedTemplateParamList TemplateTemplateParamParams(this);
 5996|     12|    Node *Requires = nullptr;
 5997|     18|    while (!consumeIf('E')) {
  ------------------
  |  Branch (5997:12): [True: 12, False: 6]
  ------------------
 5998|     12|      Node *P = parseTemplateParamDecl(TemplateTemplateParamParams.params());
 5999|     12|      if (!P)
  ------------------
  |  Branch (5999:11): [True: 0, False: 12]
  ------------------
 6000|      0|        return nullptr;
 6001|     12|      Names.push_back(P);
 6002|     12|      if (consumeIf('Q')) {
  ------------------
  |  Branch (6002:11): [True: 6, False: 6]
  ------------------
 6003|      6|        Requires = getDerived().parseConstraintExpr();
 6004|      6|        if (Requires == nullptr || !consumeIf('E'))
  ------------------
  |  Branch (6004:13): [True: 0, False: 6]
  |  Branch (6004:36): [True: 0, False: 6]
  ------------------
 6005|      0|          return nullptr;
 6006|      6|        break;
 6007|      6|      }
 6008|     12|    }
 6009|     12|    NodeArray InnerParams = popTrailingNodeArray(ParamsBegin);
 6010|     12|    return make<TemplateTemplateParamDecl>(Name, InnerParams, Requires);
 6011|     12|  }
 6012|       |
 6013|    121|  if (consumeIf("Tp")) {
  ------------------
  |  Branch (6013:7): [True: 121, False: 0]
  ------------------
 6014|    121|    Node *P = parseTemplateParamDecl(Params);
 6015|    121|    if (!P)
  ------------------
  |  Branch (6015:9): [True: 0, False: 121]
  ------------------
 6016|      0|      return nullptr;
 6017|    121|    return make<TemplateParamPackDecl>(P);
 6018|    121|  }
 6019|       |
 6020|      0|  return nullptr;
 6021|    121|}
cxa_demangle.cpp:_ZZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E22parseTemplateParamDeclEPNS0_14PODSmallVectorIPNS0_4NodeELm8EEEENKUlNS0_17TemplateParamKindEE_clESB_:
 5949|    351|  auto InventTemplateParamName = [&](TemplateParamKind Kind) {
 5950|    351|    unsigned Index = NumSyntheticTemplateParameters[(int)Kind]++;
 5951|    351|    Node *N = make<SyntheticTemplateParamName>(Kind, Index);
 5952|    351|    if (N && Params)
  ------------------
  |  Branch (5952:9): [True: 351, False: 0]
  |  Branch (5952:14): [True: 63, False: 288]
  ------------------
 5953|     63|      Params->push_back(N);
 5954|    351|    return N;
 5955|    351|  };
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_26SyntheticTemplateParamNameEJRNS0_17TemplateParamKindERjEEEPNS0_4NodeEDpOT0_:
 2827|    351|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|    351|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|    351|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle26SyntheticTemplateParamNameC2ENS0_17TemplateParamKindEj:
 1241|    351|      : Node(KSyntheticTemplateParamName), Kind(Kind_), Index(Index_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm8EE9push_backERKS3_:
  121|  14.5k|  void push_back(const T &Elem) {
  122|  14.5k|    if (Last == Cap)
  ------------------
  |  Branch (122:9): [True: 924, False: 13.6k]
  ------------------
  123|    924|      reserve(size() * 2);
  124|  14.5k|    *Last++ = Elem;
  125|  14.5k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm8EE7reserveEm:
   56|    924|  void reserve(size_t NewCap) {
   57|    924|    size_t S = size();
   58|    924|    if (isInline()) {
  ------------------
  |  Branch (58:9): [True: 603, False: 321]
  ------------------
   59|    603|      auto *Tmp = static_cast<T *>(std::malloc(NewCap * sizeof(T)));
   60|    603|      if (Tmp == nullptr)
  ------------------
  |  Branch (60:11): [True: 0, False: 603]
  ------------------
   61|      0|        std::abort();
   62|    603|      std::copy(First, Last, Tmp);
   63|    603|      First = Tmp;
   64|    603|    } else {
   65|    321|      First = static_cast<T *>(std::realloc(First, NewCap * sizeof(T)));
   66|    321|      if (First == nullptr)
  ------------------
  |  Branch (66:11): [True: 0, False: 321]
  ------------------
   67|      0|        std::abort();
   68|    321|    }
   69|    924|    Last = First + S;
   70|    924|    Cap = First + NewCap;
   71|    924|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_21TypeTemplateParamDeclEJRPNS0_4NodeEEEES9_DpOT0_:
 2827|     74|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|     74|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|     74|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle21TypeTemplateParamDeclC2EPNS0_4NodeE:
 1286|     74|      : Node(KTypeTemplateParamDecl, Cache::Yes), Name(Name_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_24NonTypeTemplateParamDeclEJRPNS0_4NodeESA_EEES9_DpOT0_:
 2827|    265|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|    265|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|    265|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle24NonTypeTemplateParamDeclC2EPNS0_4NodeES3_:
 1322|    265|      : Node(KNonTypeTemplateParamDecl, Cache::Yes), Name(Name_), Type(Type_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_25TemplateTemplateParamDeclEJRPNS0_4NodeERNS0_9NodeArrayESA_EEES9_DpOT0_:
 2827|     12|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|     12|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|     12|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle25TemplateTemplateParamDeclC2EPNS0_4NodeENS0_9NodeArrayES3_:
 1347|     12|      : Node(KTemplateTemplateParamDecl, Cache::Yes), Name(Name_),
 1348|     12|        Params(Params_), Requires(Requires_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_21TemplateParamPackDeclEJRPNS0_4NodeEEEES9_DpOT0_:
 2827|    121|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|    121|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|    121|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle21TemplateParamPackDeclC2EPNS0_4NodeE:
 1374|    121|      : Node(KTemplateParamPackDecl, Cache::Yes), Param(Param_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E23ScopedTemplateParamList6paramsEv:
 2762|     63|    TemplateParamList *params() { return &Params; }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS1_IPNS0_4NodeELm8EEELm4EE8pop_backEv:
  128|    560|  void pop_back() {
  129|    560|    DEMANGLE_ASSERT(Last != First, "Popping empty vector!");
  ------------------
  |  |   14|    560|#define DEMANGLE_ASSERT(expr, msg) _LIBCXXABI_ASSERT(expr, msg)
  |  |  ------------------
  |  |  |  |   19|    560|    do {                                                                                                               \
  |  |  |  |   20|    560|      if (!(expr)) {                                                                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:11): [True: 0, False: 560]
  |  |  |  |  ------------------
  |  |  |  |   21|      0|        char const* __msg = (msg);                                                                                     \
  |  |  |  |   22|      0|        ::__abort_message("%s:%d: %s", __FILE__, __LINE__, __msg);                                                     \
  |  |  |  |   23|      0|      }                                                                                                                \
  |  |  |  |   24|    560|    } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (24:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  130|    560|    --Last;
  131|    560|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_15ClosureTypeNameEJRNS0_9NodeArrayERPNS0_4NodeES9_SC_RNSt3__117basic_string_viewIcNSD_11char_traitsIcEEEEEEESB_DpOT0_:
 2827|      6|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|      6|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|      6|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle15ClosureTypeNameC2ENS0_9NodeArrayEPKNS0_4NodeES2_S5_NSt3__117basic_string_viewIcNS6_11char_traitsIcEEEE:
 1801|      6|      : Node(KClosureTypeName), TemplateParams(TemplateParams_),
 1802|      6|        Requires1(Requires1_), Params(Params_), Requires2(Requires2_),
 1803|      6|        Count(Count_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E23ScopedTemplateParamListD2Ev:
 2757|    623|    ~ScopedTemplateParamList() {
 2758|    623|      DEMANGLE_ASSERT(Parser->TemplateParams.size() >= OldNumTemplateParamLists,
  ------------------
  |  |   14|    623|#define DEMANGLE_ASSERT(expr, msg) _LIBCXXABI_ASSERT(expr, msg)
  |  |  ------------------
  |  |  |  |   19|    623|    do {                                                                                                               \
  |  |  |  |   20|    623|      if (!(expr)) {                                                                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:11): [True: 0, False: 623]
  |  |  |  |  ------------------
  |  |  |  |   21|      0|        char const* __msg = (msg);                                                                                     \
  |  |  |  |   22|      0|        ::__abort_message("%s:%d: %s", __FILE__, __LINE__, __msg);                                                     \
  |  |  |  |   23|      0|      }                                                                                                                \
  |  |  |  |   24|    623|    } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (24:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2759|    623|                      "");
 2760|    623|      Parser->TemplateParams.shrinkToSize(OldNumTemplateParamLists);
 2761|    623|    }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS1_IPNS0_4NodeELm8EEELm4EE12shrinkToSizeEm:
  133|    623|  void shrinkToSize(size_t Index) {
  134|    623|    DEMANGLE_ASSERT(Index <= size(), "shrinkToSize() can't expand!");
  ------------------
  |  |   14|    623|#define DEMANGLE_ASSERT(expr, msg) _LIBCXXABI_ASSERT(expr, msg)
  |  |  ------------------
  |  |  |  |   19|    623|    do {                                                                                                               \
  |  |  |  |   20|    623|      if (!(expr)) {                                                                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:11): [True: 0, False: 623]
  |  |  |  |  ------------------
  |  |  |  |   21|      0|        char const* __msg = (msg);                                                                                     \
  |  |  |  |   22|      0|        ::__abort_message("%s:%d: %s", __FILE__, __LINE__, __msg);                                                     \
  |  |  |  |   23|      0|      }                                                                                                                \
  |  |  |  |   24|    623|    } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (24:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  135|    623|    Last = First + Index;
  136|    623|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_8NameTypeEJRA16_KcEEEPNS0_4NodeEDpOT0_:
 2827|    176|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|    176|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|    176|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_11EnumLiteralEJRPNS0_4NodeERNSt3__117basic_string_viewIcNSB_11char_traitsIcEEEEEEES9_DpOT0_:
 2827|  20.4k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  20.4k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  20.4k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle11EnumLiteralC2EPKNS0_4NodeENSt3__117basic_string_viewIcNS5_11char_traitsIcEEEE:
 2426|  20.4k|      : Node(KEnumLiteral), Ty(Ty_), Integer(Integer_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E18parseFunctionParamEv:
 4714|  23.4k|Node *AbstractManglingParser<Derived, Alloc>::parseFunctionParam() {
 4715|  23.4k|  if (consumeIf("fpT"))
  ------------------
  |  Branch (4715:7): [True: 0, False: 23.4k]
  ------------------
 4716|      0|    return make<NameType>("this");
 4717|  23.4k|  if (consumeIf("fp")) {
  ------------------
  |  Branch (4717:7): [True: 3, False: 23.3k]
  ------------------
 4718|      3|    parseCVQualifiers();
 4719|      3|    std::string_view Num = parseNumber();
 4720|      3|    if (!consumeIf('_'))
  ------------------
  |  Branch (4720:9): [True: 0, False: 3]
  ------------------
 4721|      0|      return nullptr;
 4722|      3|    return make<FunctionParam>(Num);
 4723|      3|  }
 4724|  23.3k|  if (consumeIf("fL")) {
  ------------------
  |  Branch (4724:7): [True: 23.3k, False: 0]
  ------------------
 4725|  23.3k|    if (parseNumber().empty())
  ------------------
  |  Branch (4725:9): [True: 0, False: 23.3k]
  ------------------
 4726|      0|      return nullptr;
 4727|  23.3k|    if (!consumeIf('p'))
  ------------------
  |  Branch (4727:9): [True: 0, False: 23.3k]
  ------------------
 4728|      0|      return nullptr;
 4729|  23.3k|    parseCVQualifiers();
 4730|  23.3k|    std::string_view Num = parseNumber();
 4731|  23.3k|    if (!consumeIf('_'))
  ------------------
  |  Branch (4731:9): [True: 0, False: 23.3k]
  ------------------
 4732|      0|      return nullptr;
 4733|  23.3k|    return make<FunctionParam>(Num);
 4734|  23.3k|  }
 4735|      0|  return nullptr;
 4736|  23.3k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_13FunctionParamEJRNSt3__117basic_string_viewIcNS8_11char_traitsIcEEEEEEEPNS0_4NodeEDpOT0_:
 2827|  23.4k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  23.4k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  23.4k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle13FunctionParamC2ENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEE:
 2189|  23.4k|      : Node(KFunctionParam), Number(Number_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E13parseFoldExprEv:
 4946|      3|Node *AbstractManglingParser<Derived, Alloc>::parseFoldExpr() {
 4947|      3|  if (!consumeIf('f'))
  ------------------
  |  Branch (4947:7): [True: 0, False: 3]
  ------------------
 4948|      0|    return nullptr;
 4949|       |
 4950|      3|  bool IsLeftFold = false, HasInitializer = false;
 4951|      3|  switch (look()) {
 4952|      0|  default:
  ------------------
  |  Branch (4952:3): [True: 0, False: 3]
  ------------------
 4953|      0|    return nullptr;
 4954|      0|  case 'L':
  ------------------
  |  Branch (4954:3): [True: 0, False: 3]
  ------------------
 4955|      0|    IsLeftFold = true;
 4956|      0|    HasInitializer = true;
 4957|      0|    break;
 4958|      3|  case 'R':
  ------------------
  |  Branch (4958:3): [True: 3, False: 0]
  ------------------
 4959|      3|    HasInitializer = true;
 4960|      3|    break;
 4961|      0|  case 'l':
  ------------------
  |  Branch (4961:3): [True: 0, False: 3]
  ------------------
 4962|      0|    IsLeftFold = true;
 4963|      0|    break;
 4964|      0|  case 'r':
  ------------------
  |  Branch (4964:3): [True: 0, False: 3]
  ------------------
 4965|      0|    break;
 4966|      3|  }
 4967|      3|  ++First;
 4968|       |
 4969|      3|  const auto *Op = parseOperatorEncoding();
 4970|      3|  if (!Op)
  ------------------
  |  Branch (4970:7): [True: 0, False: 3]
  ------------------
 4971|      0|    return nullptr;
 4972|      3|  if (!(Op->getKind() == OperatorInfo::Binary
  ------------------
  |  Branch (4972:7): [True: 0, False: 3]
  |  Branch (4972:9): [True: 3, False: 0]
  ------------------
 4973|      3|        || (Op->getKind() == OperatorInfo::Member
  ------------------
  |  Branch (4973:13): [True: 0, False: 0]
  ------------------
 4974|      0|            && Op->getName().back() == '*')))
  ------------------
  |  Branch (4974:16): [True: 0, False: 0]
  ------------------
 4975|      0|    return nullptr;
 4976|       |
 4977|      3|  Node *Pack = getDerived().parseExpr();
 4978|      3|  if (Pack == nullptr)
  ------------------
  |  Branch (4978:7): [True: 0, False: 3]
  ------------------
 4979|      0|    return nullptr;
 4980|       |
 4981|      3|  Node *Init = nullptr;
 4982|      3|  if (HasInitializer) {
  ------------------
  |  Branch (4982:7): [True: 3, False: 0]
  ------------------
 4983|      3|    Init = getDerived().parseExpr();
 4984|      3|    if (Init == nullptr)
  ------------------
  |  Branch (4984:9): [True: 0, False: 3]
  ------------------
 4985|      0|      return nullptr;
 4986|      3|  }
 4987|       |
 4988|      3|  if (IsLeftFold && Init)
  ------------------
  |  Branch (4988:7): [True: 0, False: 3]
  |  Branch (4988:21): [True: 0, False: 0]
  ------------------
 4989|      0|    std::swap(Pack, Init);
 4990|       |
 4991|      3|  return make<FoldExpr>(IsLeftFold, Op->getSymbol(), Pack, Init);
 4992|      3|}
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E12OperatorInfo7getNameEv:
 3016|  21.7k|    std::string_view getName() const { return Name; }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_8FoldExprEJRbNSt3__117basic_string_viewIcNS9_11char_traitsIcEEEERPNS0_4NodeESG_EEESF_DpOT0_:
 2827|      3|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|      3|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|      3|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle8FoldExprC2EbNSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEPKNS0_4NodeES9_:
 2322|      3|      : Node(KFoldExpr), Pack(Pack_), Init(Init_), OperatorName(OperatorName_),
 2323|      3|        IsLeftFold(IsLeftFold_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22ParameterPackExpansionC2EPKNS0_4NodeE:
 1485|  1.33k|      : Node(KParameterPackExpansion), Child(Child_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E15parseBracedExprEv:
 4899|  48.2k|Node *AbstractManglingParser<Derived, Alloc>::parseBracedExpr() {
 4900|  48.2k|  if (look() == 'd') {
  ------------------
  |  Branch (4900:7): [True: 23.5k, False: 24.7k]
  ------------------
 4901|  23.5k|    switch (look(1)) {
  ------------------
  |  Branch (4901:13): [True: 780, False: 22.7k]
  ------------------
 4902|      0|    case 'i': {
  ------------------
  |  Branch (4902:5): [True: 0, False: 23.5k]
  ------------------
 4903|      0|      First += 2;
 4904|      0|      Node *Field = getDerived().parseSourceName(/*NameState=*/nullptr);
 4905|      0|      if (Field == nullptr)
  ------------------
  |  Branch (4905:11): [True: 0, False: 0]
  ------------------
 4906|      0|        return nullptr;
 4907|      0|      Node *Init = getDerived().parseBracedExpr();
 4908|      0|      if (Init == nullptr)
  ------------------
  |  Branch (4908:11): [True: 0, False: 0]
  ------------------
 4909|      0|        return nullptr;
 4910|      0|      return make<BracedExpr>(Field, Init, /*isArray=*/false);
 4911|      0|    }
 4912|  15.1k|    case 'x': {
  ------------------
  |  Branch (4912:5): [True: 15.1k, False: 8.37k]
  ------------------
 4913|  15.1k|      First += 2;
 4914|  15.1k|      Node *Index = getDerived().parseExpr();
 4915|  15.1k|      if (Index == nullptr)
  ------------------
  |  Branch (4915:11): [True: 0, False: 15.1k]
  ------------------
 4916|      0|        return nullptr;
 4917|  15.1k|      Node *Init = getDerived().parseBracedExpr();
 4918|  15.1k|      if (Init == nullptr)
  ------------------
  |  Branch (4918:11): [True: 0, False: 15.1k]
  ------------------
 4919|      0|        return nullptr;
 4920|  15.1k|      return make<BracedExpr>(Index, Init, /*isArray=*/true);
 4921|  15.1k|    }
 4922|  7.59k|    case 'X': {
  ------------------
  |  Branch (4922:5): [True: 7.59k, False: 15.9k]
  ------------------
 4923|  7.59k|      First += 2;
 4924|  7.59k|      Node *RangeBegin = getDerived().parseExpr();
 4925|  7.59k|      if (RangeBegin == nullptr)
  ------------------
  |  Branch (4925:11): [True: 0, False: 7.59k]
  ------------------
 4926|      0|        return nullptr;
 4927|  7.59k|      Node *RangeEnd = getDerived().parseExpr();
 4928|  7.59k|      if (RangeEnd == nullptr)
  ------------------
  |  Branch (4928:11): [True: 0, False: 7.59k]
  ------------------
 4929|      0|        return nullptr;
 4930|  7.59k|      Node *Init = getDerived().parseBracedExpr();
 4931|  7.59k|      if (Init == nullptr)
  ------------------
  |  Branch (4931:11): [True: 0, False: 7.59k]
  ------------------
 4932|      0|        return nullptr;
 4933|  7.59k|      return make<BracedRangeExpr>(RangeBegin, RangeEnd, Init);
 4934|  7.59k|    }
 4935|  23.5k|    }
 4936|  23.5k|  }
 4937|  25.5k|  return getDerived().parseExpr();
 4938|  48.2k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_10BracedExprEJRPNS0_4NodeESA_bEEES9_DpOT0_:
 2827|  15.1k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  15.1k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  15.1k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle10BracedExprC2EPKNS0_4NodeES4_b:
 2273|  15.1k|      : Node(KBracedExpr), Elem(Elem_), Init(Init_), IsArray(IsArray_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_15BracedRangeExprEJRPNS0_4NodeESA_SA_EEES9_DpOT0_:
 2827|  7.59k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  7.59k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  7.59k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle15BracedRangeExprC2EPKNS0_4NodeES4_S4_:
 2298|  7.59k|      : Node(KBracedRangeExpr), First(First_), Last(Last_), Init(Init_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_12InitListExprEJDnNS0_9NodeArrayEEEEPNS0_4NodeEDpOT0_:
 2827|  1.04k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  1.04k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  1.04k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle12InitListExprC2EPKNS0_4NodeENS0_9NodeArrayE:
 2251|  8.63k|      : Node(KInitListExpr), Ty(Ty_), Inits(Inits_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_13EnclosingExprEJRA10_KcRPNS0_4NodeENSB_4PrecEEEESC_DpOT0_:
 2827|    360|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|    360|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|    360|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E17parseRequiresExprEv:
 5050|  21.8k|Node *AbstractManglingParser<Derived, Alloc>::parseRequiresExpr() {
 5051|  21.8k|  NodeArray Params;
 5052|  21.8k|  if (consumeIf("rQ")) {
  ------------------
  |  Branch (5052:7): [True: 0, False: 21.8k]
  ------------------
 5053|       |    // <expression> ::= rQ <bare-function-type> _ <requirement>+ E
 5054|      0|    size_t ParamsBegin = Names.size();
 5055|      0|    while (!consumeIf('_')) {
  ------------------
  |  Branch (5055:12): [True: 0, False: 0]
  ------------------
 5056|      0|      Node *Type = getDerived().parseType();
 5057|      0|      if (Type == nullptr)
  ------------------
  |  Branch (5057:11): [True: 0, False: 0]
  ------------------
 5058|      0|        return nullptr;
 5059|      0|      Names.push_back(Type);
 5060|      0|    }
 5061|      0|    Params = popTrailingNodeArray(ParamsBegin);
 5062|  21.8k|  } else if (!consumeIf("rq")) {
  ------------------
  |  Branch (5062:14): [True: 0, False: 21.8k]
  ------------------
 5063|       |    // <expression> ::= rq <requirement>+ E
 5064|      0|    return nullptr;
 5065|      0|  }
 5066|       |
 5067|  21.8k|  size_t ReqsBegin = Names.size();
 5068|  21.8k|  do {
 5069|  21.8k|    Node *Constraint = nullptr;
 5070|  21.8k|    if (consumeIf('X')) {
  ------------------
  |  Branch (5070:9): [True: 18.8k, False: 3.01k]
  ------------------
 5071|       |      // <requirement> ::= X <expression> [N] [R <type-constraint>]
 5072|  18.8k|      Node *Expr = getDerived().parseExpr();
 5073|  18.8k|      if (Expr == nullptr)
  ------------------
  |  Branch (5073:11): [True: 0, False: 18.8k]
  ------------------
 5074|      0|        return nullptr;
 5075|  18.8k|      bool Noexcept = consumeIf('N');
 5076|  18.8k|      Node *TypeReq = nullptr;
 5077|  18.8k|      if (consumeIf('R')) {
  ------------------
  |  Branch (5077:11): [True: 0, False: 18.8k]
  ------------------
 5078|      0|        TypeReq = getDerived().parseName();
 5079|      0|        if (TypeReq == nullptr)
  ------------------
  |  Branch (5079:13): [True: 0, False: 0]
  ------------------
 5080|      0|          return nullptr;
 5081|      0|      }
 5082|  18.8k|      Constraint = make<ExprRequirement>(Expr, Noexcept, TypeReq);
 5083|  18.8k|    } else if (consumeIf('T')) {
  ------------------
  |  Branch (5083:16): [True: 0, False: 3.01k]
  ------------------
 5084|       |      // <requirement> ::= T <type>
 5085|      0|      Node *Type = getDerived().parseType();
 5086|      0|      if (Type == nullptr)
  ------------------
  |  Branch (5086:11): [True: 0, False: 0]
  ------------------
 5087|      0|        return nullptr;
 5088|      0|      Constraint = make<TypeRequirement>(Type);
 5089|  3.01k|    } else if (consumeIf('Q')) {
  ------------------
  |  Branch (5089:16): [True: 3.01k, False: 1]
  ------------------
 5090|       |      // <requirement> ::= Q <constraint-expression>
 5091|       |      //
 5092|       |      // FIXME: We use <expression> instead of <constraint-expression>. Either
 5093|       |      // the requires expression is already inside a constraint expression, in
 5094|       |      // which case it makes no difference, or we're in a requires-expression
 5095|       |      // that might be partially-substituted, where the language behavior is
 5096|       |      // not yet settled and clang mangles after substitution.
 5097|  3.01k|      Node *NestedReq = getDerived().parseExpr();
 5098|  3.01k|      if (NestedReq == nullptr)
  ------------------
  |  Branch (5098:11): [True: 0, False: 3.01k]
  ------------------
 5099|      0|        return nullptr;
 5100|  3.01k|      Constraint = make<NestedRequirement>(NestedReq);
 5101|  3.01k|    }
 5102|  21.8k|    if (Constraint == nullptr)
  ------------------
  |  Branch (5102:9): [True: 1, False: 21.8k]
  ------------------
 5103|      1|      return nullptr;
 5104|  21.8k|    Names.push_back(Constraint);
 5105|  21.8k|  } while (!consumeIf('E'));
  ------------------
  |  Branch (5105:12): [True: 1, False: 21.8k]
  ------------------
 5106|       |
 5107|  21.8k|  return make<RequiresExpr>(Params, popTrailingNodeArray(ReqsBegin));
 5108|  21.8k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_15ExprRequirementEJRPNS0_4NodeERbSA_EEES9_DpOT0_:
 2827|  18.8k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  18.8k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  18.8k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle15ExprRequirementC2EPKNS0_4NodeEbS4_:
 2506|  18.8k|      : Node(KExprRequirement), Expr(Expr_), IsNoexcept(IsNoexcept_),
 2507|  18.8k|        TypeConstraint(TypeConstraint_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_17NestedRequirementEJRPNS0_4NodeEEEES9_DpOT0_:
 2827|  3.01k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  3.01k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  3.01k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle17NestedRequirementC2EPKNS0_4NodeE:
 2549|  3.01k|      : Node(KNestedRequirement), Constraint(Constraint_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_12RequiresExprEJRNS0_9NodeArrayES8_EEEPNS0_4NodeEDpOT0_:
 2827|  21.8k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  21.8k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  21.8k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle12RequiresExprC2ENS0_9NodeArrayES2_:
 2476|  21.8k|      : Node(KRequiresExpr), Parameters(Parameters_),
 2477|  21.8k|        Requirements(Requirements_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E18parseSubobjectExprEv:
 5018|      1|Node *AbstractManglingParser<Derived, Alloc>::parseSubobjectExpr() {
 5019|      1|  Node *Ty = getDerived().parseType();
 5020|      1|  if (!Ty)
  ------------------
  |  Branch (5020:7): [True: 0, False: 1]
  ------------------
 5021|      0|    return nullptr;
 5022|      1|  Node *Expr = getDerived().parseExpr();
 5023|      1|  if (!Expr)
  ------------------
  |  Branch (5023:7): [True: 0, False: 1]
  ------------------
 5024|      0|    return nullptr;
 5025|      1|  std::string_view Offset = getDerived().parseNumber(true);
 5026|      1|  size_t SelectorsBegin = Names.size();
 5027|      1|  while (consumeIf('_')) {
  ------------------
  |  Branch (5027:10): [True: 0, False: 1]
  ------------------
 5028|      0|    Node *Selector = make<NameType>(parseNumber());
 5029|      0|    if (!Selector)
  ------------------
  |  Branch (5029:9): [True: 0, False: 0]
  ------------------
 5030|      0|      return nullptr;
 5031|      0|    Names.push_back(Selector);
 5032|      0|  }
 5033|      1|  bool OnePastTheEnd = consumeIf('p');
 5034|      1|  if (!consumeIf('E'))
  ------------------
  |  Branch (5034:7): [True: 0, False: 1]
  ------------------
 5035|      0|    return nullptr;
 5036|      1|  return make<SubobjectExpr>(
 5037|      1|      Ty, Expr, Offset, popTrailingNodeArray(SelectorsBegin), OnePastTheEnd);
 5038|      1|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_13SubobjectExprEJRPNS0_4NodeESA_RNSt3__117basic_string_viewIcNSB_11char_traitsIcEEEENS0_9NodeArrayERbEEES9_DpOT0_:
 2827|      1|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|      1|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|      1|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle13SubobjectExprC2EPKNS0_4NodeES4_NSt3__117basic_string_viewIcNS5_11char_traitsIcEEEENS0_9NodeArrayEb:
 1983|      1|      : Node(KSubobjectExpr), Type(Type_), SubExpr(SubExpr_), Offset(Offset_),
 1984|      1|        UnionSelectors(UnionSelectors_), OnePastTheEnd(OnePastTheEnd_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_22ParameterPackExpansionEJRPNS0_4NodeEEEES9_DpOT0_:
 2827|  1.33k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  1.33k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  1.33k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_19SizeofParamPackExprEJRPNS0_4NodeEEEES9_DpOT0_:
 2827|      6|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|      6|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|      6|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle19SizeofParamPackExprC2EPKNS0_4NodeE:
 2064|      6|      : Node(KSizeofParamPackExpr), Pack(Pack_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_13EnclosingExprEJRA11_KcRPNS0_4NodeEEEESC_DpOT0_:
 2827|  1.34k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  1.34k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  1.34k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_13NodeArrayNodeEJNS0_9NodeArrayEEEEPNS0_4NodeEDpOT0_:
 2827|  1.34k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  1.34k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  1.34k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle13NodeArrayNodeC2ENS0_9NodeArrayE:
  359|  1.34k|  NodeArrayNode(NodeArray Array_) : Node(KNodeArrayNode), Array(Array_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_12InitListExprEJRPNS0_4NodeENS0_9NodeArrayEEEES9_DpOT0_:
 2827|  7.59k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  7.59k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  7.59k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_8NameTypeEJRA6_KcEEEPNS0_4NodeEDpOT0_:
 2827|   146k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|   146k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|   146k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E19parseUnresolvedNameEb:
 3779|  22.1k|Node *AbstractManglingParser<Derived, Alloc>::parseUnresolvedName(bool Global) {
 3780|  22.1k|  Node *SoFar = nullptr;
 3781|       |
 3782|       |  // srN <unresolved-type> [<template-args>] <unresolved-qualifier-level>* E <base-unresolved-name>
 3783|       |  // srN <unresolved-type>                   <unresolved-qualifier-level>+ E <base-unresolved-name>
 3784|  22.1k|  if (consumeIf("srN")) {
  ------------------
  |  Branch (3784:7): [True: 0, False: 22.1k]
  ------------------
 3785|      0|    SoFar = getDerived().parseUnresolvedType();
 3786|      0|    if (SoFar == nullptr)
  ------------------
  |  Branch (3786:9): [True: 0, False: 0]
  ------------------
 3787|      0|      return nullptr;
 3788|       |
 3789|      0|    if (look() == 'I') {
  ------------------
  |  Branch (3789:9): [True: 0, False: 0]
  ------------------
 3790|      0|      Node *TA = getDerived().parseTemplateArgs();
 3791|      0|      if (TA == nullptr)
  ------------------
  |  Branch (3791:11): [True: 0, False: 0]
  ------------------
 3792|      0|        return nullptr;
 3793|      0|      SoFar = make<NameWithTemplateArgs>(SoFar, TA);
 3794|      0|      if (!SoFar)
  ------------------
  |  Branch (3794:11): [True: 0, False: 0]
  ------------------
 3795|      0|        return nullptr;
 3796|      0|    }
 3797|       |
 3798|      0|    while (!consumeIf('E')) {
  ------------------
  |  Branch (3798:12): [True: 0, False: 0]
  ------------------
 3799|      0|      Node *Qual = getDerived().parseSimpleId();
 3800|      0|      if (Qual == nullptr)
  ------------------
  |  Branch (3800:11): [True: 0, False: 0]
  ------------------
 3801|      0|        return nullptr;
 3802|      0|      SoFar = make<QualifiedName>(SoFar, Qual);
 3803|      0|      if (!SoFar)
  ------------------
  |  Branch (3803:11): [True: 0, False: 0]
  ------------------
 3804|      0|        return nullptr;
 3805|      0|    }
 3806|       |
 3807|      0|    Node *Base = getDerived().parseBaseUnresolvedName();
 3808|      0|    if (Base == nullptr)
  ------------------
  |  Branch (3808:9): [True: 0, False: 0]
  ------------------
 3809|      0|      return nullptr;
 3810|      0|    return make<QualifiedName>(SoFar, Base);
 3811|      0|  }
 3812|       |
 3813|       |  // [gs] <base-unresolved-name>                     # x or (with "gs") ::x
 3814|  22.1k|  if (!consumeIf("sr")) {
  ------------------
  |  Branch (3814:7): [True: 22.1k, False: 3]
  ------------------
 3815|  22.1k|    SoFar = getDerived().parseBaseUnresolvedName();
 3816|  22.1k|    if (SoFar == nullptr)
  ------------------
  |  Branch (3816:9): [True: 1, False: 22.1k]
  ------------------
 3817|      1|      return nullptr;
 3818|  22.1k|    if (Global)
  ------------------
  |  Branch (3818:9): [True: 0, False: 22.1k]
  ------------------
 3819|      0|      SoFar = make<GlobalQualifiedName>(SoFar);
 3820|  22.1k|    return SoFar;
 3821|  22.1k|  }
 3822|       |
 3823|       |  // [gs] sr <unresolved-qualifier-level>+ E   <base-unresolved-name>
 3824|      3|  if (std::isdigit(look())) {
  ------------------
  |  Branch (3824:7): [True: 3, False: 0]
  ------------------
 3825|      3|    do {
 3826|      3|      Node *Qual = getDerived().parseSimpleId();
 3827|      3|      if (Qual == nullptr)
  ------------------
  |  Branch (3827:11): [True: 0, False: 3]
  ------------------
 3828|      0|        return nullptr;
 3829|      3|      if (SoFar)
  ------------------
  |  Branch (3829:11): [True: 0, False: 3]
  ------------------
 3830|      0|        SoFar = make<QualifiedName>(SoFar, Qual);
 3831|      3|      else if (Global)
  ------------------
  |  Branch (3831:16): [True: 0, False: 3]
  ------------------
 3832|      0|        SoFar = make<GlobalQualifiedName>(Qual);
 3833|      3|      else
 3834|      3|        SoFar = Qual;
 3835|      3|      if (!SoFar)
  ------------------
  |  Branch (3835:11): [True: 0, False: 3]
  ------------------
 3836|      0|        return nullptr;
 3837|      3|    } while (!consumeIf('E'));
  ------------------
  |  Branch (3837:14): [True: 0, False: 3]
  ------------------
 3838|      3|  }
 3839|       |  //      sr <unresolved-type>                 <base-unresolved-name>
 3840|       |  //      sr <unresolved-type> <template-args> <base-unresolved-name>
 3841|      0|  else {
 3842|      0|    SoFar = getDerived().parseUnresolvedType();
 3843|      0|    if (SoFar == nullptr)
  ------------------
  |  Branch (3843:9): [True: 0, False: 0]
  ------------------
 3844|      0|      return nullptr;
 3845|       |
 3846|      0|    if (look() == 'I') {
  ------------------
  |  Branch (3846:9): [True: 0, False: 0]
  ------------------
 3847|      0|      Node *TA = getDerived().parseTemplateArgs();
 3848|      0|      if (TA == nullptr)
  ------------------
  |  Branch (3848:11): [True: 0, False: 0]
  ------------------
 3849|      0|        return nullptr;
 3850|      0|      SoFar = make<NameWithTemplateArgs>(SoFar, TA);
 3851|      0|      if (!SoFar)
  ------------------
  |  Branch (3851:11): [True: 0, False: 0]
  ------------------
 3852|      0|        return nullptr;
 3853|      0|    }
 3854|      0|  }
 3855|       |
 3856|      3|  DEMANGLE_ASSERT(SoFar != nullptr, "");
  ------------------
  |  |   14|      3|#define DEMANGLE_ASSERT(expr, msg) _LIBCXXABI_ASSERT(expr, msg)
  |  |  ------------------
  |  |  |  |   19|      3|    do {                                                                                                               \
  |  |  |  |   20|      3|      if (!(expr)) {                                                                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:11): [True: 0, False: 3]
  |  |  |  |  ------------------
  |  |  |  |   21|      0|        char const* __msg = (msg);                                                                                     \
  |  |  |  |   22|      0|        ::__abort_message("%s:%d: %s", __FILE__, __LINE__, __msg);                                                     \
  |  |  |  |   23|      0|      }                                                                                                                \
  |  |  |  |   24|      3|    } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (24:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3857|       |
 3858|      3|  Node *Base = getDerived().parseBaseUnresolvedName();
 3859|      3|  if (Base == nullptr)
  ------------------
  |  Branch (3859:7): [True: 0, False: 3]
  ------------------
 3860|      0|    return nullptr;
 3861|      3|  return make<QualifiedName>(SoFar, Base);
 3862|      3|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E13parseSimpleIdEv:
 3688|  22.1k|Node *AbstractManglingParser<Derived, Alloc>::parseSimpleId() {
 3689|  22.1k|  Node *SN = getDerived().parseSourceName(/*NameState=*/nullptr);
 3690|  22.1k|  if (SN == nullptr)
  ------------------
  |  Branch (3690:7): [True: 1, False: 22.1k]
  ------------------
 3691|      1|    return nullptr;
 3692|  22.1k|  if (look() == 'I') {
  ------------------
  |  Branch (3692:7): [True: 0, False: 22.1k]
  ------------------
 3693|      0|    Node *TA = getDerived().parseTemplateArgs();
 3694|      0|    if (TA == nullptr)
  ------------------
  |  Branch (3694:9): [True: 0, False: 0]
  ------------------
 3695|      0|      return nullptr;
 3696|      0|    return make<NameWithTemplateArgs>(SN, TA);
 3697|      0|  }
 3698|  22.1k|  return SN;
 3699|  22.1k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_13QualifiedNameEJRPNS0_4NodeESA_EEES9_DpOT0_:
 2827|      3|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|      3|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|      3|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle13QualifiedNameC2EPKNS0_4NodeES4_:
 1160|      3|      : Node(KQualifiedName), Qualifier(Qualifier_), Name(Name_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E23parseBaseUnresolvedNameEv:
 3745|  22.1k|Node *AbstractManglingParser<Derived, Alloc>::parseBaseUnresolvedName() {
 3746|  22.1k|  if (std::isdigit(look()))
  ------------------
  |  Branch (3746:7): [True: 22.1k, False: 3]
  ------------------
 3747|  22.1k|    return getDerived().parseSimpleId();
 3748|       |
 3749|      3|  if (consumeIf("dn"))
  ------------------
  |  Branch (3749:7): [True: 0, False: 3]
  ------------------
 3750|      0|    return getDerived().parseDestructorName();
 3751|       |
 3752|      3|  consumeIf("on");
 3753|       |
 3754|      3|  Node *Oper = getDerived().parseOperatorName(/*NameState=*/nullptr);
 3755|      3|  if (Oper == nullptr)
  ------------------
  |  Branch (3755:7): [True: 0, False: 3]
  ------------------
 3756|      0|    return nullptr;
 3757|      3|  if (look() == 'I') {
  ------------------
  |  Branch (3757:7): [True: 0, False: 3]
  ------------------
 3758|      0|    Node *TA = getDerived().parseTemplateArgs();
 3759|      0|    if (TA == nullptr)
  ------------------
  |  Branch (3759:9): [True: 0, False: 0]
  ------------------
 3760|      0|      return nullptr;
 3761|      0|    return make<NameWithTemplateArgs>(Oper, TA);
 3762|      0|  }
 3763|      3|  return Oper;
 3764|      3|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E17parseOperatorNameEPNS5_9NameStateE:
 3466|  26.4k|AbstractManglingParser<Derived, Alloc>::parseOperatorName(NameState *State) {
 3467|  26.4k|  if (const auto *Op = parseOperatorEncoding()) {
  ------------------
  |  Branch (3467:19): [True: 26.4k, False: 14]
  ------------------
 3468|  26.4k|    if (Op->getKind() == OperatorInfo::CCast) {
  ------------------
  |  Branch (3468:9): [True: 4.67k, False: 21.7k]
  ------------------
 3469|       |      //              ::= cv <type>    # (cast)
 3470|  4.67k|      ScopedOverride<bool> SaveTemplate(TryToParseTemplateArgs, false);
 3471|       |      // If we're parsing an encoding, State != nullptr and the conversion
 3472|       |      // operators' <type> could have a <template-param> that refers to some
 3473|       |      // <template-arg>s further ahead in the mangled name.
 3474|  4.67k|      ScopedOverride<bool> SavePermit(PermitForwardTemplateReferences,
 3475|  4.67k|                                      PermitForwardTemplateReferences ||
  ------------------
  |  Branch (3475:39): [True: 3.56k, False: 1.10k]
  ------------------
 3476|  4.67k|                                          State != nullptr);
  ------------------
  |  Branch (3476:43): [True: 941, False: 165]
  ------------------
 3477|  4.67k|      Node *Ty = getDerived().parseType();
 3478|  4.67k|      if (Ty == nullptr)
  ------------------
  |  Branch (3478:11): [True: 2.11k, False: 2.55k]
  ------------------
 3479|  2.11k|        return nullptr;
 3480|  2.55k|      if (State) State->CtorDtorConversion = true;
  ------------------
  |  Branch (3480:11): [True: 1.78k, False: 765]
  ------------------
 3481|  2.55k|      return make<ConversionOperatorType>(Ty);
 3482|  4.67k|    }
 3483|       |
 3484|  21.7k|    if (Op->getKind() >= OperatorInfo::Unnameable)
  ------------------
  |  Branch (3484:9): [True: 0, False: 21.7k]
  ------------------
 3485|       |      /* Not a nameable operator.  */
 3486|      0|      return nullptr;
 3487|  21.7k|    if (Op->getKind() == OperatorInfo::Member && !Op->getFlag())
  ------------------
  |  Branch (3487:9): [True: 1, False: 21.7k]
  |  Branch (3487:50): [True: 0, False: 1]
  ------------------
 3488|       |      /* Not a nameable MemberExpr */
 3489|      0|      return nullptr;
 3490|       |
 3491|  21.7k|    return make<NameType>(Op->getName());
 3492|  21.7k|  }
 3493|       |
 3494|     14|  if (consumeIf("li")) {
  ------------------
  |  Branch (3494:7): [True: 0, False: 14]
  ------------------
 3495|       |    //                   ::= li <source-name>  # operator ""
 3496|      0|    Node *SN = getDerived().parseSourceName(State);
 3497|      0|    if (SN == nullptr)
  ------------------
  |  Branch (3497:9): [True: 0, False: 0]
  ------------------
 3498|      0|      return nullptr;
 3499|      0|    return make<LiteralOperator>(SN);
 3500|      0|  }
 3501|       |
 3502|     14|  if (consumeIf('v')) {
  ------------------
  |  Branch (3502:7): [True: 0, False: 14]
  ------------------
 3503|       |    // ::= v <digit> <source-name>        # vendor extended operator
 3504|      0|    if (look() >= '0' && look() <= '9') {
  ------------------
  |  Branch (3504:9): [True: 0, False: 0]
  |  Branch (3504:26): [True: 0, False: 0]
  ------------------
 3505|      0|      First++;
 3506|      0|      Node *SN = getDerived().parseSourceName(State);
 3507|      0|      if (SN == nullptr)
  ------------------
  |  Branch (3507:11): [True: 0, False: 0]
  ------------------
 3508|      0|        return nullptr;
 3509|      0|      return make<ConversionOperatorType>(SN);
 3510|      0|    }
 3511|      0|    return nullptr;
 3512|      0|  }
 3513|       |
 3514|     14|  return nullptr;
 3515|     14|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_22ConversionOperatorTypeEJRPNS0_4NodeEEEES9_DpOT0_:
 2827|  2.55k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  2.55k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  2.55k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22ConversionOperatorTypeC2EPKNS0_4NodeE:
  473|  2.55k|      : Node(KConversionOperatorType), Ty(Ty_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_13EnclosingExprEJRA9_KcRPNS0_4NodeEEEESC_DpOT0_:
 2827|  22.6k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  22.6k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  22.6k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_8NameTypeEJRA4_KcEEEPNS0_4NodeEDpOT0_:
 2827|   335k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|   335k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|   335k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E17parseSubstitutionEv:
 5811|  40.6k|Node *AbstractManglingParser<Derived, Alloc>::parseSubstitution() {
 5812|  40.6k|  if (!consumeIf('S'))
  ------------------
  |  Branch (5812:7): [True: 0, False: 40.6k]
  ------------------
 5813|      0|    return nullptr;
 5814|       |
 5815|  40.6k|  if (look() >= 'a' && look() <= 'z') {
  ------------------
  |  Branch (5815:7): [True: 21.3k, False: 19.2k]
  |  Branch (5815:24): [True: 21.3k, False: 0]
  ------------------
 5816|  21.3k|    SpecialSubKind Kind;
 5817|  21.3k|    switch (look()) {
 5818|  11.7k|    case 'a':
  ------------------
  |  Branch (5818:5): [True: 11.7k, False: 9.62k]
  ------------------
 5819|  11.7k|      Kind = SpecialSubKind::allocator;
 5820|  11.7k|      break;
 5821|      0|    case 'b':
  ------------------
  |  Branch (5821:5): [True: 0, False: 21.3k]
  ------------------
 5822|      0|      Kind = SpecialSubKind::basic_string;
 5823|      0|      break;
 5824|    971|    case 'd':
  ------------------
  |  Branch (5824:5): [True: 971, False: 20.4k]
  ------------------
 5825|    971|      Kind = SpecialSubKind::iostream;
 5826|    971|      break;
 5827|      1|    case 'i':
  ------------------
  |  Branch (5827:5): [True: 1, False: 21.3k]
  ------------------
 5828|      1|      Kind = SpecialSubKind::istream;
 5829|      1|      break;
 5830|  6.72k|    case 'o':
  ------------------
  |  Branch (5830:5): [True: 6.72k, False: 14.6k]
  ------------------
 5831|  6.72k|      Kind = SpecialSubKind::ostream;
 5832|  6.72k|      break;
 5833|  1.93k|    case 's':
  ------------------
  |  Branch (5833:5): [True: 1.93k, False: 19.4k]
  ------------------
 5834|  1.93k|      Kind = SpecialSubKind::string;
 5835|  1.93k|      break;
 5836|      0|    default:
  ------------------
  |  Branch (5836:5): [True: 0, False: 21.3k]
  ------------------
 5837|      0|      return nullptr;
 5838|  21.3k|    }
 5839|  21.3k|    ++First;
 5840|  21.3k|    auto *SpecialSub = make<SpecialSubstitution>(Kind);
 5841|  21.3k|    if (!SpecialSub)
  ------------------
  |  Branch (5841:9): [True: 0, False: 21.3k]
  ------------------
 5842|      0|      return nullptr;
 5843|       |
 5844|       |    // Itanium C++ ABI 5.1.2: If a name that would use a built-in <substitution>
 5845|       |    // has ABI tags, the tags are appended to the substitution; the result is a
 5846|       |    // substitutable component.
 5847|  21.3k|    Node *WithTags = getDerived().parseAbiTags(SpecialSub);
 5848|  21.3k|    if (WithTags != SpecialSub) {
  ------------------
  |  Branch (5848:9): [True: 0, False: 21.3k]
  ------------------
 5849|      0|      Subs.push_back(WithTags);
 5850|      0|      SpecialSub = WithTags;
 5851|      0|    }
 5852|  21.3k|    return SpecialSub;
 5853|  21.3k|  }
 5854|       |
 5855|       |  //                ::= S_
 5856|  19.2k|  if (consumeIf('_')) {
  ------------------
  |  Branch (5856:7): [True: 2.68k, False: 16.5k]
  ------------------
 5857|  2.68k|    if (Subs.empty())
  ------------------
  |  Branch (5857:9): [True: 0, False: 2.68k]
  ------------------
 5858|      0|      return nullptr;
 5859|  2.68k|    return Subs[0];
 5860|  2.68k|  }
 5861|       |
 5862|       |  //                ::= S <seq-id> _
 5863|  16.5k|  size_t Index = 0;
 5864|  16.5k|  if (parseSeqId(&Index))
  ------------------
  |  Branch (5864:7): [True: 0, False: 16.5k]
  ------------------
 5865|      0|    return nullptr;
 5866|  16.5k|  ++Index;
 5867|  16.5k|  if (!consumeIf('_') || Index >= Subs.size())
  ------------------
  |  Branch (5867:7): [True: 0, False: 16.5k]
  |  Branch (5867:26): [True: 0, False: 16.5k]
  ------------------
 5868|      0|    return nullptr;
 5869|  16.5k|  return Subs[Index];
 5870|  16.5k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_19SpecialSubstitutionEJRNS0_14SpecialSubKindEEEEPNS0_4NodeEDpOT0_:
 2827|  21.3k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  21.3k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  21.3k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle19SpecialSubstitutionC2ENS0_14SpecialSubKindE:
 1718|  21.3k|      : ExpandedSpecialSubstitution(SSK_, KSpecialSubstitution) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle27ExpandedSpecialSubstitutionC2ENS0_14SpecialSubKindENS0_4Node4KindE:
 1672|  27.8k|      : Node(K_), SSK(SSK_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E12parseAbiTagsEPNS0_4NodeE:
 3867|   173k|Node *AbstractManglingParser<Derived, Alloc>::parseAbiTags(Node *N) {
 3868|   173k|  while (consumeIf('B')) {
  ------------------
  |  Branch (3868:10): [True: 0, False: 173k]
  ------------------
 3869|      0|    std::string_view SN = parseBareSourceName();
 3870|      0|    if (SN.empty())
  ------------------
  |  Branch (3870:9): [True: 0, False: 0]
  ------------------
 3871|      0|      return nullptr;
 3872|      0|    N = make<AbiTagAttr>(N, SN);
 3873|      0|    if (!N)
  ------------------
  |  Branch (3873:9): [True: 0, False: 0]
  ------------------
 3874|      0|      return nullptr;
 3875|      0|  }
 3876|   173k|  return N;
 3877|   173k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E19parseBareSourceNameEv:
 3907|  69.0k|std::string_view AbstractManglingParser<Alloc, Derived>::parseBareSourceName() {
 3908|  69.0k|  size_t Int = 0;
 3909|  69.0k|  if (parsePositiveInteger(&Int) || numLeft() < Int)
  ------------------
  |  Branch (3909:7): [True: 2, False: 69.0k]
  |  Branch (3909:37): [True: 0, False: 69.0k]
  ------------------
 3910|      2|    return {};
 3911|  69.0k|  std::string_view R(First, Int);
 3912|  69.0k|  First += Int;
 3913|  69.0k|  return R;
 3914|  69.0k|}
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle4Node20getRHSComponentCacheEv:
  258|   623k|  Cache getRHSComponentCache() const { return RHSComponentCache; }
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle4Node13getArrayCacheEv:
  259|   209k|  Cache getArrayCache() const { return ArrayCache; }
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle4Node16getFunctionCacheEv:
  260|   209k|  Cache getFunctionCache() const { return FunctionCache; }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm32EEixEm:
  147|  19.2k|  T &operator[](size_t Index) {
  148|  19.2k|    DEMANGLE_ASSERT(Index < size(), "Invalid access!");
  ------------------
  |  |   14|  19.2k|#define DEMANGLE_ASSERT(expr, msg) _LIBCXXABI_ASSERT(expr, msg)
  |  |  ------------------
  |  |  |  |   19|  19.2k|    do {                                                                                                               \
  |  |  |  |   20|  19.2k|      if (!(expr)) {                                                                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:11): [True: 0, False: 19.2k]
  |  |  |  |  ------------------
  |  |  |  |   21|      0|        char const* __msg = (msg);                                                                                     \
  |  |  |  |   22|      0|        ::__abort_message("%s:%d: %s", __FILE__, __LINE__, __msg);                                                     \
  |  |  |  |   23|      0|      }                                                                                                                \
  |  |  |  |   24|  19.2k|    } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (24:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  149|  19.2k|    return *(begin() + Index);
  150|  19.2k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm32EE5beginEv:
  138|  74.0k|  T *begin() { return First; }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E20parseUnqualifiedNameEPNS5_9NameStateEPNS0_4NodeEPNS0_10ModuleNameE:
 3164|   155k|    NameState *State, Node *Scope, ModuleName *Module) {
 3165|   155k|  if (getDerived().parseModuleNameOpt(Module))
  ------------------
  |  Branch (3165:7): [True: 0, False: 155k]
  ------------------
 3166|      0|    return nullptr;
 3167|       |
 3168|   155k|  bool IsMemberLikeFriend = Scope && consumeIf('F');
  ------------------
  |  Branch (3168:29): [True: 22.4k, False: 132k]
  |  Branch (3168:38): [True: 6.48k, False: 15.9k]
  ------------------
 3169|       |
 3170|   155k|  consumeIf('L');
 3171|       |
 3172|   155k|  Node *Result;
 3173|   155k|  if (look() >= '1' && look() <= '9') {
  ------------------
  |  Branch (3173:7): [True: 155k, False: 10]
  |  Branch (3173:24): [True: 114k, False: 40.7k]
  ------------------
 3174|   114k|    Result = getDerived().parseSourceName(State);
 3175|   114k|  } else if (look() == 'U') {
  ------------------
  |  Branch (3175:14): [True: 611, False: 40.1k]
  ------------------
 3176|    611|    Result = getDerived().parseUnnamedTypeName(State);
 3177|  40.1k|  } else if (consumeIf("DC")) {
  ------------------
  |  Branch (3177:14): [True: 339, False: 39.7k]
  ------------------
 3178|       |    // Structured binding
 3179|    339|    size_t BindingsBegin = Names.size();
 3180|    339|    do {
 3181|    339|      Node *Binding = getDerived().parseSourceName(State);
 3182|    339|      if (Binding == nullptr)
  ------------------
  |  Branch (3182:11): [True: 0, False: 339]
  ------------------
 3183|      0|        return nullptr;
 3184|    339|      Names.push_back(Binding);
 3185|    339|    } while (!consumeIf('E'));
  ------------------
  |  Branch (3185:14): [True: 0, False: 339]
  ------------------
 3186|    339|    Result = make<StructuredBindingName>(popTrailingNodeArray(BindingsBegin));
 3187|  39.7k|  } else if (look() == 'C' || look() == 'D') {
  ------------------
  |  Branch (3187:14): [True: 6.97k, False: 32.8k]
  |  Branch (3187:31): [True: 6.39k, False: 26.4k]
  ------------------
 3188|       |    // A <ctor-dtor-name>.
 3189|  13.3k|    if (Scope == nullptr || Module != nullptr)
  ------------------
  |  Branch (3189:9): [True: 0, False: 13.3k]
  |  Branch (3189:29): [True: 0, False: 13.3k]
  ------------------
 3190|      0|      return nullptr;
 3191|  13.3k|    Result = getDerived().parseCtorDtorName(Scope, State);
 3192|  26.4k|  } else {
 3193|  26.4k|    Result = getDerived().parseOperatorName(State);
 3194|  26.4k|  }
 3195|       |
 3196|   155k|  if (Result != nullptr && Module != nullptr)
  ------------------
  |  Branch (3196:7): [True: 152k, False: 2.73k]
  |  Branch (3196:28): [True: 0, False: 152k]
  ------------------
 3197|      0|    Result = make<ModuleEntity>(Module, Result);
 3198|   155k|  if (Result != nullptr)
  ------------------
  |  Branch (3198:7): [True: 152k, False: 2.73k]
  ------------------
 3199|   152k|    Result = getDerived().parseAbiTags(Result);
 3200|   155k|  if (Result != nullptr && IsMemberLikeFriend)
  ------------------
  |  Branch (3200:7): [True: 152k, False: 2.73k]
  |  Branch (3200:28): [True: 6.48k, False: 145k]
  ------------------
 3201|  6.48k|    Result = make<MemberLikeFriendName>(Scope, Result);
 3202|   148k|  else if (Result != nullptr && Scope != nullptr)
  ------------------
  |  Branch (3202:12): [True: 145k, False: 2.73k]
  |  Branch (3202:33): [True: 15.8k, False: 130k]
  ------------------
 3203|  15.8k|    Result = make<NestedName>(Scope, Result);
 3204|       |
 3205|   155k|  return Result;
 3206|   155k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_21StructuredBindingNameEJNS0_9NodeArrayEEEEPNS0_4NodeEDpOT0_:
 2827|    339|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|    339|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|    339|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle21StructuredBindingNameC2ENS0_9NodeArrayE:
 1843|    339|      : Node(KStructuredBindingName), Bindings(Bindings_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E17parseCtorDtorNameERPNS0_4NodeEPNS5_9NameStateE:
 3530|  13.3k|                                                          NameState *State) {
 3531|  13.3k|  if (SoFar->getKind() == Node::KSpecialSubstitution) {
  ------------------
  |  Branch (3531:7): [True: 6.50k, False: 6.86k]
  ------------------
 3532|       |    // Expand the special substitution.
 3533|  6.50k|    SoFar = make<ExpandedSpecialSubstitution>(
 3534|  6.50k|        static_cast<SpecialSubstitution *>(SoFar));
 3535|  6.50k|    if (!SoFar)
  ------------------
  |  Branch (3535:9): [True: 0, False: 6.50k]
  ------------------
 3536|      0|      return nullptr;
 3537|  6.50k|  }
 3538|       |
 3539|  13.3k|  if (consumeIf('C')) {
  ------------------
  |  Branch (3539:7): [True: 6.97k, False: 6.39k]
  ------------------
 3540|  6.97k|    bool IsInherited = consumeIf('I');
 3541|  6.97k|    if (look() != '1' && look() != '2' && look() != '3' && look() != '4' &&
  ------------------
  |  Branch (3541:9): [True: 532, False: 6.44k]
  |  Branch (3541:26): [True: 407, False: 125]
  |  Branch (3541:43): [True: 154, False: 253]
  |  Branch (3541:60): [True: 121, False: 33]
  ------------------
 3542|  6.97k|        look() != '5')
  ------------------
  |  Branch (3542:9): [True: 0, False: 121]
  ------------------
 3543|      0|      return nullptr;
 3544|  6.97k|    int Variant = look() - '0';
 3545|  6.97k|    ++First;
 3546|  6.97k|    if (State) State->CtorDtorConversion = true;
  ------------------
  |  Branch (3546:9): [True: 0, False: 6.97k]
  ------------------
 3547|  6.97k|    if (IsInherited) {
  ------------------
  |  Branch (3547:9): [True: 22, False: 6.95k]
  ------------------
 3548|     22|      if (getDerived().parseName(State) == nullptr)
  ------------------
  |  Branch (3548:11): [True: 0, False: 22]
  ------------------
 3549|      0|        return nullptr;
 3550|     22|    }
 3551|  6.97k|    return make<CtorDtorName>(SoFar, /*IsDtor=*/false, Variant);
 3552|  6.97k|  }
 3553|       |
 3554|  6.39k|  if (look() == 'D' && (look(1) == '0' || look(1) == '1' || look(1) == '2' ||
  ------------------
  |  Branch (3554:7): [True: 6.39k, False: 0]
  |  Branch (3554:25): [True: 1.96k, False: 4.42k]
  |  Branch (3554:43): [True: 1.96k, False: 2.45k]
  |  Branch (3554:61): [True: 9, False: 2.45k]
  ------------------
 3555|  6.39k|                        look(1) == '4' || look(1) == '5')) {
  ------------------
  |  Branch (3555:25): [True: 0, False: 2.45k]
  |  Branch (3555:43): [True: 2.45k, False: 0]
  ------------------
 3556|  6.39k|    int Variant = look(1) - '0';
 3557|  6.39k|    First += 2;
 3558|  6.39k|    if (State) State->CtorDtorConversion = true;
  ------------------
  |  Branch (3558:9): [True: 0, False: 6.39k]
  ------------------
 3559|  6.39k|    return make<CtorDtorName>(SoFar, /*IsDtor=*/true, Variant);
 3560|  6.39k|  }
 3561|       |
 3562|      0|  return nullptr;
 3563|  6.39k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_27ExpandedSpecialSubstitutionEJPNS0_19SpecialSubstitutionEEEEPNS0_4NodeEDpOT0_:
 2827|  6.50k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  6.50k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  6.50k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle27ExpandedSpecialSubstitutionC2EPKNS0_19SpecialSubstitutionE:
 1739|  6.50k|    : ExpandedSpecialSubstitution(SS->SSK) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle27ExpandedSpecialSubstitutionC2ENS0_14SpecialSubKindE:
 1675|  6.50k|      : ExpandedSpecialSubstitution(SSK_, KExpandedSpecialSubstitution) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_12CtorDtorNameEJRPNS0_4NodeEbRiEEES9_DpOT0_:
 2827|  13.3k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  13.3k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  13.3k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle12CtorDtorNameC2EPKNS0_4NodeEbi:
 1748|  13.3k|      : Node(KCtorDtorName), Basename(Basename_), IsDtor(IsDtor_),
 1749|  13.3k|        Variant(Variant_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_20MemberLikeFriendNameEJRPNS0_4NodeESA_EEES9_DpOT0_:
 2827|  6.48k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  6.48k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  6.48k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle20MemberLikeFriendNameC2EPNS0_4NodeES3_:
 1084|  6.48k|      : Node(KMemberLikeFriendName), Qual(Qual_), Name(Name_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_10NestedNameEJRPNS0_4NodeESA_EEES9_DpOT0_:
 2827|  15.8k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  15.8k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  15.8k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle10NestedNameC2EPNS0_4NodeES3_:
 1066|  15.8k|      : Node(KNestedName), Qual(Qual_), Name(Name_) {}
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm32EE5emptyEv:
  141|  11.8k|  bool empty() const { return First == Last; }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm32EE8pop_backEv:
  128|  9.16k|  void pop_back() {
  129|  9.16k|    DEMANGLE_ASSERT(Last != First, "Popping empty vector!");
  ------------------
  |  |   14|  9.16k|#define DEMANGLE_ASSERT(expr, msg) _LIBCXXABI_ASSERT(expr, msg)
  |  |  ------------------
  |  |  |  |   19|  9.16k|    do {                                                                                                               \
  |  |  |  |   20|  9.16k|      if (!(expr)) {                                                                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:11): [True: 0, False: 9.16k]
  |  |  |  |  ------------------
  |  |  |  |   21|      0|        char const* __msg = (msg);                                                                                     \
  |  |  |  |   22|      0|        ::__abort_message("%s:%d: %s", __FILE__, __LINE__, __msg);                                                     \
  |  |  |  |   23|      0|      }                                                                                                                \
  |  |  |  |   24|  9.16k|    } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (24:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  130|  9.16k|    --Last;
  131|  9.16k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E14parseLocalNameEPNS5_9NameStateE:
 3082|  9.65k|Node *AbstractManglingParser<Derived, Alloc>::parseLocalName(NameState *State) {
 3083|  9.65k|  if (!consumeIf('Z'))
  ------------------
  |  Branch (3083:7): [True: 0, False: 9.65k]
  ------------------
 3084|      0|    return nullptr;
 3085|  9.65k|  Node *Encoding = getDerived().parseEncoding();
 3086|  9.65k|  if (Encoding == nullptr || !consumeIf('E'))
  ------------------
  |  Branch (3086:7): [True: 5.89k, False: 3.75k]
  |  Branch (3086:30): [True: 3, False: 3.75k]
  ------------------
 3087|  5.90k|    return nullptr;
 3088|       |
 3089|  3.75k|  if (consumeIf('s')) {
  ------------------
  |  Branch (3089:7): [True: 1.72k, False: 2.02k]
  ------------------
 3090|  1.72k|    First = parse_discriminator(First, Last);
 3091|  1.72k|    auto *StringLitName = make<NameType>("string literal");
 3092|  1.72k|    if (!StringLitName)
  ------------------
  |  Branch (3092:9): [True: 0, False: 1.72k]
  ------------------
 3093|      0|      return nullptr;
 3094|  1.72k|    return make<LocalName>(Encoding, StringLitName);
 3095|  1.72k|  }
 3096|       |
 3097|       |  // The template parameters of the inner name are unrelated to those of the
 3098|       |  // enclosing context.
 3099|  2.02k|  SaveTemplateParams SaveTemplateParamsScope(this);
 3100|       |
 3101|  2.02k|  if (consumeIf('d')) {
  ------------------
  |  Branch (3101:7): [True: 0, False: 2.02k]
  ------------------
 3102|      0|    parseNumber(true);
 3103|      0|    if (!consumeIf('_'))
  ------------------
  |  Branch (3103:9): [True: 0, False: 0]
  ------------------
 3104|      0|      return nullptr;
 3105|      0|    Node *N = getDerived().parseName(State);
 3106|      0|    if (N == nullptr)
  ------------------
  |  Branch (3106:9): [True: 0, False: 0]
  ------------------
 3107|      0|      return nullptr;
 3108|      0|    return make<LocalName>(Encoding, N);
 3109|      0|  }
 3110|       |
 3111|  2.02k|  Node *Entity = getDerived().parseName(State);
 3112|  2.02k|  if (Entity == nullptr)
  ------------------
  |  Branch (3112:7): [True: 15, False: 2.01k]
  ------------------
 3113|     15|    return nullptr;
 3114|  2.01k|  First = parse_discriminator(First, Last);
 3115|  2.01k|  return make<LocalName>(Encoding, Entity);
 3116|  2.02k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_8NameTypeEJRA15_KcEEEPNS0_4NodeEDpOT0_:
 2827|  62.9k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  62.9k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  62.9k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_9LocalNameEJRPNS0_4NodeESA_EEES9_DpOT0_:
 2827|  3.73k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  3.73k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  3.73k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle9LocalNameC2EPNS0_4NodeES3_:
 1142|  3.73k|      : Node(KLocalName), Encoding(Encoding_), Entity(Entity_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E17parseUnscopedNameEPNS5_9NameStateEPb:
 3124|   170k|                                                          bool *IsSubst) {
 3125|       |
 3126|   170k|  Node *Std = nullptr;
 3127|   170k|  if (consumeIf("St")) {
  ------------------
  |  Branch (3127:7): [True: 6.58k, False: 164k]
  ------------------
 3128|  6.58k|    Std = make<NameType>("std");
 3129|  6.58k|    if (Std == nullptr)
  ------------------
  |  Branch (3129:9): [True: 0, False: 6.58k]
  ------------------
 3130|      0|      return nullptr;
 3131|  6.58k|  }
 3132|       |
 3133|   170k|  Node *Res = nullptr;
 3134|   170k|  ModuleName *Module = nullptr;
 3135|   170k|  if (look() == 'S') {
  ------------------
  |  Branch (3135:7): [True: 31.5k, False: 139k]
  ------------------
 3136|  31.5k|    Node *S = getDerived().parseSubstitution();
 3137|  31.5k|    if (!S)
  ------------------
  |  Branch (3137:9): [True: 0, False: 31.5k]
  ------------------
 3138|      0|      return nullptr;
 3139|  31.5k|    if (S->getKind() == Node::KModuleName)
  ------------------
  |  Branch (3139:9): [True: 0, False: 31.5k]
  ------------------
 3140|      0|      Module = static_cast<ModuleName *>(S);
 3141|  31.5k|    else if (IsSubst && Std == nullptr) {
  ------------------
  |  Branch (3141:14): [True: 31.5k, False: 0]
  |  Branch (3141:25): [True: 31.5k, False: 0]
  ------------------
 3142|  31.5k|      Res = S;
 3143|  31.5k|      *IsSubst = true;
 3144|  31.5k|    } else {
 3145|      0|      return nullptr;
 3146|      0|    }
 3147|  31.5k|  }
 3148|       |
 3149|   170k|  if (Res == nullptr || Std != nullptr) {
  ------------------
  |  Branch (3149:7): [True: 139k, False: 31.5k]
  |  Branch (3149:25): [True: 0, False: 31.5k]
  ------------------
 3150|   139k|    Res = getDerived().parseUnqualifiedName(State, Std, Module);
 3151|   139k|  }
 3152|       |
 3153|   170k|  return Res;
 3154|   170k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E17parseTemplateArgsEb:
 6084|  10.6k|AbstractManglingParser<Derived, Alloc>::parseTemplateArgs(bool TagTemplates) {
 6085|  10.6k|  if (!consumeIf('I'))
  ------------------
  |  Branch (6085:7): [True: 0, False: 10.6k]
  ------------------
 6086|      0|    return nullptr;
 6087|       |
 6088|       |  // <template-params> refer to the innermost <template-args>. Clear out any
 6089|       |  // outer args that we may have inserted into TemplateParams.
 6090|  10.6k|  if (TagTemplates) {
  ------------------
  |  Branch (6090:7): [True: 1.63k, False: 9.01k]
  ------------------
 6091|  1.63k|    TemplateParams.clear();
 6092|  1.63k|    TemplateParams.push_back(&OuterTemplateParams);
 6093|  1.63k|    OuterTemplateParams.clear();
 6094|  1.63k|  }
 6095|       |
 6096|  10.6k|  size_t ArgsBegin = Names.size();
 6097|  10.6k|  Node *Requires = nullptr;
 6098|   248k|  while (!consumeIf('E')) {
  ------------------
  |  Branch (6098:10): [True: 239k, False: 9.02k]
  ------------------
 6099|   239k|    if (TagTemplates) {
  ------------------
  |  Branch (6099:9): [True: 15.7k, False: 223k]
  ------------------
 6100|  15.7k|      Node *Arg = getDerived().parseTemplateArg();
 6101|  15.7k|      if (Arg == nullptr)
  ------------------
  |  Branch (6101:11): [True: 1.30k, False: 14.4k]
  ------------------
 6102|  1.30k|        return nullptr;
 6103|  14.4k|      Names.push_back(Arg);
 6104|  14.4k|      Node *TableEntry = Arg;
 6105|  14.4k|      if (Arg->getKind() == Node::KTemplateParamQualifiedArg) {
  ------------------
  |  Branch (6105:11): [True: 0, False: 14.4k]
  ------------------
 6106|      0|        TableEntry =
 6107|      0|            static_cast<TemplateParamQualifiedArg *>(TableEntry)->getArg();
 6108|      0|      }
 6109|  14.4k|      if (Arg->getKind() == Node::KTemplateArgumentPack) {
  ------------------
  |  Branch (6109:11): [True: 327, False: 14.1k]
  ------------------
 6110|    327|        TableEntry = make<ParameterPack>(
 6111|    327|            static_cast<TemplateArgumentPack*>(TableEntry)->getElements());
 6112|    327|        if (!TableEntry)
  ------------------
  |  Branch (6112:13): [True: 0, False: 327]
  ------------------
 6113|      0|          return nullptr;
 6114|    327|      }
 6115|  14.4k|      OuterTemplateParams.push_back(TableEntry);
 6116|   223k|    } else {
 6117|   223k|      Node *Arg = getDerived().parseTemplateArg();
 6118|   223k|      if (Arg == nullptr)
  ------------------
  |  Branch (6118:11): [True: 323, False: 223k]
  ------------------
 6119|    323|        return nullptr;
 6120|   223k|      Names.push_back(Arg);
 6121|   223k|    }
 6122|   237k|    if (consumeIf('Q')) {
  ------------------
  |  Branch (6122:9): [True: 0, False: 237k]
  ------------------
 6123|      0|      Requires = getDerived().parseConstraintExpr();
 6124|      0|      if (!Requires || !consumeIf('E'))
  ------------------
  |  Branch (6124:11): [True: 0, False: 0]
  |  Branch (6124:24): [True: 0, False: 0]
  ------------------
 6125|      0|        return nullptr;
 6126|      0|      break;
 6127|      0|    }
 6128|   237k|  }
 6129|  9.02k|  return make<TemplateArgs>(popTrailingNodeArray(ArgsBegin), Requires);
 6130|  10.6k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_13ParameterPackEJNS0_9NodeArrayEEEEPNS0_4NodeEDpOT0_:
 2827|    327|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|    327|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|    327|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle13ParameterPackC2ENS0_9NodeArrayE:
 1407|    327|  ParameterPack(NodeArray Data_) : Node(KParameterPack), Data(Data_) {
 1408|    327|    ArrayCache = FunctionCache = RHSComponentCache = Cache::Unknown;
 1409|    327|    if (std::all_of(Data.begin(), Data.end(),
  ------------------
  |  Branch (1409:9): [True: 6, False: 321]
  ------------------
 1410|    327|                    [](Node *P) { return P->getArrayCache() == Cache::No; }))
 1411|      6|      ArrayCache = Cache::No;
 1412|    327|    if (std::all_of(Data.begin(), Data.end(),
  ------------------
  |  Branch (1412:9): [True: 6, False: 321]
  ------------------
 1413|    327|                    [](Node *P) { return P->getFunctionCache() == Cache::No; }))
 1414|      6|      FunctionCache = Cache::No;
 1415|    327|    if (std::all_of(Data.begin(), Data.end(), [](Node *P) {
  ------------------
  |  Branch (1415:9): [True: 6, False: 321]
  ------------------
 1416|    327|          return P->getRHSComponentCache() == Cache::No;
 1417|    327|        }))
 1418|      6|      RHSComponentCache = Cache::No;
 1419|    327|  }
cxa_demangle.cpp:_ZZN12_GLOBAL__N_116itanium_demangle13ParameterPackC1ENS0_9NodeArrayEENKUlPNS0_4NodeEE_clES4_:
 1410|  18.3k|                    [](Node *P) { return P->getArrayCache() == Cache::No; }))
cxa_demangle.cpp:_ZZN12_GLOBAL__N_116itanium_demangle13ParameterPackC1ENS0_9NodeArrayEENKUlPNS0_4NodeEE0_clES4_:
 1413|  18.3k|                    [](Node *P) { return P->getFunctionCache() == Cache::No; }))
cxa_demangle.cpp:_ZZN12_GLOBAL__N_116itanium_demangle13ParameterPackC1ENS0_9NodeArrayEENKUlPNS0_4NodeEE1_clES4_:
 1415|  8.06k|    if (std::all_of(Data.begin(), Data.end(), [](Node *P) {
 1416|  8.06k|          return P->getRHSComponentCache() == Cache::No;
 1417|  8.06k|        }))
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle20TemplateArgumentPack11getElementsEv:
 1471|    327|  NodeArray getElements() const { return Elements; }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_12TemplateArgsEJNS0_9NodeArrayERPNS0_4NodeEEEESA_DpOT0_:
 2827|  9.02k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  9.02k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  9.02k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle12TemplateArgsC2ENS0_9NodeArrayEPNS0_4NodeE:
 1530|  9.02k|      : Node(KTemplateArgs), Params(Params_), Requires(Requires_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_20NameWithTemplateArgsEJRPNS0_4NodeESA_EEES9_DpOT0_:
 2827|  8.70k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  8.70k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  8.70k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle20NameWithTemplateArgsC2EPNS0_4NodeES3_:
 1628|  8.70k|      : Node(KNameWithTemplateArgs), Name(Name_), TemplateArgs(TemplateArgs_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E26resolveForwardTemplateRefsERNS5_9NameStateE:
 2934|  3.84k|  bool resolveForwardTemplateRefs(NameState &State) {
 2935|  3.84k|    size_t I = State.ForwardTemplateRefsBegin;
 2936|  3.84k|    size_t E = ForwardTemplateRefs.size();
 2937|  3.84k|    for (; I < E; ++I) {
  ------------------
  |  Branch (2937:12): [True: 2, False: 3.84k]
  ------------------
 2938|      2|      size_t Idx = ForwardTemplateRefs[I]->Index;
 2939|      2|      if (TemplateParams.empty() || !TemplateParams[0] ||
  ------------------
  |  Branch (2939:11): [True: 0, False: 2]
  |  Branch (2939:37): [True: 0, False: 2]
  ------------------
 2940|      2|          Idx >= TemplateParams[0]->size())
  ------------------
  |  Branch (2940:11): [True: 0, False: 2]
  ------------------
 2941|      0|        return true;
 2942|      2|      ForwardTemplateRefs[I]->Ref = (*TemplateParams[0])[Idx];
 2943|      2|    }
 2944|  3.84k|    ForwardTemplateRefs.shrinkToSize(State.ForwardTemplateRefsBegin);
 2945|  3.84k|    return false;
 2946|  3.84k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_24ForwardTemplateReferenceELm4EEixEm:
  147|      4|  T &operator[](size_t Index) {
  148|      4|    DEMANGLE_ASSERT(Index < size(), "Invalid access!");
  ------------------
  |  |   14|      4|#define DEMANGLE_ASSERT(expr, msg) _LIBCXXABI_ASSERT(expr, msg)
  |  |  ------------------
  |  |  |  |   19|      4|    do {                                                                                                               \
  |  |  |  |   20|      4|      if (!(expr)) {                                                                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:11): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  |   21|      0|        char const* __msg = (msg);                                                                                     \
  |  |  |  |   22|      0|        ::__abort_message("%s:%d: %s", __FILE__, __LINE__, __msg);                                                     \
  |  |  |  |   23|      0|      }                                                                                                                \
  |  |  |  |   24|      4|    } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (24:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  149|      4|    return *(begin() + Index);
  150|      4|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_24ForwardTemplateReferenceELm4EE5beginEv:
  138|      4|  T *begin() { return First; }
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS1_IPNS0_4NodeELm8EEELm4EE5emptyEv:
  141|      2|  bool empty() const { return First == Last; }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_24ForwardTemplateReferenceELm4EE12shrinkToSizeEm:
  133|  3.84k|  void shrinkToSize(size_t Index) {
  134|  3.84k|    DEMANGLE_ASSERT(Index <= size(), "shrinkToSize() can't expand!");
  ------------------
  |  |   14|  3.84k|#define DEMANGLE_ASSERT(expr, msg) _LIBCXXABI_ASSERT(expr, msg)
  |  |  ------------------
  |  |  |  |   19|  3.84k|    do {                                                                                                               \
  |  |  |  |   20|  3.84k|      if (!(expr)) {                                                                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:11): [True: 0, False: 3.84k]
  |  |  |  |  ------------------
  |  |  |  |   21|      0|        char const* __msg = (msg);                                                                                     \
  |  |  |  |   22|      0|        ::__abort_message("%s:%d: %s", __FILE__, __LINE__, __msg);                                                     \
  |  |  |  |   23|      0|      }                                                                                                                \
  |  |  |  |   24|  3.84k|    } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (24:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  135|  3.84k|    Last = First + Index;
  136|  3.84k|  }
cxa_demangle.cpp:_ZZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E13parseEncodingEbENKUlvE_clEv:
 5639|  1.46M|  auto IsEndOfEncoding = [&] {
 5640|       |    // The set of chars that can potentially follow an <encoding> (none of which
 5641|       |    // can start a <type>). Enumerating these allows us to avoid speculative
 5642|       |    // parsing.
 5643|  1.46M|    return numLeft() == 0 || look() == 'E' || look() == '.' || look() == '_';
  ------------------
  |  Branch (5643:12): [True: 2, False: 1.46M]
  |  Branch (5643:30): [True: 2.08k, False: 1.46M]
  |  Branch (5643:47): [True: 0, False: 1.46M]
  |  Branch (5643:64): [True: 2, False: 1.46M]
  ------------------
 5644|  1.46M|  };
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E7consumeEv:
 2863|   265k|  char consume() { return First != Last ? *First++ : '\0'; }
  ------------------
  |  Branch (2863:27): [True: 265k, False: 0]
  ------------------
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm32EE4sizeEv:
  142|  1.67M|  size_t size() const { return static_cast<size_t>(Last - First); }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E16parseTemplateArgEv:
 6030|   962k|Node *AbstractManglingParser<Derived, Alloc>::parseTemplateArg() {
 6031|   962k|  switch (look()) {
 6032|    415|  case 'X': {
  ------------------
  |  Branch (6032:3): [True: 415, False: 962k]
  ------------------
 6033|    415|    ++First;
 6034|    415|    Node *Arg = getDerived().parseExpr();
 6035|    415|    if (Arg == nullptr || !consumeIf('E'))
  ------------------
  |  Branch (6035:9): [True: 83, False: 332]
  |  Branch (6035:27): [True: 0, False: 332]
  ------------------
 6036|     83|      return nullptr;
 6037|    332|    return Arg;
 6038|    415|  }
 6039|    468|  case 'J': {
  ------------------
  |  Branch (6039:3): [True: 468, False: 962k]
  ------------------
 6040|    468|    ++First;
 6041|    468|    size_t ArgsBegin = Names.size();
 6042|   707k|    while (!consumeIf('E')) {
  ------------------
  |  Branch (6042:12): [True: 707k, False: 330]
  ------------------
 6043|   707k|      Node *Arg = getDerived().parseTemplateArg();
 6044|   707k|      if (Arg == nullptr)
  ------------------
  |  Branch (6044:11): [True: 138, False: 707k]
  ------------------
 6045|    138|        return nullptr;
 6046|   707k|      Names.push_back(Arg);
 6047|   707k|    }
 6048|    330|    NodeArray Args = popTrailingNodeArray(ArgsBegin);
 6049|    330|    return make<TemplateArgumentPack>(Args);
 6050|    468|  }
 6051|  39.1k|  case 'L': {
  ------------------
  |  Branch (6051:3): [True: 39.1k, False: 923k]
  ------------------
 6052|       |    //                ::= LZ <encoding> E           # extension
 6053|  39.1k|    if (look(1) == 'Z') {
  ------------------
  |  Branch (6053:9): [True: 0, False: 39.1k]
  ------------------
 6054|      0|      First += 2;
 6055|      0|      Node *Arg = getDerived().parseEncoding();
 6056|      0|      if (Arg == nullptr || !consumeIf('E'))
  ------------------
  |  Branch (6056:11): [True: 0, False: 0]
  |  Branch (6056:29): [True: 0, False: 0]
  ------------------
 6057|      0|        return nullptr;
 6058|      0|      return Arg;
 6059|      0|    }
 6060|       |    //                ::= <expr-primary>            # simple expressions
 6061|  39.1k|    return getDerived().parseExprPrimary();
 6062|  39.1k|  }
 6063|  1.02k|  case 'T': {
  ------------------
  |  Branch (6063:3): [True: 1.02k, False: 961k]
  ------------------
 6064|       |    // Either <template-param> or a <template-param-decl> <template-arg>.
 6065|  1.02k|    if (!getDerived().isTemplateParamDecl())
  ------------------
  |  Branch (6065:9): [True: 735, False: 288]
  ------------------
 6066|    735|      return getDerived().parseType();
 6067|    288|    Node *Param = getDerived().parseTemplateParamDecl(nullptr);
 6068|    288|    if (!Param)
  ------------------
  |  Branch (6068:9): [True: 0, False: 288]
  ------------------
 6069|      0|      return nullptr;
 6070|    288|    Node *Arg = getDerived().parseTemplateArg();
 6071|    288|    if (!Arg)
  ------------------
  |  Branch (6071:9): [True: 35, False: 253]
  ------------------
 6072|     35|      return nullptr;
 6073|    253|    return make<TemplateParamQualifiedArg>(Param, Arg);
 6074|    288|  }
 6075|   921k|  default:
  ------------------
  |  Branch (6075:3): [True: 921k, False: 41.0k]
  ------------------
 6076|   921k|    return getDerived().parseType();
 6077|   962k|  }
 6078|   962k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_20TemplateArgumentPackEJRNS0_9NodeArrayEEEEPNS0_4NodeEDpOT0_:
 2827|    330|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|    330|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|    330|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle20TemplateArgumentPackC2ENS0_9NodeArrayE:
 1467|    330|      : Node(KTemplateArgumentPack), Elements(Elements_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_25TemplateParamQualifiedArgEJRPNS0_4NodeESA_EEES9_DpOT0_:
 2827|    253|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|    253|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|    253|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle25TemplateParamQualifiedArgC2EPNS0_4NodeES3_:
 1268|    253|      : Node(KTemplateParamQualifiedArg), Param(Param_), Arg(Arg_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm32EE9push_backERKS3_:
  121|  4.71M|  void push_back(const T &Elem) {
  122|  4.71M|    if (Last == Cap)
  ------------------
  |  Branch (122:9): [True: 462, False: 4.71M]
  ------------------
  123|    462|      reserve(size() * 2);
  124|  4.71M|    *Last++ = Elem;
  125|  4.71M|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm32EE7reserveEm:
   56|    462|  void reserve(size_t NewCap) {
   57|    462|    size_t S = size();
   58|    462|    if (isInline()) {
  ------------------
  |  Branch (58:9): [True: 48, False: 414]
  ------------------
   59|     48|      auto *Tmp = static_cast<T *>(std::malloc(NewCap * sizeof(T)));
   60|     48|      if (Tmp == nullptr)
  ------------------
  |  Branch (60:11): [True: 0, False: 48]
  ------------------
   61|      0|        std::abort();
   62|     48|      std::copy(First, Last, Tmp);
   63|     48|      First = Tmp;
   64|    414|    } else {
   65|    414|      First = static_cast<T *>(std::realloc(First, NewCap * sizeof(T)));
   66|    414|      if (First == nullptr)
  ------------------
  |  Branch (66:11): [True: 0, False: 414]
  ------------------
   67|      0|        std::abort();
   68|    414|    }
   69|    462|    Last = First + S;
   70|    462|    Cap = First + NewCap;
   71|    462|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E20popTrailingNodeArrayEm:
 2839|  54.8k|  NodeArray popTrailingNodeArray(size_t FromPosition) {
 2840|  54.8k|    DEMANGLE_ASSERT(FromPosition <= Names.size(), "");
  ------------------
  |  |   14|  54.8k|#define DEMANGLE_ASSERT(expr, msg) _LIBCXXABI_ASSERT(expr, msg)
  |  |  ------------------
  |  |  |  |   19|  54.8k|    do {                                                                                                               \
  |  |  |  |   20|  54.8k|      if (!(expr)) {                                                                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:11): [True: 0, False: 54.8k]
  |  |  |  |  ------------------
  |  |  |  |   21|      0|        char const* __msg = (msg);                                                                                     \
  |  |  |  |   22|      0|        ::__abort_message("%s:%d: %s", __FILE__, __LINE__, __msg);                                                     \
  |  |  |  |   23|      0|      }                                                                                                                \
  |  |  |  |   24|  54.8k|    } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (24:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2841|  54.8k|    NodeArray res =
 2842|  54.8k|        makeNodeArray(Names.begin() + (long)FromPosition, Names.end());
 2843|  54.8k|    Names.shrinkToSize(FromPosition);
 2844|  54.8k|    return res;
 2845|  54.8k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E13makeNodeArrayIPPNS0_4NodeEEENS0_9NodeArrayET_SB_:
 2831|  54.8k|  template <class It> NodeArray makeNodeArray(It begin, It end) {
 2832|  54.8k|    size_t sz = static_cast<size_t>(end - begin);
 2833|  54.8k|    void *mem = ASTAllocator.allocateNodeArray(sz);
 2834|  54.8k|    Node **data = new (mem) Node *[sz];
 2835|  54.8k|    std::copy(begin, end, data);
 2836|  54.8k|    return NodeArray(data, sz);
 2837|  54.8k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle9NodeArrayC2EPPNS0_4NodeEm:
  322|  54.8k|      : Elements(Elements_), NumElements(NumElements_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm32EE3endEv:
  139|  54.8k|  T *end() { return Last; }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14PODSmallVectorIPNS0_4NodeELm32EE12shrinkToSizeEm:
  133|  54.8k|  void shrinkToSize(size_t Index) {
  134|  54.8k|    DEMANGLE_ASSERT(Index <= size(), "shrinkToSize() can't expand!");
  ------------------
  |  |   14|  54.8k|#define DEMANGLE_ASSERT(expr, msg) _LIBCXXABI_ASSERT(expr, msg)
  |  |  ------------------
  |  |  |  |   19|  54.8k|    do {                                                                                                               \
  |  |  |  |   20|  54.8k|      if (!(expr)) {                                                                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:11): [True: 0, False: 54.8k]
  |  |  |  |  ------------------
  |  |  |  |   21|      0|        char const* __msg = (msg);                                                                                     \
  |  |  |  |   22|      0|        ::__abort_message("%s:%d: %s", __FILE__, __LINE__, __msg);                                                     \
  |  |  |  |   23|      0|      }                                                                                                                \
  |  |  |  |   24|  54.8k|    } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (24:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  135|  54.8k|    Last = First + Index;
  136|  54.8k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle9NodeArrayC2Ev:
  320|  25.6k|  NodeArray() : Elements(nullptr), NumElements(0) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_23ExplicitObjectParameterEJRPNS0_4NodeEEEES9_DpOT0_:
 2827|    108|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|    108|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|    108|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle23ExplicitObjectParameterC2EPNS0_4NodeE:
  926|    108|      : Node(KExplicitObjectParameter), Base(Base_) {
  927|    108|    DEMANGLE_ASSERT(
  ------------------
  |  |   14|    108|#define DEMANGLE_ASSERT(expr, msg) _LIBCXXABI_ASSERT(expr, msg)
  |  |  ------------------
  |  |  |  |   19|    108|    do {                                                                                                               \
  |  |  |  |   20|    108|      if (!(expr)) {                                                                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:11): [True: 0, False: 108]
  |  |  |  |  ------------------
  |  |  |  |   21|      0|        char const* __msg = (msg);                                                                                     \
  |  |  |  |   22|      0|        ::__abort_message("%s:%d: %s", __FILE__, __LINE__, __msg);                                                     \
  |  |  |  |   23|      0|      }                                                                                                                \
  |  |  |  |   24|    108|    } while (false)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (24:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  928|    108|        Base != nullptr,
  929|    108|        "Creating an ExplicitObjectParameter without a valid Base Node.");
  930|    108|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E19parseConstraintExprEv:
 5041|      6|Node *AbstractManglingParser<Derived, Alloc>::parseConstraintExpr() {
 5042|       |  // Within this expression, all enclosing template parameter lists are in
 5043|       |  // scope.
 5044|      6|  ScopedOverride<bool> SaveIncompleteTemplateParameterTracking(
 5045|      6|      HasIncompleteTemplateParameterTracking, true);
 5046|      6|  return getDerived().parseExpr();
 5047|      6|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_16FunctionEncodingEJRPNS0_4NodeESA_RNS0_9NodeArrayESA_SA_RNS0_10QualifiersERNS0_15FunctionRefQualEEEES9_DpOT0_:
 2827|  2.08k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  2.08k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  2.08k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle16FunctionEncodingC2EPKNS0_4NodeES4_NS0_9NodeArrayES4_S4_NS0_10QualifiersENS0_15FunctionRefQualE:
  953|  2.08k|      : Node(KFunctionEncoding,
  954|  2.08k|             /*RHSComponentCache=*/Cache::Yes, /*ArrayCache=*/Cache::No,
  955|  2.08k|             /*FunctionCache=*/Cache::Yes),
  956|  2.08k|        Ret(Ret_), Name(Name_), Params(Params_), Attrs(Attrs_),
  957|  2.08k|        Requires(Requires_), CVQuals(CVQuals_), RefQual(RefQual_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E18SaveTemplateParamsD2Ev:
 2789|  15.0k|    ~SaveTemplateParams() {
 2790|  15.0k|      Parser->TemplateParams = std::move(OldParams);
 2791|  15.0k|      Parser->OuterTemplateParams = std::move(OldOuterParams);
 2792|  15.0k|    }
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4lookEj:
 2865|  16.2M|  char look(unsigned Lookahead = 0) const {
 2866|  16.2M|    if (static_cast<size_t>(Last - First) <= Lookahead)
  ------------------
  |  Branch (2866:9): [True: 24, False: 16.2M]
  ------------------
 2867|     24|      return '\0';
 2868|  16.2M|    return First[Lookahead];
 2869|  16.2M|  }
cxa_demangle.cpp:_ZNK12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E7numLeftEv:
 2871|  2.22M|  size_t numLeft() const { return static_cast<size_t>(Last - First); }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E9consumeIfEc:
 2855|  6.50M|  bool consumeIf(char C) {
 2856|  6.50M|    if (First != Last && *First == C) {
  ------------------
  |  Branch (2856:9): [True: 6.50M, False: 17]
  |  Branch (2856:26): [True: 1.11M, False: 5.39M]
  ------------------
 2857|  1.11M|      ++First;
 2858|  1.11M|      return true;
 2859|  1.11M|    }
 2860|  5.39M|    return false;
 2861|  6.50M|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E11parseNumberEb:
 3882|  89.9k|AbstractManglingParser<Alloc, Derived>::parseNumber(bool AllowNegative) {
 3883|  89.9k|  const char *Tmp = First;
 3884|  89.9k|  if (AllowNegative)
  ------------------
  |  Branch (3884:7): [True: 43.1k, False: 46.8k]
  ------------------
 3885|  43.1k|    consumeIf('n');
 3886|  89.9k|  if (numLeft() == 0 || !std::isdigit(*First))
  ------------------
  |  Branch (3886:7): [True: 0, False: 89.9k]
  |  Branch (3886:25): [True: 10.4k, False: 79.5k]
  ------------------
 3887|  10.4k|    return std::string_view();
 3888|   170k|  while (numLeft() != 0 && std::isdigit(*First))
  ------------------
  |  Branch (3888:10): [True: 170k, False: 0]
  |  Branch (3888:28): [True: 90.7k, False: 79.5k]
  ------------------
 3889|  90.7k|    ++First;
 3890|  79.5k|  return std::string_view(Tmp, First - Tmp);
 3891|  89.9k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E9parseTypeEv:
 4184|  4.59M|Node *AbstractManglingParser<Derived, Alloc>::parseType() {
 4185|  4.59M|  Node *Result = nullptr;
 4186|       |
 4187|  4.59M|  switch (look()) {
 4188|       |  //             ::= <qualified-type>
 4189|   158k|  case 'r':
  ------------------
  |  Branch (4189:3): [True: 158k, False: 4.43M]
  ------------------
 4190|   180k|  case 'V':
  ------------------
  |  Branch (4190:3): [True: 21.8k, False: 4.57M]
  ------------------
 4191|   195k|  case 'K': {
  ------------------
  |  Branch (4191:3): [True: 15.4k, False: 4.58M]
  ------------------
 4192|   195k|    unsigned AfterQuals = 0;
 4193|   195k|    if (look(AfterQuals) == 'r') ++AfterQuals;
  ------------------
  |  Branch (4193:9): [True: 158k, False: 37.3k]
  ------------------
 4194|   195k|    if (look(AfterQuals) == 'V') ++AfterQuals;
  ------------------
  |  Branch (4194:9): [True: 21.8k, False: 173k]
  ------------------
 4195|   195k|    if (look(AfterQuals) == 'K') ++AfterQuals;
  ------------------
  |  Branch (4195:9): [True: 15.4k, False: 180k]
  ------------------
 4196|       |
 4197|   195k|    if (look(AfterQuals) == 'F' ||
  ------------------
  |  Branch (4197:9): [True: 2.37k, False: 193k]
  ------------------
 4198|   195k|        (look(AfterQuals) == 'D' &&
  ------------------
  |  Branch (4198:10): [True: 688, False: 192k]
  ------------------
 4199|   193k|         (look(AfterQuals + 1) == 'o' || look(AfterQuals + 1) == 'O' ||
  ------------------
  |  Branch (4199:11): [True: 0, False: 688]
  |  Branch (4199:42): [True: 0, False: 688]
  ------------------
 4200|  2.37k|          look(AfterQuals + 1) == 'w' || look(AfterQuals + 1) == 'x'))) {
  ------------------
  |  Branch (4200:11): [True: 3, False: 685]
  |  Branch (4200:42): [True: 0, False: 685]
  ------------------
 4201|  2.37k|      Result = getDerived().parseFunctionType();
 4202|  2.37k|      break;
 4203|  2.37k|    }
 4204|   193k|    DEMANGLE_FALLTHROUGH;
  ------------------
  |  |   91|   193k|#define DEMANGLE_FALLTHROUGH [[gnu::fallthrough]]
  ------------------
 4205|   193k|  }
 4206|   251k|  case 'U': {
  ------------------
  |  Branch (4206:3): [True: 58.1k, False: 4.54M]
  ------------------
 4207|   251k|    Result = getDerived().parseQualifiedType();
 4208|   251k|    break;
 4209|   193k|  }
 4210|       |  // <builtin-type> ::= v    # void
 4211|  30.3k|  case 'v':
  ------------------
  |  Branch (4211:3): [True: 30.3k, False: 4.56M]
  ------------------
 4212|  30.3k|    ++First;
 4213|  30.3k|    return make<NameType>("void");
 4214|       |  //                ::= w    # wchar_t
 4215|   202k|  case 'w':
  ------------------
  |  Branch (4215:3): [True: 202k, False: 4.39M]
  ------------------
 4216|   202k|    ++First;
 4217|   202k|    return make<NameType>("wchar_t");
 4218|       |  //                ::= b    # bool
 4219|  23.3k|  case 'b':
  ------------------
  |  Branch (4219:3): [True: 23.3k, False: 4.57M]
  ------------------
 4220|  23.3k|    ++First;
 4221|  23.3k|    return make<NameType>("bool");
 4222|       |  //                ::= c    # char
 4223|   571k|  case 'c':
  ------------------
  |  Branch (4223:3): [True: 571k, False: 4.02M]
  ------------------
 4224|   571k|    ++First;
 4225|   571k|    return make<NameType>("char");
 4226|       |  //                ::= a    # signed char
 4227|   266k|  case 'a':
  ------------------
  |  Branch (4227:3): [True: 266k, False: 4.33M]
  ------------------
 4228|   266k|    ++First;
 4229|   266k|    return make<NameType>("signed char");
 4230|       |  //                ::= h    # unsigned char
 4231|   121k|  case 'h':
  ------------------
  |  Branch (4231:3): [True: 121k, False: 4.47M]
  ------------------
 4232|   121k|    ++First;
 4233|   121k|    return make<NameType>("unsigned char");
 4234|       |  //                ::= s    # short
 4235|  92.9k|  case 's':
  ------------------
  |  Branch (4235:3): [True: 92.9k, False: 4.50M]
  ------------------
 4236|  92.9k|    ++First;
 4237|  92.9k|    return make<NameType>("short");
 4238|       |  //                ::= t    # unsigned short
 4239|  59.3k|  case 't':
  ------------------
  |  Branch (4239:3): [True: 59.3k, False: 4.53M]
  ------------------
 4240|  59.3k|    ++First;
 4241|  59.3k|    return make<NameType>("unsigned short");
 4242|       |  //                ::= i    # int
 4243|  24.4k|  case 'i':
  ------------------
  |  Branch (4243:3): [True: 24.4k, False: 4.57M]
  ------------------
 4244|  24.4k|    ++First;
 4245|  24.4k|    return make<NameType>("int");
 4246|       |  //                ::= j    # unsigned int
 4247|  61.7k|  case 'j':
  ------------------
  |  Branch (4247:3): [True: 61.7k, False: 4.53M]
  ------------------
 4248|  61.7k|    ++First;
 4249|  61.7k|    return make<NameType>("unsigned int");
 4250|       |  //                ::= l    # long
 4251|   204k|  case 'l':
  ------------------
  |  Branch (4251:3): [True: 204k, False: 4.39M]
  ------------------
 4252|   204k|    ++First;
 4253|   204k|    return make<NameType>("long");
 4254|       |  //                ::= m    # unsigned long
 4255|   259k|  case 'm':
  ------------------
  |  Branch (4255:3): [True: 259k, False: 4.33M]
  ------------------
 4256|   259k|    ++First;
 4257|   259k|    return make<NameType>("unsigned long");
 4258|       |  //                ::= x    # long long, __int64
 4259|  30.0k|  case 'x':
  ------------------
  |  Branch (4259:3): [True: 30.0k, False: 4.56M]
  ------------------
 4260|  30.0k|    ++First;
 4261|  30.0k|    return make<NameType>("long long");
 4262|       |  //                ::= y    # unsigned long long, __int64
 4263|  83.4k|  case 'y':
  ------------------
  |  Branch (4263:3): [True: 83.4k, False: 4.51M]
  ------------------
 4264|  83.4k|    ++First;
 4265|  83.4k|    return make<NameType>("unsigned long long");
 4266|       |  //                ::= n    # __int128
 4267|   186k|  case 'n':
  ------------------
  |  Branch (4267:3): [True: 186k, False: 4.41M]
  ------------------
 4268|   186k|    ++First;
 4269|   186k|    return make<NameType>("__int128");
 4270|       |  //                ::= o    # unsigned __int128
 4271|   115k|  case 'o':
  ------------------
  |  Branch (4271:3): [True: 115k, False: 4.48M]
  ------------------
 4272|   115k|    ++First;
 4273|   115k|    return make<NameType>("unsigned __int128");
 4274|       |  //                ::= f    # float
 4275|  53.2k|  case 'f':
  ------------------
  |  Branch (4275:3): [True: 53.2k, False: 4.54M]
  ------------------
 4276|  53.2k|    ++First;
 4277|  53.2k|    return make<NameType>("float");
 4278|       |  //                ::= d    # double
 4279|   194k|  case 'd':
  ------------------
  |  Branch (4279:3): [True: 194k, False: 4.40M]
  ------------------
 4280|   194k|    ++First;
 4281|   194k|    return make<NameType>("double");
 4282|       |  //                ::= e    # long double, __float80
 4283|  91.6k|  case 'e':
  ------------------
  |  Branch (4283:3): [True: 91.6k, False: 4.50M]
  ------------------
 4284|  91.6k|    ++First;
 4285|  91.6k|    return make<NameType>("long double");
 4286|       |  //                ::= g    # __float128
 4287|   513k|  case 'g':
  ------------------
  |  Branch (4287:3): [True: 513k, False: 4.08M]
  ------------------
 4288|   513k|    ++First;
 4289|   513k|    return make<NameType>("__float128");
 4290|       |  //                ::= z    # ellipsis
 4291|   304k|  case 'z':
  ------------------
  |  Branch (4291:3): [True: 304k, False: 4.29M]
  ------------------
 4292|   304k|    ++First;
 4293|   304k|    return make<NameType>("...");
 4294|       |
 4295|       |  // <builtin-type> ::= u <source-name>    # vendor extended type
 4296|  10.9k|  case 'u': {
  ------------------
  |  Branch (4296:3): [True: 10.9k, False: 4.58M]
  ------------------
 4297|  10.9k|    ++First;
 4298|  10.9k|    std::string_view Res = parseBareSourceName();
 4299|  10.9k|    if (Res.empty())
  ------------------
  |  Branch (4299:9): [True: 0, False: 10.9k]
  ------------------
 4300|      0|      return nullptr;
 4301|       |    // Typically, <builtin-type>s are not considered substitution candidates,
 4302|       |    // but the exception to that exception is vendor extended types (Itanium C++
 4303|       |    // ABI 5.9.1).
 4304|  10.9k|    if (consumeIf('I')) {
  ------------------
  |  Branch (4304:9): [True: 6.13k, False: 4.81k]
  ------------------
 4305|  6.13k|      Node *BaseType = parseType();
 4306|  6.13k|      if (BaseType == nullptr)
  ------------------
  |  Branch (4306:11): [True: 6.13k, False: 1]
  ------------------
 4307|  6.13k|        return nullptr;
 4308|      1|      if (!consumeIf('E'))
  ------------------
  |  Branch (4308:11): [True: 1, False: 0]
  ------------------
 4309|      1|        return nullptr;
 4310|      0|      Result = make<TransformedType>(Res, BaseType);
 4311|      0|    } else
 4312|  4.81k|      Result = make<NameType>(Res);
 4313|  4.81k|    break;
 4314|  10.9k|  }
 4315|  50.4k|  case 'D':
  ------------------
  |  Branch (4315:3): [True: 50.4k, False: 4.54M]
  ------------------
 4316|  50.4k|    switch (look(1)) {
  ------------------
  |  Branch (4316:13): [True: 1, False: 50.4k]
  ------------------
 4317|       |    //                ::= Dd   # IEEE 754r decimal floating point (64 bits)
 4318|  10.9k|    case 'd':
  ------------------
  |  Branch (4318:5): [True: 10.9k, False: 39.5k]
  ------------------
 4319|  10.9k|      First += 2;
 4320|  10.9k|      return make<NameType>("decimal64");
 4321|       |    //                ::= De   # IEEE 754r decimal floating point (128 bits)
 4322|      3|    case 'e':
  ------------------
  |  Branch (4322:5): [True: 3, False: 50.4k]
  ------------------
 4323|      3|      First += 2;
 4324|      3|      return make<NameType>("decimal128");
 4325|       |    //                ::= Df   # IEEE 754r decimal floating point (32 bits)
 4326|      0|    case 'f':
  ------------------
  |  Branch (4326:5): [True: 0, False: 50.4k]
  ------------------
 4327|      0|      First += 2;
 4328|      0|      return make<NameType>("decimal32");
 4329|       |    //                ::= Dh   # IEEE 754r half-precision floating point (16 bits)
 4330|      0|    case 'h':
  ------------------
  |  Branch (4330:5): [True: 0, False: 50.4k]
  ------------------
 4331|      0|      First += 2;
 4332|      0|      return make<NameType>("half");
 4333|       |    //       ::= DF16b         # C++23 std::bfloat16_t
 4334|       |    //       ::= DF <number> _ # ISO/IEC TS 18661 binary floating point (N bits)
 4335|      0|    case 'F': {
  ------------------
  |  Branch (4335:5): [True: 0, False: 50.4k]
  ------------------
 4336|      0|      First += 2;
 4337|      0|      if (consumeIf("16b"))
  ------------------
  |  Branch (4337:11): [True: 0, False: 0]
  ------------------
 4338|      0|        return make<NameType>("std::bfloat16_t");
 4339|      0|      Node *DimensionNumber = make<NameType>(parseNumber());
 4340|      0|      if (!DimensionNumber)
  ------------------
  |  Branch (4340:11): [True: 0, False: 0]
  ------------------
 4341|      0|        return nullptr;
 4342|      0|      if (!consumeIf('_'))
  ------------------
  |  Branch (4342:11): [True: 0, False: 0]
  ------------------
 4343|      0|        return nullptr;
 4344|      0|      return make<BinaryFPType>(DimensionNumber);
 4345|      0|    }
 4346|       |    //                ::= [DS] DA  # N1169 fixed-point [_Sat] T _Accum
 4347|       |    //                ::= [DS] DR  # N1169 fixed-point [_Sat] T _Frac
 4348|       |    // <fixed-point-size>
 4349|       |    //                ::= s # short
 4350|       |    //                ::= t # unsigned short
 4351|       |    //                ::= i # plain
 4352|       |    //                ::= j # unsigned
 4353|       |    //                ::= l # long
 4354|       |    //                ::= m # unsigned long
 4355|      0|    case 'A': {
  ------------------
  |  Branch (4355:5): [True: 0, False: 50.4k]
  ------------------
 4356|      0|      char c = look(2);
 4357|      0|      First += 3;
 4358|      0|      switch (c) {
 4359|      0|      case 's':
  ------------------
  |  Branch (4359:7): [True: 0, False: 0]
  ------------------
 4360|      0|        return make<NameType>("short _Accum");
 4361|      0|      case 't':
  ------------------
  |  Branch (4361:7): [True: 0, False: 0]
  ------------------
 4362|      0|        return make<NameType>("unsigned short _Accum");
 4363|      0|      case 'i':
  ------------------
  |  Branch (4363:7): [True: 0, False: 0]
  ------------------
 4364|      0|        return make<NameType>("_Accum");
 4365|      0|      case 'j':
  ------------------
  |  Branch (4365:7): [True: 0, False: 0]
  ------------------
 4366|      0|        return make<NameType>("unsigned _Accum");
 4367|      0|      case 'l':
  ------------------
  |  Branch (4367:7): [True: 0, False: 0]
  ------------------
 4368|      0|        return make<NameType>("long _Accum");
 4369|      0|      case 'm':
  ------------------
  |  Branch (4369:7): [True: 0, False: 0]
  ------------------
 4370|      0|        return make<NameType>("unsigned long _Accum");
 4371|      0|      default:
  ------------------
  |  Branch (4371:7): [True: 0, False: 0]
  ------------------
 4372|      0|        return nullptr;
 4373|      0|      }
 4374|      0|    }
 4375|  4.71k|    case 'R': {
  ------------------
  |  Branch (4375:5): [True: 4.71k, False: 45.7k]
  ------------------
 4376|  4.71k|      char c = look(2);
 4377|  4.71k|      First += 3;
 4378|  4.71k|      switch (c) {
 4379|  3.93k|      case 's':
  ------------------
  |  Branch (4379:7): [True: 3.93k, False: 782]
  ------------------
 4380|  3.93k|        return make<NameType>("short _Fract");
 4381|    606|      case 't':
  ------------------
  |  Branch (4381:7): [True: 606, False: 4.11k]
  ------------------
 4382|    606|        return make<NameType>("unsigned short _Fract");
 4383|      0|      case 'i':
  ------------------
  |  Branch (4383:7): [True: 0, False: 4.71k]
  ------------------
 4384|      0|        return make<NameType>("_Fract");
 4385|    176|      case 'j':
  ------------------
  |  Branch (4385:7): [True: 176, False: 4.54k]
  ------------------
 4386|    176|        return make<NameType>("unsigned _Fract");
 4387|      0|      case 'l':
  ------------------
  |  Branch (4387:7): [True: 0, False: 4.71k]
  ------------------
 4388|      0|        return make<NameType>("long _Fract");
 4389|      0|      case 'm':
  ------------------
  |  Branch (4389:7): [True: 0, False: 4.71k]
  ------------------
 4390|      0|        return make<NameType>("unsigned long _Fract");
 4391|      0|      default:
  ------------------
  |  Branch (4391:7): [True: 0, False: 4.71k]
  ------------------
 4392|      0|        return nullptr;
 4393|  4.71k|      }
 4394|  4.71k|    }
 4395|  3.30k|    case 'S': {
  ------------------
  |  Branch (4395:5): [True: 3.30k, False: 47.1k]
  ------------------
 4396|  3.30k|      First += 2;
 4397|  3.30k|      if (look() != 'D')
  ------------------
  |  Branch (4397:11): [True: 0, False: 3.30k]
  ------------------
 4398|      0|        return nullptr;
 4399|  3.30k|      if (look(1) == 'A') {
  ------------------
  |  Branch (4399:11): [True: 0, False: 3.30k]
  ------------------
 4400|      0|        char c = look(2);
 4401|      0|        First += 3;
 4402|      0|        switch (c) {
 4403|      0|        case 's':
  ------------------
  |  Branch (4403:9): [True: 0, False: 0]
  ------------------
 4404|      0|          return make<NameType>("_Sat short _Accum");
 4405|      0|        case 't':
  ------------------
  |  Branch (4405:9): [True: 0, False: 0]
  ------------------
 4406|      0|          return make<NameType>("_Sat unsigned short _Accum");
 4407|      0|        case 'i':
  ------------------
  |  Branch (4407:9): [True: 0, False: 0]
  ------------------
 4408|      0|          return make<NameType>("_Sat _Accum");
 4409|      0|        case 'j':
  ------------------
  |  Branch (4409:9): [True: 0, False: 0]
  ------------------
 4410|      0|          return make<NameType>("_Sat unsigned _Accum");
 4411|      0|        case 'l':
  ------------------
  |  Branch (4411:9): [True: 0, False: 0]
  ------------------
 4412|      0|          return make<NameType>("_Sat long _Accum");
 4413|      0|        case 'm':
  ------------------
  |  Branch (4413:9): [True: 0, False: 0]
  ------------------
 4414|      0|          return make<NameType>("_Sat unsigned long _Accum");
 4415|      0|        default:
  ------------------
  |  Branch (4415:9): [True: 0, False: 0]
  ------------------
 4416|      0|          return nullptr;
 4417|      0|        }
 4418|      0|      }
 4419|  3.30k|      if (look(1) == 'R') {
  ------------------
  |  Branch (4419:11): [True: 3.30k, False: 0]
  ------------------
 4420|  3.30k|        char c = look(2);
 4421|  3.30k|        First += 3;
 4422|  3.30k|        switch (c) {
 4423|  2.63k|        case 's':
  ------------------
  |  Branch (4423:9): [True: 2.63k, False: 666]
  ------------------
 4424|  2.63k|          return make<NameType>("_Sat short _Fract");
 4425|    176|        case 't':
  ------------------
  |  Branch (4425:9): [True: 176, False: 3.12k]
  ------------------
 4426|    176|          return make<NameType>("_Sat unsigned short _Fract");
 4427|      0|        case 'i':
  ------------------
  |  Branch (4427:9): [True: 0, False: 3.30k]
  ------------------
 4428|      0|          return make<NameType>("_Sat _Fract");
 4429|    490|        case 'j':
  ------------------
  |  Branch (4429:9): [True: 490, False: 2.81k]
  ------------------
 4430|    490|          return make<NameType>("_Sat unsigned _Fract");
 4431|      0|        case 'l':
  ------------------
  |  Branch (4431:9): [True: 0, False: 3.30k]
  ------------------
 4432|      0|          return make<NameType>("_Sat long _Fract");
 4433|      0|        case 'm':
  ------------------
  |  Branch (4433:9): [True: 0, False: 3.30k]
  ------------------
 4434|      0|          return make<NameType>("_Sat unsigned long _Fract");
 4435|      0|        default:
  ------------------
  |  Branch (4435:9): [True: 0, False: 3.30k]
  ------------------
 4436|      0|          return nullptr;
 4437|  3.30k|        }
 4438|  3.30k|      }
 4439|      0|      return nullptr;
 4440|  3.30k|    }
 4441|       |    //                ::= DB <number> _                             # C23 signed _BitInt(N)
 4442|       |    //                ::= DB <instantiation-dependent expression> _ # C23 signed _BitInt(N)
 4443|       |    //                ::= DU <number> _                             # C23 unsigned _BitInt(N)
 4444|       |    //                ::= DU <instantiation-dependent expression> _ # C23 unsigned _BitInt(N)
 4445|      0|    case 'B':
  ------------------
  |  Branch (4445:5): [True: 0, False: 50.4k]
  ------------------
 4446|      3|    case 'U': {
  ------------------
  |  Branch (4446:5): [True: 3, False: 50.4k]
  ------------------
 4447|      3|      bool Signed = look(1) == 'B';
 4448|      3|      First += 2;
 4449|      3|      Node *Size = std::isdigit(look()) ? make<NameType>(parseNumber())
  ------------------
  |  Branch (4449:20): [True: 3, False: 0]
  ------------------
 4450|      3|                                        : getDerived().parseExpr();
 4451|      3|      if (!Size)
  ------------------
  |  Branch (4451:11): [True: 0, False: 3]
  ------------------
 4452|      0|        return nullptr;
 4453|      3|      if (!consumeIf('_'))
  ------------------
  |  Branch (4453:11): [True: 0, False: 3]
  ------------------
 4454|      0|        return nullptr;
 4455|      3|      return make<BitIntType>(Size, Signed);
 4456|      3|    }
 4457|       |    //                ::= Di   # char32_t
 4458|    452|    case 'i':
  ------------------
  |  Branch (4458:5): [True: 452, False: 50.0k]
  ------------------
 4459|    452|      First += 2;
 4460|    452|      return make<NameType>("char32_t");
 4461|       |    //                ::= Ds   # char16_t
 4462|      0|    case 's':
  ------------------
  |  Branch (4462:5): [True: 0, False: 50.4k]
  ------------------
 4463|      0|      First += 2;
 4464|      0|      return make<NameType>("char16_t");
 4465|       |    //                ::= Du   # char8_t (C++2a, not yet in the Itanium spec)
 4466|      0|    case 'u':
  ------------------
  |  Branch (4466:5): [True: 0, False: 50.4k]
  ------------------
 4467|      0|      First += 2;
 4468|      0|      return make<NameType>("char8_t");
 4469|       |    //                ::= Da   # auto (in dependent new-expressions)
 4470|  3.44k|    case 'a':
  ------------------
  |  Branch (4470:5): [True: 3.44k, False: 47.0k]
  ------------------
 4471|  3.44k|      First += 2;
 4472|  3.44k|      return make<NameType>("auto");
 4473|       |    //                ::= Dc   # decltype(auto)
 4474|    219|    case 'c':
  ------------------
  |  Branch (4474:5): [True: 219, False: 50.2k]
  ------------------
 4475|    219|      First += 2;
 4476|    219|      return make<NameType>("decltype(auto)");
 4477|       |    //                ::= Dk <type-constraint> # constrained auto
 4478|       |    //                ::= DK <type-constraint> # constrained decltype(auto)
 4479|      0|    case 'k':
  ------------------
  |  Branch (4479:5): [True: 0, False: 50.4k]
  ------------------
 4480|      0|    case 'K': {
  ------------------
  |  Branch (4480:5): [True: 0, False: 50.4k]
  ------------------
 4481|      0|      std::string_view Kind = look(1) == 'k' ? " auto" : " decltype(auto)";
  ------------------
  |  Branch (4481:31): [True: 0, False: 0]
  ------------------
 4482|      0|      First += 2;
 4483|      0|      Node *Constraint = getDerived().parseName();
 4484|      0|      if (!Constraint)
  ------------------
  |  Branch (4484:11): [True: 0, False: 0]
  ------------------
 4485|      0|        return nullptr;
 4486|      0|      return make<PostfixQualifiedType>(Constraint, Kind);
 4487|      0|    }
 4488|       |    //                ::= Dn   # std::nullptr_t (i.e., decltype(nullptr))
 4489|  1.65k|    case 'n':
  ------------------
  |  Branch (4489:5): [True: 1.65k, False: 48.8k]
  ------------------
 4490|  1.65k|      First += 2;
 4491|  1.65k|      return make<NameType>("std::nullptr_t");
 4492|       |
 4493|       |    //             ::= <decltype>
 4494|      0|    case 't':
  ------------------
  |  Branch (4494:5): [True: 0, False: 50.4k]
  ------------------
 4495|  22.6k|    case 'T': {
  ------------------
  |  Branch (4495:5): [True: 22.6k, False: 27.8k]
  ------------------
 4496|  22.6k|      Result = getDerived().parseDecltype();
 4497|  22.6k|      break;
 4498|      0|    }
 4499|       |    // extension   ::= <vector-type> # <vector-type> starts with Dv
 4500|      7|    case 'v': {
  ------------------
  |  Branch (4500:5): [True: 7, False: 50.4k]
  ------------------
 4501|      7|      Result = getDerived().parseVectorType();
 4502|      7|      break;
 4503|      0|    }
 4504|       |    //           ::= Dp <type>       # pack expansion (C++0x)
 4505|  2.10k|    case 'p': {
  ------------------
  |  Branch (4505:5): [True: 2.10k, False: 48.3k]
  ------------------
 4506|  2.10k|      First += 2;
 4507|  2.10k|      Node *Child = getDerived().parseType();
 4508|  2.10k|      if (!Child)
  ------------------
  |  Branch (4508:11): [True: 765, False: 1.33k]
  ------------------
 4509|    765|        return nullptr;
 4510|  1.33k|      Result = make<ParameterPackExpansion>(Child);
 4511|  1.33k|      break;
 4512|  2.10k|    }
 4513|       |    // Exception specifier on a function type.
 4514|      0|    case 'o':
  ------------------
  |  Branch (4514:5): [True: 0, False: 50.4k]
  ------------------
 4515|      0|    case 'O':
  ------------------
  |  Branch (4515:5): [True: 0, False: 50.4k]
  ------------------
 4516|    981|    case 'w':
  ------------------
  |  Branch (4516:5): [True: 981, False: 49.5k]
  ------------------
 4517|       |    // Transaction safe function type.
 4518|    981|    case 'x':
  ------------------
  |  Branch (4518:5): [True: 0, False: 50.4k]
  ------------------
 4519|    981|      Result = getDerived().parseFunctionType();
 4520|    981|      break;
 4521|  50.4k|    }
 4522|  24.9k|    break;
 4523|       |  //             ::= <function-type>
 4524|  24.9k|  case 'F': {
  ------------------
  |  Branch (4524:3): [True: 22.3k, False: 4.57M]
  ------------------
 4525|  22.3k|    Result = getDerived().parseFunctionType();
 4526|  22.3k|    break;
 4527|  50.4k|  }
 4528|       |  //             ::= <array-type>
 4529|  59.5k|  case 'A': {
  ------------------
  |  Branch (4529:3): [True: 59.5k, False: 4.53M]
  ------------------
 4530|  59.5k|    Result = getDerived().parseArrayType();
 4531|  59.5k|    break;
 4532|  50.4k|  }
 4533|       |  //             ::= <pointer-to-member-type>
 4534|   102k|  case 'M': {
  ------------------
  |  Branch (4534:3): [True: 102k, False: 4.49M]
  ------------------
 4535|   102k|    Result = getDerived().parsePointerToMemberType();
 4536|   102k|    break;
 4537|  50.4k|  }
 4538|       |  //             ::= <template-param>
 4539|  16.1k|  case 'T': {
  ------------------
  |  Branch (4539:3): [True: 16.1k, False: 4.58M]
  ------------------
 4540|       |    // This could be an elaborate type specifier on a <class-enum-type>.
 4541|  16.1k|    if (look(1) == 's' || look(1) == 'u' || look(1) == 'e') {
  ------------------
  |  Branch (4541:9): [True: 0, False: 16.1k]
  |  Branch (4541:27): [True: 0, False: 16.1k]
  |  Branch (4541:45): [True: 2.83k, False: 13.3k]
  ------------------
 4542|  2.83k|      Result = getDerived().parseClassEnumType();
 4543|  2.83k|      break;
 4544|  2.83k|    }
 4545|       |
 4546|  13.3k|    Result = getDerived().parseTemplateParam();
 4547|  13.3k|    if (Result == nullptr)
  ------------------
  |  Branch (4547:9): [True: 4, False: 13.3k]
  ------------------
 4548|      4|      return nullptr;
 4549|       |
 4550|       |    // Result could be either of:
 4551|       |    //   <type>        ::= <template-param>
 4552|       |    //   <type>        ::= <template-template-param> <template-args>
 4553|       |    //
 4554|       |    //   <template-template-param> ::= <template-param>
 4555|       |    //                             ::= <substitution>
 4556|       |    //
 4557|       |    // If this is followed by some <template-args>, and we're permitted to
 4558|       |    // parse them, take the second production.
 4559|       |
 4560|  13.3k|    if (TryToParseTemplateArgs && look() == 'I') {
  ------------------
  |  Branch (4560:9): [True: 12.2k, False: 1.02k]
  |  Branch (4560:35): [True: 326, False: 11.9k]
  ------------------
 4561|    326|      Subs.push_back(Result);
 4562|    326|      Node *TA = getDerived().parseTemplateArgs();
 4563|    326|      if (TA == nullptr)
  ------------------
  |  Branch (4563:11): [True: 320, False: 6]
  ------------------
 4564|    320|        return nullptr;
 4565|      6|      Result = make<NameWithTemplateArgs>(Result, TA);
 4566|      6|    }
 4567|  12.9k|    break;
 4568|  13.3k|  }
 4569|       |  //             ::= P <type>        # pointer
 4570|   167k|  case 'P': {
  ------------------
  |  Branch (4570:3): [True: 167k, False: 4.43M]
  ------------------
 4571|   167k|    ++First;
 4572|   167k|    Node *Ptr = getDerived().parseType();
 4573|   167k|    if (Ptr == nullptr)
  ------------------
  |  Branch (4573:9): [True: 1.48k, False: 166k]
  ------------------
 4574|  1.48k|      return nullptr;
 4575|   166k|    Result = make<PointerType>(Ptr);
 4576|   166k|    break;
 4577|   167k|  }
 4578|       |  //             ::= R <type>        # l-value reference
 4579|  50.4k|  case 'R': {
  ------------------
  |  Branch (4579:3): [True: 50.4k, False: 4.54M]
  ------------------
 4580|  50.4k|    ++First;
 4581|  50.4k|    Node *Ref = getDerived().parseType();
 4582|  50.4k|    if (Ref == nullptr)
  ------------------
  |  Branch (4582:9): [True: 90, False: 50.3k]
  ------------------
 4583|     90|      return nullptr;
 4584|  50.3k|    Result = make<ReferenceType>(Ref, ReferenceKind::LValue);
 4585|  50.3k|    break;
 4586|  50.4k|  }
 4587|       |  //             ::= O <type>        # r-value reference (C++11)
 4588|   114k|  case 'O': {
  ------------------
  |  Branch (4588:3): [True: 114k, False: 4.48M]
  ------------------
 4589|   114k|    ++First;
 4590|   114k|    Node *Ref = getDerived().parseType();
 4591|   114k|    if (Ref == nullptr)
  ------------------
  |  Branch (4591:9): [True: 597, False: 113k]
  ------------------
 4592|    597|      return nullptr;
 4593|   113k|    Result = make<ReferenceType>(Ref, ReferenceKind::RValue);
 4594|   113k|    break;
 4595|   114k|  }
 4596|       |  //             ::= C <type>        # complex pair (C99)
 4597|  68.2k|  case 'C': {
  ------------------
  |  Branch (4597:3): [True: 68.2k, False: 4.53M]
  ------------------
 4598|  68.2k|    ++First;
 4599|  68.2k|    Node *P = getDerived().parseType();
 4600|  68.2k|    if (P == nullptr)
  ------------------
  |  Branch (4600:9): [True: 3.93k, False: 64.3k]
  ------------------
 4601|  3.93k|      return nullptr;
 4602|  64.3k|    Result = make<PostfixQualifiedType>(P, " complex");
 4603|  64.3k|    break;
 4604|  68.2k|  }
 4605|       |  //             ::= G <type>        # imaginary (C99)
 4606|  14.1k|  case 'G': {
  ------------------
  |  Branch (4606:3): [True: 14.1k, False: 4.58M]
  ------------------
 4607|  14.1k|    ++First;
 4608|  14.1k|    Node *P = getDerived().parseType();
 4609|  14.1k|    if (P == nullptr)
  ------------------
  |  Branch (4609:9): [True: 26, False: 14.1k]
  ------------------
 4610|     26|      return P;
 4611|  14.1k|    Result = make<PostfixQualifiedType>(P, " imaginary");
 4612|  14.1k|    break;
 4613|  14.1k|  }
 4614|       |  //             ::= <substitution>  # See Compression below
 4615|  37.2k|  case 'S': {
  ------------------
  |  Branch (4615:3): [True: 37.2k, False: 4.56M]
  ------------------
 4616|  37.2k|    if (look(1) != 't') {
  ------------------
  |  Branch (4616:9): [True: 30.6k, False: 6.54k]
  ------------------
 4617|  30.6k|      bool IsSubst = false;
 4618|  30.6k|      Result = getDerived().parseUnscopedName(nullptr, &IsSubst);
 4619|  30.6k|      if (!Result)
  ------------------
  |  Branch (4619:11): [True: 0, False: 30.6k]
  ------------------
 4620|      0|        return nullptr;
 4621|       |
 4622|       |      // Sub could be either of:
 4623|       |      //   <type>        ::= <substitution>
 4624|       |      //   <type>        ::= <template-template-param> <template-args>
 4625|       |      //
 4626|       |      //   <template-template-param> ::= <template-param>
 4627|       |      //                             ::= <substitution>
 4628|       |      //
 4629|       |      // If this is followed by some <template-args>, and we're permitted to
 4630|       |      // parse them, take the second production.
 4631|       |
 4632|  30.6k|      if (look() == 'I' && (!IsSubst || TryToParseTemplateArgs)) {
  ------------------
  |  Branch (4632:11): [True: 3, False: 30.6k]
  |  Branch (4632:29): [True: 0, False: 3]
  |  Branch (4632:41): [True: 0, False: 3]
  ------------------
 4633|      0|        if (!IsSubst)
  ------------------
  |  Branch (4633:13): [True: 0, False: 0]
  ------------------
 4634|      0|          Subs.push_back(Result);
 4635|      0|        Node *TA = getDerived().parseTemplateArgs();
 4636|      0|        if (TA == nullptr)
  ------------------
  |  Branch (4636:13): [True: 0, False: 0]
  ------------------
 4637|      0|          return nullptr;
 4638|      0|        Result = make<NameWithTemplateArgs>(Result, TA);
 4639|  30.6k|      } else if (IsSubst) {
  ------------------
  |  Branch (4639:18): [True: 30.6k, False: 0]
  ------------------
 4640|       |        // If all we parsed was a substitution, don't re-insert into the
 4641|       |        // substitution table.
 4642|  30.6k|        return Result;
 4643|  30.6k|      }
 4644|      0|      break;
 4645|  30.6k|    }
 4646|  6.54k|    DEMANGLE_FALLTHROUGH;
  ------------------
  |  |   91|  6.54k|#define DEMANGLE_FALLTHROUGH [[gnu::fallthrough]]
  ------------------
 4647|  6.54k|  }
 4648|       |  //        ::= <class-enum-type>
 4649|   145k|  default: {
  ------------------
  |  Branch (4649:3): [True: 139k, False: 4.45M]
  ------------------
 4650|   145k|    Result = getDerived().parseClassEnumType();
 4651|   145k|    break;
 4652|  6.54k|  }
 4653|  4.59M|  }
 4654|       |
 4655|       |  // If we parsed a type, insert it into the substitution table. Note that all
 4656|       |  // <builtin-type>s and <substitution>s have already bailed out, because they
 4657|       |  // don't get substitutions.
 4658|  1.03M|  if (Result != nullptr)
  ------------------
  |  Branch (4658:7): [True: 1.00M, False: 34.4k]
  ------------------
 4659|  1.00M|    Subs.push_back(Result);
 4660|  1.03M|  return Result;
 4661|  4.59M|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E17parseFunctionTypeEv:
 3925|  25.7k|Node *AbstractManglingParser<Derived, Alloc>::parseFunctionType() {
 3926|  25.7k|  Qualifiers CVQuals = parseCVQualifiers();
 3927|       |
 3928|  25.7k|  Node *ExceptionSpec = nullptr;
 3929|  25.7k|  if (consumeIf("Do")) {
  ------------------
  |  Branch (3929:7): [True: 0, False: 25.7k]
  ------------------
 3930|      0|    ExceptionSpec = make<NameType>("noexcept");
 3931|      0|    if (!ExceptionSpec)
  ------------------
  |  Branch (3931:9): [True: 0, False: 0]
  ------------------
 3932|      0|      return nullptr;
 3933|  25.7k|  } else if (consumeIf("DO")) {
  ------------------
  |  Branch (3933:14): [True: 0, False: 25.7k]
  ------------------
 3934|      0|    Node *E = getDerived().parseExpr();
 3935|      0|    if (E == nullptr || !consumeIf('E'))
  ------------------
  |  Branch (3935:9): [True: 0, False: 0]
  |  Branch (3935:25): [True: 0, False: 0]
  ------------------
 3936|      0|      return nullptr;
 3937|      0|    ExceptionSpec = make<NoexceptSpec>(E);
 3938|      0|    if (!ExceptionSpec)
  ------------------
  |  Branch (3938:9): [True: 0, False: 0]
  ------------------
 3939|      0|      return nullptr;
 3940|  25.7k|  } else if (consumeIf("Dw")) {
  ------------------
  |  Branch (3940:14): [True: 984, False: 24.7k]
  ------------------
 3941|    984|    size_t SpecsBegin = Names.size();
 3942|   188k|    while (!consumeIf('E')) {
  ------------------
  |  Branch (3942:12): [True: 188k, False: 0]
  ------------------
 3943|   188k|      Node *T = getDerived().parseType();
 3944|   188k|      if (T == nullptr)
  ------------------
  |  Branch (3944:11): [True: 984, False: 187k]
  ------------------
 3945|    984|        return nullptr;
 3946|   187k|      Names.push_back(T);
 3947|   187k|    }
 3948|      0|    ExceptionSpec =
 3949|      0|      make<DynamicExceptionSpec>(popTrailingNodeArray(SpecsBegin));
 3950|      0|    if (!ExceptionSpec)
  ------------------
  |  Branch (3950:9): [True: 0, False: 0]
  ------------------
 3951|      0|      return nullptr;
 3952|      0|  }
 3953|       |
 3954|  24.7k|  consumeIf("Dx"); // transaction safe
 3955|       |
 3956|  24.7k|  if (!consumeIf('F'))
  ------------------
  |  Branch (3956:7): [True: 0, False: 24.7k]
  ------------------
 3957|      0|    return nullptr;
 3958|  24.7k|  consumeIf('Y'); // extern "C"
 3959|  24.7k|  Node *ReturnType = getDerived().parseType();
 3960|  24.7k|  if (ReturnType == nullptr)
  ------------------
  |  Branch (3960:7): [True: 6.92k, False: 17.8k]
  ------------------
 3961|  6.92k|    return nullptr;
 3962|       |
 3963|  17.8k|  FunctionRefQual ReferenceQualifier = FrefQualNone;
 3964|  17.8k|  size_t ParamsBegin = Names.size();
 3965|  1.09M|  while (true) {
  ------------------
  |  Branch (3965:10): [Folded - Ignored]
  ------------------
 3966|  1.09M|    if (consumeIf('E'))
  ------------------
  |  Branch (3966:9): [True: 454, False: 1.09M]
  ------------------
 3967|    454|      break;
 3968|  1.09M|    if (consumeIf('v'))
  ------------------
  |  Branch (3968:9): [True: 64.3k, False: 1.03M]
  ------------------
 3969|  64.3k|      continue;
 3970|  1.03M|    if (consumeIf("RE")) {
  ------------------
  |  Branch (3970:9): [True: 2.02k, False: 1.03M]
  ------------------
 3971|  2.02k|      ReferenceQualifier = FrefQualLValue;
 3972|  2.02k|      break;
 3973|  2.02k|    }
 3974|  1.03M|    if (consumeIf("OE")) {
  ------------------
  |  Branch (3974:9): [True: 7.42k, False: 1.02M]
  ------------------
 3975|  7.42k|      ReferenceQualifier = FrefQualRValue;
 3976|  7.42k|      break;
 3977|  7.42k|    }
 3978|  1.02M|    Node *T = getDerived().parseType();
 3979|  1.02M|    if (T == nullptr)
  ------------------
  |  Branch (3979:9): [True: 7.94k, False: 1.01M]
  ------------------
 3980|  7.94k|      return nullptr;
 3981|  1.01M|    Names.push_back(T);
 3982|  1.01M|  }
 3983|       |
 3984|  9.90k|  NodeArray Params = popTrailingNodeArray(ParamsBegin);
 3985|  9.90k|  return make<FunctionType>(ReturnType, Params, CVQuals,
 3986|  9.90k|                            ReferenceQualifier, ExceptionSpec);
 3987|  17.8k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_12FunctionTypeEJRPNS0_4NodeERNS0_9NodeArrayERNS0_10QualifiersERNS0_15FunctionRefQualESA_EEES9_DpOT0_:
 2827|  9.90k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  9.90k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  9.90k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle12FunctionTypeC2EPKNS0_4NodeENS0_9NodeArrayENS0_10QualifiersENS0_15FunctionRefQualES4_:
  833|  9.90k|      : Node(KFunctionType,
  834|  9.90k|             /*RHSComponentCache=*/Cache::Yes, /*ArrayCache=*/Cache::No,
  835|  9.90k|             /*FunctionCache=*/Cache::Yes),
  836|  9.90k|        Ret(Ret_), Params(Params_), CVQuals(CVQuals_), RefQual(RefQual_),
  837|  9.90k|        ExceptionSpec(ExceptionSpec_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E18parseQualifiedTypeEv:
 4117|   309k|Node *AbstractManglingParser<Derived, Alloc>::parseQualifiedType() {
 4118|   309k|  if (consumeIf('U')) {
  ------------------
  |  Branch (4118:7): [True: 58.1k, False: 251k]
  ------------------
 4119|  58.1k|    std::string_view Qual = parseBareSourceName();
 4120|  58.1k|    if (Qual.empty())
  ------------------
  |  Branch (4120:9): [True: 2, False: 58.1k]
  ------------------
 4121|      2|      return nullptr;
 4122|       |
 4123|       |    // extension            ::= U <objc-name> <objc-type>  # objc-type<identifier>
 4124|  58.1k|    if (starts_with(Qual, "objcproto")) {
  ------------------
  |  Branch (4124:9): [True: 3, False: 58.1k]
  ------------------
 4125|      3|      constexpr size_t Len = sizeof("objcproto") - 1;
 4126|      3|      std::string_view ProtoSourceName(Qual.data() + Len, Qual.size() - Len);
 4127|      3|      std::string_view Proto;
 4128|      3|      {
 4129|      3|        ScopedOverride<const char *> SaveFirst(First, ProtoSourceName.data()),
 4130|      3|            SaveLast(Last, &*ProtoSourceName.rbegin() + 1);
 4131|      3|        Proto = parseBareSourceName();
 4132|      3|      }
 4133|      3|      if (Proto.empty())
  ------------------
  |  Branch (4133:11): [True: 0, False: 3]
  ------------------
 4134|      0|        return nullptr;
 4135|      3|      Node *Child = getDerived().parseQualifiedType();
 4136|      3|      if (Child == nullptr)
  ------------------
  |  Branch (4136:11): [True: 0, False: 3]
  ------------------
 4137|      0|        return nullptr;
 4138|      3|      return make<ObjCProtoName>(Child, Proto);
 4139|      3|    }
 4140|       |
 4141|  58.1k|    Node *TA = nullptr;
 4142|  58.1k|    if (look() == 'I') {
  ------------------
  |  Branch (4142:9): [True: 323, False: 57.7k]
  ------------------
 4143|    323|      TA = getDerived().parseTemplateArgs();
 4144|    323|      if (TA == nullptr)
  ------------------
  |  Branch (4144:11): [True: 0, False: 323]
  ------------------
 4145|      0|        return nullptr;
 4146|    323|    }
 4147|       |
 4148|  58.1k|    Node *Child = getDerived().parseQualifiedType();
 4149|  58.1k|    if (Child == nullptr)
  ------------------
  |  Branch (4149:9): [True: 987, False: 57.1k]
  ------------------
 4150|    987|      return nullptr;
 4151|  57.1k|    return make<VendorExtQualType>(Child, Qual, TA);
 4152|  58.1k|  }
 4153|       |
 4154|   251k|  Qualifiers Quals = parseCVQualifiers();
 4155|   251k|  Node *Ty = getDerived().parseType();
 4156|   251k|  if (Ty == nullptr)
  ------------------
  |  Branch (4156:7): [True: 2.98k, False: 248k]
  ------------------
 4157|  2.98k|    return nullptr;
 4158|   248k|  if (Quals != QualNone)
  ------------------
  |  Branch (4158:7): [True: 191k, False: 57.1k]
  ------------------
 4159|   191k|    Ty = make<QualType>(Ty, Quals);
 4160|   248k|  return Ty;
 4161|   251k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_13ObjCProtoNameEJRPNS0_4NodeERNSt3__117basic_string_viewIcNSB_11char_traitsIcEEEEEEES9_DpOT0_:
 2827|      3|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|      3|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|      3|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle13ObjCProtoNameC2EPKNS0_4NodeENSt3__117basic_string_viewIcNS5_11char_traitsIcEEEE:
  610|      3|      : Node(KObjCProtoName), Ty(Ty_), Protocol(Protocol_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_17VendorExtQualTypeEJRPNS0_4NodeERNSt3__117basic_string_viewIcNSB_11char_traitsIcEEEESA_EEES9_DpOT0_:
 2827|  57.1k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  57.1k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  57.1k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle17VendorExtQualTypeC2EPKNS0_4NodeENSt3__117basic_string_viewIcNS5_11char_traitsIcEEEES4_:
  391|  57.1k|      : Node(KVendorExtQualType), Ty(Ty_), Ext(Ext_), TA(TA_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_8QualTypeEJRPNS0_4NodeERNS0_10QualifiersEEEES9_DpOT0_:
 2827|   191k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|   191k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|   191k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle8QualTypeC2EPKNS0_4NodeENS0_10QualifiersE:
  441|   191k|      : Node(KQualType, Child_->getRHSComponentCache(), Child_->getArrayCache(),
  442|   191k|             Child_->getFunctionCache()),
  443|   191k|        Quals(Quals_), Child(Child_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_8NameTypeEJRA12_KcEEEPNS0_4NodeEDpOT0_:
 2827|   358k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|   358k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|   358k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_8NameTypeEJRA14_KcEEEPNS0_4NodeEDpOT0_:
 2827|   381k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|   381k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|   381k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_8NameTypeEJRA13_KcEEEPNS0_4NodeEDpOT0_:
 2827|  65.6k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  65.6k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  65.6k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_8NameTypeEJRA10_KcEEEPNS0_4NodeEDpOT0_:
 2827|  41.0k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  41.0k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  41.0k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_8NameTypeEJRA19_KcEEEPNS0_4NodeEDpOT0_:
 2827|  83.4k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  83.4k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  83.4k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_8NameTypeEJRA9_KcEEEPNS0_4NodeEDpOT0_:
 2827|   187k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|   187k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|   187k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_8NameTypeEJRA18_KcEEEPNS0_4NodeEDpOT0_:
 2827|   117k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|   117k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|   117k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_8NameTypeEJRA7_KcEEEPNS0_4NodeEDpOT0_:
 2827|   194k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|   194k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|   194k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_8NameTypeEJRA11_KcEEEPNS0_4NodeEDpOT0_:
 2827|   513k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|   513k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|   513k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_8NameTypeEJRA21_KcEEEPNS0_4NodeEDpOT0_:
 2827|    490|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|    490|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|    490|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_8NameTypeEJRA27_KcEEEPNS0_4NodeEDpOT0_:
 2827|    176|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|    176|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|    176|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_10BitIntTypeEJRPNS0_4NodeERbEEES9_DpOT0_:
 2827|      3|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|      3|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|      3|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle10BitIntTypeC2EPKNS0_4NodeEb:
  519|      3|      : Node(KBitIntType), Size(Size_), Signed(Signed_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle20PostfixQualifiedTypeC2EPKNS0_4NodeENSt3__117basic_string_viewIcNS5_11char_traitsIcEEEE:
  489|  78.5k|      : Node(KPostfixQualifiedType), Ty(Ty_), Postfix(Postfix_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E15parseVectorTypeEv:
 3995|      7|Node *AbstractManglingParser<Derived, Alloc>::parseVectorType() {
 3996|      7|  if (!consumeIf("Dv"))
  ------------------
  |  Branch (3996:7): [True: 0, False: 7]
  ------------------
 3997|      0|    return nullptr;
 3998|      7|  if (look() >= '1' && look() <= '9') {
  ------------------
  |  Branch (3998:7): [True: 7, False: 0]
  |  Branch (3998:24): [True: 6, False: 1]
  ------------------
 3999|      6|    Node *DimensionNumber = make<NameType>(parseNumber());
 4000|      6|    if (!DimensionNumber)
  ------------------
  |  Branch (4000:9): [True: 0, False: 6]
  ------------------
 4001|      0|      return nullptr;
 4002|      6|    if (!consumeIf('_'))
  ------------------
  |  Branch (4002:9): [True: 0, False: 6]
  ------------------
 4003|      0|      return nullptr;
 4004|      6|    if (consumeIf('p'))
  ------------------
  |  Branch (4004:9): [True: 0, False: 6]
  ------------------
 4005|      0|      return make<PixelVectorType>(DimensionNumber);
 4006|      6|    Node *ElemType = getDerived().parseType();
 4007|      6|    if (ElemType == nullptr)
  ------------------
  |  Branch (4007:9): [True: 0, False: 6]
  ------------------
 4008|      0|      return nullptr;
 4009|      6|    return make<VectorType>(ElemType, DimensionNumber);
 4010|      6|  }
 4011|       |
 4012|      1|  if (!consumeIf('_')) {
  ------------------
  |  Branch (4012:7): [True: 1, False: 0]
  ------------------
 4013|      1|    Node *DimExpr = getDerived().parseExpr();
 4014|      1|    if (!DimExpr)
  ------------------
  |  Branch (4014:9): [True: 1, False: 0]
  ------------------
 4015|      1|      return nullptr;
 4016|      0|    if (!consumeIf('_'))
  ------------------
  |  Branch (4016:9): [True: 0, False: 0]
  ------------------
 4017|      0|      return nullptr;
 4018|      0|    Node *ElemType = getDerived().parseType();
 4019|      0|    if (!ElemType)
  ------------------
  |  Branch (4019:9): [True: 0, False: 0]
  ------------------
 4020|      0|      return nullptr;
 4021|      0|    return make<VectorType>(ElemType, DimExpr);
 4022|      0|  }
 4023|      0|  Node *ElemType = getDerived().parseType();
 4024|      0|  if (!ElemType)
  ------------------
  |  Branch (4024:7): [True: 0, False: 0]
  ------------------
 4025|      0|    return nullptr;
 4026|      0|  return make<VectorType>(ElemType, /*Dimension=*/nullptr);
 4027|      0|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_10VectorTypeEJRPNS0_4NodeESA_EEES9_DpOT0_:
 2827|      6|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|      6|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|      6|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle10VectorTypeC2EPKNS0_4NodeES4_:
 1179|      6|      : Node(KVectorType), BaseType(BaseType_), Dimension(Dimension_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E14parseArrayTypeEv:
 4048|  59.5k|Node *AbstractManglingParser<Derived, Alloc>::parseArrayType() {
 4049|  59.5k|  if (!consumeIf('A'))
  ------------------
  |  Branch (4049:7): [True: 0, False: 59.5k]
  ------------------
 4050|      0|    return nullptr;
 4051|       |
 4052|  59.5k|  Node *Dimension = nullptr;
 4053|       |
 4054|  59.5k|  if (std::isdigit(look())) {
  ------------------
  |  Branch (4054:7): [True: 0, False: 59.5k]
  ------------------
 4055|      0|    Dimension = make<NameType>(parseNumber());
 4056|      0|    if (!Dimension)
  ------------------
  |  Branch (4056:9): [True: 0, False: 0]
  ------------------
 4057|      0|      return nullptr;
 4058|      0|    if (!consumeIf('_'))
  ------------------
  |  Branch (4058:9): [True: 0, False: 0]
  ------------------
 4059|      0|      return nullptr;
 4060|  59.5k|  } else if (!consumeIf('_')) {
  ------------------
  |  Branch (4060:14): [True: 31.1k, False: 28.4k]
  ------------------
 4061|  31.1k|    Node *DimExpr = getDerived().parseExpr();
 4062|  31.1k|    if (DimExpr == nullptr)
  ------------------
  |  Branch (4062:9): [True: 44, False: 31.0k]
  ------------------
 4063|     44|      return nullptr;
 4064|  31.0k|    if (!consumeIf('_'))
  ------------------
  |  Branch (4064:9): [True: 0, False: 31.0k]
  ------------------
 4065|      0|      return nullptr;
 4066|  31.0k|    Dimension = DimExpr;
 4067|  31.0k|  }
 4068|       |
 4069|  59.4k|  Node *Ty = getDerived().parseType();
 4070|  59.4k|  if (Ty == nullptr)
  ------------------
  |  Branch (4070:7): [True: 804, False: 58.6k]
  ------------------
 4071|    804|    return nullptr;
 4072|  58.6k|  return make<ArrayType>(Ty, Dimension);
 4073|  59.4k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_9ArrayTypeEJRPNS0_4NodeESA_EEES9_DpOT0_:
 2827|  58.6k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  58.6k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  58.6k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle9ArrayTypeC2EPKNS0_4NodeEPS2_:
  791|  58.6k|      : Node(KArrayType,
  792|  58.6k|             /*RHSComponentCache=*/Cache::Yes,
  793|  58.6k|             /*ArrayCache=*/Cache::Yes),
  794|  58.6k|        Base(Base_), Dimension(Dimension_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E24parsePointerToMemberTypeEv:
 4077|   102k|Node *AbstractManglingParser<Derived, Alloc>::parsePointerToMemberType() {
 4078|   102k|  if (!consumeIf('M'))
  ------------------
  |  Branch (4078:7): [True: 0, False: 102k]
  ------------------
 4079|      0|    return nullptr;
 4080|   102k|  Node *ClassType = getDerived().parseType();
 4081|   102k|  if (ClassType == nullptr)
  ------------------
  |  Branch (4081:7): [True: 8.22k, False: 94.2k]
  ------------------
 4082|  8.22k|    return nullptr;
 4083|  94.2k|  Node *MemberType = getDerived().parseType();
 4084|  94.2k|  if (MemberType == nullptr)
  ------------------
  |  Branch (4084:7): [True: 703, False: 93.5k]
  ------------------
 4085|    703|    return nullptr;
 4086|  93.5k|  return make<PointerToMemberType>(ClassType, MemberType);
 4087|  94.2k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_19PointerToMemberTypeEJRPNS0_4NodeESA_EEES9_DpOT0_:
 2827|  93.5k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  93.5k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  93.5k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle19PointerToMemberTypeC2EPKNS0_4NodeES4_:
  759|  93.5k|      : Node(KPointerToMemberType, MemberType_->getRHSComponentCache()),
  760|  93.5k|        ClassType(ClassType_), MemberType(MemberType_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E18parseClassEnumTypeEv:
 4094|   148k|Node *AbstractManglingParser<Derived, Alloc>::parseClassEnumType() {
 4095|   148k|  std::string_view ElabSpef;
 4096|   148k|  if (consumeIf("Ts"))
  ------------------
  |  Branch (4096:7): [True: 0, False: 148k]
  ------------------
 4097|      0|    ElabSpef = "struct";
 4098|   148k|  else if (consumeIf("Tu"))
  ------------------
  |  Branch (4098:12): [True: 0, False: 148k]
  ------------------
 4099|      0|    ElabSpef = "union";
 4100|   148k|  else if (consumeIf("Te"))
  ------------------
  |  Branch (4100:12): [True: 2.83k, False: 145k]
  ------------------
 4101|  2.83k|    ElabSpef = "enum";
 4102|       |
 4103|   148k|  Node *Name = getDerived().parseName();
 4104|   148k|  if (Name == nullptr)
  ------------------
  |  Branch (4104:7): [True: 5.78k, False: 143k]
  ------------------
 4105|  5.78k|    return nullptr;
 4106|       |
 4107|   143k|  if (!ElabSpef.empty())
  ------------------
  |  Branch (4107:7): [True: 2.83k, False: 140k]
  ------------------
 4108|  2.83k|    return make<ElaboratedTypeSpefType>(ElabSpef, Name);
 4109|       |
 4110|   140k|  return Name;
 4111|   143k|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_22ElaboratedTypeSpefTypeEJRNSt3__117basic_string_viewIcNS8_11char_traitsIcEEEERPNS0_4NodeEEEESF_DpOT0_:
 2827|  2.83k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  2.83k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  2.83k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22ElaboratedTypeSpefTypeC2ENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEPNS0_4NodeE:
  538|  2.83k|      : Node(KElaboratedTypeSpefType), Kind(Kind_), Child(Child_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_11PointerTypeEJRPNS0_4NodeEEEES9_DpOT0_:
 2827|   166k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|   166k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|   166k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle11PointerTypeC2EPKNS0_4NodeE:
  632|   166k|      : Node(KPointerType, Pointee_->getRHSComponentCache()),
  633|   166k|        Pointee(Pointee_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_13ReferenceTypeEJRPNS0_4NodeENS0_13ReferenceKindEEEES9_DpOT0_:
 2827|   164k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|   164k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|   164k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle13ReferenceTypeC2EPKNS0_4NodeENS0_13ReferenceKindE:
  716|   164k|      : Node(KReferenceType, Pointee_->getRHSComponentCache()),
  717|   164k|        Pointee(Pointee_), RK(RK_) {}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_20PostfixQualifiedTypeEJRPNS0_4NodeERA9_KcEEES9_DpOT0_:
 2827|  64.3k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  64.3k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  64.3k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle22AbstractManglingParserINS0_14ManglingParserINS_16DefaultAllocatorEEES3_E4makeINS0_20PostfixQualifiedTypeEJRPNS0_4NodeERA11_KcEEES9_DpOT0_:
 2827|  14.1k|  template <class T, class... Args> Node *make(Args &&... args) {
 2828|  14.1k|    return ASTAllocator.template makeNode<T>(std::forward<Args>(args)...);
 2829|  14.1k|  }

cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle11starts_withENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEES5_:
   29|  3.68M|                        std::string_view needle) noexcept {
   30|  3.68M|  if (needle.size() > haystack.size())
  ------------------
  |  Branch (30:7): [True: 137k, False: 3.54M]
  ------------------
   31|   137k|    return false;
   32|  3.54M|  haystack.remove_suffix(haystack.size() - needle.size());
   33|  3.54M|  return haystack == needle;
   34|  3.68M|}
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle11starts_withENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEEc:
   24|  1.83k|inline bool starts_with(std::string_view self, char C) noexcept {
   25|  1.83k|  return !self.empty() && *self.begin() == C;
  ------------------
  |  Branch (25:10): [True: 1.83k, False: 0]
  |  Branch (25:27): [True: 1.17k, False: 660]
  ------------------
   26|  1.83k|}

cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14ScopedOverrideIbEC2ERbb:
  192|  9.35k|  ScopedOverride(T &Loc_, T NewVal) : Loc(Loc_), Original(Loc_) {
  193|  9.35k|    Loc_ = std::move(NewVal);
  194|  9.35k|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14ScopedOverrideIbED2Ev:
  195|  9.35k|  ~ScopedOverride() { Loc = std::move(Original); }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14ScopedOverrideImEC2ERmm:
  192|    611|  ScopedOverride(T &Loc_, T NewVal) : Loc(Loc_), Original(Loc_) {
  193|    611|    Loc_ = std::move(NewVal);
  194|    611|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14ScopedOverrideImED2Ev:
  195|    611|  ~ScopedOverride() { Loc = std::move(Original); }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14ScopedOverrideIPKcEC2ERS3_S3_:
  192|      6|  ScopedOverride(T &Loc_, T NewVal) : Loc(Loc_), Original(Loc_) {
  193|      6|    Loc_ = std::move(NewVal);
  194|      6|  }
cxa_demangle.cpp:_ZN12_GLOBAL__N_116itanium_demangle14ScopedOverrideIPKcED2Ev:
  195|      6|  ~ScopedOverride() { Loc = std::move(Original); }

