<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>