[llvm] r284678 - DebugInfo: preparation to implement DW_AT_alignment
Peter Collingbourne via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 20 18:52:04 PDT 2016
Sorry, never mind, Benjamin did it in r284707.
Peter
On Thu, Oct 20, 2016 at 4:03 PM, Peter Collingbourne <peter at pcc.me.uk>
wrote:
> Hi Victor, can you please also update the Go bindings?
>
> # llvm.org/llvm/bindings/go/llvm
> [...]/llvm/bindings/go/llvm/DIBuilderBindings.cpp:113:65: error: too many
> arguments to function call, expected 3, have 4
> [...]/llvm/include/llvm/IR/DIBuilder.h:124:5: note: 'createBasicType'
> declared here
>
>
> On Wed, Oct 19, 2016 at 5:13 PM, Victor Leschuk via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> Author: vleschuk
>> Date: Wed Oct 19 19:13:12 2016
>> New Revision: 284678
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=284678&view=rev
>> Log:
>> DebugInfo: preparation to implement DW_AT_alignment
>>
>> - Add alignment attribute to DIVariable family
>> - Modify bitcode format to match new DIVariable representation
>> - Update tests to match these changes (also add bitcode upgrade test)
>> - Expect that frontend passes non-zero align value only when it is not
>> default
>> (was forcibly aligned by alignas()/_Alignas()/__atribute__(aligned())
>>
>> Differential Revision: https://reviews.llvm.org/D25073
>>
>> Added:
>> llvm/trunk/test/Bitcode/dilocalvariable-3.9.ll
>> llvm/trunk/test/Bitcode/dilocalvariable-3.9.ll.bc
>> Modified:
>> llvm/trunk/include/llvm/IR/DIBuilder.h
>> llvm/trunk/include/llvm/IR/DebugInfoMetadata.h
>> llvm/trunk/lib/AsmParser/LLParser.cpp
>> llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
>> llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp
>> llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
>> llvm/trunk/lib/IR/AsmWriter.cpp
>> llvm/trunk/lib/IR/DIBuilder.cpp
>> llvm/trunk/lib/IR/DebugInfoMetadata.cpp
>> llvm/trunk/lib/IR/LLVMContextImpl.h
>> llvm/trunk/test/Assembler/diglobalvariable.ll
>> llvm/trunk/test/Assembler/dilocalvariable.ll
>> llvm/trunk/test/DebugInfo/AArch64/bitfields.ll
>> llvm/trunk/test/DebugInfo/ARM/big-endian-bitfield.ll
>> llvm/trunk/test/DebugInfo/COFF/bitfields.ll
>> llvm/trunk/test/DebugInfo/X86/bitfields-dwarf4.ll
>> llvm/trunk/test/DebugInfo/X86/bitfields.ll
>> llvm/trunk/test/DebugInfo/X86/debug-info-packed-struct.ll
>> llvm/trunk/unittests/IR/MetadataTest.cpp
>> llvm/trunk/unittests/Transforms/Utils/Cloning.cpp
>>
>> Modified: llvm/trunk/include/llvm/IR/DIBuilder.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/
>> IR/DIBuilder.h?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/include/llvm/IR/DIBuilder.h (original)
>> +++ llvm/trunk/include/llvm/IR/DIBuilder.h Wed Oct 19 19:13:12 2016
>> @@ -120,10 +120,9 @@ namespace llvm {
>> /// type.
>> /// \param Name Type name.
>> /// \param SizeInBits Size of the type.
>> - /// \param AlignInBits Type alignment.
>> /// \param Encoding DWARF encoding code, e.g. dwarf::DW_ATE_float.
>> DIBasicType *createBasicType(StringRef Name, uint64_t SizeInBits,
>> - uint32_t AlignInBits, unsigned
>> Encoding);
>> + unsigned Encoding);
>>
>> /// Create debugging information entry for a qualified
>> /// type, e.g. 'const int'.
>> @@ -209,7 +208,7 @@ namespace llvm {
>> /// \param Ty Parent type.
>> DIDerivedType *createBitFieldMemberType(
>> DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNo,
>> - uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
>> + uint64_t SizeInBits, uint64_t OffsetInBits,
>> uint64_t StorageOffsetInBits, DINode::DIFlags Flags, DIType *Ty);
>>
>> /// Create debugging information entry for a
>> @@ -221,10 +220,12 @@ namespace llvm {
>> /// \param Ty Type of the static member.
>> /// \param Flags Flags to encode member attribute, e.g. private.
>> /// \param Val Const initializer of the member.
>> + /// \param AlignInBits Member alignment.
>> DIDerivedType *createStaticMemberType(DIScope *Scope, StringRef
>> Name,
>> DIFile *File, unsigned LineNo,
>> DIType *Ty, DINode::DIFlags
>> Flags,
>> - llvm::Constant *Val);
>> + llvm::Constant *Val,
>> + uint32_t AlignInBits = 0);
>>
>> /// Create debugging information entry for Objective-C
>> /// instance variable.
>> @@ -458,19 +459,22 @@ namespace llvm {
>> /// \param Expr The location of the global relative to the
>> attached
>> /// GlobalVariable.
>> /// \param Decl Reference to the corresponding declaration.
>> + /// \param AlignInBits Variable alignment(or 0 if no alignment attr
>> was
>> + /// specified)
>> DIGlobalVariable *createGlobalVariable(DIScope *Context, StringRef
>> Name,
>> StringRef LinkageName, DIFile
>> *File,
>> unsigned LineNo, DIType *Ty,
>> bool isLocalToUnit,
>> DIExpression *Expr = nullptr,
>> - MDNode *Decl = nullptr);
>> + MDNode *Decl = nullptr,
>> + uint32_t AlignInBits = 0);
>>
>> /// Identical to createGlobalVariable
>> /// except that the resulting DbgNode is temporary and meant to be
>> RAUWed.
>> DIGlobalVariable *createTempGlobalVariableFwdDecl(
>> DIScope *Context, StringRef Name, StringRef LinkageName, DIFile
>> *File,
>> unsigned LineNo, DIType *Ty, bool isLocalToUnit, DIExpression
>> *Expr,
>> - MDNode *Decl = nullptr);
>> + MDNode *Decl = nullptr, uint32_t AlignInBits = 0);
>>
>> /// Create a new descriptor for an auto variable. This is a local
>> variable
>> /// that is not a subprogram parameter.
>> @@ -483,7 +487,8 @@ namespace llvm {
>> DILocalVariable *
>> createAutoVariable(DIScope *Scope, StringRef Name, DIFile *File,
>> unsigned LineNo, DIType *Ty, bool AlwaysPreserve
>> = false,
>> - DINode::DIFlags Flags = DINode::FlagZero);
>> + DINode::DIFlags Flags = DINode::FlagZero,
>> + uint32_t AlignInBits = 0);
>>
>> /// Create a new descriptor for a parameter variable.
>> ///
>>
>> Modified: llvm/trunk/include/llvm/IR/DebugInfoMetadata.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/
>> IR/DebugInfoMetadata.h?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/include/llvm/IR/DebugInfoMetadata.h (original)
>> +++ llvm/trunk/include/llvm/IR/DebugInfoMetadata.h Wed Oct 19 19:13:12
>> 2016
>> @@ -549,7 +549,8 @@ public:
>>
>> unsigned getLine() const { return Line; }
>> uint64_t getSizeInBits() const { return SizeInBits; }
>> - uint64_t getAlignInBits() const { return AlignInBits; }
>> + uint32_t getAlignInBits() const { return AlignInBits; }
>> + uint32_t getAlignInBytes() const { return getAlignInBits() / CHAR_BIT;
>> }
>> uint64_t getOffsetInBits() const { return OffsetInBits; }
>> DIFlags getFlags() const { return Flags; }
>>
>> @@ -1826,11 +1827,13 @@ public:
>> /// \brief Base class for variables.
>> class DIVariable : public DINode {
>> unsigned Line;
>> + uint64_t AlignInBits;
>>
>> protected:
>> DIVariable(LLVMContext &C, unsigned ID, StorageType Storage, unsigned
>> Line,
>> - ArrayRef<Metadata *> Ops)
>> - : DINode(C, ID, Storage, dwarf::DW_TAG_variable, Ops), Line(Line)
>> {}
>> + ArrayRef<Metadata *> Ops, uint64_t AlignInBits = 0)
>> + : DINode(C, ID, Storage, dwarf::DW_TAG_variable, Ops), Line(Line),
>> + AlignInBits(AlignInBits) {}
>> ~DIVariable() = default;
>>
>> public:
>> @@ -1839,6 +1842,8 @@ public:
>> StringRef getName() const { return getStringOperand(1); }
>> DIFile *getFile() const { return cast_or_null<DIFile>(getRawFile()); }
>> DITypeRef getType() const { return DITypeRef(getRawType()); }
>> + uint64_t getAlignInBits() const { return AlignInBits; }
>> + uint64_t getAlignInBytes() const { return getAlignInBits() / CHAR_BIT;
>> }
>>
>> StringRef getFilename() const {
>> if (auto *F = getFile())
>> @@ -2026,9 +2031,9 @@ class DIGlobalVariable : public DIVariab
>> bool IsDefinition;
>>
>> DIGlobalVariable(LLVMContext &C, StorageType Storage, unsigned Line,
>> - bool IsLocalToUnit, bool IsDefinition,
>> + bool IsLocalToUnit, bool IsDefinition, uint64_t
>> AlignInBits,
>> ArrayRef<Metadata *> Ops)
>> - : DIVariable(C, DIGlobalVariableKind, Storage, Line, Ops),
>> + : DIVariable(C, DIGlobalVariableKind, Storage, Line, Ops,
>> AlignInBits),
>> IsLocalToUnit(IsLocalToUnit), IsDefinition(IsDefinition) {}
>> ~DIGlobalVariable() = default;
>>
>> @@ -2036,42 +2041,48 @@ class DIGlobalVariable : public DIVariab
>> getImpl(LLVMContext &Context, DIScope *Scope, StringRef Name,
>> StringRef LinkageName, DIFile *File, unsigned Line, DITypeRef
>> Type,
>> bool IsLocalToUnit, bool IsDefinition, DIExpression *Expr,
>> - DIDerivedType *StaticDataMemberDeclaration, StorageType
>> Storage,
>> - bool ShouldCreate = true) {
>> + DIDerivedType *StaticDataMemberDeclaration, uint64_t
>> AlignInBits,
>> + StorageType Storage, bool ShouldCreate = true) {
>> return getImpl(Context, Scope, getCanonicalMDString(Context, Name),
>> getCanonicalMDString(Context, LinkageName), File,
>> Line, Type,
>> IsLocalToUnit, IsDefinition, Expr,
>> - StaticDataMemberDeclaration, Storage, ShouldCreate);
>> + StaticDataMemberDeclaration, AlignInBits, Storage,
>> + ShouldCreate);
>> }
>> static DIGlobalVariable *
>> getImpl(LLVMContext &Context, Metadata *Scope, MDString *Name,
>> MDString *LinkageName, Metadata *File, unsigned Line, Metadata
>> *Type,
>> bool IsLocalToUnit, bool IsDefinition, Metadata *Expr,
>> - Metadata *StaticDataMemberDeclaration, StorageType Storage,
>> - bool ShouldCreate = true);
>> + Metadata *StaticDataMemberDeclaration, uint64_t AlignInBits,
>> + StorageType Storage, bool ShouldCreate = true);
>>
>> TempDIGlobalVariable cloneImpl() const {
>> return getTemporary(getContext(), getScope(), getName(),
>> getLinkageName(),
>> getFile(), getLine(), getType(), isLocalToUnit(),
>> isDefinition(), getExpr(),
>> - getStaticDataMemberDeclaration());
>> + getStaticDataMemberDeclaration(),
>> getAlignInBits());
>> }
>>
>> public:
>> DEFINE_MDNODE_GET(DIGlobalVariable,
>> (DIScope * Scope, StringRef Name, StringRef
>> LinkageName,
>> DIFile *File, unsigned Line, DITypeRef Type,
>> - bool IsLocalToUnit, bool IsDefinition, DIExpression
>> *Expr,
>> - DIDerivedType *StaticDataMemberDeclaration),
>> + bool IsLocalToUnit, bool IsDefinition,
>> + DIExpression *Expr,
>> + DIDerivedType *StaticDataMemberDeclaration,
>> + uint64_t AlignInBits),
>> (Scope, Name, LinkageName, File, Line, Type,
>> IsLocalToUnit,
>> - IsDefinition, Expr, StaticDataMemberDeclaration))
>> + IsDefinition, Expr, StaticDataMemberDeclaration,
>> + AlignInBits))
>> DEFINE_MDNODE_GET(DIGlobalVariable,
>> (Metadata * Scope, MDString *Name, MDString
>> *LinkageName,
>> Metadata *File, unsigned Line, Metadata *Type,
>> - bool IsLocalToUnit, bool IsDefinition, Metadata
>> *Expr,
>> - Metadata *StaticDataMemberDeclaration),
>> + bool IsLocalToUnit, bool IsDefinition,
>> + Metadata *Expr, Metadata
>> *StaticDataMemberDeclaration,
>> + uint64_t AlignInBits),
>> (Scope, Name, LinkageName, File, Line, Type,
>> IsLocalToUnit,
>> - IsDefinition, Expr, StaticDataMemberDeclaration))
>> + IsDefinition, Expr, StaticDataMemberDeclaration,
>> + AlignInBits))
>>
>> TempDIGlobalVariable clone() const { return cloneImpl(); }
>>
>> @@ -2109,9 +2120,10 @@ class DILocalVariable : public DIVariabl
>> DIFlags Flags;
>>
>> DILocalVariable(LLVMContext &C, StorageType Storage, unsigned Line,
>> - unsigned Arg, DIFlags Flags, ArrayRef<Metadata *> Ops)
>> - : DIVariable(C, DILocalVariableKind, Storage, Line, Ops), Arg(Arg),
>> - Flags(Flags) {
>> + unsigned Arg, DIFlags Flags, uint64_t AlignInBits,
>> + ArrayRef<Metadata *> Ops)
>> + : DIVariable(C, DILocalVariableKind, Storage, Line, Ops,
>> AlignInBits),
>> + Arg(Arg), Flags(Flags) {
>> assert(Arg < (1 << 16) && "DILocalVariable: Arg out of range");
>> }
>> ~DILocalVariable() = default;
>> @@ -2119,33 +2131,34 @@ class DILocalVariable : public DIVariabl
>> static DILocalVariable *getImpl(LLVMContext &Context, DIScope *Scope,
>> StringRef Name, DIFile *File, unsigned
>> Line,
>> DITypeRef Type, unsigned Arg, DIFlags
>> Flags,
>> - StorageType Storage,
>> + uint64_t AlignInBits, StorageType
>> Storage,
>> bool ShouldCreate = true) {
>> return getImpl(Context, Scope, getCanonicalMDString(Context, Name),
>> File,
>> - Line, Type, Arg, Flags, Storage, ShouldCreate);
>> + Line, Type, Arg, Flags, AlignInBits, Storage,
>> ShouldCreate);
>> }
>> static DILocalVariable *getImpl(LLVMContext &Context, Metadata *Scope,
>> MDString *Name, Metadata *File,
>> unsigned Line,
>> Metadata *Type, unsigned Arg, DIFlags
>> Flags,
>> - StorageType Storage,
>> + uint64_t AlignInBits, StorageType
>> Storage,
>> bool ShouldCreate = true);
>>
>> TempDILocalVariable cloneImpl() const {
>> return getTemporary(getContext(), getScope(), getName(), getFile(),
>> - getLine(), getType(), getArg(), getFlags());
>> + getLine(), getType(), getArg(), getFlags(),
>> + getAlignInBits());
>> }
>>
>> public:
>> DEFINE_MDNODE_GET(DILocalVariable,
>> (DILocalScope * Scope, StringRef Name, DIFile *File,
>> unsigned Line, DITypeRef Type, unsigned Arg,
>> - DIFlags Flags),
>> - (Scope, Name, File, Line, Type, Arg, Flags))
>> + DIFlags Flags, uint64_t AlignInBits),
>> + (Scope, Name, File, Line, Type, Arg, Flags,
>> AlignInBits))
>> DEFINE_MDNODE_GET(DILocalVariable,
>> (Metadata * Scope, MDString *Name, Metadata *File,
>> unsigned Line, Metadata *Type, unsigned Arg,
>> - DIFlags Flags),
>> - (Scope, Name, File, Line, Type, Arg, Flags))
>> + DIFlags Flags, uint64_t AlignInBits),
>> + (Scope, Name, File, Line, Type, Arg, Flags,
>> AlignInBits))
>>
>> TempDILocalVariable clone() const { return cloneImpl(); }
>>
>>
>> Modified: llvm/trunk/lib/AsmParser/LLParser.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser
>> /LLParser.cpp?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/AsmParser/LLParser.cpp (original)
>> +++ llvm/trunk/lib/AsmParser/LLParser.cpp Wed Oct 19 19:13:12 2016
>> @@ -4186,7 +4186,7 @@ bool LLParser::ParseDITemplateValueParam
>> /// ::= !DIGlobalVariable(scope: !0, name: "foo", linkageName: "foo",
>> /// file: !1, line: 7, type: !2, isLocal: false,
>> /// isDefinition: true, variable: i32* @foo,
>> -/// declaration: !3)
>> +/// declaration: !3, align: 8)
>> bool LLParser::ParseDIGlobalVariable(MDNode *&Result, bool IsDistinct) {
>> #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED)
>> \
>> REQUIRED(name, MDStringField, (/* AllowEmpty */ false));
>> \
>> @@ -4198,22 +4198,26 @@ bool LLParser::ParseDIGlobalVariable(MDN
>> OPTIONAL(isLocal, MDBoolField, );
>> \
>> OPTIONAL(isDefinition, MDBoolField, (true));
>> \
>> OPTIONAL(expr, MDField, );
>> \
>> - OPTIONAL(declaration, MDField, );
>> + OPTIONAL(declaration, MDField, );
>> \
>> + OPTIONAL(align, MDUnsignedField, (0, UINT32_MAX));
>> PARSE_MD_FIELDS();
>> #undef VISIT_MD_FIELDS
>>
>> Result = GET_OR_DISTINCT(DIGlobalVariable,
>> (Context, scope.Val, name.Val,
>> linkageName.Val,
>> file.Val, line.Val, type.Val, isLocal.Val,
>> - isDefinition.Val, expr.Val,
>> declaration.Val));
>> + isDefinition.Val, expr.Val, declaration.Val,
>> + align.Val));
>> return false;
>> }
>>
>> /// ParseDILocalVariable:
>> /// ::= !DILocalVariable(arg: 7, scope: !0, name: "foo",
>> -/// file: !1, line: 7, type: !2, arg: 2, flags: 7)
>> +/// file: !1, line: 7, type: !2, arg: 2, flags: 7,
>> +/// align: 8)
>> /// ::= !DILocalVariable(scope: !0, name: "foo",
>> -/// file: !1, line: 7, type: !2, arg: 2, flags: 7)
>> +/// file: !1, line: 7, type: !2, arg: 2, flags: 7,
>> +/// align: 8)
>> bool LLParser::ParseDILocalVariable(MDNode *&Result, bool IsDistinct) {
>> #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED)
>> \
>> REQUIRED(scope, MDField, (/* AllowNull */ false));
>> \
>> @@ -4222,13 +4226,14 @@ bool LLParser::ParseDILocalVariable(MDNo
>> OPTIONAL(file, MDField, );
>> \
>> OPTIONAL(line, LineField, );
>> \
>> OPTIONAL(type, MDField, );
>> \
>> - OPTIONAL(flags, DIFlagField, );
>> + OPTIONAL(flags, DIFlagField, );
>> \
>> + OPTIONAL(align, MDUnsignedField, (0, UINT32_MAX));
>> PARSE_MD_FIELDS();
>> #undef VISIT_MD_FIELDS
>>
>> Result = GET_OR_DISTINCT(DILocalVariable,
>> (Context, scope.Val, name.Val, file.Val,
>> line.Val,
>> - type.Val, arg.Val, flags.Val));
>> + type.Val, arg.Val, flags.Val, align.Val));
>> return false;
>> }
>>
>>
>> Modified: llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/
>> Reader/BitcodeReader.cpp?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp (original)
>> +++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp Wed Oct 19 19:13:12
>> 2016
>> @@ -2734,7 +2734,7 @@ std::error_code BitcodeReader::parseMeta
>> break;
>> }
>> case bitc::METADATA_GLOBAL_VAR: {
>> - if (Record.size() != 11)
>> + if (Record.size() < 11 || Record.size() > 12)
>> return error("Invalid record");
>>
>> IsDistinct = Record[0];
>> @@ -2742,6 +2742,7 @@ std::error_code BitcodeReader::parseMeta
>> // Upgrade old metadata, which stored a global variable reference
>> or a
>> // ConstantInt here.
>> Metadata *Expr = getMDOrNull(Record[9]);
>> + uint64_t AlignInBits = (Record.size() > 11) ? Record[11] : 0;
>> GlobalVariable *Attach = nullptr;
>> if (auto *CMD = dyn_cast_or_null<ConstantAsMetadata>(Expr)) {
>> if (auto *GV = dyn_cast<GlobalVariable>(CMD->getValue())) {
>> @@ -2761,7 +2762,7 @@ std::error_code BitcodeReader::parseMeta
>> (Context, getMDOrNull(Record[1]), getMDString(Record[2]),
>> getMDString(Record[3]), getMDOrNull(Record[4]), Record[5],
>> getDITypeRefOrNull(Record[6]), Record[7], Record[8], Expr,
>> - getMDOrNull(Record[10])));
>> + getMDOrNull(Record[10]), AlignInBits));
>> MetadataList.assignValue(DGV, NextMetadataNo++);
>>
>> if (Attach)
>> @@ -2774,18 +2775,21 @@ std::error_code BitcodeReader::parseMeta
>> if (Record.size() < 8 || Record.size() > 10)
>> return error("Invalid record");
>>
>> + IsDistinct = Record[0] & 1;
>> + bool HasAlignment = Record[0] & 2;
>> // 2nd field used to be an artificial tag, either
>> DW_TAG_auto_variable or
>> - // DW_TAG_arg_variable.
>> - IsDistinct = Record[0];
>> - bool HasTag = Record.size() > 8;
>> + // DW_TAG_arg_variable, if we have alignment flag encoded it
>> means, that
>> + // this is newer version of record which doesn't have artifical
>> tag.
>> + bool HasTag = !HasAlignment && Record.size() > 8;
>> DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[7 +
>> HasTag]);
>> + uint64_t AlignInBits = HasAlignment ? Record[8 + HasTag] : 0;
>> MetadataList.assignValue(
>> GET_OR_DISTINCT(DILocalVariable,
>> (Context, getMDOrNull(Record[1 + HasTag]),
>> getMDString(Record[2 + HasTag]),
>> getMDOrNull(Record[3 + HasTag]), Record[4 +
>> HasTag],
>> getDITypeRefOrNull(Record[5 + HasTag]),
>> - Record[6 + HasTag], Flags)),
>> + Record[6 + HasTag], Flags, AlignInBits)),
>> NextMetadataNo++);
>> break;
>> }
>>
>> Modified: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/
>> Writer/BitcodeWriter.cpp?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp (original)
>> +++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Wed Oct 19 19:13:12
>> 2016
>> @@ -1712,6 +1712,7 @@ void ModuleBitcodeWriter::writeDIGlobalV
>> Record.push_back(N->isDefinition());
>> Record.push_back(VE.getMetadataOrNullID(N->getRawExpr()));
>> Record.push_back(VE.getMetadataOrNullID(N->getStaticDataMem
>> berDeclaration()));
>> + Record.push_back(N->getAlignInBits());
>>
>> Stream.EmitRecord(bitc::METADATA_GLOBAL_VAR, Record, Abbrev);
>> Record.clear();
>> @@ -1720,7 +1721,21 @@ void ModuleBitcodeWriter::writeDIGlobalV
>> void ModuleBitcodeWriter::writeDILocalVariable(
>> const DILocalVariable *N, SmallVectorImpl<uint64_t> &Record,
>> unsigned Abbrev) {
>> - Record.push_back(N->isDistinct());
>> + // In order to support all possible bitcode formats in BitcodeReader
>> we need
>> + // to distiguish the following cases:
>> + // 1) Record has no artificial tag (Record[1]),
>> + // has no obsolete inlinedAt field (Record[9]).
>> + // In this case Record size will be 8, HasAlignment flag is false.
>> + // 2) Record has artificial tag (Record[1]),
>> + // has no obsolete inlignedAt field (Record[9]).
>> + // In this case Record size will be 9, HasAlignment flag is false.
>> + // 3) Record has both artificial tag (Record[1]) and
>> + // obsolete inlignedAt field (Record[9]).
>> + // In this case Record size will be 10, HasAlignment flag is false.
>> + // 4) Record has neither artificial tag, nor inlignedAt field, but
>> + // HasAlignment flag is true and Record[8] contains alignment value.
>> + const uint64_t HasAlignmentFlag = 1 << 1;
>> + Record.push_back(N->isDistinct() | HasAlignmentFlag);
>> Record.push_back(VE.getMetadataOrNullID(N->getScope()));
>> Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
>> Record.push_back(VE.getMetadataOrNullID(N->getFile()));
>> @@ -1728,6 +1743,7 @@ void ModuleBitcodeWriter::writeDILocalVa
>> Record.push_back(VE.getMetadataOrNullID(N->getType()));
>> Record.push_back(N->getArg());
>> Record.push_back(N->getFlags());
>> + Record.push_back(N->getAlignInBits());
>>
>> Stream.EmitRecord(bitc::METADATA_LOCAL_VAR, Record, Abbrev);
>> Record.clear();
>>
>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/
>> AsmPrinter/DwarfUnit.cpp?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp Wed Oct 19 19:13:12
>> 2016
>> @@ -1404,9 +1404,11 @@ void DwarfUnit::constructMemberDIE(DIE &
>> addUInt(MemberDie, dwarf::DW_AT_bit_size, None, Size);
>>
>> uint64_t Offset = DT->getOffsetInBits();
>> - uint32_t Align = DT->getAlignInBits() ? DT->getAlignInBits()
>> - : FieldSize;
>> - uint32_t AlignMask = ~(Align - 1);
>> + // We can't use DT->getAlignInBits() here: AlignInBits for member
>> type
>> + // is non-zero if and only if alignment was forced (e.g.
>> _Alignas()),
>> + // which can't be done with bitfields. Thus we use FieldSize here.
>> + uint32_t AlignInBits = FieldSize;
>> + uint32_t AlignMask = ~(AlignInBits - 1);
>> // The bits from the start of the storage unit to the start of the
>> field.
>> uint64_t StartBitOffset = Offset - (Offset & AlignMask);
>> // The byte offset of the field's aligned storage unit inside the
>> struct.
>>
>> Modified: llvm/trunk/lib/IR/AsmWriter.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/AsmWri
>> ter.cpp?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/IR/AsmWriter.cpp (original)
>> +++ llvm/trunk/lib/IR/AsmWriter.cpp Wed Oct 19 19:13:12 2016
>> @@ -1822,6 +1822,7 @@ static void writeDIGlobalVariable(raw_os
>> Printer.printBool("isDefinition", N->isDefinition());
>> Printer.printMetadata("expr", N->getExpr());
>> Printer.printMetadata("declaration", N->getRawStaticDataMemberDecla
>> ration());
>> + Printer.printInt("align", N->getAlignInBits());
>> Out << ")";
>> }
>>
>> @@ -1837,6 +1838,7 @@ static void writeDILocalVariable(raw_ost
>> Printer.printInt("line", N->getLine());
>> Printer.printMetadata("type", N->getRawType());
>> Printer.printDIFlags("flags", N->getFlags());
>> + Printer.printInt("align", N->getAlignInBits());
>> Out << ")";
>> }
>>
>>
>> Modified: llvm/trunk/lib/IR/DIBuilder.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DIBuil
>> der.cpp?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/IR/DIBuilder.cpp (original)
>> +++ llvm/trunk/lib/IR/DIBuilder.cpp Wed Oct 19 19:13:12 2016
>> @@ -195,11 +195,10 @@ DIBasicType *DIBuilder::createNullPtrTyp
>> }
>>
>> DIBasicType *DIBuilder::createBasicType(StringRef Name, uint64_t
>> SizeInBits,
>> - uint32_t AlignInBits,
>> unsigned Encoding) {
>> assert(!Name.empty() && "Unable to create type without name");
>> return DIBasicType::get(VMContext, dwarf::DW_TAG_base_type, Name,
>> SizeInBits,
>> - AlignInBits, Encoding);
>> + 0, Encoding);
>> }
>>
>> DIDerivedType *DIBuilder::createQualifiedType(unsigned Tag, DIType
>> *FromTy) {
>> @@ -277,24 +276,26 @@ static ConstantAsMetadata *getConstantOr
>>
>> DIDerivedType *DIBuilder::createBitFieldMemberType(
>> DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNumber,
>> - uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
>> - uint64_t StorageOffsetInBits, DINode::DIFlags Flags, DIType *Ty) {
>> + uint64_t SizeInBits, uint64_t OffsetInBits, uint64_t
>> StorageOffsetInBits,
>> + DINode::DIFlags Flags, DIType *Ty) {
>> Flags |= DINode::FlagBitField;
>> return DIDerivedType::get(
>> VMContext, dwarf::DW_TAG_member, Name, File, LineNumber,
>> - getNonCompileUnitScope(Scope), Ty, SizeInBits, AlignInBits,
>> OffsetInBits,
>> - Flags, ConstantAsMetadata::get(ConstantInt::get(
>> - IntegerType::get(VMContext, 64), StorageOffsetInBits)));
>> + getNonCompileUnitScope(Scope), Ty, SizeInBits, /* AlignInBits */ 0,
>> + OffsetInBits, Flags,
>> + ConstantAsMetadata::get(ConstantInt::get(IntegerType::get(VMContext,
>> 64),
>> + StorageOffsetInBits)));
>> }
>>
>> DIDerivedType *
>> DIBuilder::createStaticMemberType(DIScope *Scope, StringRef Name,
>> DIFile *File,
>> unsigned LineNumber, DIType *Ty,
>> - DINode::DIFlags Flags, llvm::Constant
>> *Val) {
>> + DINode::DIFlags Flags, llvm::Constant
>> *Val,
>> + uint32_t AlignInBits) {
>> Flags |= DINode::FlagStaticMember;
>> return DIDerivedType::get(VMContext, dwarf::DW_TAG_member, Name, File,
>> - LineNumber, getNonCompileUnitScope(Scope),
>> Ty, 0, 0,
>> - 0, Flags, getConstantOrNull(Val));
>> + LineNumber, getNonCompileUnitScope(Scope),
>> Ty, 0,
>> + AlignInBits, 0, Flags,
>> getConstantOrNull(Val));
>> }
>>
>> DIDerivedType *
>> @@ -535,28 +536,28 @@ static void checkGlobalVariableScope(DIS
>>
>> DIGlobalVariable *DIBuilder::createGlobalVariable(
>> DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *F,
>> - unsigned LineNumber, DIType *Ty, bool isLocalToUnit, DIExpression
>> *Expr,
>> - MDNode *Decl) {
>> + unsigned LineNumber, DIType *Ty, bool isLocalToUnit,
>> + DIExpression *Expr, MDNode *Decl, uint32_t AlignInBits) {
>> checkGlobalVariableScope(Context);
>>
>> auto *N = DIGlobalVariable::getDistinct(
>> VMContext, cast_or_null<DIScope>(Context), Name, LinkageName, F,
>> LineNumber, Ty, isLocalToUnit, true, Expr,
>> - cast_or_null<DIDerivedType>(Decl));
>> + cast_or_null<DIDerivedType>(Decl), AlignInBits);
>> AllGVs.push_back(N);
>> return N;
>> }
>>
>> DIGlobalVariable *DIBuilder::createTempGlobalVariableFwdDecl(
>> DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *F,
>> - unsigned LineNumber, DIType *Ty, bool isLocalToUnit, DIExpression
>> *Expr,
>> - MDNode *Decl) {
>> + unsigned LineNumber, DIType *Ty, bool isLocalToUnit,
>> + DIExpression *Expr, MDNode *Decl, uint32_t AlignInBits) {
>> checkGlobalVariableScope(Context);
>>
>> return DIGlobalVariable::getTemporary(
>> VMContext, cast_or_null<DIScope>(Context), Name,
>> LinkageName, F,
>> LineNumber, Ty, isLocalToUnit, false, Expr,
>> - cast_or_null<DIDerivedType>(Decl))
>> + cast_or_null<DIDerivedType>(Decl), AlignInBits)
>> .release();
>> }
>>
>> @@ -564,7 +565,8 @@ static DILocalVariable *createLocalVaria
>> LLVMContext &VMContext,
>> DenseMap<MDNode *, SmallVector<TrackingMDNodeRef, 1>>
>> &PreservedVariables,
>> DIScope *Scope, StringRef Name, unsigned ArgNo, DIFile *File,
>> - unsigned LineNo, DIType *Ty, bool AlwaysPreserve, DINode::DIFlags
>> Flags) {
>> + unsigned LineNo, DIType *Ty, bool AlwaysPreserve, DINode::DIFlags
>> Flags,
>> + uint32_t AlignInBits) {
>> // FIXME: Why getNonCompileUnitScope()?
>> // FIXME: Why is "!Context" okay here?
>> // FIXME: Why doesn't this check for a subprogram or lexical block
>> (AFAICT
>> @@ -573,7 +575,7 @@ static DILocalVariable *createLocalVaria
>>
>> auto *Node =
>> DILocalVariable::get(VMContext, cast_or_null<DILocalScope>(Context),
>> Name,
>> - File, LineNo, Ty, ArgNo, Flags);
>> + File, LineNo, Ty, ArgNo, Flags, AlignInBits);
>> if (AlwaysPreserve) {
>> // The optimizer may remove local variables. If there is an interest
>> // to preserve variable info in such situation then stash it in a
>> @@ -588,10 +590,11 @@ static DILocalVariable *createLocalVaria
>> DILocalVariable *DIBuilder::createAutoVariable(DIScope *Scope,
>> StringRef Name,
>> DIFile *File, unsigned
>> LineNo,
>> DIType *Ty, bool
>> AlwaysPreserve,
>> - DINode::DIFlags Flags) {
>> + DINode::DIFlags Flags,
>> + uint32_t AlignInBits) {
>> return createLocalVariable(VMContext, PreservedVariables, Scope, Name,
>> /* ArgNo */ 0, File, LineNo, Ty,
>> AlwaysPreserve,
>> - Flags);
>> + Flags, AlignInBits);
>> }
>>
>> DILocalVariable *DIBuilder::createParameterVariable(
>> @@ -599,7 +602,8 @@ DILocalVariable *DIBuilder::createParame
>> unsigned LineNo, DIType *Ty, bool AlwaysPreserve, DINode::DIFlags
>> Flags) {
>> assert(ArgNo && "Expected non-zero argument number for parameter");
>> return createLocalVariable(VMContext, PreservedVariables, Scope, Name,
>> ArgNo,
>> - File, LineNo, Ty, AlwaysPreserve, Flags);
>> + File, LineNo, Ty, AlwaysPreserve, Flags,
>> + /* AlignInBits */0);
>> }
>>
>> DIExpression *DIBuilder::createExpression(ArrayRef<uint64_t> Addr) {
>>
>> Modified: llvm/trunk/lib/IR/DebugInfoMetadata.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DebugI
>> nfoMetadata.cpp?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/IR/DebugInfoMetadata.cpp (original)
>> +++ llvm/trunk/lib/IR/DebugInfoMetadata.cpp Wed Oct 19 19:13:12 2016
>> @@ -510,16 +510,18 @@ DIGlobalVariable::getImpl(LLVMContext &C
>> Metadata *Type, bool IsLocalToUnit, bool
>> IsDefinition,
>> Metadata *Variable,
>> Metadata *StaticDataMemberDeclaration,
>> + uint64_t AlignInBits,
>> StorageType Storage, bool ShouldCreate) {
>> assert(isCanonical(Name) && "Expected canonical MDString");
>> assert(isCanonical(LinkageName) && "Expected canonical MDString");
>> DEFINE_GETIMPL_LOOKUP(DIGlobalVariable,
>> (Scope, Name, LinkageName, File, Line, Type,
>> IsLocalToUnit, IsDefinition, Variable,
>> - StaticDataMemberDeclaration));
>> + StaticDataMemberDeclaration, AlignInBits));
>> Metadata *Ops[] = {Scope, Name, File, Type,
>> Name, LinkageName, Variable,
>> StaticDataMemberDeclaration};
>> - DEFINE_GETIMPL_STORE(DIGlobalVariable, (Line, IsLocalToUnit,
>> IsDefinition),
>> + DEFINE_GETIMPL_STORE(DIGlobalVariable,
>> + (Line, IsLocalToUnit, IsDefinition, AlignInBits),
>> Ops);
>> }
>>
>> @@ -527,6 +529,7 @@ DILocalVariable *DILocalVariable::getImp
>> MDString *Name, Metadata *File,
>> unsigned Line, Metadata *Type,
>> unsigned Arg, DIFlags Flags,
>> + uint64_t AlignInBits,
>> StorageType Storage,
>> bool ShouldCreate) {
>> // 64K ought to be enough for any frontend.
>> @@ -535,9 +538,10 @@ DILocalVariable *DILocalVariable::getImp
>> assert(Scope && "Expected scope");
>> assert(isCanonical(Name) && "Expected canonical MDString");
>> DEFINE_GETIMPL_LOOKUP(DILocalVariable,
>> - (Scope, Name, File, Line, Type, Arg, Flags));
>> + (Scope, Name, File, Line, Type, Arg, Flags,
>> + AlignInBits));
>> Metadata *Ops[] = {Scope, Name, File, Type};
>> - DEFINE_GETIMPL_STORE(DILocalVariable, (Line, Arg, Flags), Ops);
>> + DEFINE_GETIMPL_STORE(DILocalVariable, (Line, Arg, Flags,
>> AlignInBits), Ops);
>> }
>>
>> DIExpression *DIExpression::getImpl(LLVMContext &Context,
>>
>> Modified: llvm/trunk/lib/IR/LLVMContextImpl.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/LLVMCo
>> ntextImpl.h?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/IR/LLVMContextImpl.h (original)
>> +++ llvm/trunk/lib/IR/LLVMContextImpl.h Wed Oct 19 19:13:12 2016
>> @@ -761,22 +761,26 @@ template <> struct MDNodeKeyImpl<DIGloba
>> bool IsDefinition;
>> Metadata *Expr;
>> Metadata *StaticDataMemberDeclaration;
>> + uint64_t AlignInBits;
>>
>> MDNodeKeyImpl(Metadata *Scope, MDString *Name, MDString *LinkageName,
>> Metadata *File, unsigned Line, Metadata *Type,
>> - bool IsLocalToUnit, bool IsDefinition, Metadata *Expr,
>> - Metadata *StaticDataMemberDeclaration)
>> + bool IsLocalToUnit, bool IsDefinition,
>> + Metadata *Expr, Metadata *StaticDataMemberDeclaration,
>> + uint64_t AlignInBits)
>> : Scope(Scope), Name(Name), LinkageName(LinkageName), File(File),
>> Line(Line), Type(Type), IsLocalToUnit(IsLocalToUnit),
>> IsDefinition(IsDefinition), Expr(Expr),
>> - StaticDataMemberDeclaration(StaticDataMemberDeclaration) {}
>> + StaticDataMemberDeclaration(StaticDataMemberDeclaration),
>> + AlignInBits(AlignInBits) {}
>> MDNodeKeyImpl(const DIGlobalVariable *N)
>> : Scope(N->getRawScope()), Name(N->getRawName()),
>> LinkageName(N->getRawLinkageName()), File(N->getRawFile()),
>> Line(N->getLine()), Type(N->getRawType()),
>> IsLocalToUnit(N->isLocalToUnit()),
>> IsDefinition(N->isDefinition()),
>> Expr(N->getRawExpr()),
>> - StaticDataMemberDeclaration(N->getRawStaticDataMemberDeclaration())
>> {}
>> + StaticDataMemberDeclaration(N->getRawStaticDataMemberDeclara
>> tion()),
>> + AlignInBits(N->getAlignInBits()) {}
>>
>> bool isKeyOf(const DIGlobalVariable *RHS) const {
>> return Scope == RHS->getRawScope() && Name == RHS->getRawName() &&
>> @@ -786,11 +790,19 @@ template <> struct MDNodeKeyImpl<DIGloba
>> IsDefinition == RHS->isDefinition() &&
>> Expr == RHS->getRawExpr() &&
>> StaticDataMemberDeclaration ==
>> - RHS->getRawStaticDataMemberDeclaration();
>> + RHS->getRawStaticDataMemberDeclaration() &&
>> + AlignInBits == RHS->getAlignInBits();
>> }
>> unsigned getHashValue() const {
>> + // We do not use AlignInBits in hashing function here on purpose:
>> + // in most cases this param for local variable is zero (for function
>> param
>> + // it is always zero). This leads to lots of hash collisions and
>> errors on
>> + // cases with lots of similar variables.
>> + // clang/test/CodeGen/debug-info-257-args.c is an example of this
>> problem,
>> + // generated IR is random for each run and test fails with Align
>> included.
>> + // TODO: make hashing work fine with such situations
>> return hash_combine(Scope, Name, LinkageName, File, Line, Type,
>> - IsLocalToUnit, IsDefinition, Expr,
>> + IsLocalToUnit, IsDefinition, /* AlignInBits, */
>> Expr,
>> StaticDataMemberDeclaration);
>> }
>> };
>> @@ -803,23 +815,32 @@ template <> struct MDNodeKeyImpl<DILocal
>> Metadata *Type;
>> unsigned Arg;
>> unsigned Flags;
>> + uint64_t AlignInBits;
>>
>> MDNodeKeyImpl(Metadata *Scope, MDString *Name, Metadata *File,
>> unsigned Line,
>> - Metadata *Type, unsigned Arg, unsigned Flags)
>> + Metadata *Type, unsigned Arg, unsigned Flags,
>> + uint64_t AlignInBits)
>> : Scope(Scope), Name(Name), File(File), Line(Line), Type(Type),
>> Arg(Arg),
>> - Flags(Flags) {}
>> + Flags(Flags), AlignInBits(AlignInBits) {}
>> MDNodeKeyImpl(const DILocalVariable *N)
>> : Scope(N->getRawScope()), Name(N->getRawName()),
>> File(N->getRawFile()),
>> Line(N->getLine()), Type(N->getRawType()), Arg(N->getArg()),
>> - Flags(N->getFlags()) {}
>> + Flags(N->getFlags()), AlignInBits(N->getAlignInBits()) {}
>>
>> bool isKeyOf(const DILocalVariable *RHS) const {
>> return Scope == RHS->getRawScope() && Name == RHS->getRawName() &&
>> File == RHS->getRawFile() && Line == RHS->getLine() &&
>> Type == RHS->getRawType() && Arg == RHS->getArg() &&
>> - Flags == RHS->getFlags();
>> + Flags == RHS->getFlags() && AlignInBits ==
>> RHS->getAlignInBits();
>> }
>> unsigned getHashValue() const {
>> + // We do not use AlignInBits in hashing function here on purpose:
>> + // in most cases this param for local variable is zero (for function
>> param
>> + // it is always zero). This leads to lots of hash collisions and
>> errors on
>> + // cases with lots of similar variables.
>> + // clang/test/CodeGen/debug-info-257-args.c is an example of this
>> problem,
>> + // generated IR is random for each run and test fails with Align
>> included.
>> + // TODO: make hashing work fine with such situations
>> return hash_combine(Scope, Name, File, Line, Type, Arg, Flags);
>> }
>> };
>>
>> Modified: llvm/trunk/test/Assembler/diglobalvariable.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assemble
>> r/diglobalvariable.ll?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/test/Assembler/diglobalvariable.ll (original)
>> +++ llvm/trunk/test/Assembler/diglobalvariable.ll Wed Oct 19 19:13:12
>> 2016
>> @@ -12,10 +12,10 @@
>> !3 = !DIBasicType(name: "int", size: 32, align: 32, encoding:
>> DW_ATE_signed)
>> !4 = distinct !{}
>>
>> -; CHECK: !5 = !DIGlobalVariable(name: "foo", linkageName: "foo", scope:
>> !0, file: !2, line: 7, type: !3, isLocal: true, isDefinition: false)
>> +; CHECK: !5 = !DIGlobalVariable(name: "foo", linkageName: "foo", scope:
>> !0, file: !2, line: 7, type: !3, isLocal: true, isDefinition: false, align:
>> 32)
>> !5 = !DIGlobalVariable(name: "foo", linkageName: "foo", scope: !0,
>> file: !2, line: 7, type: !3, isLocal: true,
>> - isDefinition: false)
>> + isDefinition: false, align: 32)
>>
>> ; CHECK: !6 = !DIGlobalVariable(name: "foo", scope: !0, isLocal: false,
>> isDefinition: true, expr: !7)
>> ; CHECK: !7 = !DIExpression(DW_OP_constu, 42, DW_OP_stack_value)
>>
>> Modified: llvm/trunk/test/Assembler/dilocalvariable.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assemble
>> r/dilocalvariable.ll?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/test/Assembler/dilocalvariable.ll (original)
>> +++ llvm/trunk/test/Assembler/dilocalvariable.ll Wed Oct 19 19:13:12 2016
>> @@ -18,11 +18,11 @@
>> !3 = !DIBasicType(name: "int", size: 32, align: 32, encoding:
>> DW_ATE_signed)
>> !4 = !DILocation(scope: !0)
>>
>> -; CHECK: !5 = !DILocalVariable(name: "foo", arg: 3, scope: !0, file: !2,
>> line: 7, type: !3, flags: DIFlagArtificial)
>> +; CHECK: !5 = !DILocalVariable(name: "foo", arg: 3, scope: !0, file: !2,
>> line: 7, type: !3, flags: DIFlagArtificial, align: 32)
>> ; CHECK: !6 = !DILocalVariable(name: "foo", scope: !0, file: !2, line:
>> 7, type: !3, flags: DIFlagArtificial)
>> !5 = !DILocalVariable(name: "foo", arg: 3,
>> scope: !0, file: !2, line: 7, type: !3,
>> - flags: DIFlagArtificial)
>> + flags: DIFlagArtificial, align: 32)
>> !6 = !DILocalVariable(name: "foo", scope: !0,
>> file: !2, line: 7, type: !3, flags:
>> DIFlagArtificial)
>>
>>
>> Added: llvm/trunk/test/Bitcode/dilocalvariable-3.9.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/
>> dilocalvariable-3.9.ll?rev=284678&view=auto
>> ============================================================
>> ==================
>> --- llvm/trunk/test/Bitcode/dilocalvariable-3.9.ll (added)
>> +++ llvm/trunk/test/Bitcode/dilocalvariable-3.9.ll Wed Oct 19 19:13:12
>> 2016
>> @@ -0,0 +1,43 @@
>> +; RUN: llvm-dis -o - %s.bc | FileCheck %s
>> +
>> +; CHECK: !9 = !DILocalVariable(name: "i", scope: !6, file: !1, line: 3,
>> type: !10)
>> +; CHECK: !10 = !DIBasicType(name: "int", size: 32, align: 32, encoding:
>> DW_ATE_signed)
>> +
>> +source_filename = "test.cpp"
>> +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
>> +target triple = "x86_64-unknown-linux-gnu"
>> +
>> +; Function Attrs: nounwind uwtable
>> +define void @_Z1fv() #0 !dbg !6 {
>> +entry:
>> + %i = alloca i32, align 4
>> + call void @llvm.dbg.declare(metadata i32* %i, metadata !10, metadata
>> !12), !dbg !13
>> + store i32 42, i32* %i, align 4, !dbg !13
>> + ret void, !dbg !14
>> +}
>> +
>> +; Function Attrs: nounwind readnone
>> +declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
>> +
>> +attributes #0 = { nounwind uwtable }
>> +attributes #1 = { nounwind readnone }
>> +
>> +!llvm.dbg.cu = !{!0}
>> +!llvm.module.flags = !{!3, !4}
>> +!llvm.ident = !{!5}
>> +
>> +!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1,
>> producer: "clang version 3.9.1 (http://llvm.org/git/clang.git
>> c3709e72d22432f53f8e2f14354def31a96734fe)", isOptimized: false,
>> runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
>> +!1 = !DIFile(filename: "test.cpp", directory: "/tmp")
>> +!2 = !{}
>> +!3 = !{i32 2, !"Dwarf Version", i32 4}
>> +!4 = !{i32 2, !"Debug Info Version", i32 3}
>> +!5 = !{!"clang version 3.9.1 (http://llvm.org/git/clang.git
>> c3709e72d22432f53f8e2f14354def31a96734fe)"}
>> +!6 = distinct !DISubprogram(name: "f", linkageName: "_Z1fv", scope: !7,
>> file: !7, line: 1, type: !8, isLocal: false, isDefinition: true, scopeLine:
>> 2, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
>> +!7 = !DIFile(filename: "test.cpp", directory: "/tmp")
>> +!8 = !DISubroutineType(types: !9)
>> +!9 = !{null}
>> +!10 = !DILocalVariable(name: "i", scope: !6, file: !7, line: 3, type:
>> !11)
>> +!11 = !DIBasicType(name: "int", size: 32, align: 32, encoding:
>> DW_ATE_signed)
>> +!12 = !DIExpression()
>> +!13 = !DILocation(line: 3, column: 7, scope: !6)
>> +!14 = !DILocation(line: 4, column: 1, scope: !6)
>>
>> Added: llvm/trunk/test/Bitcode/dilocalvariable-3.9.ll.bc
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/
>> dilocalvariable-3.9.ll.bc?rev=284678&view=auto
>> ============================================================
>> ==================
>> (empty)
>>
>> Modified: llvm/trunk/test/DebugInfo/AArch64/bitfields.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInf
>> o/AArch64/bitfields.ll?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/test/DebugInfo/AArch64/bitfields.ll (original)
>> +++ llvm/trunk/test/DebugInfo/AArch64/bitfields.ll Wed Oct 19 19:13:12
>> 2016
>> @@ -60,13 +60,13 @@ target triple = "aarch64_be--linux-gnu"
>> !3 = !{!4}
>> !4 = !DIGlobalVariable(name: "b", scope: !0, file: !5, line: 8, type:
>> !6, isLocal: false, isDefinition: true)
>> !5 = !DIFile(filename: "bitfields.c", directory: "/")
>> -!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "bitfield",
>> file: !5, line: 1, size: 96, align: 32, elements: !7)
>> +!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "bitfield",
>> file: !5, line: 1, size: 96, elements: !7)
>> !7 = !{!8, !10, !11, !12}
>> -!8 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !6, file: !5,
>> line: 2, baseType: !9, size: 2, align: 32)
>> -!9 = !DIBasicType(name: "int", size: 32, align: 32, encoding:
>> DW_ATE_signed)
>> -!10 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !6, file: !5,
>> line: 3, baseType: !9, size: 32, align: 32, offset: 32)
>> -!11 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !6, file: !5,
>> line: 4, baseType: !9, size: 1, align: 32, offset: 64)
>> -!12 = !DIDerivedType(tag: DW_TAG_member, name: "d", scope: !6, file: !5,
>> line: 5, baseType: !9, size: 28, align: 32, offset: 65)
>> +!8 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !6, file: !5,
>> line: 2, baseType: !9, size: 2)
>> +!9 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
>> +!10 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !6, file: !5,
>> line: 3, baseType: !9, size: 32, offset: 32)
>> +!11 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !6, file: !5,
>> line: 4, baseType: !9, size: 1, offset: 64)
>> +!12 = !DIDerivedType(tag: DW_TAG_member, name: "d", scope: !6, file: !5,
>> line: 5, baseType: !9, size: 28, offset: 65)
>> !13 = !{i32 2, !"Dwarf Version", i32 2}
>> !14 = !{i32 2, !"Debug Info Version", i32 3}
>> !15 = !{i32 1, !"PIC Level", i32 2}
>>
>> Modified: llvm/trunk/test/DebugInfo/ARM/big-endian-bitfield.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInf
>> o/ARM/big-endian-bitfield.ll?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/test/DebugInfo/ARM/big-endian-bitfield.ll (original)
>> +++ llvm/trunk/test/DebugInfo/ARM/big-endian-bitfield.ll Wed Oct 19
>> 19:13:12 2016
>> @@ -23,29 +23,29 @@ target datalayout = "E-m:e-p:32:32-i64:6
>> !2 = !{}
>> !3 = !{!4}
>> !4 = distinct !DIGlobalVariable(name: "s", scope: !0, file: !1, line: 6,
>> type: !5, isLocal: false, isDefinition: true)
>> -!5 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S",
>> file: !1, line: 1, size: 32, align: 32, elements: !6)
>> +!5 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S",
>> file: !1, line: 1, size: 32, elements: !6)
>> !6 = !{!7, !9, !10, !11}
>> ; CHECK: DW_TAG_member
>> ; CHECK-NEXT: DW_AT_name{{.*}}"j"
>> ; CHECK-NOT: DW_TAG
>> ; CHECK: DW_AT_data_bit_offset [DW_FORM_data1] (0x00)
>> -!7 = !DIDerivedType(tag: DW_TAG_member, name: "j", scope: !5, file: !1,
>> line: 2, baseType: !8, size: 5, align: 32)
>> -!8 = !DIBasicType(name: "int", size: 32, align: 32, encoding:
>> DW_ATE_signed)
>> +!7 = !DIDerivedType(tag: DW_TAG_member, name: "j", scope: !5, file: !1,
>> line: 2, baseType: !8, size: 5)
>> +!8 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
>> ; CHECK: DW_TAG_member
>> ; CHECK-NEXT: DW_AT_name{{.*}}"k"
>> ; CHECK-NOT: DW_TAG
>> ; CHECK: DW_AT_data_bit_offset [DW_FORM_data1] (0x05)
>> -!9 = !DIDerivedType(tag: DW_TAG_member, name: "k", scope: !5, file: !1,
>> line: 3, baseType: !8, size: 6, align: 32, offset: 5)
>> +!9 = !DIDerivedType(tag: DW_TAG_member, name: "k", scope: !5, file: !1,
>> line: 3, baseType: !8, size: 6, offset: 5)
>> ; CHECK: DW_TAG_member
>> ; CHECK-NEXT: DW_AT_name{{.*}}"m"
>> ; CHECK-NOT: DW_TAG
>> ; CHECK: DW_AT_data_bit_offset [DW_FORM_data1] (0x0b)
>> -!10 = !DIDerivedType(tag: DW_TAG_member, name: "m", scope: !5, file: !1,
>> line: 4, baseType: !8, size: 5, align: 32, offset: 11)
>> +!10 = !DIDerivedType(tag: DW_TAG_member, name: "m", scope: !5, file: !1,
>> line: 4, baseType: !8, size: 5, offset: 11)
>> ; CHECK: DW_TAG_member
>> ; CHECK-NEXT: DW_AT_name{{.*}}"n"
>> ; CHECK-NOT: DW_TAG
>> ; CHECK: DW_AT_data_bit_offset [DW_FORM_data1] (0x10)
>> -!11 = !DIDerivedType(tag: DW_TAG_member, name: "n", scope: !5, file: !1,
>> line: 5, baseType: !8, size: 8, align: 32, offset: 16)
>> +!11 = !DIDerivedType(tag: DW_TAG_member, name: "n", scope: !5, file: !1,
>> line: 5, baseType: !8, size: 8, offset: 16)
>> !12 = !{i32 2, !"Dwarf Version", i32 4}
>> !13 = !{i32 2, !"Debug Info Version", i32 3}
>> !14 = !{i32 1, !"PIC Level", i32 2}
>>
>> Modified: llvm/trunk/test/DebugInfo/COFF/bitfields.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInf
>> o/COFF/bitfields.ll?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/test/DebugInfo/COFF/bitfields.ll (original)
>> +++ llvm/trunk/test/DebugInfo/COFF/bitfields.ll Wed Oct 19 19:13:12 2016
>> @@ -195,33 +195,33 @@ target triple = "x86_64-pc-windows-msvc1
>> !3 = !{!4, !10, !29}
>> !4 = distinct !DIGlobalVariable(name: "s0", scope: !0, file: !5, line:
>> 7, type: !6, isLocal: false, isDefinition: true)
>> !5 = !DIFile(filename: "<stdin>", directory:
>> "/usr/local/google/home/majnemer/llvm/src")
>> -!6 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S0",
>> file: !5, line: 3, size: 24, align: 8, elements: !7)
>> +!6 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S0",
>> file: !5, line: 3, size: 24, elements: !7)
>> !7 = !{!8}
>> -!8 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !6, file: !5,
>> line: 6, baseType: !9, size: 8, align: 16, offset: 16, flags:
>> DIFlagBitField, extraData: i64 8)
>> -!9 = !DIBasicType(name: "short", size: 16, align: 16, encoding:
>> DW_ATE_signed)
>> +!8 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !6, file: !5,
>> line: 6, baseType: !9, size: 8, offset: 16, flags: DIFlagBitField,
>> extraData: i64 8)
>> +!9 = !DIBasicType(name: "short", size: 16, encoding: DW_ATE_signed)
>> !10 = distinct !DIGlobalVariable(name: "s1", scope: !0, file: !5, line:
>> 18, type: !11, isLocal: false, isDefinition: true)
>> -!11 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S1",
>> file: !5, line: 10, size: 128, align: 8, elements: !12)
>> +!11 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S1",
>> file: !5, line: 10, size: 128, elements: !12)
>> !12 = !{!13, !18, !19, !21, !22, !23, !28}
>> -!13 = !DIDerivedType(tag: DW_TAG_member, name: "x1", scope: !11, file:
>> !5, line: 11, baseType: !14, size: 16, align: 8)
>> -!14 = !DICompositeType(tag: DW_TAG_array_type, baseType: !15, size: 16,
>> align: 8, elements: !16)
>> -!15 = !DIBasicType(name: "char", size: 8, align: 8, encoding:
>> DW_ATE_signed_char)
>> +!13 = !DIDerivedType(tag: DW_TAG_member, name: "x1", scope: !11, file:
>> !5, line: 11, baseType: !14, size: 16)
>> +!14 = !DICompositeType(tag: DW_TAG_array_type, baseType: !15, size: 16,
>> elements: !16)
>> +!15 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
>> !16 = !{!17}
>> !17 = !DISubrange(count: 2)
>> -!18 = !DIDerivedType(tag: DW_TAG_member, name: "x2", scope: !11, file:
>> !5, line: 12, baseType: !15, size: 8, align: 8, offset: 16)
>> -!19 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !11, file:
>> !5, line: 13, baseType: !20, size: 23, align: 32, offset: 24, flags:
>> DIFlagBitField, extraData: i64 24)
>> -!20 = !DIBasicType(name: "int", size: 32, align: 32, encoding:
>> DW_ATE_signed)
>> -!21 = !DIDerivedType(tag: DW_TAG_member, name: "z", scope: !11, file:
>> !5, line: 14, baseType: !20, size: 23, align: 32, offset: 56, flags:
>> DIFlagBitField, extraData: i64 56)
>> -!22 = !DIDerivedType(tag: DW_TAG_member, name: "w", scope: !11, file:
>> !5, line: 15, baseType: !20, size: 2, align: 32, offset: 79, flags:
>> DIFlagBitField, extraData: i64 56)
>> -!23 = !DIDerivedType(tag: DW_TAG_member, name: "v", scope: !11, file:
>> !5, line: 16, baseType: !24, size: 24, align: 8, offset: 88)
>> -!24 = distinct !DICompositeType(tag: DW_TAG_structure_type, scope: !11,
>> file: !5, line: 16, size: 24, align: 8, elements: !25)
>> +!18 = !DIDerivedType(tag: DW_TAG_member, name: "x2", scope: !11, file:
>> !5, line: 12, baseType: !15, size: 8, offset: 16)
>> +!19 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !11, file:
>> !5, line: 13, baseType: !20, size: 23, offset: 24, flags: DIFlagBitField,
>> extraData: i64 24)
>> +!20 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
>> +!21 = !DIDerivedType(tag: DW_TAG_member, name: "z", scope: !11, file:
>> !5, line: 14, baseType: !20, size: 23, offset: 56, flags: DIFlagBitField,
>> extraData: i64 56)
>> +!22 = !DIDerivedType(tag: DW_TAG_member, name: "w", scope: !11, file:
>> !5, line: 15, baseType: !20, size: 2, offset: 79, flags: DIFlagBitField,
>> extraData: i64 56)
>> +!23 = !DIDerivedType(tag: DW_TAG_member, name: "v", scope: !11, file:
>> !5, line: 16, baseType: !24, size: 24, offset: 88)
>> +!24 = distinct !DICompositeType(tag: DW_TAG_structure_type, scope: !11,
>> file: !5, line: 16, size: 24, elements: !25)
>> !25 = !{!26, !27}
>> -!26 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !24, file:
>> !5, line: 16, baseType: !15, size: 8, align: 8)
>> -!27 = !DIDerivedType(tag: DW_TAG_member, name: "s", scope: !24, file:
>> !5, line: 16, baseType: !9, size: 16, align: 16, offset: 8)
>> -!28 = !DIDerivedType(tag: DW_TAG_member, name: "u", scope: !11, file:
>> !5, line: 17, baseType: !9, size: 3, align: 16, offset: 112, flags:
>> DIFlagBitField, extraData: i64 112)
>> +!26 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !24, file:
>> !5, line: 16, baseType: !15, size: 8)
>> +!27 = !DIDerivedType(tag: DW_TAG_member, name: "s", scope: !24, file:
>> !5, line: 16, baseType: !9, size: 16, offset: 8)
>> +!28 = !DIDerivedType(tag: DW_TAG_member, name: "u", scope: !11, file:
>> !5, line: 17, baseType: !9, size: 3, offset: 112, flags: DIFlagBitField,
>> extraData: i64 112)
>> !29 = distinct !DIGlobalVariable(name: "s2", scope: !0, file: !5, line:
>> 24, type: !30, isLocal: false, isDefinition: true)
>> -!30 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S2",
>> file: !5, line: 21, size: 32, align: 8, elements: !31)
>> +!30 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S2",
>> file: !5, line: 21, size: 32, elements: !31)
>> !31 = !{!32}
>> -!32 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !30, file:
>> !5, line: 23, baseType: !20, size: 1, align: 32, flags: DIFlagBitField,
>> extraData: i64 0)
>> +!32 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !30, file:
>> !5, line: 23, baseType: !20, size: 1, flags: DIFlagBitField, extraData: i64
>> 0)
>> !33 = !{i32 2, !"CodeView", i32 1}
>> !34 = !{i32 2, !"Debug Info Version", i32 3}
>> !35 = !{i32 1, !"PIC Level", i32 2}
>>
>> Modified: llvm/trunk/test/DebugInfo/X86/bitfields-dwarf4.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInf
>> o/X86/bitfields-dwarf4.ll?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/test/DebugInfo/X86/bitfields-dwarf4.ll (original)
>> +++ llvm/trunk/test/DebugInfo/X86/bitfields-dwarf4.ll Wed Oct 19
>> 19:13:12 2016
>> @@ -32,7 +32,7 @@ target triple = "x86_64-apple-macosx"
>> !2 = !{}
>> !3 = !{!4}
>> !4 = distinct !DIGlobalVariable(name: "s", scope: !0, file: !1, line: 8,
>> type: !5, isLocal: false, isDefinition: true)
>> -!5 = distinct !DICompositeType(tag: DW_TAG_structure_type, name:
>> "PackedBits", file: !1, line: 3, size: 40, align: 8, elements: !6)
>> +!5 = distinct !DICompositeType(tag: DW_TAG_structure_type, name:
>> "PackedBits", file: !1, line: 3, size: 40, elements: !6)
>> !6 = !{!7, !9, !13}
>>
>> ; CHECK: DW_TAG_member
>> @@ -41,9 +41,9 @@ target triple = "x86_64-apple-macosx"
>> ; CHECK-NOT: DW_AT_bit_offset
>> ; CHECK-NOT: DW_AT_data_bit_offset
>> ; CHECK: DW_AT_data_member_location [DW_FORM_data1] (0x00)
>> -!7 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !5, file: !1,
>> line: 5, baseType: !8, size: 8, align: 8)
>> +!7 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !5, file: !1,
>> line: 5, baseType: !8, size: 8)
>>
>> -!8 = !DIBasicType(name: "char", size: 8, align: 8, encoding:
>> DW_ATE_signed_char)
>> +!8 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
>>
>> ; CHECK: DW_TAG_member
>> ; CHECK-NEXT: DW_AT_name{{.*}}"b"
>> @@ -54,11 +54,11 @@ target triple = "x86_64-apple-macosx"
>> ; CHECK-NOT: DW_AT_byte_size
>> ; CHECK-NEXT: DW_AT_data_bit_offset [DW_FORM_data1] (0x08)
>> ; CHECK-NOT: DW_AT_data_member_location
>> -!9 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !5, file: !1,
>> line: 6, baseType: !10, size: 5, align: 32, offset: 8)
>> +!9 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !5, file: !1,
>> line: 6, baseType: !10, size: 5, offset: 8)
>>
>> !10 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint32_t", file: !11,
>> line: 183, baseType: !12)
>> !11 = !DIFile(filename: "/Volumes/Data/llvm/_build.nin
>> ja.release/bin/../lib/clang/3.9.0/include/stdint.h", directory:
>> "/Volumes/Data/llvm")
>> -!12 = !DIBasicType(name: "unsigned int", size: 32, align: 32, encoding:
>> DW_ATE_unsigned)
>> +!12 = !DIBasicType(name: "unsigned int", size: 32, encoding:
>> DW_ATE_unsigned)
>>
>> ; CHECK: DW_TAG_member
>> ; CHECK-NEXT: DW_AT_name{{.*}}"c"
>> @@ -69,7 +69,7 @@ target triple = "x86_64-apple-macosx"
>> ; CHECK-NEXT: DW_AT_data_bit_offset [DW_FORM_data1] (0x0d)
>> ; CHECK-NOT: DW_AT_data_member_location
>> ; CHECK: DW_TAG
>> -!13 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !5, file: !1,
>> line: 7, baseType: !10, size: 27, align: 32, offset: 13)
>> +!13 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !5, file: !1,
>> line: 7, baseType: !10, size: 27, offset: 13)
>>
>> !14 = !{i32 2, !"Dwarf Version", i32 4}
>> !15 = !{i32 2, !"Debug Info Version", i32 3}
>>
>> Modified: llvm/trunk/test/DebugInfo/X86/bitfields.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInf
>> o/X86/bitfields.ll?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/test/DebugInfo/X86/bitfields.ll (original)
>> +++ llvm/trunk/test/DebugInfo/X86/bitfields.ll Wed Oct 19 19:13:12 2016
>> @@ -60,13 +60,13 @@ target triple = "x86_64-apple-macosx"
>> !3 = !{!4}
>> !4 = !DIGlobalVariable(name: "b", scope: !0, file: !5, line: 8, type:
>> !6, isLocal: false, isDefinition: true)
>> !5 = !DIFile(filename: "bitfields.c", directory: "/")
>> -!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "bitfield",
>> file: !5, line: 1, size: 96, align: 32, elements: !7)
>> +!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "bitfield",
>> file: !5, line: 1, size: 96, elements: !7)
>> !7 = !{!8, !10, !11, !12}
>> -!8 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !6, file: !5,
>> line: 2, baseType: !9, size: 2, align: 32)
>> -!9 = !DIBasicType(name: "int", size: 32, align: 32, encoding:
>> DW_ATE_signed)
>> -!10 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !6, file: !5,
>> line: 3, baseType: !9, size: 32, align: 32, offset: 32)
>> -!11 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !6, file: !5,
>> line: 4, baseType: !9, size: 1, align: 32, offset: 64)
>> -!12 = !DIDerivedType(tag: DW_TAG_member, name: "d", scope: !6, file: !5,
>> line: 5, baseType: !9, size: 28, align: 32, offset: 65)
>> +!8 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !6, file: !5,
>> line: 2, baseType: !9, size: 2)
>> +!9 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
>> +!10 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !6, file: !5,
>> line: 3, baseType: !9, size: 32, offset: 32)
>> +!11 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !6, file: !5,
>> line: 4, baseType: !9, size: 1, offset: 64)
>> +!12 = !DIDerivedType(tag: DW_TAG_member, name: "d", scope: !6, file: !5,
>> line: 5, baseType: !9, size: 28, offset: 65)
>> !13 = !{i32 2, !"Dwarf Version", i32 2}
>> !14 = !{i32 2, !"Debug Info Version", i32 3}
>> !15 = !{i32 1, !"PIC Level", i32 2}
>>
>> Modified: llvm/trunk/test/DebugInfo/X86/debug-info-packed-struct.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInf
>> o/X86/debug-info-packed-struct.ll?rev=284678&r1=
>> 284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/test/DebugInfo/X86/debug-info-packed-struct.ll (original)
>> +++ llvm/trunk/test/DebugInfo/X86/debug-info-packed-struct.ll Wed Oct 19
>> 19:13:12 2016
>> @@ -154,45 +154,45 @@ target triple = "x86_64-apple-darwin"
>> !3 = !{!4, !18, !25, !35}
>> !4 = !DIGlobalVariable(name: "l0", scope: !0, file: !5, line: 88, type:
>> !6, isLocal: false, isDefinition: true)
>> !5 = !DIFile(filename: "/llvm/tools/clang/test/CodeGen/debug-info-packed-struct.c",
>> directory: "/llvm/_build.ninja.release")
>> -!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout0", file:
>> !5, line: 15, size: 192, align: 64, elements: !7)
>> +!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout0", file:
>> !5, line: 15, size: 192, elements: !7)
>> !7 = !{!8, !10, !17}
>> -!8 = !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs0", scope: !6,
>> file: !5, line: 16, baseType: !9, size: 8, align: 8)
>> -!9 = !DIBasicType(name: "char", size: 8, align: 8, encoding:
>> DW_ATE_signed_char)
>> -!10 = !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs8", scope: !6,
>> file: !5, line: 17, baseType: !11, size: 64, align: 64, offset: 64)
>> -!11 = !DICompositeType(tag: DW_TAG_structure_type, name: "size8", file:
>> !5, line: 11, size: 64, align: 64, elements: !12)
>> +!8 = !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs0", scope: !6,
>> file: !5, line: 16, baseType: !9, size: 8)
>> +!9 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
>> +!10 = !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs8", scope: !6,
>> file: !5, line: 17, baseType: !11, size: 64, offset: 64)
>> +!11 = !DICompositeType(tag: DW_TAG_structure_type, name: "size8", file:
>> !5, line: 11, size: 64, elements: !12)
>> !12 = !{!13, !15}
>> -!13 = !DIDerivedType(tag: DW_TAG_member, name: "i", scope: !11, file:
>> !5, line: 12, baseType: !14, size: 4, align: 32)
>> -!14 = !DIBasicType(name: "int", size: 32, align: 32, encoding:
>> DW_ATE_signed)
>> +!13 = !DIDerivedType(tag: DW_TAG_member, name: "i", scope: !11, file:
>> !5, line: 12, baseType: !14, size: 4)
>> +!14 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
>> !15 = !DIDerivedType(tag: DW_TAG_member, name: "l", scope: !11, file:
>> !5, line: 13, baseType: !16, size: 60, offset: 4)
>> -!16 = !DIBasicType(name: "long long int", size: 64, align: 64, encoding:
>> DW_ATE_signed)
>> -!17 = !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs16", scope: !6,
>> file: !5, line: 18, baseType: !14, size: 1, align: 32, offset: 128)
>> +!16 = !DIBasicType(name: "long long int", size: 64, encoding:
>> DW_ATE_signed)
>> +!17 = !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs16", scope: !6,
>> file: !5, line: 18, baseType: !14, size: 1, offset: 128)
>> !18 = !DIGlobalVariable(name: "l1", scope: !0, file: !5, line: 89, type:
>> !19, isLocal: false, isDefinition: true)
>> -!19 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout1",
>> file: !5, line: 34, size: 96, align: 32, elements: !20)
>> +!19 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout1",
>> file: !5, line: 34, size: 96, elements: !20)
>> !20 = !{!21, !22, !24}
>> -!21 = !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs0", scope: !19,
>> file: !5, line: 35, baseType: !9, size: 8, align: 8)
>> -!22 = !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs1", scope: !19,
>> file: !5, line: 36, baseType: !23, size: 64, align: 8, offset: 8)
>> -!23 = !DICompositeType(tag: DW_TAG_structure_type, name: "size8_anon",
>> file: !5, line: 30, size: 64, align: 8, elements: !2)
>> -!24 = !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs9", scope: !19,
>> file: !5, line: 37, baseType: !14, size: 1, align: 32, offset: 72)
>> +!21 = !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs0", scope: !19,
>> file: !5, line: 35, baseType: !9, size: 8)
>> +!22 = !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs1", scope: !19,
>> file: !5, line: 36, baseType: !23, size: 64, offset: 8)
>> +!23 = !DICompositeType(tag: DW_TAG_structure_type, name: "size8_anon",
>> file: !5, line: 30, size: 64, elements: !2)
>> +!24 = !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs9", scope: !19,
>> file: !5, line: 37, baseType: !14, size: 1, offset: 72)
>> !25 = !DIGlobalVariable(name: "l2", scope: !0, file: !5, line: 90, type:
>> !26, isLocal: false, isDefinition: true)
>> -!26 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout2",
>> file: !5, line: 54, size: 80, align: 8, elements: !27)
>> +!26 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout2",
>> file: !5, line: 54, size: 80, elements: !27)
>> !27 = !{!28, !29, !34}
>> -!28 = !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs0", scope: !26,
>> file: !5, line: 55, baseType: !9, size: 8, align: 8)
>> -!29 = !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs1", scope: !26,
>> file: !5, line: 56, baseType: !30, size: 64, align: 8, offset: 8)
>> -!30 = !DICompositeType(tag: DW_TAG_structure_type, name: "size8_pack1",
>> file: !5, line: 50, size: 64, align: 8, elements: !31)
>> +!28 = !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs0", scope: !26,
>> file: !5, line: 55, baseType: !9, size: 8)
>> +!29 = !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs1", scope: !26,
>> file: !5, line: 56, baseType: !30, size: 64, offset: 8)
>> +!30 = !DICompositeType(tag: DW_TAG_structure_type, name: "size8_pack1",
>> file: !5, line: 50, size: 64, elements: !31)
>> !31 = !{!32, !33}
>> -!32 = !DIDerivedType(tag: DW_TAG_member, name: "i", scope: !30, file:
>> !5, line: 51, baseType: !14, size: 4, align: 32)
>> +!32 = !DIDerivedType(tag: DW_TAG_member, name: "i", scope: !30, file:
>> !5, line: 51, baseType: !14, size: 4)
>> !33 = !DIDerivedType(tag: DW_TAG_member, name: "l", scope: !30, file:
>> !5, line: 52, baseType: !16, size: 60, offset: 4)
>> -!34 = !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs9", scope: !26,
>> file: !5, line: 57, baseType: !14, size: 1, align: 32, offset: 72)
>> +!34 = !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs9", scope: !26,
>> file: !5, line: 57, baseType: !14, size: 1, offset: 72)
>> !35 = !DIGlobalVariable(name: "l3", scope: !0, file: !5, line: 91, type:
>> !36, isLocal: false, isDefinition: true)
>> -!36 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout3",
>> file: !5, line: 76, size: 128, align: 32, elements: !37)
>> +!36 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout3",
>> file: !5, line: 76, size: 128, elements: !37)
>> !37 = !{!38, !39, !44}
>> -!38 = !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs0", scope: !36,
>> file: !5, line: 77, baseType: !9, size: 8, align: 8)
>> -!39 = !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs4", scope: !36,
>> file: !5, line: 78, baseType: !40, size: 64, align: 32, offset: 32)
>> -!40 = !DICompositeType(tag: DW_TAG_structure_type, name: "size8_pack4",
>> file: !5, line: 72, size: 64, align: 32, elements: !41)
>> +!38 = !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs0", scope: !36,
>> file: !5, line: 77, baseType: !9, size: 8)
>> +!39 = !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs4", scope: !36,
>> file: !5, line: 78, baseType: !40, size: 64, offset: 32)
>> +!40 = !DICompositeType(tag: DW_TAG_structure_type, name: "size8_pack4",
>> file: !5, line: 72, size: 64, elements: !41)
>> !41 = !{!42, !43}
>> -!42 = !DIDerivedType(tag: DW_TAG_member, name: "i", scope: !40, file:
>> !5, line: 73, baseType: !14, size: 4, align: 32)
>> +!42 = !DIDerivedType(tag: DW_TAG_member, name: "i", scope: !40, file:
>> !5, line: 73, baseType: !14, size: 4)
>> !43 = !DIDerivedType(tag: DW_TAG_member, name: "l", scope: !40, file:
>> !5, line: 74, baseType: !16, size: 60, offset: 4)
>> -!44 = !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs12", scope: !36,
>> file: !5, line: 79, baseType: !14, size: 1, align: 32, offset: 96)
>> +!44 = !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs12", scope: !36,
>> file: !5, line: 79, baseType: !14, size: 1, offset: 96)
>> !45 = !{i32 2, !"Dwarf Version", i32 2}
>> !46 = !{i32 2, !"Debug Info Version", i32 3}
>> !47 = !{!"clang version 3.7.0 (trunk 240791) (llvm/trunk 240790)"}
>>
>> Modified: llvm/trunk/unittests/IR/MetadataTest.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/IR/
>> MetadataTest.cpp?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/unittests/IR/MetadataTest.cpp (original)
>> +++ llvm/trunk/unittests/IR/MetadataTest.cpp Wed Oct 19 19:13:12 2016
>> @@ -1824,10 +1824,12 @@ TEST_F(DIGlobalVariableTest, get) {
>> auto *Expr2 = DIExpression::get(Context, {1, 2, 3});
>> DIDerivedType *StaticDataMemberDeclaration =
>> cast<DIDerivedType>(getDerivedType());
>> + uint64_t AlignInBits = 8;
>>
>> auto *N = DIGlobalVariable::get(Context, Scope, Name, LinkageName,
>> File, Line,
>> Type, IsLocalToUnit, IsDefinition,
>> - Expr, StaticDataMemberDeclaration);
>> + Expr, StaticDataMemberDeclaration,
>> + AlignInBits);
>> EXPECT_EQ(dwarf::DW_TAG_variable, N->getTag());
>> EXPECT_EQ(Scope, N->getScope());
>> EXPECT_EQ(Name, N->getName());
>> @@ -1839,45 +1841,61 @@ TEST_F(DIGlobalVariableTest, get) {
>> EXPECT_EQ(IsDefinition, N->isDefinition());
>> EXPECT_EQ(Expr, N->getExpr());
>> EXPECT_EQ(StaticDataMemberDeclaration, N->getStaticDataMemberDeclarat
>> ion());
>> + EXPECT_EQ(AlignInBits, N->getAlignInBits());
>> EXPECT_EQ(N, DIGlobalVariable::get(Context, Scope, Name, LinkageName,
>> File,
>> Line, Type, IsLocalToUnit,
>> IsDefinition,
>> - Expr, StaticDataMemberDeclaration));
>> + Expr, StaticDataMemberDeclaration,
>> + AlignInBits));
>>
>> EXPECT_NE(N,
>> DIGlobalVariable::get(Context, getSubprogram(), Name,
>> LinkageName,
>> File, Line, Type, IsLocalToUnit,
>> IsDefinition,
>> - Expr, StaticDataMemberDeclaration));
>> + Expr, StaticDataMemberDeclaration,
>> + AlignInBits));
>> EXPECT_NE(N, DIGlobalVariable::get(Context, Scope, "other",
>> LinkageName, File,
>> Line, Type, IsLocalToUnit,
>> IsDefinition,
>> - Expr, StaticDataMemberDeclaration));
>> + Expr, StaticDataMemberDeclaration,
>> + AlignInBits));
>> EXPECT_NE(N, DIGlobalVariable::get(Context, Scope, Name, "other",
>> File, Line,
>> Type, IsLocalToUnit, IsDefinition,
>> Expr,
>> - StaticDataMemberDeclaration));
>> + StaticDataMemberDeclaration,
>> + AlignInBits));
>> EXPECT_NE(N,
>> DIGlobalVariable::get(Context, Scope, Name, LinkageName,
>> getFile(),
>> Line, Type, IsLocalToUnit,
>> IsDefinition, Expr,
>> - StaticDataMemberDeclaration));
>> + StaticDataMemberDeclaration,
>> + AlignInBits));
>> EXPECT_NE(N,
>> DIGlobalVariable::get(Context, Scope, Name, LinkageName,
>> File,
>> Line + 1, Type, IsLocalToUnit,
>> IsDefinition,
>> - Expr, StaticDataMemberDeclaration));
>> + Expr, StaticDataMemberDeclaration,
>> + AlignInBits));
>> EXPECT_NE(N,
>> DIGlobalVariable::get(Context, Scope, Name, LinkageName,
>> File, Line,
>> getDerivedType(), IsLocalToUnit,
>> IsDefinition,
>> - Expr, StaticDataMemberDeclaration));
>> + Expr, StaticDataMemberDeclaration,
>> + AlignInBits));
>> EXPECT_NE(N, DIGlobalVariable::get(Context, Scope, Name, LinkageName,
>> File,
>> Line, Type, !IsLocalToUnit,
>> IsDefinition,
>> - Expr, StaticDataMemberDeclaration));
>> + Expr, StaticDataMemberDeclaration,
>> + AlignInBits));
>> EXPECT_NE(N, DIGlobalVariable::get(Context, Scope, Name, LinkageName,
>> File,
>> Line, Type, IsLocalToUnit,
>> !IsDefinition,
>> - Expr, StaticDataMemberDeclaration));
>> + Expr, StaticDataMemberDeclaration,
>> + AlignInBits));
>> EXPECT_NE(N, DIGlobalVariable::get(Context, Scope, Name, LinkageName,
>> File,
>> Line, Type, IsLocalToUnit,
>> IsDefinition,
>> - Expr2,
>> StaticDataMemberDeclaration));
>> + Expr2, StaticDataMemberDeclaration,
>> + AlignInBits));
>> EXPECT_NE(N,
>> DIGlobalVariable::get(Context, Scope, Name, LinkageName,
>> File, Line,
>> Type, IsLocalToUnit, IsDefinition,
>> Expr,
>> - cast<DIDerivedType>(getDerived
>> Type())));
>> + cast<DIDerivedType>(getDerivedType()),
>> + AlignInBits));
>> + EXPECT_NE(N, DIGlobalVariable::get(Context, Scope, Name, LinkageName,
>> File,
>> + Line, Type, IsLocalToUnit,
>> IsDefinition,
>> + Expr, StaticDataMemberDeclaration,
>> + (AlignInBits << 1)));
>>
>> TempDIGlobalVariable Temp = N->clone();
>> EXPECT_EQ(N, MDNode::replaceWithUniqued(std::move(Temp)));
>> @@ -1893,9 +1911,11 @@ TEST_F(DILocalVariableTest, get) {
>> DIType *Type = getDerivedType();
>> unsigned Arg = 6;
>> DINode::DIFlags Flags = static_cast<DINode::DIFlags>(7);
>> + uint64_t AlignInBits = 8;
>>
>> auto *N =
>> - DILocalVariable::get(Context, Scope, Name, File, Line, Type, Arg,
>> Flags);
>> + DILocalVariable::get(Context, Scope, Name, File, Line, Type, Arg,
>> Flags,
>> + AlignInBits);
>> EXPECT_TRUE(N->isParameter());
>> EXPECT_EQ(Scope, N->getScope());
>> EXPECT_EQ(Name, N->getName());
>> @@ -1904,24 +1924,27 @@ TEST_F(DILocalVariableTest, get) {
>> EXPECT_EQ(Type, N->getType());
>> EXPECT_EQ(Arg, N->getArg());
>> EXPECT_EQ(Flags, N->getFlags());
>> + EXPECT_EQ(AlignInBits, N->getAlignInBits());
>> EXPECT_EQ(N, DILocalVariable::get(Context, Scope, Name, File, Line,
>> Type, Arg,
>> - Flags));
>> + Flags, AlignInBits));
>>
>> EXPECT_FALSE(
>> - DILocalVariable::get(Context, Scope, Name, File, Line, Type, 0,
>> Flags)
>> - ->isParameter());
>> + DILocalVariable::get(Context, Scope, Name, File, Line, Type, 0,
>> Flags,
>> + AlignInBits)->isParameter());
>> EXPECT_NE(N, DILocalVariable::get(Context, getSubprogram(), Name,
>> File, Line,
>> - Type, Arg, Flags));
>> + Type, Arg, Flags, AlignInBits));
>> EXPECT_NE(N, DILocalVariable::get(Context, Scope, "other", File, Line,
>> Type,
>> - Arg, Flags));
>> + Arg, Flags, AlignInBits));
>> EXPECT_NE(N, DILocalVariable::get(Context, Scope, Name, getFile(),
>> Line, Type,
>> - Arg, Flags));
>> + Arg, Flags, AlignInBits));
>> EXPECT_NE(N, DILocalVariable::get(Context, Scope, Name, File, Line +
>> 1, Type,
>> - Arg, Flags));
>> + Arg, Flags, AlignInBits));
>> EXPECT_NE(N, DILocalVariable::get(Context, Scope, Name, File, Line,
>> - getDerivedType(), Arg, Flags));
>> + getDerivedType(), Arg, Flags,
>> AlignInBits));
>> + EXPECT_NE(N, DILocalVariable::get(Context, Scope, Name, File, Line,
>> Type,
>> + Arg + 1, Flags, AlignInBits));
>> EXPECT_NE(N, DILocalVariable::get(Context, Scope, Name, File, Line,
>> Type,
>> - Arg + 1, Flags));
>> + Arg, Flags, (AlignInBits << 1)));
>>
>> TempDILocalVariable Temp = N->clone();
>> EXPECT_EQ(N, MDNode::replaceWithUniqued(std::move(Temp)));
>> @@ -1929,17 +1952,17 @@ TEST_F(DILocalVariableTest, get) {
>>
>> TEST_F(DILocalVariableTest, getArg256) {
>> EXPECT_EQ(255u, DILocalVariable::get(Context, getSubprogram(), "",
>> getFile(),
>> - 0, nullptr, 255, DINode::FlagZero)
>> + 0, nullptr, 255,
>> DINode::FlagZero, 0)
>> ->getArg());
>> EXPECT_EQ(256u, DILocalVariable::get(Context, getSubprogram(), "",
>> getFile(),
>> - 0, nullptr, 256, DINode::FlagZero)
>> + 0, nullptr, 256,
>> DINode::FlagZero, 0)
>> ->getArg());
>> EXPECT_EQ(257u, DILocalVariable::get(Context, getSubprogram(), "",
>> getFile(),
>> - 0, nullptr, 257, DINode::FlagZero)
>> + 0, nullptr, 257,
>> DINode::FlagZero, 0)
>> ->getArg());
>> unsigned Max = UINT16_MAX;
>> EXPECT_EQ(Max, DILocalVariable::get(Context, getSubprogram(), "",
>> getFile(),
>> - 0, nullptr, Max, DINode::FlagZero)
>> + 0, nullptr, Max, DINode::FlagZero,
>> 0)
>> ->getArg());
>> }
>>
>>
>> Modified: llvm/trunk/unittests/Transforms/Utils/Cloning.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Tra
>> nsforms/Utils/Cloning.cpp?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/unittests/Transforms/Utils/Cloning.cpp (original)
>> +++ llvm/trunk/unittests/Transforms/Utils/Cloning.cpp Wed Oct 19
>> 19:13:12 2016
>> @@ -253,8 +253,7 @@ protected:
>> Instruction* Terminator = IBuilder.CreateRetVoid();
>>
>> // Create a local variable around the alloca
>> - auto *IntType =
>> - DBuilder.createBasicType("int", 32, 0, dwarf::DW_ATE_signed);
>> + auto *IntType = DBuilder.createBasicType("int", 32,
>> dwarf::DW_ATE_signed);
>> auto *E = DBuilder.createExpression();
>> auto *Variable =
>> DBuilder.createAutoVariable(Subprogram, "x", File, 5, IntType,
>> true);
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>
>
>
> --
> --
> Peter
>
--
--
Peter
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161020/eb7606ae/attachment-0001.html>
More information about the llvm-commits
mailing list