Bug? in lldb/clang and expression evaluation

Hi all,

I’m trying to debug lldb to see where the active thread gets unselected, using my patch for the “frame return” command.

But I’m having some problems. Most of the time, I can’t evaluate C++ expressions, like “m_threads[idx]” (missing symbol: …), or “process->GetSelectedThread()” (call is ambiguous, but no candidates are given).
Since I was having these errors, I tried checking out if I could find those candidates while clang parsed the AST.

Right now, I’m running a test program in lldb in lldb in lldb… It’s not that fun :slight_smile:

I will stop the bottom debugger in CommandObjectThread.cpp:413 and, in the middle lldb, run the command:

frame #0: 0x000000010031d875 LLDB`CommandObjectThreadStepWithTypeAndScope::Execute(lldb_private::Args&, lldb_private::CommandReturnObject&) + 197 at CommandObjectThread.cpp:413
410 else
411 {
412 const uint32_t num_threads = process->GetThreadList().GetSize();
→ 413 Thread *thread = NULL;
415 if (command.GetArgumentCount() == 0)
416 {

  1. expr process->GetThreadList()

This command, normally, will error out with:

error: call to member function ‘GetThreadList’ is ambiguous
note: candidate function
note: candidate function
error: 1 errors parsing expression

Not listing the candidate functions (as it should?). If I stop that lldb, I can’t check the Diagnostic object (with the outermost lldb):

frame #0: 0x000000010042b182 LLDB`clang::CompilerInstance::getDiagnostics() const + 114 at CompilerInstance.h:254
251 /// Get the current diagnostics engine.
252 Diagnostic &getDiagnostics() const {
253 assert(Diagnostics && “Compiler instance has no diagnostics!”);
→ 254 return *Diagnostics;
255 }
257 /// setDiagnostics - Replace the current diagnostics engine.
0) expr *(Diagnostics.Obj)
Assertion failed: (D && “Cannot get layout of forward declarations!”), function getASTRecordLayout, file RecordLayoutBuilder.cpp, line 1835.
[1] 73430 illegal hardware instruction lldb

This triggers an assert and shuts down clang. I have built lldb with the debug version of llvm+clang, as it says on the docs/ folder.

Shouldn’t clang+lldb be able to get that information? Any clues on where the bug might lie? (clang? lldb?)

Regards,nbsp; Filipe Cabecinhas

P.S: XCode blows up, too, which shouldn’t happen.

Sean Callanan has a patch that is coming that improves C++ expressions. We know of this issue and are currently working to resolve it. The fix should be landing in the next day or so.

Greg Clayton

Thanks, I will be waiting for it.