From ebfa47480615e9fbb12a8b49da4f03b95c8fab2a Mon Sep 17 00:00:00 2001 From: Adrian Prantl Date: Wed, 4 Mar 2020 14:12:54 -0800 Subject: [PATCH] Add an SDK attribute to DICompileUnit This is part of PR44213 https://bugs.llvm.org/show_bug.cgi?id=44213 When importing (system) Clang modules, LLDB needs to know which SDK (e.g., MacOSX, iPhoneSimulator, ...) they came from. While the sysroot attribute contains the absolute path to the SDK, this doesn't work well when the debugger is run on a different machine than the compiler, and the SDKs are installed in different directories. It thus makes sense to just store the name of the SDK instead of the absolute path, so it can be found relative to LLDB. rdar://problem/51645582 Differential Revision: https://reviews.llvm.org/D75646 --- bindings/go/llvm/dibuilder.go | 4 ++++ include/llvm-c/DebugInfo.h | 5 ++++- include/llvm/BinaryFormat/Dwarf.def | 1 + include/llvm/IR/DIBuilder.h | 5 ++++- include/llvm/IR/DebugInfoMetadata.h | 22 +++++++++++++--------- lib/AsmParser/LLParser.cpp | 7 ++++--- lib/Bitcode/Reader/MetadataLoader.cpp | 5 +++-- lib/Bitcode/Writer/BitcodeWriter.cpp | 1 + lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 3 +++ lib/IR/AsmWriter.cpp | 1 + lib/IR/DIBuilder.cpp | 4 ++-- lib/IR/DebugInfo.cpp | 7 ++++--- lib/IR/DebugInfoMetadata.cpp | 17 ++++++++++++----- test/DebugInfo/X86/split-dwarf-sysroot.ll | 4 +++- tools/llvm-c-test/debuginfo.c | 2 +- unittests/IR/MetadataTest.cpp | 10 +++++++--- 16 files changed, 67 insertions(+), 31 deletions(-) diff --git a/bindings/go/llvm/dibuilder.go b/bindings/go/llvm/dibuilder.go index cba28f974d2..aeaf49e539b 100644 --- a/bindings/go/llvm/dibuilder.go +++ b/bindings/go/llvm/dibuilder.go @@ -118,6 +118,7 @@ type DICompileUnit struct { Flags string RuntimeVersion int SysRoot string + SDK string } // CreateCompileUnit creates compile unit debug metadata. @@ -132,6 +133,8 @@ func (d *DIBuilder) CreateCompileUnit(cu DICompileUnit) Metadata { defer C.free(unsafe.Pointer(flags)) sysroot := C.CString(cu.SysRoot) defer C.free(unsafe.Pointer(sysroot)) + sdk := C.CString(cu.SDK) + defer C.free(unsafe.Pointer(sdk)) result := C.LLVMDIBuilderCreateCompileUnit( d.ref, C.LLVMDWARFSourceLanguage(cu.Language), @@ -146,6 +149,7 @@ func (d *DIBuilder) CreateCompileUnit(cu DICompileUnit) Metadata { /*SplitDebugInlining*/ C.LLVMBool(boolToCInt(true)), /*DebugInfoForProfiling*/ C.LLVMBool(boolToCInt(false)), sysroot, C.size_t(len(cu.SysRoot)), + sdk, C.size_t(len(cu.SDK)), ) return Metadata{C: result} } diff --git a/include/llvm-c/DebugInfo.h b/include/llvm-c/DebugInfo.h index 3bb6a64ed48..f17517be601 100644 --- a/include/llvm-c/DebugInfo.h +++ b/include/llvm-c/DebugInfo.h @@ -252,6 +252,8 @@ void LLVMDIBuilderFinalize(LLVMDIBuilderRef Builder); * profile collection. * \param SysRoot The Clang system root (value of -isysroot). * \param SysRootLen The length of the C string passed to \c SysRoot. + * \param SDK The SDK. On Darwin, the last component of the sysroot. + * \param SDKLen The length of the C string passed to \c SDK. */ LLVMMetadataRef LLVMDIBuilderCreateCompileUnit( LLVMDIBuilderRef Builder, LLVMDWARFSourceLanguage Lang, @@ -259,7 +261,8 @@ LLVMMetadataRef LLVMDIBuilderCreateCompileUnit( LLVMBool isOptimized, const char *Flags, size_t FlagsLen, unsigned RuntimeVer, const char *SplitName, size_t SplitNameLen, LLVMDWARFEmissionKind Kind, unsigned DWOId, LLVMBool SplitDebugInlining, - LLVMBool DebugInfoForProfiling, const char *SysRoot, size_t SysRootLen); + LLVMBool DebugInfoForProfiling, const char *SysRoot, size_t SysRootLen, + const char *SDK, size_t SDKLen); /** * Create a file descriptor to hold debugging information for a file. diff --git a/include/llvm/BinaryFormat/Dwarf.def b/include/llvm/BinaryFormat/Dwarf.def index 5f744fc2ad2..287b70af1be 100644 --- a/include/llvm/BinaryFormat/Dwarf.def +++ b/include/llvm/BinaryFormat/Dwarf.def @@ -427,6 +427,7 @@ HANDLE_DW_AT(0x3feb, APPLE_property_attribute, 0, APPLE) HANDLE_DW_AT(0x3fec, APPLE_objc_complete_type, 0, APPLE) HANDLE_DW_AT(0x3fed, APPLE_property, 0, APPLE) HANDLE_DW_AT(0x3fee, APPLE_objc_direct, 0, APPLE) +HANDLE_DW_AT(0x3fef, APPLE_sdk, 0, APPLE) // Attribute form encodings. HANDLE_DW_FORM(0x01, addr, 2, DWARF) diff --git a/include/llvm/IR/DIBuilder.h b/include/llvm/IR/DIBuilder.h index 604740dcdfb..82a9c5e67d5 100644 --- a/include/llvm/IR/DIBuilder.h +++ b/include/llvm/IR/DIBuilder.h @@ -136,6 +136,8 @@ namespace llvm { /// \param NameTableKind Whether to emit .debug_gnu_pubnames, /// .debug_pubnames, or no pubnames at all. /// \param SysRoot The clang system root (value of -isysroot). + /// \param SDK The SDK name. On Darwin, this is the last component + /// of the sysroot. DICompileUnit * createCompileUnit(unsigned Lang, DIFile *File, StringRef Producer, bool isOptimized, StringRef Flags, unsigned RV, @@ -146,7 +148,8 @@ namespace llvm { bool DebugInfoForProfiling = false, DICompileUnit::DebugNameTableKind NameTableKind = DICompileUnit::DebugNameTableKind::Default, - bool RangesBaseAddress = false, StringRef SysRoot = {}); + bool RangesBaseAddress = false, StringRef SysRoot = {}, + StringRef SDK = {}); /// Create a file descriptor to hold debugging information for a file. /// \param Filename File name. diff --git a/include/llvm/IR/DebugInfoMetadata.h b/include/llvm/IR/DebugInfoMetadata.h index 032ae598c1d..3bf78ba0259 100644 --- a/include/llvm/IR/DebugInfoMetadata.h +++ b/include/llvm/IR/DebugInfoMetadata.h @@ -1173,7 +1173,7 @@ private: DIImportedEntityArray ImportedEntities, DIMacroNodeArray Macros, uint64_t DWOId, bool SplitDebugInlining, bool DebugInfoForProfiling, unsigned NameTableKind, bool RangesBaseAddress, StringRef SysRoot, - StorageType Storage, bool ShouldCreate = true) { + StringRef SDK, StorageType Storage, bool ShouldCreate = true) { return getImpl( Context, SourceLanguage, File, getCanonicalMDString(Context, Producer), IsOptimized, getCanonicalMDString(Context, Flags), RuntimeVersion, @@ -1181,7 +1181,8 @@ private: EnumTypes.get(), RetainedTypes.get(), GlobalVariables.get(), ImportedEntities.get(), Macros.get(), DWOId, SplitDebugInlining, DebugInfoForProfiling, NameTableKind, RangesBaseAddress, - getCanonicalMDString(Context, SysRoot), Storage, ShouldCreate); + getCanonicalMDString(Context, SysRoot), + getCanonicalMDString(Context, SDK), Storage, ShouldCreate); } static DICompileUnit * getImpl(LLVMContext &Context, unsigned SourceLanguage, Metadata *File, @@ -1191,8 +1192,8 @@ private: Metadata *GlobalVariables, Metadata *ImportedEntities, Metadata *Macros, uint64_t DWOId, bool SplitDebugInlining, bool DebugInfoForProfiling, unsigned NameTableKind, - bool RangesBaseAddress, MDString *SysRoot, StorageType Storage, - bool ShouldCreate = true); + bool RangesBaseAddress, MDString *SysRoot, MDString *SDK, + StorageType Storage, bool ShouldCreate = true); TempDICompileUnit cloneImpl() const { return getTemporary( @@ -1201,7 +1202,7 @@ private: getEmissionKind(), getEnumTypes(), getRetainedTypes(), getGlobalVariables(), getImportedEntities(), getMacros(), DWOId, getSplitDebugInlining(), getDebugInfoForProfiling(), getNameTableKind(), - getRangesBaseAddress(), getSysRoot()); + getRangesBaseAddress(), getSysRoot(), getSDK()); } public: @@ -1218,12 +1219,12 @@ public: DIImportedEntityArray ImportedEntities, DIMacroNodeArray Macros, uint64_t DWOId, bool SplitDebugInlining, bool DebugInfoForProfiling, DebugNameTableKind NameTableKind, bool RangesBaseAddress, - StringRef SysRoot), + StringRef SysRoot, StringRef SDK), (SourceLanguage, File, Producer, IsOptimized, Flags, RuntimeVersion, SplitDebugFilename, EmissionKind, EnumTypes, RetainedTypes, GlobalVariables, ImportedEntities, Macros, DWOId, SplitDebugInlining, DebugInfoForProfiling, (unsigned)NameTableKind, RangesBaseAddress, - SysRoot)) + SysRoot, SDK)) DEFINE_MDNODE_GET_DISTINCT_TEMPORARY( DICompileUnit, (unsigned SourceLanguage, Metadata *File, MDString *Producer, @@ -1232,11 +1233,12 @@ public: Metadata *RetainedTypes, Metadata *GlobalVariables, Metadata *ImportedEntities, Metadata *Macros, uint64_t DWOId, bool SplitDebugInlining, bool DebugInfoForProfiling, - unsigned NameTableKind, bool RangesBaseAddress, MDString *SysRoot), + unsigned NameTableKind, bool RangesBaseAddress, MDString *SysRoot, + MDString *SDK), (SourceLanguage, File, Producer, IsOptimized, Flags, RuntimeVersion, SplitDebugFilename, EmissionKind, EnumTypes, RetainedTypes, GlobalVariables, ImportedEntities, Macros, DWOId, SplitDebugInlining, - DebugInfoForProfiling, NameTableKind, RangesBaseAddress, SysRoot)) + DebugInfoForProfiling, NameTableKind, RangesBaseAddress, SysRoot, SDK)) TempDICompileUnit clone() const { return cloneImpl(); } @@ -1279,6 +1281,7 @@ public: this->SplitDebugInlining = SplitDebugInlining; } StringRef getSysRoot() const { return getStringOperand(9); } + StringRef getSDK() const { return getStringOperand(10); } MDString *getRawProducer() const { return getOperandAs(1); } MDString *getRawFlags() const { return getOperandAs(2); } @@ -1291,6 +1294,7 @@ public: Metadata *getRawImportedEntities() const { return getOperand(7); } Metadata *getRawMacros() const { return getOperand(8); } MDString *getRawSysRoot() const { return getOperandAs(9); } + MDString *getRawSDK() const { return getOperandAs(10); } /// Replace arrays. /// diff --git a/lib/AsmParser/LLParser.cpp b/lib/AsmParser/LLParser.cpp index 1279e936607..86313cddfdc 100644 --- a/lib/AsmParser/LLParser.cpp +++ b/lib/AsmParser/LLParser.cpp @@ -4637,7 +4637,7 @@ bool LLParser::ParseDIFile(MDNode *&Result, bool IsDistinct) { /// splitDebugFilename: "abc.debug", /// emissionKind: FullDebug, enums: !1, retainedTypes: !2, /// globals: !4, imports: !5, macros: !6, dwoId: 0x0abcd, -/// sysroot: "/") +/// sysroot: "/", sdk: "MacOSX.sdk") bool LLParser::ParseDICompileUnit(MDNode *&Result, bool IsDistinct) { if (!IsDistinct) return Lex.Error("missing 'distinct', required for !DICompileUnit"); @@ -4661,7 +4661,8 @@ bool LLParser::ParseDICompileUnit(MDNode *&Result, bool IsDistinct) { OPTIONAL(debugInfoForProfiling, MDBoolField, = false); \ OPTIONAL(nameTableKind, NameTableKindField, ); \ OPTIONAL(debugBaseAddress, MDBoolField, = false); \ - OPTIONAL(sysroot, MDStringField, ); + OPTIONAL(sysroot, MDStringField, ); \ + OPTIONAL(sdk, MDStringField, ); PARSE_MD_FIELDS(); #undef VISIT_MD_FIELDS @@ -4670,7 +4671,7 @@ bool LLParser::ParseDICompileUnit(MDNode *&Result, bool IsDistinct) { runtimeVersion.Val, splitDebugFilename.Val, emissionKind.Val, enums.Val, retainedTypes.Val, globals.Val, imports.Val, macros.Val, dwoId.Val, splitDebugInlining.Val, debugInfoForProfiling.Val, nameTableKind.Val, - debugBaseAddress.Val, sysroot.Val); + debugBaseAddress.Val, sysroot.Val, sdk.Val); return false; } diff --git a/lib/Bitcode/Reader/MetadataLoader.cpp b/lib/Bitcode/Reader/MetadataLoader.cpp index 9a78a2bbcb4..17778e73f2f 100644 --- a/lib/Bitcode/Reader/MetadataLoader.cpp +++ b/lib/Bitcode/Reader/MetadataLoader.cpp @@ -1456,7 +1456,7 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata( break; } case bitc::METADATA_COMPILE_UNIT: { - if (Record.size() < 14 || Record.size() > 21) + if (Record.size() < 14 || Record.size() > 22) return error("Invalid record"); // Ignore Record[0], which indicates whether this compile unit is @@ -1474,7 +1474,8 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata( Record.size() <= 18 ? 0 : Record[18], false, // FIXME: https://reviews.llvm.org/rGc51b45e32ef7f35c11891f60871aa9c2c04cd991 // Record.size() <= 19 ? 0 : Record[19], - Record.size() <= 20 ? nullptr : getMDString(Record[20])); + Record.size() <= 20 ? nullptr : getMDString(Record[20]), + Record.size() <= 21 ? nullptr : getMDString(Record[21])); MetadataList.assignValue(CU, NextMetadataNo); NextMetadataNo++; diff --git a/lib/Bitcode/Writer/BitcodeWriter.cpp b/lib/Bitcode/Writer/BitcodeWriter.cpp index 0d3a98b9092..a27eada55d7 100644 --- a/lib/Bitcode/Writer/BitcodeWriter.cpp +++ b/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -1669,6 +1669,7 @@ void ModuleBitcodeWriter::writeDICompileUnit(const DICompileUnit *N, Record.push_back((unsigned)N->getNameTableKind()); Record.push_back(N->getRangesBaseAddress()); Record.push_back(VE.getMetadataOrNullID(N->getRawSysRoot())); + Record.push_back(VE.getMetadataOrNullID(N->getRawSDK())); Stream.EmitRecord(bitc::METADATA_COMPILE_UNIT, Record, Abbrev); Record.clear(); diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 4e5888eed49..a95ddbbbd4c 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -930,6 +930,9 @@ void DwarfDebug::finishUnitAttributes(const DICompileUnit *DIUnit, StringRef SysRoot = DIUnit->getSysRoot(); if (!SysRoot.empty()) NewCU.addString(Die, dwarf::DW_AT_LLVM_sysroot, SysRoot); + StringRef SDK = DIUnit->getSDK(); + if (!SDK.empty()) + NewCU.addString(Die, dwarf::DW_AT_APPLE_sdk, SDK); // Add DW_str_offsets_base to the unit DIE, except for split units. if (useSegmentedStringOffsetsTable() && !useSplitDwarf()) diff --git a/lib/IR/AsmWriter.cpp b/lib/IR/AsmWriter.cpp index c2added23de..ea603a69982 100644 --- a/lib/IR/AsmWriter.cpp +++ b/lib/IR/AsmWriter.cpp @@ -1948,6 +1948,7 @@ static void writeDICompileUnit(raw_ostream &Out, const DICompileUnit *N, Printer.printNameTableKind("nameTableKind", N->getNameTableKind()); Printer.printBool("rangesBaseAddress", N->getRangesBaseAddress(), false); Printer.printString("sysroot", N->getSysRoot()); + Printer.printString("sdk", N->getSDK()); Out << ")"; } diff --git a/lib/IR/DIBuilder.cpp b/lib/IR/DIBuilder.cpp index 762d9a1c1b4..2fcdcd99e3d 100644 --- a/lib/IR/DIBuilder.cpp +++ b/lib/IR/DIBuilder.cpp @@ -141,7 +141,7 @@ DICompileUnit *DIBuilder::createCompileUnit( DICompileUnit::DebugEmissionKind Kind, uint64_t DWOId, bool SplitDebugInlining, bool DebugInfoForProfiling, DICompileUnit::DebugNameTableKind NameTableKind, bool RangesBaseAddress, - StringRef SysRoot) { + StringRef SysRoot, StringRef SDK) { assert(((Lang <= dwarf::DW_LANG_Fortran08 && Lang >= dwarf::DW_LANG_C89) || (Lang <= dwarf::DW_LANG_hi_user && Lang >= dwarf::DW_LANG_lo_user)) && @@ -152,7 +152,7 @@ DICompileUnit *DIBuilder::createCompileUnit( VMContext, Lang, File, Producer, isOptimized, Flags, RunTimeVer, SplitName, Kind, nullptr, nullptr, nullptr, nullptr, nullptr, DWOId, SplitDebugInlining, DebugInfoForProfiling, NameTableKind, - RangesBaseAddress, SysRoot); + RangesBaseAddress, SysRoot, SDK); // Create a named metadata so that it is easier to find cu in a module. NamedMDNode *NMD = M.getOrInsertNamedMetadata("llvm.dbg.cu"); diff --git a/lib/IR/DebugInfo.cpp b/lib/IR/DebugInfo.cpp index a036621baf3..f893ea997a8 100644 --- a/lib/IR/DebugInfo.cpp +++ b/lib/IR/DebugInfo.cpp @@ -497,7 +497,7 @@ private: RetainedTypes, GlobalVariables, ImportedEntities, CU->getMacros(), CU->getDWOId(), CU->getSplitDebugInlining(), CU->getDebugInfoForProfiling(), CU->getNameTableKind(), - CU->getRangesBaseAddress(), CU->getSysRoot()); + CU->getRangesBaseAddress(), CU->getSysRoot(), CU->getSDK()); } DILocation *getReplacementMDLocation(DILocation *MLD) { @@ -765,7 +765,8 @@ LLVMMetadataRef LLVMDIBuilderCreateCompileUnit( LLVMBool isOptimized, const char *Flags, size_t FlagsLen, unsigned RuntimeVer, const char *SplitName, size_t SplitNameLen, LLVMDWARFEmissionKind Kind, unsigned DWOId, LLVMBool SplitDebugInlining, - LLVMBool DebugInfoForProfiling, const char *SysRoot, size_t SysRootLen) { + LLVMBool DebugInfoForProfiling, const char *SysRoot, size_t SysRootLen, + const char *SDK, size_t SDKLen) { auto File = unwrapDI(FileRef); return wrap(unwrap(Builder)->createCompileUnit( @@ -775,7 +776,7 @@ LLVMMetadataRef LLVMDIBuilderCreateCompileUnit( static_cast(Kind), DWOId, SplitDebugInlining, DebugInfoForProfiling, DICompileUnit::DebugNameTableKind::Default, false, - StringRef(SysRoot, SysRootLen))); + StringRef(SysRoot, SysRootLen), StringRef(SDK, SDKLen))); } LLVMMetadataRef diff --git a/lib/IR/DebugInfoMetadata.cpp b/lib/IR/DebugInfoMetadata.cpp index bd8829e9265..48e38dbb2b0 100644 --- a/lib/IR/DebugInfoMetadata.cpp +++ b/lib/IR/DebugInfoMetadata.cpp @@ -521,16 +521,23 @@ DICompileUnit *DICompileUnit::getImpl( Metadata *GlobalVariables, Metadata *ImportedEntities, Metadata *Macros, uint64_t DWOId, bool SplitDebugInlining, bool DebugInfoForProfiling, unsigned NameTableKind, bool RangesBaseAddress, MDString *SysRoot, - StorageType Storage, bool ShouldCreate) { + MDString *SDK, StorageType Storage, bool ShouldCreate) { assert(Storage != Uniqued && "Cannot unique DICompileUnit"); assert(isCanonical(Producer) && "Expected canonical MDString"); assert(isCanonical(Flags) && "Expected canonical MDString"); assert(isCanonical(SplitDebugFilename) && "Expected canonical MDString"); - Metadata *Ops[] = { - File, Producer, Flags, SplitDebugFilename, - EnumTypes, RetainedTypes, GlobalVariables, ImportedEntities, - Macros, SysRoot}; + Metadata *Ops[] = {File, + Producer, + Flags, + SplitDebugFilename, + EnumTypes, + RetainedTypes, + GlobalVariables, + ImportedEntities, + Macros, + SysRoot, + SDK}; return storeImpl(new (array_lengthof(Ops)) DICompileUnit( Context, Storage, SourceLanguage, IsOptimized, RuntimeVersion, EmissionKind, DWOId, SplitDebugInlining, diff --git a/test/DebugInfo/X86/split-dwarf-sysroot.ll b/test/DebugInfo/X86/split-dwarf-sysroot.ll index 8b504bc6752..be61ff72380 100644 --- a/test/DebugInfo/X86/split-dwarf-sysroot.ll +++ b/test/DebugInfo/X86/split-dwarf-sysroot.ll @@ -4,9 +4,11 @@ ; CHECK: DW_TAG_skeleton_unit ; CHECK-NOT: DW_AT_LLVM_sysroot +; CHECK-NOT: DW_AT_LLVM_sdk ; CHECK: DW_TAG_compile_unit ; CHECK-NOT: DW_TAG ; CHECK: DW_AT_LLVM_sysroot ("/opt/clang-root") +; CHECK: DW_AT_APPLE_sdk ("Linux.sdk") target triple = "x86_64-pc-linux" @@ -21,7 +23,7 @@ entry: !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!6, !7, !8} -!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, emissionKind: FullDebug, enums: !2, sysroot: "/opt/clang-root") +!0 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, emissionKind: FullDebug, enums: !2, sysroot: "/opt/clang-root", sdk: "Linux.sdk") !1 = !DIFile(filename: "a.c", directory: "/") !2 = !{} !6 = !{i32 2, !"Dwarf Version", i32 5} diff --git a/tools/llvm-c-test/debuginfo.c b/tools/llvm-c-test/debuginfo.c index 8102e9a27ad..6ae1f19764c 100644 --- a/tools/llvm-c-test/debuginfo.c +++ b/tools/llvm-c-test/debuginfo.c @@ -38,7 +38,7 @@ int llvm_test_dibuilder(void) { LLVMMetadataRef CompileUnit = LLVMDIBuilderCreateCompileUnit( DIB, LLVMDWARFSourceLanguageC, File, "llvm-c-test", 11, 0, NULL, 0, 0, - NULL, 0, LLVMDWARFEmissionFull, 0, 0, 0, "/", 1); + NULL, 0, LLVMDWARFEmissionFull, 0, 0, 0, "/", 1, "", 0); LLVMMetadataRef Module = LLVMDIBuilderCreateModule(DIB, CompileUnit, diff --git a/unittests/IR/MetadataTest.cpp b/unittests/IR/MetadataTest.cpp index 0480f976173..0f710974939 100644 --- a/unittests/IR/MetadataTest.cpp +++ b/unittests/IR/MetadataTest.cpp @@ -96,7 +96,7 @@ protected: Context, 1, getFile(), "clang", false, "-g", 2, "", DICompileUnit::FullDebug, getTuple(), getTuple(), getTuple(), getTuple(), getTuple(), 0, true, false, - DICompileUnit::DebugNameTableKind::Default, false, "/"); + DICompileUnit::DebugNameTableKind::Default, false, "/", ""); } DIType *getBasicType(StringRef Name) { return DIBasicType::get(Context, dwarf::DW_TAG_unspecified_type, Name); @@ -1710,11 +1710,12 @@ TEST_F(DICompileUnitTest, get) { uint64_t DWOId = 0x10000000c0ffee; MDTuple *Macros = getTuple(); StringRef SysRoot = "/"; + StringRef SDK = "MacOSX.sdk"; auto *N = DICompileUnit::getDistinct( Context, SourceLanguage, File, Producer, IsOptimized, Flags, RuntimeVersion, SplitDebugFilename, EmissionKind, EnumTypes, RetainedTypes, GlobalVariables, ImportedEntities, Macros, DWOId, true, - false, DICompileUnit::DebugNameTableKind::Default, false, SysRoot); + false, DICompileUnit::DebugNameTableKind::Default, false, SysRoot, SDK); EXPECT_EQ(dwarf::DW_TAG_compile_unit, N->getTag()); EXPECT_EQ(SourceLanguage, N->getSourceLanguage()); @@ -1732,6 +1733,7 @@ TEST_F(DICompileUnitTest, get) { EXPECT_EQ(Macros, N->getMacros().get()); EXPECT_EQ(DWOId, N->getDWOId()); EXPECT_EQ(SysRoot, N->getSysRoot()); + EXPECT_EQ(SDK, N->getSDK()); TempDICompileUnit Temp = N->clone(); EXPECT_EQ(dwarf::DW_TAG_compile_unit, Temp->getTag()); @@ -1749,6 +1751,7 @@ TEST_F(DICompileUnitTest, get) { EXPECT_EQ(ImportedEntities, Temp->getImportedEntities().get()); EXPECT_EQ(Macros, Temp->getMacros().get()); EXPECT_EQ(SysRoot, Temp->getSysRoot()); + EXPECT_EQ(SDK, Temp->getSDK()); auto *TempAddress = Temp.get(); auto *Clone = MDNode::replaceWithPermanent(std::move(Temp)); @@ -1770,11 +1773,12 @@ TEST_F(DICompileUnitTest, replaceArrays) { MDTuple *ImportedEntities = MDTuple::getDistinct(Context, None); uint64_t DWOId = 0xc0ffee; StringRef SysRoot = "/"; + StringRef SDK = "MacOSX.sdk"; auto *N = DICompileUnit::getDistinct( Context, SourceLanguage, File, Producer, IsOptimized, Flags, RuntimeVersion, SplitDebugFilename, EmissionKind, EnumTypes, RetainedTypes, nullptr, ImportedEntities, nullptr, DWOId, true, false, - DICompileUnit::DebugNameTableKind::Default, false, SysRoot); + DICompileUnit::DebugNameTableKind::Default, false, SysRoot, SDK); auto *GlobalVariables = MDTuple::getDistinct(Context, None); EXPECT_EQ(nullptr, N->getGlobalVariables().get());