[llvm] r209178 - DebugInfo: Assume all subprogram DIEs have been created before any abstract subprograms are constructed.

Adrian Prantl aprantl at apple.com
Tue May 20 13:44:00 PDT 2014


> On May 19, 2014, at 4:16 PM, David Blaikie <dblaikie at gmail.com> wrote:
> 
> Author: dblaikie
> Date: Mon May 19 18:16:19 2014
> New Revision: 209178
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=209178&view=rev
> Log:
> DebugInfo: Assume all subprogram DIEs have been created before any abstract subprograms are constructed.
> 
> Since we visit the whole list of subprograms for each CU at module
> start, this is clearly true - don't test for the case, just assert it.
> 
> A few old test cases seemed to have incomplete subprogram lists, but any
> attempt to reproduce them shows full subprogram lists that even include
> entities that have been completely inlined and the out of line
> definition removed.
> 
> Modified:
>    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>    llvm/trunk/test/CodeGen/X86/stack-protector-dbginfo.ll
>    llvm/trunk/test/DebugInfo/X86/dbg-value-location.ll
> 
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=209178&r1=209177&r2=209178&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Mon May 19 18:16:19 2014
> @@ -552,11 +552,11 @@ void DwarfDebug::constructAbstractSubpro
>   if (!ProcessedSPNodes.insert(Sub))
>     return;
> 
> -  if (DIE *ScopeDIE = TheCU.getDIE(Sub)) {
> -    AbstractSPDies.insert(std::make_pair(Sub, ScopeDIE));
> -    TheCU.addUInt(*ScopeDIE, dwarf::DW_AT_inline, None, dwarf::DW_INL_inlined);
> -    createAndAddScopeChildren(TheCU, Scope, *ScopeDIE);
> -  }
> +  DIE *ScopeDIE = TheCU.getDIE(Sub);
> +  assert(ScopeDIE);

Hi David,

our buildbots noticed that this assertion fails when doing a bootstrapped LTO build of clang.
To reproduce this on ToT r209227:
1) Build a +Asserts build of clang
2) Configure a separate build directory to append -flto to CXX_FLAGS using the libLTO built in stage 1
3) Build llvm (or quicker, just the FileUpdate target)
4) Observe 
... -o bin/FileUpdate  lib/libLLVMSupport.a -lcurses -lpthread -lz -Wl,-rpath, at executable_path/../lib && :
!{i32 786478, metadata <badref>, metadata <badref>, metadata !"PrintStackTraceOnErrorSignal", metadata !"PrintStackTraceOnErrorSignal", metadata !"_ZN4llvm3sys28PrintStackTraceOnErrorSignalEv", i32 333, metadata <badref>, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 true, null, null, null, metadata <badref>, i32 333} ; [ DW_TAG_subprogram ] [line 333] [def] [PrintStackTraceOnErrorSignal]

Assertion failed: (ScopeDIE), function constructAbstractSubprogramScopeDIE, file ../lib/CodeGen/AsmPrinter/DwarfDebug.cpp, line 538.

Note: I added
  if (!ScopeDIE) Sub->dump();
before 
  assert(ScopeDIE);
to generate the above output.

Please revert or fix this soon. 

thanks,
Adrian

> +  AbstractSPDies.insert(std::make_pair(Sub, ScopeDIE));
> +  TheCU.addUInt(*ScopeDIE, dwarf::DW_AT_inline, None, dwarf::DW_INL_inlined);
> +  createAndAddScopeChildren(TheCU, Scope, *ScopeDIE);
> }
> 
> DIE &DwarfDebug::constructSubprogramScopeDIE(DwarfCompileUnit &TheCU,
> 
> Modified: llvm/trunk/test/CodeGen/X86/stack-protector-dbginfo.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/stack-protector-dbginfo.ll?rev=209178&r1=209177&r2=209178&view=diff
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/stack-protector-dbginfo.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/stack-protector-dbginfo.ll Mon May 19 18:16:19 2014
> @@ -33,7 +33,7 @@ attributes #0 = { sspreq }
> !5 = metadata !{}
> !6 = metadata !{metadata !7}
> !7 = metadata !{i32 786472, metadata !"max_frame_size", i64 0} ; [ DW_TAG_enumerator ] [max_frame_size :: 0]
> -!8 = metadata !{metadata !9}
> +!8 = metadata !{metadata !9, metadata !24, metadata !41, metadata !65}
> !9 = metadata !{i32 786478, metadata !1, metadata !10, metadata !"read_response_size", metadata !"read_response_size", metadata !"_Z18read_response_sizev", i32 27, metadata !11, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 true, i32 ()* @_Z18read_response_sizev, null, null, metadata !14, i32 27} ; [ DW_TAG_subprogram ] [line 27] [def] [read_response_size]
> !10 = metadata !{i32 786473, metadata !1}         ; [ DW_TAG_file_type ] [/Users/matt/ryan_bug/<unknown>]
> !11 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !12, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
> 
> Modified: llvm/trunk/test/DebugInfo/X86/dbg-value-location.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/dbg-value-location.ll?rev=209178&r1=209177&r2=209178&view=diff
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/X86/dbg-value-location.ll (original)
> +++ llvm/trunk/test/DebugInfo/X86/dbg-value-location.ll Mon May 19 18:16:19 2014
> @@ -71,7 +71,7 @@ declare void @llvm.dbg.value(metadata, i
> !18 = metadata !{i32 786443, metadata !26, metadata !0, i32 19510, i32 1, i32 99} ; [ DW_TAG_lexical_block ]
> !22 = metadata !{i32 18094, i32 2, metadata !15, metadata !17}
> !23 = metadata !{i32 19524, i32 1, metadata !18, null}
> -!24 = metadata !{metadata !0, metadata !6, metadata !7, metadata !8}
> +!24 = metadata !{metadata !0, metadata !6, metadata !7, metadata !8, metadata !16}
> !25 = metadata !{i32 786473, metadata !27} ; [ DW_TAG_file_type ]
> !26 = metadata !{metadata !"/tmp/f.c", metadata !"/tmp"}
> !27 = metadata !{metadata !"f.i", metadata !"/tmp"}
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list