<div dir="ltr">This isn't what MSVC does for their internal types, but it's probably OK for now. This is what they do:<div><div><br></div><div><div> Enum (0x1002) {</div><div> TypeLeafKind: LF_ENUM (0x1507)</div><div> NumEnumerators: 6</div><div> Properties [ (0x208)</div><div> HasUniqueName (0x200)</div><div> Nested (0x8)</div><div> ]</div><div> UnderlyingType: int (0x74)</div><div> FieldListType: <field list> (0x1001)</div><div> Name: __vc_attributes::moduleAttribute::type_e</div><div> LinkageName: .?AW4type_e@moduleAttribute@__vc_attributes@@</div><div> }</div><div> StringId (0x1003) {</div><div> TypeLeafKind: LF_STRING_ID (0x1605)</div><div> Id: 0x0</div><div> StringData: c:\src\llvm-project\build\predefined c++ attributes (compiler internal)</div><div> }</div><div> UdtSourceLine (0x1004) {</div><div> TypeLeafKind: LF_UDT_SRC_LINE (0x1606)</div><div> UDT: __vc_attributes::moduleAttribute::type_e (0x1002)</div><div> SourceFile: c:\src\llvm-project\build\predefined c++ attributes (compiler internal) (0x1003)</div><div> LineNumber: 482</div><div> }</div></div></div><div><br></div><div>Inventing a file and line for __block_descriptor doesn't seem important, unless we discover some invariant in their debugger that requires one.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, May 3, 2017 at 2:39 PM, Saleem Abdulrasool via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: compnerd<br>
Date: Wed May 3 16:39:01 2017<br>
New Revision: 302085<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=302085&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=302085&view=rev</a><br>
Log:<br>
DebugInfo: elide type index entries for synthetic types<br>
<br>
Compiler emitted synthetic types may not have an associated DIFile<br>
(translation unit). In such a case, when generating CodeView debug type<br>
information, we would attempt to compute an absolute filepath which<br>
would result in a segfault due to a NULL DIFile*. If there is no source<br>
file associated with the type, elide the type index entry for the type<br>
and record the type information. This actually results in higher<br>
fidelity debug information than clang/C2 as of this writing.<br>
<br>
Resolves PR32668!<br>
<br>
Added:<br>
llvm/trunk/test/DebugInfo/<wbr>COFF/synthetic.ll<br>
Modified:<br>
llvm/trunk/lib/CodeGen/<wbr>AsmPrinter/CodeViewDebug.cpp<br>
<br>
Modified: llvm/trunk/lib/CodeGen/<wbr>AsmPrinter/CodeViewDebug.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp?rev=302085&r1=302084&r2=302085&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/<wbr>CodeGen/AsmPrinter/<wbr>CodeViewDebug.cpp?rev=302085&<wbr>r1=302084&r2=302085&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/CodeGen/<wbr>AsmPrinter/CodeViewDebug.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/<wbr>AsmPrinter/CodeViewDebug.cpp Wed May 3 16:39:01 2017<br>
@@ -1705,10 +1705,12 @@ TypeIndex CodeViewDebug::lowerCompleteTy<br>
SizeInBytes, FullName, Ty->getIdentifier());<br>
TypeIndex ClassTI = TypeTable.writeKnownType(CR);<br>
<br>
- StringIdRecord SIDR(TypeIndex(0x0), getFullFilepath(Ty->getFile())<wbr>);<br>
- TypeIndex SIDI = TypeTable.writeKnownType(SIDR)<wbr>;<br>
- UdtSourceLineRecord USLR(ClassTI, SIDI, Ty->getLine());<br>
- TypeTable.writeKnownType(USLR)<wbr>;<br>
+ if (const auto *File = Ty->getFile()) {<br>
+ StringIdRecord SIDR(TypeIndex(0x0), getFullFilepath(File));<br>
+ TypeIndex SIDI = TypeTable.writeKnownType(SIDR)<wbr>;<br>
+ UdtSourceLineRecord USLR(ClassTI, SIDI, Ty->getLine());<br>
+ TypeTable.writeKnownType(USLR)<wbr>;<br>
+ }<br>
<br>
addToUDTs(Ty, ClassTI);<br>
<br>
<br>
Added: llvm/trunk/test/DebugInfo/<wbr>COFF/synthetic.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/synthetic.ll?rev=302085&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>DebugInfo/COFF/synthetic.ll?<wbr>rev=302085&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/DebugInfo/<wbr>COFF/synthetic.ll (added)<br>
+++ llvm/trunk/test/DebugInfo/<wbr>COFF/synthetic.ll Wed May 3 16:39:01 2017<br>
@@ -0,0 +1,55 @@<br>
+; RUN: llc -mtriple x86_64-unknown-windows-msvc -filetype asm -o - %s | FileCheck %s<br>
+<br>
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:<wbr>32:64-S128"<br>
+target triple = "x86_64-unknown-windows-msvc"<br>
+<br>
+define dllexport void ()* @f() !dbg !6 {<br>
+entry:<br>
+ ret void ()* null, !dbg !28<br>
+}<br>
+<br>
+!<a href="http://llvm.dbg.cu" rel="noreferrer" target="_blank">llvm.dbg.cu</a> = !{!0}<br>
+!llvm.module.flags = !{!3, !4}<br>
+<br>
+!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)<br>
+!1 = !DIFile(filename: "<stdin>", directory: "/Users/compnerd/Source/llvm", checksumkind: CSK_MD5, checksum: "<wbr>2851eea4f12e754f1a68c47a704540<wbr>6a")<br>
+!2 = !{}<br>
+!3 = !{i32 2, !"CodeView", i32 1}<br>
+!4 = !{i32 2, !"Debug Info Version", i32 3}<br>
+!6 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 1, type: !7, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)<br>
+!7 = !DISubroutineType(types: !8)<br>
+!8 = !{!9}<br>
+!9 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !10, size: 64)<br>
+!10 = !DICompositeType(tag: DW_TAG_structure_type, scope: !1, size: 256, flags: DIFlagAppleBlock, elements: !11)<br>
+!11 = !{!12, !14, !16, !17, !21}<br>
+!12 = !DIDerivedType(tag: DW_TAG_member, name: "__isa", scope: !1, file: !1, baseType: !13, size: 64)<br>
+!13 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 64)<br>
+!14 = !DIDerivedType(tag: DW_TAG_member, name: "__flags", scope: !1, file: !1, baseType: !15, size: 32, offset: 64)<br>
+!15 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)<br>
+!16 = !DIDerivedType(tag: DW_TAG_member, name: "__reserved", scope: !1, file: !1, baseType: !15, size: 32, offset: 96)<br>
+!17 = !DIDerivedType(tag: DW_TAG_member, name: "__FuncPtr", scope: !1, file: !1, baseType: !18, size: 64, offset: 128)<br>
+!18 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !19, size: 64)<br>
+!19 = !DISubroutineType(types: !20)<br>
+!20 = !{null}<br>
+!21 = !DIDerivedType(tag: DW_TAG_member, name: "__descriptor", scope: !1, baseType: !22, size: 64, align: 64, offset: 192)<br>
+!22 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !23, size: 64)<br>
+!23 = !DICompositeType(tag: DW_TAG_structure_type, name: "__block_descriptor", scope: !1, size: 64, flags: DIFlagAppleBlock, elements: !24)<br>
+!24 = !{!25, !27}<br>
+!25 = !DIDerivedType(tag: DW_TAG_member, name: "reserved", scope: !1, file: !1, baseType: !26, size: 32)<br>
+!26 = !DIBasicType(name: "long unsigned int", size: 32, encoding: DW_ATE_unsigned)<br>
+!27 = !DIDerivedType(tag: DW_TAG_member, name: "Size", scope: !1, file: !1, baseType: !26, size: 32, offset: 32)<br>
+!28 = !DILocation(line: 1, scope: !6)<br>
+<br>
+; CHECK: # Struct<br>
+; CHECK: # TypeLeafKind: LF_STRUCTURE<br>
+; CHECK: # MemberCount: 0<br>
+; CHECK: # Properties [<br>
+; CHECK: # ForwardReference<br>
+; CHECK: # ]<br>
+; CHECK: # FieldList: 0x0<br>
+; CHECK: # DerivedFrom: 0x0<br>
+; CHECK: # VShape: 0x0<br>
+; CHECK: # SizeOf: 0<br>
+; CHECK: # Name: __block_descriptor<br>
+; CHECK: # }<br>
+<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>