C:\Dev\upstream\gitmono\llvm-project>git llvm --verbose push Running in None: git rev-parse --show-toplevel Command took 0.0s STDOUT: C:/Dev/upstream/gitmono/llvm-project Running in None: git rev-parse --git-common-dir Command took 0.0s STDOUT: .git Running in None: git rev-parse --symbolic-full-name HEAD Command took 0.0s STDOUT: refs/heads/master Running in None: git for-each-ref --format=%(upstream:short) refs/heads/master Command took 0.0s STDOUT: origin/master Running in None: git merge-base HEAD origin/master Command took 0.0s STDOUT: daa33c58559e232a2c685a9a7e3a5beb143b6c88 Running in None: git show --reverse --quiet --pretty=%h daa33c58559e232a2c685a9a7e3a5beb143b6c88.. Command took 0.0s STDOUT: b398903f7e2 Running in None: git show --oneline --quiet b398903f7e2 Command took 0.0s STDOUT: b398903f7e2 [DebugInfo] IR/Bitcode changes for DISubprogram flags. Pushing 1 commit: b398903f7e2 [DebugInfo] IR/Bitcode changes for DISubprogram flags. Running in .git\llvm-upstream-svn: svn revert -R . Command took 0.2s STDOUT: Reverted 'llvm\trunk\lib\Bitcode\Writer\BitcodeWriter.cpp' Running in .git\llvm-upstream-svn: svn status --no-ignore Command took 0.0s Running in None: git diff-tree --no-commit-id --name-only -r b398903f7e2 Command took 0.1s STDOUT: llvm/include/llvm/IR/DebugInfoFlags.def STDOUT: llvm/include/llvm/IR/DebugInfoMetadata.h STDOUT: llvm/lib/AsmParser/LLLexer.cpp STDOUT: llvm/lib/AsmParser/LLParser.cpp STDOUT: llvm/lib/AsmParser/LLToken.h STDOUT: llvm/lib/Bitcode/Reader/MetadataLoader.cpp STDOUT: llvm/lib/Bitcode/Writer/BitcodeWriter.cpp STDOUT: llvm/lib/IR/AsmWriter.cpp STDOUT: llvm/lib/IR/DebugInfoMetadata.cpp STDOUT: llvm/test/Assembler/disubprogram.ll STDOUT: llvm/test/Assembler/invalid-disubprogram-uniqued-definition.ll STDOUT: llvm/test/Bindings/llvm-c/debug_info.ll STDOUT: llvm/test/Bitcode/DISubprogram-distinct-definitions.ll STDOUT: llvm/test/Bitcode/DISubprogram-v4.ll STDOUT: llvm/test/Bitcode/DISubprogram-v4.ll.bc STDOUT: llvm/test/DebugInfo/Generic/invalid.ll STDOUT: llvm/test/DebugInfo/debugify.ll STDOUT: llvm/test/Linker/replaced-function-matches-first-subprogram.ll STDOUT: llvm/test/Transforms/GCOVProfiling/three-element-mdnode.ll Running in .git\llvm-upstream-svn: svn status --no-ignore Command took 0.1s Running in .git\llvm-upstream-svn: svn update --depth=immediates --parents llvm/trunk\test/Transforms/GCOVProfiling llvm/trunk\include/llvm/IR llvm/trunk\test/Linker llvm/trunk\test/Bindings/llvm-c llvm/trunk\lib/Bitcode/Reader llvm/trunk\test/Assembler llvm/trunk\lib/Bitcode/Writer llvm/trunk\lib/IR llvm/trunk\test/DebugInfo llvm/trunk\lib/AsmParser llvm/trunk\test/DebugInfo/Generic llvm/trunk\test/Bitcode Command took 10.6s STDOUT: Updating 'llvm\trunk\test\Transforms\GCOVProfiling': STDOUT: At revision 347794. STDOUT: Updating 'llvm\trunk\include\llvm\IR': STDOUT: At revision 347794. STDOUT: Updating 'llvm\trunk\test\Linker': STDOUT: At revision 347794. STDOUT: Updating 'llvm\trunk\test\Bindings\llvm-c': STDOUT: At revision 347794. STDOUT: Updating 'llvm\trunk\lib\Bitcode\Reader': STDOUT: At revision 347794. STDOUT: Updating 'llvm\trunk\test\Assembler': STDOUT: At revision 347794. STDOUT: Updating 'llvm\trunk\lib\Bitcode\Writer': STDOUT: At revision 347794. STDOUT: Updating 'llvm\trunk\lib\IR': STDOUT: At revision 347794. STDOUT: Updating 'llvm\trunk\test\DebugInfo': STDOUT: At revision 347794. STDOUT: Updating 'llvm\trunk\lib\AsmParser': STDOUT: At revision 347794. STDOUT: Updating 'llvm\trunk\test\DebugInfo\Generic': STDOUT: At revision 347794. STDOUT: Updating 'llvm\trunk\test\Bitcode': STDOUT: At revision 347794. STDOUT: Summary of updates: STDOUT: Updated 'llvm\trunk\test\Transforms\GCOVProfiling' to r347794. STDOUT: Updated 'llvm\trunk\include\llvm\IR' to r347794. STDOUT: Updated 'llvm\trunk\test\Linker' to r347794. STDOUT: Updated 'llvm\trunk\test\Bindings\llvm-c' to r347794. STDOUT: Updated 'llvm\trunk\lib\Bitcode\Reader' to r347794. STDOUT: Updated 'llvm\trunk\test\Assembler' to r347794. STDOUT: Updated 'llvm\trunk\lib\Bitcode\Writer' to r347794. STDOUT: Updated 'llvm\trunk\lib\IR' to r347794. STDOUT: Updated 'llvm\trunk\test\DebugInfo' to r347794. STDOUT: Updated 'llvm\trunk\lib\AsmParser' to r347794. STDOUT: Updated 'llvm\trunk\test\DebugInfo\Generic' to r347794. STDOUT: Updated 'llvm\trunk\test\Bitcode' to r347794. Running in .git\llvm-upstream-svn\llvm/trunk: svn propget svn:eol-style include/llvm/IR/DebugInfoFlags.def include/llvm/IR/DebugInfoMetadata.h lib/AsmParser/LLLexer.cpp lib/AsmParser/LLParser.cpp lib/AsmParser/LLToken.h lib/Bitcode/Reader/MetadataLoader.cpp lib/Bitcode/Writer/BitcodeWriter.cpp lib/IR/AsmWriter.cpp lib/IR/DebugInfoMetadata.cpp test/Assembler/disubprogram.ll test/Assembler/invalid-disubprogram-uniqued-definition.ll test/Bindings/llvm-c/debug_info.ll test/Bitcode/DISubprogram-distinct-definitions.ll test/DebugInfo/debugify.ll test/Linker/replaced-function-matches-first-subprogram.ll test/Transforms/GCOVProfiling/three-element-mdnode.ll Command took 0.0s STDOUT: lib\Bitcode\Writer\BitcodeWriter.cpp - native Running in .git\llvm-upstream-svn\llvm/trunk: dos2unix lib\Bitcode\Writer\BitcodeWriter.cpp Command took 0.1s Running in None: git show --binary b398903f7e2 -- llvm\include/llvm/IR/DebugInfoFlags.def llvm\include/llvm/IR/DebugInfoMetadata.h llvm\lib/AsmParser/LLLexer.cpp llvm\lib/AsmParser/LLParser.cpp llvm\lib/AsmParser/LLToken.h llvm\lib/Bitcode/Reader/MetadataLoader.cpp llvm\lib/Bitcode/Writer/BitcodeWriter.cpp llvm\lib/IR/AsmWriter.cpp llvm\lib/IR/DebugInfoMetadata.cpp llvm\test/Assembler/disubprogram.ll llvm\test/Assembler/invalid-disubprogram-uniqued-definition.ll llvm\test/Bindings/llvm-c/debug_info.ll llvm\test/Bitcode/DISubprogram-distinct-definitions.ll llvm\test/Bitcode/DISubprogram-v4.ll llvm\test/Bitcode/DISubprogram-v4.ll.bc llvm\test/DebugInfo/Generic/invalid.ll llvm\test/DebugInfo/debugify.ll llvm\test/Linker/replaced-function-matches-first-subprogram.ll llvm\test/Transforms/GCOVProfiling/three-element-mdnode.ll Command took 0.1s STDOUT: commit b398903f7e24f47395993352c9bf08160810ef96 STDOUT: Author: Paul Robinson STDOUT: Date: Fri Nov 16 18:37:52 2018 -0500 STDOUT: STDOUT: [DebugInfo] IR/Bitcode changes for DISubprogram flags. STDOUT: STDOUT: Packing the flags into one bitcode word will save effort in STDOUT: adding new flags in the future. STDOUT: STDOUT: Differential Revision: https://reviews.llvm.org/D54755 STDOUT: STDOUT: diff --git a/llvm/include/llvm/IR/DebugInfoFlags.def b/llvm/include/llvm/IR/DebugInfoFlags.def STDOUT: index 5d80788746c..a0a9c6bcacb 100644 STDOUT: --- a/llvm/include/llvm/IR/DebugInfoFlags.def STDOUT: +++ b/llvm/include/llvm/IR/DebugInfoFlags.def STDOUT: @@ -78,8 +78,8 @@ HANDLE_DI_FLAG((1 << 29), Largest) STDOUT: // Use this as a zero/initialization value. STDOUT: // For example: void foo(DISPFlags Flags = SPFlagZero). STDOUT: HANDLE_DISP_FLAG(0, Zero) STDOUT: -// Virtuality is a two-bit valued field. STDOUT: -HANDLE_DISP_FLAG(0u, Nonvirtual) STDOUT: +// Virtuality is a two-bit enum field in the LSB of the word. STDOUT: +// Values should match DW_VIRTUALITY_*. STDOUT: HANDLE_DISP_FLAG(1u, Virtual) STDOUT: HANDLE_DISP_FLAG(2u, PureVirtual) STDOUT: HANDLE_DISP_FLAG((1u << 2), LocalToUnit) STDOUT: diff --git a/llvm/include/llvm/IR/DebugInfoMetadata.h b/llvm/include/llvm/IR/DebugInfoMetadata.h STDOUT: index 5abb4fb273f..0830b5ccbec 100644 STDOUT: --- a/llvm/include/llvm/IR/DebugInfoMetadata.h STDOUT: +++ b/llvm/include/llvm/IR/DebugInfoMetadata.h STDOUT: @@ -1620,9 +1620,21 @@ public: STDOUT: #define HANDLE_DISP_FLAG(ID, NAME) SPFlag##NAME = ID, STDOUT: #define DISP_FLAG_LARGEST_NEEDED STDOUT: #include "llvm/IR/DebugInfoFlags.def" STDOUT: - SPFlagVirtuality = SPFlagNonvirtual | SPFlagVirtual | SPFlagPureVirtual, STDOUT: + SPFlagNonvirtual = SPFlagZero, STDOUT: + SPFlagVirtuality = SPFlagVirtual | SPFlagPureVirtual, STDOUT: LLVM_MARK_AS_BITMASK_ENUM(SPFlagLargest) STDOUT: }; STDOUT: + STDOUT: + static DISPFlags getFlag(StringRef Flag); STDOUT: + static StringRef getFlagString(DISPFlags Flag); STDOUT: + STDOUT: + /// Split up a flags bitfield for easier printing. STDOUT: + /// STDOUT: + /// Split \c Flags into \c SplitFlags, a vector of its components. Returns STDOUT: + /// any remaining (unrecognized) bits. STDOUT: + static DISPFlags splitFlags(DISPFlags Flags, STDOUT: + SmallVectorImpl &SplitFlags); STDOUT: + STDOUT: // Helper for converting old bitfields to new flags word. STDOUT: static DISPFlags toSPFlags(bool IsLocalToUnit, bool IsDefinition, STDOUT: bool IsOptimized, STDOUT: diff --git a/llvm/lib/AsmParser/LLLexer.cpp b/llvm/lib/AsmParser/LLLexer.cpp STDOUT: index 045214590d8..eab7ec81953 100644 STDOUT: --- a/llvm/lib/AsmParser/LLLexer.cpp STDOUT: +++ b/llvm/lib/AsmParser/LLLexer.cpp STDOUT: @@ -905,6 +905,11 @@ lltok::Kind LLLexer::LexIdentifier() { STDOUT: return lltok::DIFlag; STDOUT: } STDOUT: STDOUT: + if (Keyword.startswith("DISPFlag")) { STDOUT: + StrVal.assign(Keyword.begin(), Keyword.end()); STDOUT: + return lltok::DISPFlag; STDOUT: + } STDOUT: + STDOUT: if (Keyword.startswith("CSK_")) { STDOUT: StrVal.assign(Keyword.begin(), Keyword.end()); STDOUT: return lltok::ChecksumKind; STDOUT: diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp STDOUT: index bcc881926bb..c94b62bad65 100644 STDOUT: --- a/llvm/lib/AsmParser/LLParser.cpp STDOUT: +++ b/llvm/lib/AsmParser/LLParser.cpp STDOUT: @@ -3749,6 +3749,10 @@ struct DIFlagField : public MDFieldImpl { STDOUT: DIFlagField() : MDFieldImpl(DINode::FlagZero) {} STDOUT: }; STDOUT: STDOUT: +struct DISPFlagField : public MDFieldImpl { STDOUT: + DISPFlagField() : MDFieldImpl(DISubprogram::SPFlagZero) {} STDOUT: +}; STDOUT: + STDOUT: struct MDSignedField : public MDFieldImpl { STDOUT: int64_t Min; STDOUT: int64_t Max; STDOUT: @@ -4041,6 +4045,46 @@ bool LLParser::ParseMDField(LocTy Loc, StringRef Name, DIFlagField &Result) { STDOUT: return false; STDOUT: } STDOUT: STDOUT: +/// DISPFlagField STDOUT: +/// ::= uint32 STDOUT: +/// ::= DISPFlagVector STDOUT: +/// ::= DISPFlagVector '|' DISPFlag* '|' uint32 STDOUT: +template <> STDOUT: +bool LLParser::ParseMDField(LocTy Loc, StringRef Name, DISPFlagField &Result) { STDOUT: + STDOUT: + // Parser for a single flag. STDOUT: + auto parseFlag = [&](DISubprogram::DISPFlags &Val) { STDOUT: + if (Lex.getKind() == lltok::APSInt && !Lex.getAPSIntVal().isSigned()) { STDOUT: + uint32_t TempVal = static_cast(Val); STDOUT: + bool Res = ParseUInt32(TempVal); STDOUT: + Val = static_cast(TempVal); STDOUT: + return Res; STDOUT: + } STDOUT: + STDOUT: + if (Lex.getKind() != lltok::DISPFlag) STDOUT: + return TokError("expected debug info flag"); STDOUT: + STDOUT: + Val = DISubprogram::getFlag(Lex.getStrVal()); STDOUT: + if (!Val) STDOUT: + return TokError(Twine("invalid subprogram debug info flag '") + STDOUT: + Lex.getStrVal() + "'"); STDOUT: + Lex.Lex(); STDOUT: + return false; STDOUT: + }; STDOUT: + STDOUT: + // Parse the flags and combine them together. STDOUT: + DISubprogram::DISPFlags Combined = DISubprogram::SPFlagZero; STDOUT: + do { STDOUT: + DISubprogram::DISPFlags Val; STDOUT: + if (parseFlag(Val)) STDOUT: + return true; STDOUT: + Combined |= Val; STDOUT: + } while (EatIfPresent(lltok::bar)); STDOUT: + STDOUT: + Result.assign(Combined); STDOUT: + return false; STDOUT: +} STDOUT: + STDOUT: template <> STDOUT: bool LLParser::ParseMDField(LocTy Loc, StringRef Name, STDOUT: MDSignedField &Result) { STDOUT: @@ -4517,8 +4561,8 @@ bool LLParser::ParseDICompileUnit(MDNode *&Result, bool IsDistinct) { STDOUT: /// isDefinition: true, scopeLine: 8, containingType: !3, STDOUT: /// virtuality: DW_VIRTUALTIY_pure_virtual, STDOUT: /// virtualIndex: 10, thisAdjustment: 4, flags: 11, STDOUT: -/// isOptimized: false, templateParams: !4, declaration: !5, STDOUT: -/// retainedNodes: !6, thrownTypes: !7) STDOUT: +/// spFlags: 10, isOptimized: false, templateParams: !4, STDOUT: +/// declaration: !5, retainedNodes: !6, thrownTypes: !7) STDOUT: bool LLParser::ParseDISubprogram(MDNode *&Result, bool IsDistinct) { STDOUT: auto Loc = Lex.getLoc(); STDOUT: #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ STDOUT: @@ -4536,21 +4580,26 @@ bool LLParser::ParseDISubprogram(MDNode *&Result, bool IsDistinct) { STDOUT: OPTIONAL(virtualIndex, MDUnsignedField, (0, UINT32_MAX)); \ STDOUT: OPTIONAL(thisAdjustment, MDSignedField, (0, INT32_MIN, INT32_MAX)); \ STDOUT: OPTIONAL(flags, DIFlagField, ); \ STDOUT: + OPTIONAL(spFlags, DISPFlagField, ); \ STDOUT: OPTIONAL(isOptimized, MDBoolField, ); \ STDOUT: OPTIONAL(unit, MDField, ); \ STDOUT: OPTIONAL(templateParams, MDField, ); \ STDOUT: OPTIONAL(declaration, MDField, ); \ STDOUT: - OPTIONAL(retainedNodes, MDField, ); \ STDOUT: + OPTIONAL(retainedNodes, MDField, ); \ STDOUT: OPTIONAL(thrownTypes, MDField, ); STDOUT: PARSE_MD_FIELDS(); STDOUT: #undef VISIT_MD_FIELDS STDOUT: STDOUT: - if (isDefinition.Val && !IsDistinct) STDOUT: + // An explicit spFlags field takes precedence over individual fields in STDOUT: + // older IR versions. STDOUT: + DISubprogram::DISPFlags SPFlags = STDOUT: + spFlags.Seen ? spFlags.Val STDOUT: + : DISubprogram::toSPFlags(isLocal.Val, isDefinition.Val, STDOUT: + isOptimized.Val, virtuality.Val); STDOUT: + if ((SPFlags & DISubprogram::SPFlagDefinition) && !IsDistinct) STDOUT: return Lex.Error( STDOUT: Loc, STDOUT: - "missing 'distinct', required for !DISubprogram when 'isDefinition'"); STDOUT: - DISubprogram::DISPFlags SPFlags = DISubprogram::toSPFlags( STDOUT: - isLocal.Val, isDefinition.Val, isOptimized.Val, virtuality.Val); STDOUT: + "missing 'distinct', required for !DISubprogram that is a Definition"); STDOUT: Result = GET_OR_DISTINCT( STDOUT: DISubprogram, STDOUT: (Context, scope.Val, name.Val, linkageName.Val, file.Val, line.Val, STDOUT: diff --git a/llvm/lib/AsmParser/LLToken.h b/llvm/lib/AsmParser/LLToken.h STDOUT: index 836d9a06562..c2e2795a946 100644 STDOUT: --- a/llvm/lib/AsmParser/LLToken.h STDOUT: +++ b/llvm/lib/AsmParser/LLToken.h STDOUT: @@ -442,6 +442,7 @@ enum Kind { STDOUT: NameTableKind, // GNU STDOUT: DwarfOp, // DW_OP_foo STDOUT: DIFlag, // DIFlagFoo STDOUT: + DISPFlag, // DISPFlagFoo STDOUT: DwarfMacinfo, // DW_MACINFO_foo STDOUT: ChecksumKind, // CSK_foo STDOUT: STDOUT: diff --git a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp STDOUT: index 08a6ab5d847..3289aa0acdd 100644 STDOUT: --- a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp STDOUT: +++ b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp STDOUT: @@ -1406,23 +1406,43 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata( STDOUT: if (Record.size() < 18 || Record.size() > 21) STDOUT: return error("Invalid record"); STDOUT: STDOUT: - IsDistinct = STDOUT: - (Record[0] & 1) || Record[8]; // All definitions should be distinct. STDOUT: + bool HasSPFlags = Record[0] & 4; STDOUT: + DISubprogram::DISPFlags SPFlags = STDOUT: + HasSPFlags STDOUT: + ? static_cast(Record[9]) STDOUT: + : DISubprogram::toSPFlags( STDOUT: + /*IsLocalToUnit=*/Record[7], /*IsDefinition=*/Record[8], STDOUT: + /*IsOptimized=*/Record[14], /*Virtuality=*/Record[11]); STDOUT: + STDOUT: + // All definitions should be distinct. STDOUT: + IsDistinct = (Record[0] & 1) || (SPFlags & DISubprogram::SPFlagDefinition); STDOUT: // Version 1 has a Function as Record[15]. STDOUT: // Version 2 has removed Record[15]. STDOUT: // Version 3 has the Unit as Record[15]. STDOUT: // Version 4 added thisAdjustment. STDOUT: - bool HasUnit = Record[0] >= 2; STDOUT: - if (HasUnit && Record.size() < 19) STDOUT: + // Version 5 repacked flags into DISPFlags, changing many element numbers. STDOUT: + bool HasUnit = Record[0] & 2; STDOUT: + if (!HasSPFlags && HasUnit && Record.size() < 19) STDOUT: return error("Invalid record"); STDOUT: - Metadata *CUorFn = getMDOrNull(Record[15]); STDOUT: - unsigned Offset = Record.size() >= 19 ? 1 : 0; STDOUT: - bool HasFn = Offset && !HasUnit; STDOUT: - bool HasThisAdj = Record.size() >= 20; STDOUT: - bool HasThrownTypes = Record.size() >= 21; STDOUT: - DISubprogram::DISPFlags SPFlags = DISubprogram::toSPFlags( STDOUT: - /*IsLocalToUnit=*/Record[7], /*IsDefinition=*/Record[8], STDOUT: - /*IsOptimized=*/Record[14], /*Virtuality=*/Record[11]); STDOUT: + if (HasSPFlags && !HasUnit) STDOUT: + return error("Invalid record"); STDOUT: + // Accommodate older formats. STDOUT: + bool HasFn = false; STDOUT: + bool HasThisAdj = true; STDOUT: + bool HasThrownTypes = true; STDOUT: + unsigned OffsetA = 0; STDOUT: + unsigned OffsetB = 0; STDOUT: + if (!HasSPFlags) { STDOUT: + OffsetA = 2; STDOUT: + OffsetB = 2; STDOUT: + if (Record.size() >= 19) { STDOUT: + HasFn = !HasUnit; STDOUT: + OffsetB++; STDOUT: + } STDOUT: + HasThisAdj = Record.size() >= 20; STDOUT: + HasThrownTypes = Record.size() >= 21; STDOUT: + } STDOUT: + Metadata *CUorFn = getMDOrNull(Record[12 + OffsetB]); STDOUT: DISubprogram *SP = GET_OR_DISTINCT( STDOUT: DISubprogram, STDOUT: (Context, STDOUT: @@ -1432,17 +1452,18 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata( STDOUT: getMDOrNull(Record[4]), // file STDOUT: Record[5], // line STDOUT: getMDOrNull(Record[6]), // type STDOUT: - Record[9], // scopeLine STDOUT: - getDITypeRefOrNull(Record[10]), // containingType STDOUT: - Record[12], // virtualIndex STDOUT: - HasThisAdj ? Record[19] : 0, // thisAdjustment STDOUT: - static_cast(Record[13]), // flags STDOUT: + Record[7 + OffsetA], // scopeLine STDOUT: + getDITypeRefOrNull(Record[8 + OffsetA]), // containingType STDOUT: + Record[10 + OffsetA], // virtualIndex STDOUT: + HasThisAdj ? Record[16 + OffsetB] : 0, // thisAdjustment STDOUT: + static_cast(Record[11 + OffsetA]),// flags STDOUT: SPFlags, // SPFlags STDOUT: HasUnit ? CUorFn : nullptr, // unit STDOUT: - getMDOrNull(Record[15 + Offset]), // templateParams STDOUT: - getMDOrNull(Record[16 + Offset]), // declaration STDOUT: - getMDOrNull(Record[17 + Offset]), // retainedNodes STDOUT: - HasThrownTypes ? getMDOrNull(Record[20]) : nullptr // thrownTypes STDOUT: + getMDOrNull(Record[13 + OffsetB]), // templateParams STDOUT: + getMDOrNull(Record[14 + OffsetB]), // declaration STDOUT: + getMDOrNull(Record[15 + OffsetB]), // retainedNodes STDOUT: + HasThrownTypes ? getMDOrNull(Record[17 + OffsetB]) STDOUT: + : nullptr // thrownTypes STDOUT: )); STDOUT: MetadataList.assignValue(SP, NextMetadataNo); STDOUT: NextMetadataNo++; STDOUT: diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp STDOUT: index 9f6027c34df..29d0f87d826 100644 STDOUT: --- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp STDOUT: +++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp STDOUT: @@ -1633,22 +1633,20 @@ void ModuleBitcodeWriter::writeDICompileUnit(const DICompileUnit *N, STDOUT: void ModuleBitcodeWriter::writeDISubprogram(const DISubprogram *N, STDOUT: SmallVectorImpl &Record, STDOUT: unsigned Abbrev) { STDOUT: - uint64_t HasUnitFlag = 1 << 1; STDOUT: - Record.push_back(N->isDistinct() | HasUnitFlag); STDOUT: + const uint64_t HasUnitFlag = 1 << 1; STDOUT: + const uint64_t HasSPFlagsFlag = 1 << 2; STDOUT: + Record.push_back(uint64_t(N->isDistinct()) | HasUnitFlag | HasSPFlagsFlag); STDOUT: Record.push_back(VE.getMetadataOrNullID(N->getScope())); STDOUT: Record.push_back(VE.getMetadataOrNullID(N->getRawName())); STDOUT: Record.push_back(VE.getMetadataOrNullID(N->getRawLinkageName())); STDOUT: Record.push_back(VE.getMetadataOrNullID(N->getFile())); STDOUT: Record.push_back(N->getLine()); STDOUT: Record.push_back(VE.getMetadataOrNullID(N->getType())); STDOUT: - Record.push_back(N->isLocalToUnit()); STDOUT: - Record.push_back(N->isDefinition()); STDOUT: Record.push_back(N->getScopeLine()); STDOUT: Record.push_back(VE.getMetadataOrNullID(N->getContainingType())); STDOUT: - Record.push_back(N->getVirtuality()); STDOUT: + Record.push_back(N->getSPFlags()); STDOUT: Record.push_back(N->getVirtualIndex()); STDOUT: Record.push_back(N->getFlags()); STDOUT: - Record.push_back(N->isOptimized()); STDOUT: Record.push_back(VE.getMetadataOrNullID(N->getRawUnit())); STDOUT: Record.push_back(VE.getMetadataOrNullID(N->getTemplateParams().get())); STDOUT: Record.push_back(VE.getMetadataOrNullID(N->getDeclaration())); STDOUT: diff --git a/llvm/lib/IR/AsmWriter.cpp b/llvm/lib/IR/AsmWriter.cpp STDOUT: index b74b158def8..23aee723205 100644 STDOUT: --- a/llvm/lib/IR/AsmWriter.cpp STDOUT: +++ b/llvm/lib/IR/AsmWriter.cpp STDOUT: @@ -1607,6 +1607,7 @@ struct MDFieldPrinter { STDOUT: void printInt(StringRef Name, IntTy Int, bool ShouldSkipZero = true); STDOUT: void printBool(StringRef Name, bool Value, Optional Default = None); STDOUT: void printDIFlags(StringRef Name, DINode::DIFlags Flags); STDOUT: + void printDISPFlags(StringRef Name, DISubprogram::DISPFlags Flags); STDOUT: template STDOUT: void printDwarfEnum(StringRef Name, IntTy Value, Stringifier toString, STDOUT: bool ShouldSkipZero = true); STDOUT: @@ -1705,6 +1706,30 @@ void MDFieldPrinter::printDIFlags(StringRef Name, DINode::DIFlags Flags) { STDOUT: Out << FlagsFS << Extra; STDOUT: } STDOUT: STDOUT: +void MDFieldPrinter::printDISPFlags(StringRef Name, STDOUT: + DISubprogram::DISPFlags Flags) { STDOUT: + // Always print this field, because no flags in the IR at all will be STDOUT: + // interpreted as old-style isDefinition: true. STDOUT: + Out << FS << Name << ": "; STDOUT: + STDOUT: + if (!Flags) { STDOUT: + Out << 0; STDOUT: + return; STDOUT: + } STDOUT: + STDOUT: + SmallVector SplitFlags; STDOUT: + auto Extra = DISubprogram::splitFlags(Flags, SplitFlags); STDOUT: + STDOUT: + FieldSeparator FlagsFS(" | "); STDOUT: + for (auto F : SplitFlags) { STDOUT: + auto StringF = DISubprogram::getFlagString(F); STDOUT: + assert(!StringF.empty() && "Expected valid flag"); STDOUT: + Out << FlagsFS << StringF; STDOUT: + } STDOUT: + if (Extra || SplitFlags.empty()) STDOUT: + Out << FlagsFS << Extra; STDOUT: +} STDOUT: + STDOUT: void MDFieldPrinter::printEmissionKind(StringRef Name, STDOUT: DICompileUnit::DebugEmissionKind EK) { STDOUT: Out << FS << Name << ": " << DICompileUnit::emissionKindString(EK); STDOUT: @@ -1925,18 +1950,14 @@ static void writeDISubprogram(raw_ostream &Out, const DISubprogram *N, STDOUT: Printer.printMetadata("file", N->getRawFile()); STDOUT: Printer.printInt("line", N->getLine()); STDOUT: Printer.printMetadata("type", N->getRawType()); STDOUT: - Printer.printBool("isLocal", N->isLocalToUnit()); STDOUT: - Printer.printBool("isDefinition", N->isDefinition()); STDOUT: Printer.printInt("scopeLine", N->getScopeLine()); STDOUT: Printer.printMetadata("containingType", N->getRawContainingType()); STDOUT: - Printer.printDwarfEnum("virtuality", N->getVirtuality(), STDOUT: - dwarf::VirtualityString); STDOUT: if (N->getVirtuality() != dwarf::DW_VIRTUALITY_none || STDOUT: N->getVirtualIndex() != 0) STDOUT: Printer.printInt("virtualIndex", N->getVirtualIndex(), false); STDOUT: Printer.printInt("thisAdjustment", N->getThisAdjustment()); STDOUT: Printer.printDIFlags("flags", N->getFlags()); STDOUT: - Printer.printBool("isOptimized", N->isOptimized()); STDOUT: + Printer.printDISPFlags("spFlags", N->getSPFlags()); STDOUT: Printer.printMetadata("unit", N->getRawUnit()); STDOUT: Printer.printMetadata("templateParams", N->getRawTemplateParams()); STDOUT: Printer.printMetadata("declaration", N->getRawDeclaration()); STDOUT: diff --git a/llvm/lib/IR/DebugInfoMetadata.cpp b/llvm/lib/IR/DebugInfoMetadata.cpp STDOUT: index bf3b284fcce..be98577eda5 100644 STDOUT: --- a/llvm/lib/IR/DebugInfoMetadata.cpp STDOUT: +++ b/llvm/lib/IR/DebugInfoMetadata.cpp STDOUT: @@ -542,6 +542,40 @@ DILocalScope *DILocalScope::getNonLexicalBlockFileScope() const { STDOUT: return const_cast(this); STDOUT: } STDOUT: STDOUT: +DISubprogram::DISPFlags DISubprogram::getFlag(StringRef Flag) { STDOUT: + return StringSwitch(Flag) STDOUT: +#define HANDLE_DISP_FLAG(ID, NAME) .Case("DISPFlag" #NAME, SPFlag##NAME) STDOUT: +#include "llvm/IR/DebugInfoFlags.def" STDOUT: + .Default(SPFlagZero); STDOUT: +} STDOUT: + STDOUT: +StringRef DISubprogram::getFlagString(DISPFlags Flag) { STDOUT: + switch (Flag) { STDOUT: + case SPFlagVirtuality: // Appease a warning. STDOUT: + return ""; STDOUT: +#define HANDLE_DISP_FLAG(ID, NAME) \ STDOUT: + case SPFlag##NAME: \ STDOUT: + return "DISPFlag" #NAME; STDOUT: +#include "llvm/IR/DebugInfoFlags.def" STDOUT: + } STDOUT: + return ""; STDOUT: +} STDOUT: + STDOUT: +DISubprogram::DISPFlags STDOUT: +DISubprogram::splitFlags(DISPFlags Flags, STDOUT: + SmallVectorImpl &SplitFlags) { STDOUT: + // Multi-bit fields can require special handling. In our case, however, the STDOUT: + // only multi-bit field is virtuality, and all its values happen to be STDOUT: + // single-bit values, so the right behavior just falls out. STDOUT: +#define HANDLE_DISP_FLAG(ID, NAME) \ STDOUT: + if (DISPFlags Bit = Flags & SPFlag##NAME) { \ STDOUT: + SplitFlags.push_back(Bit); \ STDOUT: + Flags &= ~Bit; \ STDOUT: + } STDOUT: +#include "llvm/IR/DebugInfoFlags.def" STDOUT: + return Flags; STDOUT: +} STDOUT: + STDOUT: DISubprogram *DISubprogram::getImpl( STDOUT: LLVMContext &Context, Metadata *Scope, MDString *Name, STDOUT: MDString *LinkageName, Metadata *File, unsigned Line, Metadata *Type, STDOUT: diff --git a/llvm/test/Assembler/disubprogram.ll b/llvm/test/Assembler/disubprogram.ll STDOUT: index a407f3da8bd..df97efb417c 100644 STDOUT: --- a/llvm/test/Assembler/disubprogram.ll STDOUT: +++ b/llvm/test/Assembler/disubprogram.ll STDOUT: @@ -6,8 +6,8 @@ define void @_Z3foov() !dbg !9 { STDOUT: ret void STDOUT: } STDOUT: STDOUT: -; CHECK: !named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9, !10, !11, !12, !13, !14} STDOUT: -!named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9, !10, !11, !12, !13, !14} STDOUT: +; CHECK: !named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9, !10, !11, !12, !13, !14, !15} STDOUT: +!named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9, !10, !11, !12, !13, !14, !15} STDOUT: STDOUT: !0 = !{null} STDOUT: !1 = distinct !DICompositeType(tag: DW_TAG_structure_type) STDOUT: @@ -17,7 +17,7 @@ define void @_Z3foov() !dbg !9 { STDOUT: !5 = distinct !{} STDOUT: !6 = distinct !{} STDOUT: STDOUT: -; CHECK: !7 = distinct !DISubprogram(scope: null, isLocal: false, isDefinition: true, isOptimized: false, unit: !8) STDOUT: +; CHECK: !7 = distinct !DISubprogram(scope: null, spFlags: DISPFlagDefinition, unit: !8) STDOUT: !7 = distinct !DISubprogram(unit: !8) STDOUT: STDOUT: !8 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang", STDOUT: @@ -25,10 +25,10 @@ define void @_Z3foov() !dbg !9 { STDOUT: isOptimized: true, flags: "-O2", STDOUT: splitDebugFilename: "abc.debug", emissionKind: 2) STDOUT: STDOUT: -; CHECK: !9 = !DISubprogram(scope: null, isLocal: false, isDefinition: false, isOptimized: false) STDOUT: +; CHECK: !9 = !DISubprogram(scope: null, spFlags: 0) STDOUT: !9 = !DISubprogram(isDefinition: false) STDOUT: STDOUT: -; CHECK: !10 = distinct !DISubprogram(name: "foo", linkageName: "_Zfoov", scope: !1, file: !2, line: 7, type: !3, isLocal: true, isDefinition: true, scopeLine: 8, containingType: !4, virtuality: DW_VIRTUALITY_pure_virtual, virtualIndex: 10, thisAdjustment: 3, flags: DIFlagPrototyped | DIFlagNoReturn, isOptimized: true, unit: !8, templateParams: !5, declaration: !9, retainedNodes: !6) STDOUT: +; CHECK: !10 = distinct !DISubprogram(name: "foo", linkageName: "_Zfoov", scope: !1, file: !2, line: 7, type: !3, scopeLine: 8, containingType: !4, virtualIndex: 10, thisAdjustment: 3, flags: DIFlagPrototyped | DIFlagNoReturn, spFlags: DISPFlagPureVirtual | DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, unit: !8, templateParams: !5, declaration: !9, retainedNodes: !6) STDOUT: !10 = distinct !DISubprogram(name: "foo", linkageName: "_Zfoov", scope: !1, STDOUT: file: !2, line: 7, type: !3, isLocal: true, STDOUT: isDefinition: true, scopeLine: 8, STDOUT: @@ -63,12 +63,21 @@ define void @_Z3foov() !dbg !9 { STDOUT: STDOUT: !13 = !{!4} STDOUT: ; CHECK: !13 = !{!4} STDOUT: -; CHECK: !14 = distinct !DISubprogram(name: "foo", scope: !1, file: !2, line: 1, type: !3, isLocal: true, isDefinition: true, scopeLine: 2, isOptimized: false, unit: !8, thrownTypes: !13) STDOUT: +; CHECK: !14 = distinct !DISubprogram(name: "foo", scope: !1, file: !2, line: 1, type: !3, scopeLine: 2, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !8, thrownTypes: !13) STDOUT: !14 = distinct !DISubprogram(name: "foo", scope: !1, STDOUT: file: !2, line: 1, type: !3, isLocal: true, STDOUT: isDefinition: true, scopeLine: 2, isOptimized: false, STDOUT: unit: !8, thrownTypes: !13) STDOUT: STDOUT: -!15 = !{i32 1, !"Debug Info Version", i32 3} STDOUT: -!llvm.module.flags = !{!15} STDOUT: +; CHECK: !15 = distinct !DISubprogram({{.*}}, flags: DIFlagPrototyped, spFlags: DISPFlagPureVirtual | DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, STDOUT: +!15 = distinct !DISubprogram(name: "foo", linkageName: "_Zfoov", scope: !1, STDOUT: + file: !2, line: 7, type: !3, scopeLine: 8, STDOUT: + containingType: !4, virtualIndex: 0, STDOUT: + flags: DIFlagPrototyped, STDOUT: + spFlags: DISPFlagPureVirtual | DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, STDOUT: + unit: !8, templateParams: !5, declaration: !9, STDOUT: + retainedNodes: !6) STDOUT: + STDOUT: +!16 = !{i32 1, !"Debug Info Version", i32 3} STDOUT: +!llvm.module.flags = !{!16} STDOUT: !llvm.dbg.cu = !{!8} STDOUT: diff --git a/llvm/test/Assembler/invalid-disubprogram-uniqued-definition.ll b/llvm/test/Assembler/invalid-disubprogram-uniqued-definition.ll STDOUT: index c146883d664..6641e6dc21d 100644 STDOUT: --- a/llvm/test/Assembler/invalid-disubprogram-uniqued-definition.ll STDOUT: +++ b/llvm/test/Assembler/invalid-disubprogram-uniqued-definition.ll STDOUT: @@ -1,4 +1,4 @@ STDOUT: ; RUN: not llvm-as < %s -disable-output 2>&1 | FileCheck %s STDOUT: STDOUT: -; CHECK: :[[@LINE+1]]:6: error: missing 'distinct', required for !DISubprogram when 'isDefinition' STDOUT: +; CHECK: :[[@LINE+1]]:6: error: missing 'distinct', required for !DISubprogram that is a Definition STDOUT: !0 = !DISubprogram(isDefinition: true) STDOUT: diff --git a/llvm/test/Bindings/llvm-c/debug_info.ll b/llvm/test/Bindings/llvm-c/debug_info.ll STDOUT: index 46fb0dd16ce..84635f041a3 100644 STDOUT: --- a/llvm/test/Bindings/llvm-c/debug_info.ll STDOUT: +++ b/llvm/test/Bindings/llvm-c/debug_info.ll STDOUT: @@ -43,7 +43,7 @@ STDOUT: ; CHECK-NEXT: !17 = !DICompositeType(tag: DW_TAG_structure_type, name: "MyStruct", scope: !18, file: !1, size: 192, elements: !19, runtimeLang: DW_LANG_C89, identifier: "MyStruct") STDOUT: ; CHECK-NEXT: !18 = !DINamespace(name: "NameSpace", scope: !6) STDOUT: ; CHECK-NEXT: !19 = !{!11, !11, !11} STDOUT: -; CHECK-NEXT: !20 = distinct !DISubprogram(name: "foo", linkageName: "foo", scope: !1, file: !1, line: 42, type: !21, isLocal: true, isDefinition: true, scopeLine: 42, isOptimized: false, unit: !0, retainedNodes: !26) STDOUT: +; CHECK-NEXT: !20 = distinct !DISubprogram(name: "foo", linkageName: "foo", scope: !1, file: !1, line: 42, type: !21, scopeLine: 42, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !0, retainedNodes: !26) STDOUT: ; CHECK-NEXT: !21 = !DISubroutineType(types: !22) STDOUT: ; CHECK-NEXT: !22 = !{!11, !11, !23} STDOUT: ; CHECK-NEXT: !23 = !DICompositeType(tag: DW_TAG_array_type, baseType: !11, size: 640, flags: DIFlagVector, elements: !24) STDOUT: diff --git a/llvm/test/Bitcode/DISubprogram-distinct-definitions.ll b/llvm/test/Bitcode/DISubprogram-distinct-definitions.ll STDOUT: index bcb9a4ec4da..9d141d52de1 100644 STDOUT: --- a/llvm/test/Bitcode/DISubprogram-distinct-definitions.ll STDOUT: +++ b/llvm/test/Bitcode/DISubprogram-distinct-definitions.ll STDOUT: @@ -9,6 +9,6 @@ define void @f() !dbg !3 { ret void } STDOUT: !0 = distinct !DICompileUnit(language: 12, file: !1, subprograms: !{!3}) STDOUT: !1 = !DIFile(filename: "path/to/file", directory: "/path/to/dir") STDOUT: STDOUT: -; CHECK: = distinct !DISubprogram({{.*}}, isDefinition: true STDOUT: +; CHECK: = distinct !DISubprogram({{.*}} DISPFlagDefinition STDOUT: !3 = !DISubprogram(name: "foo", isDefinition: true) STDOUT: !4 = !{i32 2, !"Debug Info Version", i32 3} STDOUT: diff --git a/llvm/test/Bitcode/DISubprogram-v4.ll b/llvm/test/Bitcode/DISubprogram-v4.ll STDOUT: new file mode 100644 STDOUT: index 00000000000..ce5521002ca STDOUT: --- /dev/null STDOUT: +++ b/llvm/test/Bitcode/DISubprogram-v4.ll STDOUT: @@ -0,0 +1,86 @@ STDOUT: +; The .bc file was generated from this source using llvm-as from r347766. STDOUT: +; A 7.0 release version should work to recreate it if necessary. STDOUT: +; RUN: llvm-dis < %s.bc | FileCheck %s STDOUT: + STDOUT: +; CHECK: define void @_Z3foov() !dbg !9 STDOUT: +define void @_Z3foov() !dbg !9 { STDOUT: + ret void STDOUT: +} STDOUT: + STDOUT: +; CHECK: !named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9, !10, !11, !12, !13, !14, !15, !16, !17, !18} STDOUT: +!named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9, !10, !11, !12, !13, !14, !15, !16, !17, !18} STDOUT: + STDOUT: +!0 = !{null} STDOUT: +!1 = distinct !DICompositeType(tag: DW_TAG_structure_type) STDOUT: +!2 = !DIFile(filename: "path/to/file", directory: "/path/to/dir") STDOUT: +!3 = !DISubroutineType(types: !0) STDOUT: +!4 = distinct !DICompositeType(tag: DW_TAG_structure_type) STDOUT: +!5 = distinct !{} STDOUT: +!6 = distinct !{} STDOUT: + STDOUT: +; CHECK: !7 = distinct !DISubprogram(scope: null, spFlags: DISPFlagDefinition, unit: !8) STDOUT: +!7 = distinct !DISubprogram(unit: !8) STDOUT: + STDOUT: +!8 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang", STDOUT: + file: !2, isOptimized: true, flags: "-O2") STDOUT: + STDOUT: +; CHECK: !9 = !DISubprogram(scope: null, spFlags: 0) STDOUT: +!9 = !DISubprogram(isDefinition: false) STDOUT: + STDOUT: +; CHECK: !10 = distinct !DISubprogram({{.*}}, spFlags: DISPFlagPureVirtual | DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, STDOUT: +!10 = distinct !DISubprogram(name: "foo", linkageName: "_Zfoov", scope: !1, STDOUT: + file: !2, line: 7, type: !3, containingType: !4, STDOUT: + isLocal: true, isDefinition: true, isOptimized: true, STDOUT: + virtuality: DW_VIRTUALITY_pure_virtual, STDOUT: + unit: !8) STDOUT: + STDOUT: +; CHECK: !11 = distinct !DISubprogram({{.*}}, spFlags: DISPFlagVirtual | DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, STDOUT: +!11 = distinct !DISubprogram(name: "foo", linkageName: "_Zfoov", scope: !1, STDOUT: + file: !2, line: 7, type: !3, containingType: !4, STDOUT: + isLocal: true, isDefinition: true, isOptimized: true, STDOUT: + virtuality: DW_VIRTUALITY_virtual, STDOUT: + unit: !8) STDOUT: + STDOUT: +; CHECK: !12 = distinct !DISubprogram({{.*}}, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition | DISPFlagOptimized, STDOUT: +!12 = distinct !DISubprogram(name: "foo", linkageName: "_Zfoov", scope: !1, STDOUT: + file: !2, line: 7, type: !3, containingType: !4, STDOUT: + isLocal: true, isDefinition: true, isOptimized: true, STDOUT: + virtuality: DW_VIRTUALITY_none, STDOUT: + unit: !8) STDOUT: + STDOUT: +; CHECK: !13 = distinct !DISubprogram({{.*}}, spFlags: DISPFlagDefinition | DISPFlagOptimized, STDOUT: +!13 = distinct !DISubprogram(name: "foo", linkageName: "_Zfoov", scope: !1, STDOUT: + file: !2, line: 7, type: !3, containingType: !4, STDOUT: + isLocal: false, isDefinition: true, isOptimized: true, STDOUT: + unit: !8) STDOUT: + STDOUT: +; CHECK: !14 = distinct !DISubprogram({{.*}}, spFlags: DISPFlagLocalToUnit | DISPFlagOptimized) STDOUT: +!14 = distinct !DISubprogram(name: "foo", linkageName: "_Zfoov", scope: !1, STDOUT: + file: !2, line: 7, type: !3, containingType: !4, STDOUT: + isLocal: true, isDefinition: false, isOptimized: true) STDOUT: + STDOUT: +; CHECK: !15 = distinct !DISubprogram({{.*}}, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, STDOUT: +!15 = distinct !DISubprogram(name: "foo", linkageName: "_Zfoov", scope: !1, STDOUT: + file: !2, line: 7, type: !3, containingType: !4, STDOUT: + isLocal: true, isDefinition: true, isOptimized: false, STDOUT: + unit: !8) STDOUT: + STDOUT: +; CHECK: !16 = distinct !DISubprogram({{.*}}, spFlags: DISPFlagLocalToUnit) STDOUT: +!16 = distinct !DISubprogram(name: "foo", linkageName: "_Zfoov", scope: !1, STDOUT: + file: !2, line: 7, type: !3, containingType: !4, STDOUT: + isLocal: true, isDefinition: false, isOptimized: false) STDOUT: + STDOUT: +; CHECK: !17 = distinct !DISubprogram({{.*}}, spFlags: DISPFlagDefinition, STDOUT: +!17 = distinct !DISubprogram(name: "foo", linkageName: "_Zfoov", scope: !1, STDOUT: + file: !2, line: 7, type: !3, containingType: !4, STDOUT: + isLocal: false, isDefinition: true, isOptimized: false, STDOUT: + unit: !8) STDOUT: + STDOUT: +; CHECK: !18 = distinct !DISubprogram({{.*}}, spFlags: DISPFlagOptimized) STDOUT: +!18 = distinct !DISubprogram(name: "foo", linkageName: "_Zfoov", scope: !1, STDOUT: + file: !2, line: 7, type: !3, containingType: !4, STDOUT: + isLocal: false, isDefinition: false, isOptimized: true) STDOUT: + STDOUT: +!19 = !{i32 1, !"Debug Info Version", i32 3} STDOUT: +!llvm.module.flags = !{!19} STDOUT: +!llvm.dbg.cu = !{!8} STDOUT: diff --git a/llvm/test/Bitcode/DISubprogram-v4.ll.bc b/llvm/test/Bitcode/DISubprogram-v4.ll.bc STDOUT: new file mode 100644 STDOUT: index 0000000000000000000000000000000000000000..392df4aae74d3fb0df0c2196191496a4eb4045dd STDOUT: GIT binary patch STDOUT: literal 1372 STDOUT: zcmY*ZVN6?96uzY`?*ZlYjdiog>&ts9kY>VoJhoYEOMu6;(`JHzncEC4l+r3GrLCoa STDOUT: znwFNmlGUXkCXMm~vi;EPPf?@BEv8W1I?^m-PO~h8KtQq>M4~hC$9{NUfowZX&%O71 STDOUT: z_kQ=>lkc2HF1d0-0e}<$&?#d|P4E0v{?{*cmF=J4(lo?r831)6019$wkOTJ|hJPfe STDOUT: z9&boXPUqrm?Sv>SE0dzdq~ua(Kz1spaiXBnin9tWs(d4#Wg|w{0Q|8M6Mh3u(vA>)sFUC1zs3>tZt3mI~WeSY3W@x_?~*j5Z%W8_Xo STDOUT: zzP^L)G-EaRf@*~(9?+_J3u$Ak}yIk$JV*QPfJ}lN{b`(A{GHgd)w)1Z21H3E7 STDOUT: zyUd7BgZTcFLfU}<-+}V|O5Ppk2jjtt?Hz1;75g`dZ874`^bD~vLu9gk*+MMR#6nQD STDOUT: zXvzI8#?_{|+IZIgkkU?a+K5;;nW}=9J{i&77wZx!*)0d}I?KCVA+H_rn|ZI2_fGT0 STDOUT: zcUtA!K>l|#wh_bD>*Z?{wgq27X;jN|GnIG^Y{&8la0Zx=C-eFZ STDOUT: zP8Wg8RP^V3_)>lV#)Be58pItBURcMmtt9q)GxiUop1apTZmhlVU`@3mA_V~qQUEyN STDOUT: z=q8O67m*d`xmhEn4o1hvmzt(=ja6UGHeQa=SNzl!AZwL{Xs8jF#cQwf_Ep&&z1>y& STDOUT: z3#-H3)oXF~RKCgD`uaM~LFa4g?);#KI_=#+5P&q(ii^J9dQbs?w3vk-BqCbqNHrqZ4p5Fpw3f#t)$E@P<;jKQs@N*`ECu=J2G_E73U04 STDOUT: zwh6BGZfazcxH(h!s6i;lO", directory: "/") STDOUT: -; CHECK-DAG: distinct !DISubprogram(name: "foo", linkageName: "foo", scope: null, file: {{.*}}, line: 1, type: {{.*}}, isLocal: false, isDefinition: true, scopeLine: 1, isOptimized: true, unit: {{.*}}, retainedNodes: {{.*}}) STDOUT: -; CHECK-DAG: distinct !DISubprogram(name: "bar", linkageName: "bar", scope: null, file: {{.*}}, line: 2, type: {{.*}}, isLocal: false, isDefinition: true, scopeLine: 2, isOptimized: true, unit: {{.*}}, retainedNodes: {{.*}}) STDOUT: +; CHECK-DAG: distinct !DISubprogram(name: "foo", linkageName: "foo", scope: null, file: {{.*}}, line: 1, type: {{.*}}, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: {{.*}}, retainedNodes: {{.*}}) STDOUT: +; CHECK-DAG: distinct !DISubprogram(name: "bar", linkageName: "bar", scope: null, file: {{.*}}, line: 2, type: {{.*}}, scopeLine: 2, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: {{.*}}, retainedNodes: {{.*}}) STDOUT: STDOUT: ; --- DILocations STDOUT: ; CHECK-DAG: ![[RET1]] = !DILocation(line: 1, column: 1 STDOUT: diff --git a/llvm/test/Linker/replaced-function-matches-first-subprogram.ll b/llvm/test/Linker/replaced-function-matches-first-subprogram.ll STDOUT: index fc2c361a246..7d40ac02f15 100644 STDOUT: --- a/llvm/test/Linker/replaced-function-matches-first-subprogram.ll STDOUT: +++ b/llvm/test/Linker/replaced-function-matches-first-subprogram.ll STDOUT: @@ -54,7 +54,7 @@ entry: STDOUT: STDOUT: ; We can't use CHECK-NOT/CHECK-SAME with a CHECK-DAG, so rely on field order to STDOUT: ; prove that there's no function: here. STDOUT: -; CHECK-DAG: ![[SP2r:.*]] = {{.*}}!DISubprogram({{.*}} isOptimized: false, unit: ![[CU1]], retainedNodes: STDOUT: +; CHECK-DAG: ![[SP2r:.*]] = {{.*}}!DISubprogram({{.*}} unit: ![[CU1]], retainedNodes: STDOUT: !7 = distinct !DISubprogram(name: "foo", line: 2, isLocal: false, isDefinition: true, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 2, file: !8, scope: !9, type: !6, retainedNodes: !2) STDOUT: STDOUT: ; The new subprogram should be pointing at the new directory. STDOUT: diff --git a/llvm/test/Transforms/GCOVProfiling/three-element-mdnode.ll b/llvm/test/Transforms/GCOVProfiling/three-element-mdnode.ll STDOUT: index 3136ff7a482..0af01188986 100644 STDOUT: --- a/llvm/test/Transforms/GCOVProfiling/three-element-mdnode.ll STDOUT: +++ b/llvm/test/Transforms/GCOVProfiling/three-element-mdnode.ll STDOUT: @@ -19,7 +19,7 @@ entry: STDOUT: !1 = !DIFile(filename: "hello.cc", directory: "/home/nlewycky") STDOUT: !2 = !DIFile(filename: "hello.cc", directory: "/home/nlewycky") STDOUT: !3 = !{} STDOUT: -!5 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", line: 1, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 1, file: !1, scope: !1, type: !6, retainedNodes: !3) STDOUT: +!5 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foov", line: 1, virtualIndex: 6, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, scopeLine: 1, file: !1, scope: !1, type: !6, retainedNodes: !3) STDOUT: !6 = !DISubroutineType(types: !7) STDOUT: !7 = !{null} STDOUT: !8 = !DILocation(line: 1, scope: !5) Running in .git\llvm-upstream-svn\llvm/trunk: git apply -p2 - Command took 0.0s `git apply -p2 -` returned 1 error: test/DebugInfo/Generic/invalid.ll: No such file or directory Patch doesn't apply: maybe you should try `git pull -r` first? C:\Dev\upstream\gitmono\llvm-project>