The most likely explanation is that we somehow build a Clang AST where a class has it's itself as a base class or as a field type. Not sure how that happened, but I assume something like CRTP could maybe trigger such a bug.
Please break in `getASTRecordLayout` and run `D->dumpColor()` in two different frames and post the output. Otherwise if you have a Release build which you can modify, you can also add `D->dumpColor()` as the first statement in clang::ASTContext::getASTRecordLayout (the file is `llvm-project/clang/lib/AST/RecordLayoutBuilder.cpp:2965` ). This should print the class which we presumably incorrectly reconstructed and it's structure. - Raphael Am Do., 28. Feb. 2019 um 16:48 Uhr schrieb Ben Ruthig via lldb-dev <lldb-dev@lists.llvm.org>: > > Hello all, > > I am currently investigating an issue where LLDB is crashing due to a stack > overflow when attempting to evaluate an expression. I have seen the same > issue in 6.0.1 and have reproduced it in 7.0.1. Any help to diagnose and fix > would be greatly appreciated as I am trying to meet a release deadline early > next week! > > The facts: > - The expression being evaluated is not a valid expression in the C++ domain. > For example the expression is a datatype like 'Foobar'. (For reasons > unexplained I am constrained to supporting this use case.) > - The crash occurs when using the C++ LLDB API but not when trying to > evaluate the expression via the LLDB shell or the LLDB Python script shell. > However, when doing 'expr Foobar' there is no output and the operation is > completely silent. It is similar when trying to do > 'lldb.frame.EvaluateExpression("Foobar")' in the Python shell as well. I > would expect to get some error output or an SbValue in an error state but no > such luck. > - I was able to capture a stack trace (attached) and it seems to be a > recursive loop bottoming out. For brevity two 'loops' of stacktrace are > included here: > > 3387. liblldb.dll!clang::ASTContext::getASTRecordLayout(const > clang::RecordDecl * D) Line 2965 C++ > 3388. liblldb.dll!`anonymous > namespace'::EmptySubobjectMap::ComputeEmptySubobjectSizes() Line 216 C++ > 3389. liblldb.dll!`anonymous > namespace'::EmptySubobjectMap::EmptySubobjectMap(const clang::ASTContext & > Context, const clang::CXXRecordDecl * Class) Line 172 C++ > 3390. liblldb.dll!clang::ASTContext::getASTRecordLayout(const > clang::RecordDecl * D) Line 2965 C++ > 3391. liblldb.dll!`anonymous > namespace'::EmptySubobjectMap::ComputeEmptySubobjectSizes() Line 216 C++ > 3392. liblldb.dll!`anonymous > namespace'::EmptySubobjectMap::EmptySubobjectMap(const clang::ASTContext & > Context, const clang::CXXRecordDecl * Class) Line 172 C++ > 3393. liblldb.dll!clang::ASTContext::getASTRecordLayout(const > clang::RecordDecl * D) Line 2965 C++ > > Help please :S > > Thanks, > Ben > _______________________________________________ > lldb-dev mailing list > lldb-dev@lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev _______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev