]> granicus.if.org Git - llvm/commitdiff
[codeview] Emit 'D' as the cv source language for D code
authorReid Kleckner <rnk@google.com>
Mon, 24 Jul 2017 16:16:42 +0000 (16:16 +0000)
committerReid Kleckner <rnk@google.com>
Mon, 24 Jul 2017 16:16:42 +0000 (16:16 +0000)
This matches DMD:
https://github.com/dlang/dmd/blob/522263965cf3a27ed16b31f3c3562db86cdeabec/src/ddmd/backend/cv8.c#L199

Fixes PR33899.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@308890 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/DebugInfo/CodeView/CodeView.h
lib/CodeGen/AsmPrinter/CodeViewDebug.cpp
lib/DebugInfo/CodeView/EnumTables.cpp
test/DebugInfo/COFF/dlang.ll [new file with mode: 0644]
tools/llvm-pdbutil/MinimalSymbolDumper.cpp

index 7b34cd0b56df3fb77db83d4822c55a4850ea9539..08874b16ed010d871ad4c0b500567c90247fe489 100644 (file)
@@ -158,7 +158,11 @@ enum SourceLanguage : uint8_t {
   Java = 0x0d,
   JScript = 0x0e,
   MSIL = 0x0f,
-  HLSL = 0x10
+  HLSL = 0x10,
+
+  /// The DMD compiler emits 'D' for the CV source language. Microsoft doesn't
+  /// have an enumerator for it yet.
+  D = 'D',
 };
 
 /// These values correspond to the CV_call_e enumeration, and are documented
index ec0f007371dcde03954b7bf4cbdc03c9e0f9708d..c9686cccfdff18a8cf1435d522ff547093c249dc 100644 (file)
@@ -570,6 +570,8 @@ static SourceLanguage MapDWLangToCVLang(unsigned DWLang) {
     return SourceLanguage::Cobol;
   case dwarf::DW_LANG_Java:
     return SourceLanguage::Java;
+  case dwarf::DW_LANG_D:
+    return SourceLanguage::D;
   default:
     // There's no CodeView representation for this language, and CV doesn't
     // have an "unknown" option for the language field, so we'll use MASM,
index 4cfb55a31b356fa0c015c9f03c403210bed8c2f5..e58d2f8a1d3be9f8e92f6f7c1ab0785af5b8dc65 100644 (file)
@@ -132,7 +132,7 @@ static const EnumEntry<codeview::SourceLanguage> SourceLanguages[] = {
     CV_ENUM_ENT(SourceLanguage, CSharp),  CV_ENUM_ENT(SourceLanguage, VB),
     CV_ENUM_ENT(SourceLanguage, ILAsm),   CV_ENUM_ENT(SourceLanguage, Java),
     CV_ENUM_ENT(SourceLanguage, JScript), CV_ENUM_ENT(SourceLanguage, MSIL),
-    CV_ENUM_ENT(SourceLanguage, HLSL),
+    CV_ENUM_ENT(SourceLanguage, HLSL),    CV_ENUM_ENT(SourceLanguage, D),
 };
 
 static const EnumEntry<uint32_t> CompileSym2FlagNames[] = {
diff --git a/test/DebugInfo/COFF/dlang.ll b/test/DebugInfo/COFF/dlang.ll
new file mode 100644 (file)
index 0000000..7bfdac3
--- /dev/null
@@ -0,0 +1,41 @@
+; RUN: llc < %s | FileCheck %s --check-prefix=ASM
+; RUN: llc -filetype=obj < %s | llvm-readobj -codeview | FileCheck %s --check-prefix=OBJ
+
+; ASM:      .short  4412                    # Record kind: S_COMPILE3
+; ASM-NEXT: .long   68                      # Flags and language
+; ASM-NEXT: .short  208                     # CPUType
+
+; OBJ-LABEL: Compile3Sym {
+; OBJ-NEXT:    Kind: S_COMPILE3 (0x113C)
+; OBJ-NEXT:    Language: D (0x44)
+; OBJ-NEXT:    Flags [ (0x0)
+; OBJ-NEXT:    ]
+; OBJ-NEXT:    Machine: X64 (0xD0)
+; OBJ-NEXT:    FrontendVersion: 6.0.0.0
+; OBJ-NEXT:    BackendVersion: 6000.0.0.0
+; OBJ-NEXT:    VersionName: LDC version 6.0.0
+; OBJ-NEXT:  }
+
+
+; ModuleID = 't.c'
+source_filename = "t.c"
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc19.0.24215"
+
+define void @f() !dbg !8 {
+entry:
+  ret void, !dbg !11
+}
+
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!3, !4}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_D, file: !1, producer: "LDC version 6.0.0 ", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
+!1 = !DIFile(filename: "t.d", directory: "asdf")
+!2 = !{}
+!3 = !{i32 2, !"CodeView", i32 1}
+!4 = !{i32 2, !"Debug Info Version", i32 3}
+!8 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 1, type: !9, isLocal: false, isDefinition: true, scopeLine: 1, isOptimized: false, unit: !0, variables: !2)
+!9 = !DISubroutineType(types: !10)
+!10 = !{null}
+!11 = !DILocation(line: 1, column: 11, scope: !8)
index 0ec617de2689b277af3b85e61c00e7fc6abe0783..fd186bc5a889c7f46b0f9d6caa1711d6f2e6896f 100644 (file)
@@ -216,6 +216,7 @@ static std::string formatSourceLanguage(SourceLanguage Lang) {
     RETURN_CASE(SourceLanguage, JScript, "javascript");
     RETURN_CASE(SourceLanguage, MSIL, "msil");
     RETURN_CASE(SourceLanguage, HLSL, "hlsl");
+    RETURN_CASE(SourceLanguage, D, "d");
   }
   return formatUnknownEnum(Lang);
 }