http://llvm.org/bugs/show_bug.cgi?id=20781
Bug ID: 20781 Summary: LLDB asserts "Cannot get layout of forward declarations!" from RecordLayoutBuilder.cpp:2782 Product: lldb Version: unspecified Hardware: PC OS: All Status: NEW Severity: normal Priority: P Component: All Bugs Assignee: lldb-dev@cs.uiuc.edu Reporter: chandl...@gmail.com CC: david.majne...@gmail.com, dblai...@gmail.com, tfi...@google.com Classification: Unclassified Steps to reproduce on Linux x86-64 (sorry this is huge): 1) Checkout LLVM. I was at r216571, but I doubt it was that specific. 2) Build 'llc' with a modern Clang host compiler in a boring CMake/Ninja 'debug' build ('-g' is the debug symbol option). 3) Grab this input to llc into a file (it's some code from Bullet): % cat t.ll target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" %btTransform = type { %btMatrix3x3, %btVector3 } %btMatrix3x3 = type { [3 x %btVector3] } %btVector3 = type { [4 x float] } define void @_ZN7RagDollC2EP15btDynamicsWorldRK9btVector3f() unnamed_addr noreturn uwtable ssp align 2 { %localA = alloca %btTransform, align 4 %m_basis.i = getelementptr inbounds %btTransform* %localA, i64 0, i32 0 %call5.i = call float @sinx() nounwind %mul20.i = fmul float %call5.i, fmul (float undef, float undef) %sub21.i = fsub float %mul20.i, undef %arrayidx.i1.i.i = getelementptr inbounds %btMatrix3x3* %m_basis.i, i64 0, i32 0, i64 1, i32 0, i64 0 %1 = bitcast float* %arrayidx.i1.i.i to <4 x float>* %2 = insertelement <2 x float> undef, float %sub21.i, i32 0 %3 = insertelement <2 x float> %2, float 0.000000e+00, i32 1 %4 = shufflevector <2 x float> <float undef, float 0.000000e+00>, <2 x float> %3, <4 x i32> <i32 0, i32 1, i32 2, i32 3> store <4 x float> %4, <4 x float>* %1, align 4 %m_basis.i1 = getelementptr inbounds %btTransform* %localA, i64 0, i32 0 %arrayidx5.i.i.i.i = getelementptr inbounds %btMatrix3x3* %m_basis.i1, i64 0, i32 0, i64 0, i32 0, i64 2 %5 = bitcast float* %arrayidx5.i.i.i.i to i8* call void @llvm.memset.p0i8.i64(i8* %5, i8 0, i64 16, i32 4, i1 false) nounwind ret void } declare float @sinx() nounwind readnone declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) nounwind 3) Run the built llc binary under lldb as follows: % lldb -- path/to/llc -o - t.ll -mcpu=x86-64 -x86-experimental-vector-shuffle-lowering -debug (lldb) target create "./bin/llc" Current executable set to './bin/llc' (x86_64). (lldb) settings set -- target.run-args "-o" "-" "t.ll" "-mcpu=x86-64" "-x86-experimental-vector-shuffle-lowering" "-debug" (lldb) b X86ISelLowering.cpp:6798 Breakpoint 1: where = llc`llvm::X86TargetLowering::LowerBUILD_VECTOR(llvm::SDValue, llvm::SelectionDAG&) const + 6447 at X86ISelLowering.cpp:6798, address = 0x0000000000f89c5f (lldb) r Process 16367 launching Process 16367 stopped * thread #1: tid = 16367, 0x00007ffff7ddb2d0, name = 'llc', stop reason = trace frame #0: 0x00007ffff7ddb2d0 error: No such process Process 16367 launched: './bin/llc' (x86_64) Args: ./bin/llc -o - t.ll -mcpu=x86-64 -x86-experimental-vector-shuffle-lowering -debug Features:+64bit,+sse2 CPU:x86-64 <snip> Legalizing: 0x2a2d1e0: v4f32 = BUILD_VECTOR 0x2a2add0, 0x2a2d0d8, 0x2a2b0e8, 0x2a2d0d8 [ORD=11] [ID=23] Process 16367 stopped * thread #1: tid = 16367, 0x0000000000f89c5f llc`llvm::X86TargetLowering::LowerBUILD_VECTOR(this=0x00000000029cfef0, Op=SDValue at 0x00007fffffffbcd8, DAG=0x00000000029fa010) const + 6447 at X86ISelLowering.cpp:6798, name = 'llc', stop reason = breakpoint 1.1 frame #0: 0x0000000000f89c5f llc`llvm::X86TargetLowering::LowerBUILD_VECTOR(this=0x00000000029cfef0, Op=SDValue at 0x00007fffffffbcd8, DAG=0x00000000029fa010) const + 6447 at X86ISelLowering.cpp:6798 6795 6796 // Turn it into a shuffle of zero and zero-extended scalar to vector. 6797 Item = getShuffleVectorZeroOrUndef(Item, 0, NumZero > 0, Subtarget, DAG); -> 6798 SmallVector<int, 8> MaskVec; 6799 for (unsigned i = 0; i != NumElems; ++i) 6800 MaskVec.push_back(i == Idx ? 0 : 1); 6801 return DAG.getVectorShuffle(VT, dl, Item, DAG.getUNDEF(VT), &MaskVec[0]); (lldb) p Item->dumpr() lldb: ../tools/clang/lib/AST/RecordLayoutBuilder.cpp:2782: const clang::ASTRecordLayout &clang::ASTContext::getASTRecordLayout(const clang::RecordDecl *) const: Assertion `D && "Cannot get layout of forward declarations!"' failed. zsh: abort (core dumped) lldb -- ./bin/llc -o - t.ll -mcpu=x86-64 -debug Since this might well be a matter of LLDB and Clang disagreeing about how much debug information should be emitted, CC-ing folks that work on the debug info side of things as well. -- You are receiving this mail because: You are the assignee for the bug.
_______________________________________________ lldb-dev mailing list lldb-dev@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev