<div dir="ltr">I just reported this bug:<div><a href="https://bugs.llvm.org/show_bug.cgi?id=35314">https://bugs.llvm.org/show_bug.cgi?id=35314</a><br></div><div><br></div><div>This very simple IR is causing infinite recursion in llvm::DwarfUnit::getOrCreateTypeDIE in llvm 5.0.0.</div><div><br></div><div>Is there a workaround? Is anyone willing to save me a recompile and check if this is fixed in 5.0.1 or trunk?</div><div><br></div><div>`clang -c test.ll` repros the issue.</div><div><br></div><div><div>; ModuleID = 'test'</div><div>source_filename = "test"</div><div>target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"</div><div>target triple = "x86_64-unknown-linux-gnu"</div><div><br></div><div>%Foo = type { float }</div><div>%"[]u8" = type { i8*, i64 }</div><div><br></div><div>@0 = internal unnamed_addr constant %Foo zeroinitializer, align 4</div><div><br></div><div>; Function Attrs: nobuiltin noreturn nounwind</div><div>define internal fastcc void @panic(%"[]u8"* byval nonnull readonly) unnamed_addr #0 !dbg !4 {</div><div>Entry:</div><div>  call void @llvm.dbg.declare(metadata %"[]u8"* %0, metadata !18, metadata !19), !dbg !20</div><div>  br label %WhileCond, !dbg !21</div><div><br></div><div>WhileCond:                                        ; preds = %WhileCond, %Entry</div><div>  br label %WhileCond, !dbg !21</div><div>}</div><div><br></div><div>; Function Attrs: nounwind readnone speculatable</div><div>declare void @llvm.dbg.declare(metadata, metadata, metadata) #1</div><div><br></div><div>; Function Attrs: nobuiltin nounwind</div><div>define void @entry() #2 !dbg !24 {</div><div>Entry:</div><div>  %f = alloca %Foo, align 4</div><div>  %0 = bitcast %Foo* %f to i8*, !dbg !36</div><div>  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* bitcast (%Foo* @0 to i8*), i64 4, i32 4, i1 false), !dbg !36</div><div>  call void @llvm.dbg.declare(metadata %Foo* %f, metadata !28, metadata !19), !dbg !36</div><div>  ret void, !dbg !37</div><div>}</div><div><br></div><div>; Function Attrs: argmemonly nounwind</div><div>declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1) #3</div><div><br></div><div>attributes #0 = { nobuiltin noreturn nounwind "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" }</div><div>attributes #1 = { nounwind readnone speculatable }</div><div>attributes #2 = { nobuiltin nounwind "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" }</div><div>attributes #3 = { argmemonly nounwind }</div><div><br></div><div>!llvm.module.flags = !{!0}</div><div>!<a href="http://llvm.dbg.cu">llvm.dbg.cu</a> = !{!1}</div><div><br></div><div>!0 = !{i32 2, !"Debug Info Version", i32 3}</div><div>!1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, producer: "zig 0.1.1.1f0d561", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !3)</div><div>!2 = !DIFile(filename: "test", directory: ".")</div><div>!3 = !{}</div><div>!4 = distinct !DISubprogram(name: "panic", scope: !5, file: !5, line: 10, type: !6, isLocal: true, isDefinition: true, scopeLine: 10, isOptimized: false, unit: !1, variables: !17)</div><div>!5 = !DIFile(filename: "test.zig", directory: "/home/andy/dev/zig/build")</div><div>!6 = !DISubroutineType(types: !7)</div><div>!7 = !{!8, !9}</div><div>!8 = !DIBasicType(name: "void", encoding: DW_ATE_unsigned)</div><div>!9 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "&[]const u8", baseType: !10, size: 64, align: 64)</div><div>!10 = !DICompositeType(tag: DW_TAG_structure_type, name: "[]u8", size: 128, align: 64, elements: !11)</div><div>!11 = !{!12, !15}</div><div>!12 = !DIDerivedType(tag: DW_TAG_member, name: "ptr", scope: !10, baseType: !13, size: 64, align: 64)</div><div>!13 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "&u8", baseType: !14, size: 64, align: 64)</div><div>!14 = !DIBasicType(name: "u8", size: 8, encoding: DW_ATE_unsigned_char)</div><div>!15 = !DIDerivedType(tag: DW_TAG_member, name: "len", scope: !10, baseType: !16, size: 64, align: 64, offset: 64)</div><div>!16 = !DIBasicType(name: "usize", size: 64, encoding: DW_ATE_unsigned)</div><div>!17 = !{!18}</div><div>!18 = !DILocalVariable(name: "msg", arg: 1, scope: !4, file: !5, line: 10, type: !10)</div><div>!19 = !DIExpression()</div><div>!20 = !DILocation(line: 10, column: 14, scope: !4)</div><div>!21 = !DILocation(line: 10, column: 45, scope: !22)</div><div>!22 = distinct !DILexicalBlock(scope: !23, file: !5, line: 10, column: 43)</div><div>!23 = distinct !DILexicalBlock(scope: !4, file: !5, line: 10, column: 14)</div><div>!24 = distinct !DISubprogram(name: "entry", scope: !5, file: !5, line: 6, type: !25, isLocal: false, isDefinition: true, scopeLine: 6, isOptimized: false, unit: !1, variables: !27)</div><div>!25 = !DISubroutineType(types: !26)</div><div>!26 = !{!8}</div><div>!27 = !{!28}</div><div>!28 = !DILocalVariable(name: "f", scope: !29, file: !5, line: 7, type: !30)</div><div>!29 = distinct !DILexicalBlock(scope: !24, file: !5, line: 6, column: 19)</div><div>!30 = distinct !DICompositeType(tag: DW_TAG_union_type, name: "Foo", scope: !30, file: !5, line: 1, size: 32, align: 32, elements: !31)</div><div>!31 = !{!32, !34}</div><div>!32 = !DIDerivedType(tag: DW_TAG_member, name: "float", scope: !30, file: !5, line: 2, baseType: !33, size: 32, align: 32)</div><div>!33 = !DIBasicType(name: "f32", size: 32, encoding: DW_ATE_float)</div><div>!34 = !DIDerivedType(tag: DW_TAG_member, name: "int", scope: !30, file: !5, line: 3, baseType: !35, size: 32, align: 32)</div><div>!35 = !DIBasicType(name: "u32", size: 32, encoding: DW_ATE_unsigned)</div><div>!36 = !DILocation(line: 7, column: 5, scope: !29)</div><div>!37 = !DILocation(line: 6, column: 19, scope: !24)</div></div><div><br></div></div>