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

Reply via email to