cling icon indicating copy to clipboard operation
cling copied to clipboard

Slow jitting for deep nested template arguments

Open bendavid opened this issue 3 years ago • 2 comments

Jitting code with long/deeply nested lists of template arguments is extremely slow. Consider the code below, which compiles in about 0.3s in either clang or gcc.

In cling this takes ~forever to jit. (Less extreme variations on this can potentially appear with nested Filter types from RDF graphs)

#include <cstddef>
#include <vector>
#include <iostream>
#include <utility>
#include <cxxabi.h>

template <typename... Ts>
struct TypeList {};

template <std::size_t Depth, typename... Ts, std::size_t... S>
auto makeTypeListHelper(std::index_sequence<S...> idxs) {
  if constexpr (Depth == 0) {
    return TypeList<Ts...>{};
  }
  else {
    return makeTypeListHelper<Depth - 1, std::conditional_t<true, TypeList<Ts...>, decltype(S)>...>(idxs);
  }
}

template <std::size_t Width, std::size_t Depth, typename... Ts>
auto makeTypeList() {
  using IdxType = std::make_index_sequence<Width>;
  return makeTypeListHelper<Depth, Ts...>(IdxType{});
}


int main() {
 
  using T = std::vector<double>;
  using L = decltype(makeTypeList<8, 8, T, T, T, T>);
  
  size_t length;
  int status;
  const char *name = abi::__cxa_demangle(typeid(L).name(), nullptr, &length, &status);
  
  std::cout << name << std::endl;
  
  return 0;
}

Running pstack on the stuck jitting looks as below, so ultimately it's bogged down in clang::TemplateArgumentList::ComputeODRHash

Thread 1 (Thread 0x7f3cb3c23b80 (LWP 1909720)):
#0  0x00007f3caddfd705 in (anonymous namespace)::ODRTypeVisitor::Visit(clang::Type const*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#1  0x00007f3caddfed05 in clang::ODRHash::AddQualType(clang::QualType) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#2  0x00007f3caddfedb3 in clang::ODRHash::AddTemplateArgument(clang::TemplateArgument) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#3  0x00007f3caddfd4e9 in clang::ODRHash::AddDecl(clang::Decl const*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#4  0x00007f3caddfdcc0 in (anonymous namespace)::ODRTypeVisitor::Visit(clang::Type const*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#5  0x00007f3caddfed05 in clang::ODRHash::AddQualType(clang::QualType) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#6  0x00007f3caddfedb3 in clang::ODRHash::AddTemplateArgument(clang::TemplateArgument) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#7  0x00007f3caddfeecf in clang::ODRHash::AddTemplateArgument(clang::TemplateArgument) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#8  0x00007f3caddfd539 in clang::ODRHash::AddDecl(clang::Decl const*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#9  0x00007f3caddfdcc0 in (anonymous namespace)::ODRTypeVisitor::Visit(clang::Type const*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#10 0x00007f3caddfed05 in clang::ODRHash::AddQualType(clang::QualType) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#11 0x00007f3caddfedb3 in clang::ODRHash::AddTemplateArgument(clang::TemplateArgument) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#12 0x00007f3caddfeecf in clang::ODRHash::AddTemplateArgument(clang::TemplateArgument) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#13 0x00007f3caddfd539 in clang::ODRHash::AddDecl(clang::Decl const*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#14 0x00007f3caddfdcc0 in (anonymous namespace)::ODRTypeVisitor::Visit(clang::Type const*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#15 0x00007f3caddfed05 in clang::ODRHash::AddQualType(clang::QualType) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#16 0x00007f3caddfedb3 in clang::ODRHash::AddTemplateArgument(clang::TemplateArgument) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#17 0x00007f3caddfeecf in clang::ODRHash::AddTemplateArgument(clang::TemplateArgument) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#18 0x00007f3caddfd539 in clang::ODRHash::AddDecl(clang::Decl const*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#19 0x00007f3caddfdcc0 in (anonymous namespace)::ODRTypeVisitor::Visit(clang::Type const*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#20 0x00007f3caddfed05 in clang::ODRHash::AddQualType(clang::QualType) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#21 0x00007f3caddfedb3 in clang::ODRHash::AddTemplateArgument(clang::TemplateArgument) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#22 0x00007f3caddfeecf in clang::ODRHash::AddTemplateArgument(clang::TemplateArgument) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#23 0x00007f3caddfd539 in clang::ODRHash::AddDecl(clang::Decl const*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#24 0x00007f3caddfdcc0 in (anonymous namespace)::ODRTypeVisitor::Visit(clang::Type const*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#25 0x00007f3caddfed05 in clang::ODRHash::AddQualType(clang::QualType) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#26 0x00007f3caddfedb3 in clang::ODRHash::AddTemplateArgument(clang::TemplateArgument) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#27 0x00007f3caddfeecf in clang::ODRHash::AddTemplateArgument(clang::TemplateArgument) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#28 0x00007f3caddfd539 in clang::ODRHash::AddDecl(clang::Decl const*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#29 0x00007f3caddfdcc0 in (anonymous namespace)::ODRTypeVisitor::Visit(clang::Type const*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#30 0x00007f3caddfed05 in clang::ODRHash::AddQualType(clang::QualType) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#31 0x00007f3caddfedb3 in clang::ODRHash::AddTemplateArgument(clang::TemplateArgument) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#32 0x00007f3caddfeecf in clang::ODRHash::AddTemplateArgument(clang::TemplateArgument) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#33 0x00007f3caddfd539 in clang::ODRHash::AddDecl(clang::Decl const*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#34 0x00007f3caddfdcc0 in (anonymous namespace)::ODRTypeVisitor::Visit(clang::Type const*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#35 0x00007f3caddfed05 in clang::ODRHash::AddQualType(clang::QualType) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#36 0x00007f3caddfedb3 in clang::ODRHash::AddTemplateArgument(clang::TemplateArgument) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#37 0x00007f3cadd2f3c6 in clang::TemplateArgumentList::ComputeODRHash(llvm::ArrayRef<clang::TemplateArgument>) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#38 0x00007f3cadd319c9 in clang::RedeclarableTemplateDecl::loadLazySpecializationsImpl(llvm::ArrayRef<clang::TemplateArgument>) const () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#39 0x00007f3cadd3290b in clang::ClassTemplateDecl::findSpecialization(llvm::ArrayRef<clang::TemplateArgument>, void*&) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#40 0x00007f3cac82a0c0 in clang::Sema::CheckTemplateIdType(clang::TemplateName, clang::SourceLocation, clang::TemplateArgumentListInfo&) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#41 0x00007f3cac8d6ffb in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTemplateSpecializationType(clang::TypeLocBuilder&, clang::TemplateSpecializationTypeLoc, clang::TemplateName) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#42 0x00007f3cac8d3690 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTSIInObjectScope(clang::TypeLoc, clang::QualType, clang::NamedDecl*, clang::CXXScopeSpec&) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#43 0x00007f3cac8d3e46 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformNestedNameSpecifierLoc(clang::NestedNameSpecifierLoc, clang::QualType, clang::NamedDecl*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#44 0x00007f3cac8d77bf in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformDependentNameType(clang::TypeLocBuilder&, clang::DependentNameTypeLoc, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#45 0x00007f3cac8cfba4 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#46 0x00007f3cac8d1f4e in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeSourceInfo*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#47 0x00007f3cac8d20fe in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::QualType) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#48 0x00007f3cac8d2e63 in clang::Sema::SubstType(clang::QualType, clang::MultiLevelTemplateArgumentList const&, clang::SourceLocation, clang::DeclarationName) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#49 0x00007f3cac82a339 in clang::Sema::CheckTemplateIdType(clang::TemplateName, clang::SourceLocation, clang::TemplateArgumentListInfo&) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#50 0x00007f3cac8d6ffb in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTemplateSpecializationType(clang::TypeLocBuilder&, clang::TemplateSpecializationTypeLoc, clang::TemplateName) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#51 0x00007f3cac8cfef9 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#52 0x00007f3cac8dca6b in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformElaboratedType(clang::TypeLocBuilder&, clang::ElaboratedTypeLoc) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#53 0x00007f3cac8cf32f in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeLocBuilder&, clang::TypeLoc) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#54 0x00007f3cac8d1f4e in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformType(clang::TypeSourceInfo*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#55 0x00007f3cac8d40b5 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTemplateArgument(clang::TemplateArgumentLoc const&, clang::TemplateArgumentLoc&, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#56 0x00007f3cac8d66d0 in bool clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformTemplateArguments<clang::TemplateArgumentLoc const*>(clang::TemplateArgumentLoc const*, clang::TemplateArgumentLoc const*, clang::TemplateArgumentListInfo&, bool) [clone .constprop.2581] () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#57 0x00007f3cac8db44f in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformUnresolvedLookupExpr(clang::UnresolvedLookupExpr*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#58 0x00007f3cac8c7d5b in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#59 0x00007f3cac8cc8dd in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#60 0x00007f3cac8c79cc in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#61 0x00007f3cac8c85a4 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformInitializer(clang::Expr*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#62 0x00007f3cac8c96b7 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformReturnStmt(clang::ReturnStmt*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#63 0x00007f3cac8e82a4 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#64 0x00007f3cac8e910d in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformIfStmt(clang::IfStmt*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#65 0x00007f3cac8e82a4 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#66 0x00007f3cac8e9c0a in clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#67 0x00007f3cac8fd22e in clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#68 0x00007f3cac88b25b in clang::Sema::DeduceReturnType(clang::FunctionDecl*, clang::SourceLocation, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#69 0x00007f3cac5f5585 in clang::Sema::DiagnoseUseOfDecl(clang::NamedDecl*, llvm::ArrayRef<clang::SourceLocation>, clang::ObjCInterfaceDecl const*, bool, bool, clang::ObjCInterfaceDecl*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#70 0x00007f3cac7be9d5 in FinishOverloadedCallExpr(clang::Sema&, clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, clang::OverloadCandidateSet*, clang::OverloadCandidate**, clang::OverloadingResult, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#71 0x00007f3cac7bed60 in clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#72 0x00007f3cac61e500 in clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#73 0x00007f3cac8cc99c in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#74 0x00007f3cac8c79cc in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#75 0x00007f3cac8c85a4 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformInitializer(clang::Expr*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#76 0x00007f3cac8c96b7 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformReturnStmt(clang::ReturnStmt*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#77 0x00007f3cac8e82a4 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#78 0x00007f3cac8e910d in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformIfStmt(clang::IfStmt*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#79 0x00007f3cac8e82a4 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#80 0x00007f3cac8e9c0a in clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#81 0x00007f3cac8fd22e in clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#82 0x00007f3cac88b25b in clang::Sema::DeduceReturnType(clang::FunctionDecl*, clang::SourceLocation, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#83 0x00007f3cac5f5585 in clang::Sema::DiagnoseUseOfDecl(clang::NamedDecl*, llvm::ArrayRef<clang::SourceLocation>, clang::ObjCInterfaceDecl const*, bool, bool, clang::ObjCInterfaceDecl*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#84 0x00007f3cac7be9d5 in FinishOverloadedCallExpr(clang::Sema&, clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, clang::OverloadCandidateSet*, clang::OverloadCandidate**, clang::OverloadingResult, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#85 0x00007f3cac7bed60 in clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#86 0x00007f3cac61e500 in clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#87 0x00007f3cac8cc99c in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#88 0x00007f3cac8c79cc in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#89 0x00007f3cac8c85a4 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformInitializer(clang::Expr*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#90 0x00007f3cac8c96b7 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformReturnStmt(clang::ReturnStmt*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#91 0x00007f3cac8e82a4 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#92 0x00007f3cac8e910d in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformIfStmt(clang::IfStmt*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#93 0x00007f3cac8e82a4 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#94 0x00007f3cac8e9c0a in clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#95 0x00007f3cac8fd22e in clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#96 0x00007f3cac88b25b in clang::Sema::DeduceReturnType(clang::FunctionDecl*, clang::SourceLocation, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#97 0x00007f3cac5f5585 in clang::Sema::DiagnoseUseOfDecl(clang::NamedDecl*, llvm::ArrayRef<clang::SourceLocation>, clang::ObjCInterfaceDecl const*, bool, bool, clang::ObjCInterfaceDecl*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#98 0x00007f3cac7be9d5 in FinishOverloadedCallExpr(clang::Sema&, clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, clang::OverloadCandidateSet*, clang::OverloadCandidate**, clang::OverloadingResult, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#99 0x00007f3cac7bed60 in clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#100 0x00007f3cac61e500 in clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#101 0x00007f3cac8cc99c in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#102 0x00007f3cac8c79cc in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#103 0x00007f3cac8c85a4 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformInitializer(clang::Expr*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#104 0x00007f3cac8c96b7 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformReturnStmt(clang::ReturnStmt*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#105 0x00007f3cac8e82a4 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#106 0x00007f3cac8e910d in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformIfStmt(clang::IfStmt*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#107 0x00007f3cac8e82a4 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#108 0x00007f3cac8e9c0a in clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#109 0x00007f3cac8fd22e in clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#110 0x00007f3cac88b25b in clang::Sema::DeduceReturnType(clang::FunctionDecl*, clang::SourceLocation, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#111 0x00007f3cac5f5585 in clang::Sema::DiagnoseUseOfDecl(clang::NamedDecl*, llvm::ArrayRef<clang::SourceLocation>, clang::ObjCInterfaceDecl const*, bool, bool, clang::ObjCInterfaceDecl*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#112 0x00007f3cac7be9d5 in FinishOverloadedCallExpr(clang::Sema&, clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, clang::OverloadCandidateSet*, clang::OverloadCandidate**, clang::OverloadingResult, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#113 0x00007f3cac7bed60 in clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#114 0x00007f3cac61e500 in clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#115 0x00007f3cac8cc99c in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#116 0x00007f3cac8c79cc in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#117 0x00007f3cac8c85a4 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformInitializer(clang::Expr*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#118 0x00007f3cac8c96b7 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformReturnStmt(clang::ReturnStmt*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#119 0x00007f3cac8e82a4 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#120 0x00007f3cac8e910d in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformIfStmt(clang::IfStmt*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#121 0x00007f3cac8e82a4 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#122 0x00007f3cac8e9c0a in clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#123 0x00007f3cac8fd22e in clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#124 0x00007f3cac88b25b in clang::Sema::DeduceReturnType(clang::FunctionDecl*, clang::SourceLocation, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#125 0x00007f3cac5f5585 in clang::Sema::DiagnoseUseOfDecl(clang::NamedDecl*, llvm::ArrayRef<clang::SourceLocation>, clang::ObjCInterfaceDecl const*, bool, bool, clang::ObjCInterfaceDecl*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#126 0x00007f3cac7be9d5 in FinishOverloadedCallExpr(clang::Sema&, clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, clang::OverloadCandidateSet*, clang::OverloadCandidate**, clang::OverloadingResult, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#127 0x00007f3cac7bed60 in clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#128 0x00007f3cac61e500 in clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#129 0x00007f3cac8cc99c in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#130 0x00007f3cac8c79cc in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#131 0x00007f3cac8c85a4 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformInitializer(clang::Expr*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#132 0x00007f3cac8c96b7 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformReturnStmt(clang::ReturnStmt*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#133 0x00007f3cac8e82a4 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#134 0x00007f3cac8e910d in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformIfStmt(clang::IfStmt*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#135 0x00007f3cac8e82a4 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#136 0x00007f3cac8e9c0a in clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#137 0x00007f3cac8fd22e in clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#138 0x00007f3cac88b25b in clang::Sema::DeduceReturnType(clang::FunctionDecl*, clang::SourceLocation, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#139 0x00007f3cac5f5585 in clang::Sema::DiagnoseUseOfDecl(clang::NamedDecl*, llvm::ArrayRef<clang::SourceLocation>, clang::ObjCInterfaceDecl const*, bool, bool, clang::ObjCInterfaceDecl*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#140 0x00007f3cac7be9d5 in FinishOverloadedCallExpr(clang::Sema&, clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, clang::OverloadCandidateSet*, clang::OverloadCandidate**, clang::OverloadingResult, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#141 0x00007f3cac7bed60 in clang::Sema::BuildOverloadedCallExpr(clang::Scope*, clang::Expr*, clang::UnresolvedLookupExpr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#142 0x00007f3cac61e500 in clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#143 0x00007f3cac8cc99c in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#144 0x00007f3cac8c79cc in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformExpr(clang::Expr*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#145 0x00007f3cac8c85a4 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformInitializer(clang::Expr*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#146 0x00007f3cac8c96b7 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformReturnStmt(clang::ReturnStmt*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#147 0x00007f3cac8e82a4 in clang::TreeTransform<(anonymous namespace)::TemplateInstantiator>::TransformCompoundStmt(clang::CompoundStmt*, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#148 0x00007f3cac8e9c0a in clang::Sema::SubstStmt(clang::Stmt*, clang::MultiLevelTemplateArgumentList const&) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#149 0x00007f3cac8fd22e in clang::Sema::InstantiateFunctionDefinition(clang::SourceLocation, clang::FunctionDecl*, bool, bool, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#150 0x00007f3cac88b25b in clang::Sema::DeduceReturnType(clang::FunctionDecl*, clang::SourceLocation, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#151 0x00007f3cac8b7884 in clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, clang::QualType, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#152 0x00007f3cac8b78c7 in clang::Sema::DeduceTemplateArguments(clang::FunctionTemplateDecl*, clang::TemplateArgumentListInfo*, clang::FunctionDecl*&, clang::sema::TemplateDeductionInfo&, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#153 0x00007f3cac7a2d8b in clang::Sema::ResolveSingleFunctionTemplateSpecialization(clang::OverloadExpr*, bool, clang::DeclAccessPair*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#154 0x00007f3cac7a35c1 in clang::Sema::ResolveAndFixSingleFunctionTemplateSpecialization(clang::ActionResult<clang::Expr*, true>&, bool, bool, clang::SourceRange, clang::QualType, unsigned int) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#155 0x00007f3cac5ef61d in clang::Sema::CheckPlaceholderExpr(clang::Expr*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#156 0x00007f3cac653816 in clang::Sema::ActOnDecltypeExpression(clang::Expr*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#157 0x00007f3cac1d6655 in clang::Parser::ParseDecltypeSpecifier(clang::DeclSpec&) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#158 0x00007f3cac1fed5f in clang::Parser::ParseOptionalCXXScopeSpecifier(clang::CXXScopeSpec&, clang::OpaquePtr<clang::QualType>, bool, bool*, bool, clang::IdentifierInfo**, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#159 0x00007f3cac252bba in clang::Parser::TryAnnotateCXXScopeToken(bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#160 0x00007f3cac1c9120 in clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#161 0x00007f3cac1ca0f1 in clang::Parser::ParseSpecifierQualifierList(clang::DeclSpec&, clang::AccessSpecifier, clang::Parser::DeclSpecContext) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#162 0x00007f3cac1ca682 in clang::Parser::ParseTypeName(clang::SourceRange*, clang::DeclaratorContext, clang::AccessSpecifier, clang::Decl**, clang::ParsedAttributes*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#163 0x00007f3cac1d7a78 in clang::Parser::ParseAliasDeclarationAfterDeclarator(clang::Parser::ParsedTemplateInfo const&, clang::SourceLocation, clang::Parser::UsingDeclarator&, clang::SourceLocation&, clang::AccessSpecifier, clang::ParsedAttributes&, clang::Decl**) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#164 0x00007f3cac1dfc4f in clang::Parser::ParseUsingDeclaration(clang::DeclaratorContext, clang::Parser::ParsedTemplateInfo const&, clang::SourceLocation, clang::SourceLocation&, clang::AccessSpecifier) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#165 0x00007f3cac1e06dc in clang::Parser::ParseUsingDirectiveOrDeclaration(clang::DeclaratorContext, clang::Parser::ParsedTemplateInfo const&, clang::SourceLocation&, clang::Parser::ParsedAttributesWithRange&) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#166 0x00007f3cac1d3a39 in clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::Parser::ParsedAttributesWithRange&) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#167 0x00007f3cac232194 in clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*, clang::Parser::ParsedAttributesWithRange&) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#168 0x00007f3cac232f99 in clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#169 0x00007f3cac2379d5 in clang::Parser::ParseCompoundStatementBody(bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#170 0x00007f3cac23a753 in clang::Parser::ParseFunctionStatementBody(clang::Decl*, clang::Parser::ParseScope&) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#171 0x00007f3cac25b032 in clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#172 0x00007f3cac1d2f27 in clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::SourceLocation*, clang::Parser::ForRangeInit*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#173 0x00007f3cac253cf1 in clang::Parser::ParseDeclOrFunctionDefInternal(clang::Parser::ParsedAttributesWithRange&, clang::ParsingDeclSpec&, clang::AccessSpecifier) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#174 0x00007f3cac2543b1 in clang::Parser::ParseDeclarationOrFunctionDefinition(clang::Parser::ParsedAttributesWithRange&, clang::ParsingDeclSpec*, clang::AccessSpecifier) [clone .part.253] () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#175 0x00007f3cac259622 in clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&, clang::ParsingDeclSpec*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#176 0x00007f3cac259f1b in clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, bool) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#177 0x00007f3cabc563d0 in cling::IncrementalParser::ParseInternal(llvm::StringRef) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#178 0x00007f3cabc57abc in cling::IncrementalParser::Compile(llvm::StringRef, cling::CompilationOptions const&) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#179 0x00007f3cabbd65be in cling::Interpreter::DeclareInternal(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cling::CompilationOptions const&, cling::Transaction**) const () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#180 0x00007f3cabbd6758 in cling::Interpreter::declare(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cling::Transaction**) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#181 0x00007f3cabaff6fe in TCling::LoadText(char const*) const () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#182 0x00007f3cabaff7eb in TCling::Declare(char const*) () from /data/home/bendavid/rootdev5/installnative/lib/libCling.so
#183 0x00007f3ca9c26013 in ?? ()
#184 0x00007fff28ebfd50 in ?? ()
#185 0x00007f3cb16111ce in WrapperCall(long, unsigned long, void*, void*, void*) () from /data/home/bendavid/rootdev5/installnative/lib/libcppyy_backend3_6.so
#186 0x00007f3cb1611c5f in Cppyy::CallB(long, void*, unsigned long, void*) () from /data/home/bendavid/rootdev5/installnative/lib/libcppyy_backend3_6.so
#187 0x00007f3cb18912ee in CPyCppyy::(anonymous namespace)::BoolExecutor::Execute(long, void*, CPyCppyy::CallContext*) () from /data/home/bendavid/rootdev5/installnative/lib/libcppyy3_6.so
#188 0x00007f3cb18811c9 in CPyCppyy::CPPMethod::ExecuteProtected(void*, long, CPyCppyy::CallContext*) () from /data/home/bendavid/rootdev5/installnative/lib/libcppyy3_6.so
#189 0x00007f3cb187f3e1 in CPyCppyy::CPPMethod::Execute(void*, long, CPyCppyy::CallContext*) () from /data/home/bendavid/rootdev5/installnative/lib/libcppyy3_6.so
#190 0x00007f3cb187f6dc in CPyCppyy::CPPMethod::Call(CPyCppyy::CPPInstance*&, _object*, _object*, CPyCppyy::CallContext*) () from /data/home/bendavid/rootdev5/installnative/lib/libcppyy3_6.so
#191 0x00007f3cb1884189 in CPyCppyy::(anonymous namespace)::mp_call(CPyCppyy::CPPOverload*, _object*, _object*) () from /data/home/bendavid/rootdev5/installnative/lib/libcppyy3_6.so
#192 0x00007f3cb3181c9c in _PyObject_FastCallKeywords () from /lib64/libpython3.6m.so.1.0
#193 0x00007f3cb3182666 in call_function () from /lib64/libpython3.6m.so.1.0
#194 0x00007f3cb3183168 in _PyEval_EvalFrameDefault () from /lib64/libpython3.6m.so.1.0
#195 0x00007f3cb30deb54 in _PyEval_EvalCodeWithName () from /lib64/libpython3.6m.so.1.0
#196 0x00007f3cb30dfef3 in PyEval_EvalCode () from /lib64/libpython3.6m.so.1.0
#197 0x00007f3cb31ee9f2 in run_mod () from /lib64/libpython3.6m.so.1.0
#198 0x00007f3cb30bf397 in PyRun_FileExFlags () from /lib64/libpython3.6m.so.1.0
#199 0x00007f3cb30c4491 in PyRun_SimpleFileExFlags () from /lib64/libpython3.6m.so.1.0
#200 0x00007f3cb30c4de0 in Py_Main.cold.3361 () from /lib64/libpython3.6m.so.1.0
#201 0x00005620bf436b96 in main ()

@eguiraud

bendavid avatar Nov 08 '21 17:11 bendavid

I'm always interested in speeding up JIT-ing of templates, so I ventured to take a look, hoping to find some pass simplification. However, FWIW, my diagnosis is that the problem is not the JIT, so I'm not interested anymore, but below is what I found.

What's going on is that Cling tries to find precompiled code for your template (see RedeclarableTemplateDecl::loadLazySpecializationsImpl) and your typename is literally giganormous: actually running that example program shows an allocation of 3.1GB to fit that expanded name in memory! (I was running it remotely on my workstation which doesn't blink at such a pittance of RAM needs, but the Terminal app on my poor Macbook choked on stuffing the output in its history. :} ) The code is then busy calculating a hash of that enormous type name, which it walks recursively, in order to do the lookup with that hash (and subsequent load if actually found). Note that's not taking "forever" (as in, it's not hanging), just a lot of work and thus a lot of wall clock time. If you make the lookup implementation in clang's DeclTemplate.cpp return false instead, you'll find that the JIT is just as zippy (in fact, even more so, on my box) as g++.

Not sure what to do about it, since the size only becomes apparent when walking the tree of template arguments (and adding a "stop recursion and give up" somewhere looks like it would require a lot of code changes).

wlav avatar Nov 09 '21 22:11 wlav

Thanks @wlav that's exactly what I had bet on. @vgvassilev FYI

Axel-Naumann avatar Nov 11 '21 12:11 Axel-Naumann