From: Reid Kleckner Date: Mon, 24 Jul 2017 16:16:42 +0000 (+0000) Subject: [codeview] Emit 'D' as the cv source language for D code X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=78116356ca3283670a1769213213de98e06e1071;p=llvm [codeview] Emit 'D' as the cv source language for D code 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 --- diff --git a/include/llvm/DebugInfo/CodeView/CodeView.h b/include/llvm/DebugInfo/CodeView/CodeView.h index 7b34cd0b56d..08874b16ed0 100644 --- a/include/llvm/DebugInfo/CodeView/CodeView.h +++ b/include/llvm/DebugInfo/CodeView/CodeView.h @@ -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 diff --git a/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp b/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp index ec0f007371d..c9686cccfdf 100644 --- a/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp +++ b/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp @@ -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, diff --git a/lib/DebugInfo/CodeView/EnumTables.cpp b/lib/DebugInfo/CodeView/EnumTables.cpp index 4cfb55a31b3..e58d2f8a1d3 100644 --- a/lib/DebugInfo/CodeView/EnumTables.cpp +++ b/lib/DebugInfo/CodeView/EnumTables.cpp @@ -132,7 +132,7 @@ static const EnumEntry 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 CompileSym2FlagNames[] = { diff --git a/test/DebugInfo/COFF/dlang.ll b/test/DebugInfo/COFF/dlang.ll new file mode 100644 index 00000000000..7bfdac34aad --- /dev/null +++ b/test/DebugInfo/COFF/dlang.ll @@ -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) diff --git a/tools/llvm-pdbutil/MinimalSymbolDumper.cpp b/tools/llvm-pdbutil/MinimalSymbolDumper.cpp index 0ec617de268..fd186bc5a88 100644 --- a/tools/llvm-pdbutil/MinimalSymbolDumper.cpp +++ b/tools/llvm-pdbutil/MinimalSymbolDumper.cpp @@ -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); }