[llvm] r193091 - DebugInfo: Put each kind of constant (form, attribute, tag, etc) into its own enum for ease of use.

David Blaikie dblaikie at gmail.com
Mon Oct 21 13:21:49 PDT 2013


Thanks Reid (fixed by Reid in 193106).


On Mon, Oct 21, 2013 at 12:04 PM, Reid Kleckner <rnk at google.com> wrote:

> I believe this fails with VS2010:
>
> FAILED: "C:/Program Files (x86)/CMake 2.8/bin/cmcldeps.exe" CXX
> ..\lib\CodeGen\AsmPrinter\DIE.cpp
> "lib/CodeGen/AsmPrinter/CMakeFiles/LLVMAsmPrinter.dir/DIE.cpp.obj.d"
> lib\CodeGen\AsmPrinter\CMakeFiles\LLVMAsmPrinter.dir\DIE.cpp.obj  "Note:
> including file: "  "C:/Program Files (x86)/Microsoft Visual Studio
> 10.0/VC/bin/cl.exe" C:\PROGRA~2\MICROS~2.0\VC\bin\cl.exe   /nologo /TP
> /DWIN32 /D_WINDOWS /W3 /GR- /EHs-c-    /MD /O2 /Ob2
> -Ilib\CodeGen\AsmPrinter -I..\lib\CodeGen\AsmPrinter -Iinclude -I..\include
>    -UNDEBUG -wd4275 -wd4146 -wd4180 -wd4244 -wd4267 -wd4345 -wd4351 -wd4355
> -wd4503 -wd4624 -wd4800 -wd4291 -w14062 -we4238
>  -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS
> -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_HAS_EXCEPTIONS=0
> -D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS
> -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
> /Folib\CodeGen\AsmPrinter\CMakeFiles\LLVMAsmPrinter.dir\DIE.cpp.obj
> /Fdlib\LLVMAsmPrinter.pdb -c ..\lib\CodeGen\AsmPrinter\DIE.cpp
> ..\lib\CodeGen\AsmPrinter\DIE.cpp(37) : error C2668:
> 'llvm::FoldingSetNodeID::AddInteger' : ambiguous call to overloaded function
>
> I don't have a public buildbot link to point at, unfortunately.
>
>
> On Mon, Oct 21, 2013 at 10:28 AM, David Blaikie <dblaikie at gmail.com>wrote:
>
>> Author: dblaikie
>> Date: Mon Oct 21 12:28:37 2013
>> New Revision: 193091
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=193091&view=rev
>> Log:
>> DebugInfo: Put each kind of constant (form, attribute, tag, etc) into its
>> own enum for ease of use.
>>
>> This allows various variables to be more self-documenting and easier to
>> debug by being of specific types without overlapping enum values.
>>
>> Precommit review by Eric Christopher.
>>
>> Modified:
>>     llvm/trunk/include/llvm/Support/Dwarf.h
>>     llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp
>>     llvm/trunk/lib/CodeGen/AsmPrinter/DIE.h
>>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
>>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h
>>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>>
>> Modified: llvm/trunk/include/llvm/Support/Dwarf.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Dwarf.h?rev=193091&r1=193090&r2=193091&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/include/llvm/Support/Dwarf.h (original)
>> +++ llvm/trunk/include/llvm/Support/Dwarf.h Mon Oct 21 12:28:37 2013
>> @@ -68,8 +68,7 @@ enum LLVMConstants LLVM_ENUM_INT_TYPE(ui
>>  const uint32_t DW_CIE_ID = UINT32_MAX;
>>  const uint64_t DW64_CIE_ID = UINT64_MAX;
>>
>> -enum Constants {
>> -  // Tags
>> +enum Tag LLVM_ENUM_INT_TYPE(uint16_t) {
>>    DW_TAG_array_type = 0x01,
>>    DW_TAG_class_type = 0x02,
>>    DW_TAG_entry_point = 0x03,
>> @@ -139,12 +138,10 @@ enum Constants {
>>    DW_TAG_GNU_formal_parameter_pack = 0x4108,
>>    DW_TAG_lo_user = 0x4080,
>>    DW_TAG_APPLE_property = 0x4200,
>> -  DW_TAG_hi_user = 0xffff,
>> -
>> -  // Children flag
>> -  DW_CHILDREN_no = 0x00,
>> -  DW_CHILDREN_yes = 0x01,
>> +  DW_TAG_hi_user = 0xffff
>> +};
>>
>> +enum Attribute LLVM_ENUM_INT_TYPE(uint16_t) {
>>    // Attributes
>>    DW_AT_sibling = 0x01,
>>    DW_AT_location = 0x02,
>> @@ -295,8 +292,10 @@ enum Constants {
>>    DW_AT_APPLE_property_setter = 0x3fea,
>>    DW_AT_APPLE_property_attribute = 0x3feb,
>>    DW_AT_APPLE_objc_complete_type = 0x3fec,
>> -  DW_AT_APPLE_property = 0x3fed,
>> +  DW_AT_APPLE_property = 0x3fed
>> +};
>>
>> +enum Form LLVM_ENUM_INT_TYPE(uint16_t) {
>>    // Attribute form encodings
>>    DW_FORM_addr = 0x01,
>>    DW_FORM_block2 = 0x03,
>> @@ -326,8 +325,10 @@ enum Constants {
>>
>>    // Extensions for Fission proposal
>>    DW_FORM_GNU_addr_index = 0x1f01,
>> -  DW_FORM_GNU_str_index = 0x1f02,
>> +  DW_FORM_GNU_str_index = 0x1f02
>> +};
>>
>> +enum LocationAtom {
>>    // Operation encodings
>>    DW_OP_addr = 0x03,
>>    DW_OP_deref = 0x06,
>> @@ -491,8 +492,10 @@ enum Constants {
>>
>>    // Extensions for Fission proposal.
>>    DW_OP_GNU_addr_index = 0xfb,
>> -  DW_OP_GNU_const_index = 0xfc,
>> +  DW_OP_GNU_const_index = 0xfc
>> +};
>>
>> +enum TypeKind {
>>    // Encoding attribute values
>>    DW_ATE_address = 0x01,
>>    DW_ATE_boolean = 0x02,
>> @@ -511,37 +514,49 @@ enum Constants {
>>    DW_ATE_decimal_float = 0x0f,
>>    DW_ATE_UTF = 0x10,
>>    DW_ATE_lo_user = 0x80,
>> -  DW_ATE_hi_user = 0xff,
>> +  DW_ATE_hi_user = 0xff
>> +};
>>
>> +enum DecimalSignEncoding {
>>    // Decimal sign attribute values
>>    DW_DS_unsigned = 0x01,
>>    DW_DS_leading_overpunch = 0x02,
>>    DW_DS_trailing_overpunch = 0x03,
>>    DW_DS_leading_separate = 0x04,
>> -  DW_DS_trailing_separate = 0x05,
>> +  DW_DS_trailing_separate = 0x05
>> +};
>>
>> +enum EndianityEncoding {
>>    // Endianity attribute values
>>    DW_END_default = 0x00,
>>    DW_END_big = 0x01,
>>    DW_END_little = 0x02,
>>    DW_END_lo_user = 0x40,
>> -  DW_END_hi_user = 0xff,
>> +  DW_END_hi_user = 0xff
>> +};
>>
>> +enum AccessAttribute {
>>    // Accessibility codes
>>    DW_ACCESS_public = 0x01,
>>    DW_ACCESS_protected = 0x02,
>> -  DW_ACCESS_private = 0x03,
>> +  DW_ACCESS_private = 0x03
>> +};
>>
>> +enum VisibilityAttribute {
>>    // Visibility codes
>>    DW_VIS_local = 0x01,
>>    DW_VIS_exported = 0x02,
>> -  DW_VIS_qualified = 0x03,
>> +  DW_VIS_qualified = 0x03
>> +};
>>
>> +enum VirtualityAttribute {
>>    // Virtuality codes
>>    DW_VIRTUALITY_none = 0x00,
>>    DW_VIRTUALITY_virtual = 0x01,
>> -  DW_VIRTUALITY_pure_virtual = 0x02,
>> +  DW_VIRTUALITY_pure_virtual = 0x02
>> +};
>>
>> +enum SourceLanguage {
>>    // Language names
>>    DW_LANG_C89 = 0x0001,
>>    DW_LANG_C = 0x0002,
>> @@ -565,35 +580,47 @@ enum Constants {
>>    DW_LANG_Python = 0x0014,
>>    DW_LANG_lo_user = 0x8000,
>>    DW_LANG_Mips_Assembler = 0x8001,
>> -  DW_LANG_hi_user = 0xffff,
>> +  DW_LANG_hi_user = 0xffff
>> +};
>>
>> +enum CaseSensitivity {
>>    // Identifier case codes
>>    DW_ID_case_sensitive = 0x00,
>>    DW_ID_up_case = 0x01,
>>    DW_ID_down_case = 0x02,
>> -  DW_ID_case_insensitive = 0x03,
>> +  DW_ID_case_insensitive = 0x03
>> +};
>>
>> +enum CallingConvention {
>>    // Calling convention codes
>>    DW_CC_normal = 0x01,
>>    DW_CC_program = 0x02,
>>    DW_CC_nocall = 0x03,
>>    DW_CC_lo_user = 0x40,
>> -  DW_CC_hi_user = 0xff,
>> +  DW_CC_hi_user = 0xff
>> +};
>>
>> +enum InlineAttribute {
>>    // Inline codes
>>    DW_INL_not_inlined = 0x00,
>>    DW_INL_inlined = 0x01,
>>    DW_INL_declared_not_inlined = 0x02,
>> -  DW_INL_declared_inlined = 0x03,
>> +  DW_INL_declared_inlined = 0x03
>> +};
>>
>> +enum ArrayDimensionOrdering {
>>    // Array ordering
>>    DW_ORD_row_major = 0x00,
>> -  DW_ORD_col_major = 0x01,
>> +  DW_ORD_col_major = 0x01
>> +};
>>
>> +enum DiscriminantList {
>>    // Discriminant descriptor values
>>    DW_DSC_label = 0x00,
>> -  DW_DSC_range = 0x01,
>> +  DW_DSC_range = 0x01
>> +};
>>
>> +enum LineNumberOps {
>>    // Line Number Standard Opcode Encodings
>>    DW_LNS_extended_op = 0x00,
>>    DW_LNS_copy = 0x01,
>> @@ -607,23 +634,29 @@ enum Constants {
>>    DW_LNS_fixed_advance_pc = 0x09,
>>    DW_LNS_set_prologue_end = 0x0a,
>>    DW_LNS_set_epilogue_begin = 0x0b,
>> -  DW_LNS_set_isa = 0x0c,
>> +  DW_LNS_set_isa = 0x0c
>> +};
>>
>> +enum LineNumberExtendedOps {
>>    // Line Number Extended Opcode Encodings
>>    DW_LNE_end_sequence = 0x01,
>>    DW_LNE_set_address = 0x02,
>>    DW_LNE_define_file = 0x03,
>>    DW_LNE_set_discriminator = 0x04,
>>    DW_LNE_lo_user = 0x80,
>> -  DW_LNE_hi_user = 0xff,
>> +  DW_LNE_hi_user = 0xff
>> +};
>>
>> +enum MacinfoRecordType {
>>    // Macinfo Type Encodings
>>    DW_MACINFO_define = 0x01,
>>    DW_MACINFO_undef = 0x02,
>>    DW_MACINFO_start_file = 0x03,
>>    DW_MACINFO_end_file = 0x04,
>> -  DW_MACINFO_vendor_ext = 0xff,
>> +  DW_MACINFO_vendor_ext = 0xff
>> +};
>>
>> +enum CallFrameInfo {
>>    // Call frame instruction encodings
>>    DW_CFA_extended = 0x00,
>>    DW_CFA_nop = 0x00,
>> @@ -656,7 +689,13 @@ enum Constants {
>>    DW_CFA_GNU_window_save = 0x2d,
>>    DW_CFA_GNU_args_size = 0x2e,
>>    DW_CFA_lo_user = 0x1c,
>> -  DW_CFA_hi_user = 0x3f,
>> +  DW_CFA_hi_user = 0x3f
>> +};
>> +
>> +enum Constants {
>> +  // Children flag
>> +  DW_CHILDREN_no = 0x00,
>> +  DW_CHILDREN_yes = 0x01,
>>
>>    DW_EH_PE_absptr = 0x00,
>>    DW_EH_PE_omit = 0xff,
>> @@ -674,8 +713,10 @@ enum Constants {
>>    DW_EH_PE_datarel = 0x30,
>>    DW_EH_PE_funcrel = 0x40,
>>    DW_EH_PE_aligned = 0x50,
>> -  DW_EH_PE_indirect = 0x80,
>> +  DW_EH_PE_indirect = 0x80
>> +};
>>
>> +enum ApplePropertyAttributes {
>>    // Apple Objective-C Property Attributes
>>    DW_APPLE_PROPERTY_readonly = 0x01,
>>    DW_APPLE_PROPERTY_readwrite = 0x02,
>>
>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp?rev=193091&r1=193090&r2=193091&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DIE.cpp Mon Oct 21 12:28:37 2013
>> @@ -187,7 +187,7 @@ void DIEValue::dump() const {
>>
>>  /// EmitValue - Emit integer of appropriate size.
>>  ///
>> -void DIEInteger::EmitValue(AsmPrinter *Asm, uint16_t Form) const {
>> +void DIEInteger::EmitValue(AsmPrinter *Asm, dwarf::Form Form) const {
>>    unsigned Size = ~0U;
>>    switch (Form) {
>>    case dwarf::DW_FORM_flag_present:
>> @@ -219,7 +219,7 @@ void DIEInteger::EmitValue(AsmPrinter *A
>>
>>  /// SizeOf - Determine size of integer value in bytes.
>>  ///
>> -unsigned DIEInteger::SizeOf(AsmPrinter *AP, uint16_t Form) const {
>> +unsigned DIEInteger::SizeOf(AsmPrinter *AP, dwarf::Form Form) const {
>>    switch (Form) {
>>    case dwarf::DW_FORM_flag_present: return 0;
>>    case dwarf::DW_FORM_flag:  // Fall thru
>> @@ -254,13 +254,13 @@ void DIEInteger::print(raw_ostream &O) c
>>
>>  /// EmitValue - Emit expression value.
>>  ///
>> -void DIEExpr::EmitValue(AsmPrinter *AP, uint16_t Form) const {
>> +void DIEExpr::EmitValue(AsmPrinter *AP, dwarf::Form Form) const {
>>    AP->OutStreamer.EmitValue(Expr, SizeOf(AP, Form));
>>  }
>>
>>  /// SizeOf - Determine size of expression value in bytes.
>>  ///
>> -unsigned DIEExpr::SizeOf(AsmPrinter *AP, uint16_t Form) const {
>> +unsigned DIEExpr::SizeOf(AsmPrinter *AP, dwarf::Form Form) const {
>>    if (Form == dwarf::DW_FORM_data4) return 4;
>>    if (Form == dwarf::DW_FORM_sec_offset) return 4;
>>    if (Form == dwarf::DW_FORM_strp) return 4;
>> @@ -280,15 +280,16 @@ void DIEExpr::print(raw_ostream &O) cons
>>
>>  /// EmitValue - Emit label value.
>>  ///
>> -void DIELabel::EmitValue(AsmPrinter *AP, uint16_t Form) const {
>> -  AP->EmitLabelReference(Label, SizeOf(AP, Form), Form ==
>> dwarf::DW_FORM_strp
>> -    || Form == dwarf::DW_FORM_sec_offset || Form == dwarf::DW_OP_call_ref
>> -    || Form == dwarf::DW_FORM_ref_addr);
>> +void DIELabel::EmitValue(AsmPrinter *AP, dwarf::Form Form) const {
>> +  AP->EmitLabelReference(Label, SizeOf(AP, Form),
>> +                         Form == dwarf::DW_FORM_strp ||
>> +                             Form == dwarf::DW_FORM_sec_offset ||
>> +                             Form == dwarf::DW_FORM_ref_addr);
>>  }
>>
>>  /// SizeOf - Determine size of label value in bytes.
>>  ///
>> -unsigned DIELabel::SizeOf(AsmPrinter *AP, uint16_t Form) const {
>> +unsigned DIELabel::SizeOf(AsmPrinter *AP, dwarf::Form Form) const {
>>    if (Form == dwarf::DW_FORM_data4) return 4;
>>    if (Form == dwarf::DW_FORM_sec_offset) return 4;
>>    if (Form == dwarf::DW_FORM_strp) return 4;
>> @@ -307,13 +308,13 @@ void DIELabel::print(raw_ostream &O) con
>>
>>  /// EmitValue - Emit delta value.
>>  ///
>> -void DIEDelta::EmitValue(AsmPrinter *AP, uint16_t Form) const {
>> +void DIEDelta::EmitValue(AsmPrinter *AP, dwarf::Form Form) const {
>>    AP->EmitLabelDifference(LabelHi, LabelLo, SizeOf(AP, Form));
>>  }
>>
>>  /// SizeOf - Determine size of delta value in bytes.
>>  ///
>> -unsigned DIEDelta::SizeOf(AsmPrinter *AP, uint16_t Form) const {
>> +unsigned DIEDelta::SizeOf(AsmPrinter *AP, dwarf::Form Form) const {
>>    if (Form == dwarf::DW_FORM_data4) return 4;
>>    if (Form == dwarf::DW_FORM_strp) return 4;
>>    return AP->getDataLayout().getPointerSize();
>> @@ -331,13 +332,13 @@ void DIEDelta::print(raw_ostream &O) con
>>
>>  /// EmitValue - Emit string value.
>>  ///
>> -void DIEString::EmitValue(AsmPrinter *AP, uint16_t Form) const {
>> +void DIEString::EmitValue(AsmPrinter *AP, dwarf::Form Form) const {
>>    Access->EmitValue(AP, Form);
>>  }
>>
>>  /// SizeOf - Determine size of delta value in bytes.
>>  ///
>> -unsigned DIEString::SizeOf(AsmPrinter *AP, uint16_t Form) const {
>> +unsigned DIEString::SizeOf(AsmPrinter *AP, dwarf::Form Form) const {
>>    return Access->SizeOf(AP, Form);
>>  }
>>
>> @@ -354,7 +355,7 @@ void DIEString::print(raw_ostream &O) co
>>
>>  /// EmitValue - Emit debug information entry offset.
>>  ///
>> -void DIEEntry::EmitValue(AsmPrinter *AP, uint16_t Form) const {
>> +void DIEEntry::EmitValue(AsmPrinter *AP, dwarf::Form Form) const {
>>    AP->EmitInt32(Entry->getOffset());
>>  }
>>
>> @@ -392,7 +393,7 @@ unsigned DIEBlock::ComputeSize(AsmPrinte
>>
>>  /// EmitValue - Emit block data.
>>  ///
>> -void DIEBlock::EmitValue(AsmPrinter *Asm, uint16_t Form) const {
>> +void DIEBlock::EmitValue(AsmPrinter *Asm, dwarf::Form Form) const {
>>    switch (Form) {
>>    default: llvm_unreachable("Improper form for block");
>>    case dwarf::DW_FORM_block1: Asm->EmitInt8(Size);    break;
>> @@ -408,7 +409,7 @@ void DIEBlock::EmitValue(AsmPrinter *Asm
>>
>>  /// SizeOf - Determine size of block data in bytes.
>>  ///
>> -unsigned DIEBlock::SizeOf(AsmPrinter *AP, uint16_t Form) const {
>> +unsigned DIEBlock::SizeOf(AsmPrinter *AP, dwarf::Form Form) const {
>>    switch (Form) {
>>    case dwarf::DW_FORM_block1: return Size + sizeof(int8_t);
>>    case dwarf::DW_FORM_block2: return Size + sizeof(int16_t);
>>
>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DIE.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DIE.h?rev=193091&r1=193090&r2=193091&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DIE.h (original)
>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DIE.h Mon Oct 21 12:28:37 2013
>> @@ -33,17 +33,17 @@ namespace llvm {
>>    class DIEAbbrevData {
>>      /// Attribute - Dwarf attribute code.
>>      ///
>> -    uint16_t Attribute;
>> +    dwarf::Attribute Attribute;
>>
>>      /// Form - Dwarf form code.
>>      ///
>> -    uint16_t Form;
>> +    dwarf::Form Form;
>>    public:
>> -    DIEAbbrevData(uint16_t A, uint16_t F) : Attribute(A), Form(F) {}
>> +    DIEAbbrevData(dwarf::Attribute A, dwarf::Form F) : Attribute(A),
>> Form(F) {}
>>
>>      // Accessors.
>> -    uint16_t getAttribute() const { return Attribute; }
>> -    uint16_t getForm()      const { return Form; }
>> +    dwarf::Attribute getAttribute() const { return Attribute; }
>> +    dwarf::Form getForm() const { return Form; }
>>
>>      /// Profile - Used to gather unique data for the abbreviation
>> folding set.
>>      ///
>> @@ -56,7 +56,7 @@ namespace llvm {
>>    class DIEAbbrev : public FoldingSetNode {
>>      /// Tag - Dwarf tag code.
>>      ///
>> -    uint16_t Tag;
>> +    dwarf::Tag Tag;
>>
>>      /// ChildrenFlag - Dwarf children flag.
>>      ///
>> @@ -71,10 +71,10 @@ namespace llvm {
>>      SmallVector<DIEAbbrevData, 12> Data;
>>
>>    public:
>> -    DIEAbbrev(uint16_t T, uint16_t C) : Tag(T), ChildrenFlag(C), Data()
>> {}
>> +    DIEAbbrev(dwarf::Tag T, uint16_t C) : Tag(T), ChildrenFlag(C),
>> Data() {}
>>
>>      // Accessors.
>> -    uint16_t getTag() const { return Tag; }
>> +    dwarf::Tag getTag() const { return Tag; }
>>      unsigned getNumber() const { return Number; }
>>      uint16_t getChildrenFlag() const { return ChildrenFlag; }
>>      const SmallVectorImpl<DIEAbbrevData> &getData() const { return Data;
>> }
>> @@ -83,7 +83,7 @@ namespace llvm {
>>
>>      /// AddAttribute - Adds another set of attribute information to the
>>      /// abbreviation.
>> -    void AddAttribute(uint16_t Attribute, uint16_t Form) {
>> +    void AddAttribute(dwarf::Attribute Attribute, dwarf::Form Form) {
>>        Data.push_back(DIEAbbrevData(Attribute, Form));
>>      }
>>
>> @@ -136,13 +136,14 @@ namespace llvm {
>>  #endif
>>    public:
>>      explicit DIE(unsigned Tag)
>> -      : Offset(0), Size(0), Abbrev(Tag, dwarf::DW_CHILDREN_no),
>> Parent(0) {}
>> +        : Offset(0), Size(0), Abbrev((dwarf::Tag)Tag,
>> dwarf::DW_CHILDREN_no),
>> +          Parent(0) {}
>>      virtual ~DIE();
>>
>>      // Accessors.
>>      DIEAbbrev &getAbbrev() { return Abbrev; }
>>      unsigned getAbbrevNumber() const { return Abbrev.getNumber(); }
>> -    uint16_t getTag() const { return Abbrev.getTag(); }
>> +    dwarf::Tag getTag() const { return Abbrev.getTag(); }
>>      unsigned getOffset() const { return Offset; }
>>      unsigned getSize() const { return Size; }
>>      const std::vector<DIE *> &getChildren() const { return Children; }
>> @@ -153,7 +154,8 @@ namespace llvm {
>>
>>      /// addValue - Add a value and attributes to a DIE.
>>      ///
>> -    void addValue(uint16_t Attribute, uint16_t Form, DIEValue *Value) {
>> +    void addValue(dwarf::Attribute Attribute, dwarf::Form Form,
>> +                  DIEValue *Value) {
>>        Abbrev.AddAttribute(Attribute, Form);
>>        Values.push_back(Value);
>>      }
>> @@ -205,11 +207,11 @@ namespace llvm {
>>
>>      /// EmitValue - Emit value via the Dwarf writer.
>>      ///
>> -    virtual void EmitValue(AsmPrinter *AP, uint16_t Form) const = 0;
>> +    virtual void EmitValue(AsmPrinter *AP, dwarf::Form Form) const = 0;
>>
>>      /// SizeOf - Return the size of a value in bytes.
>>      ///
>> -    virtual unsigned SizeOf(AsmPrinter *AP, uint16_t Form) const = 0;
>> +    virtual unsigned SizeOf(AsmPrinter *AP, dwarf::Form Form) const = 0;
>>
>>  #ifndef NDEBUG
>>      virtual void print(raw_ostream &O) const = 0;
>> @@ -227,7 +229,7 @@ namespace llvm {
>>
>>      /// BestForm - Choose the best form for integer.
>>      ///
>> -    static uint16_t BestForm(bool IsSigned, uint64_t Int) {
>> +    static dwarf::Form BestForm(bool IsSigned, uint64_t Int) {
>>        if (IsSigned) {
>>          const int64_t SignedInt = Int;
>>          if ((char)Int == SignedInt)     return dwarf::DW_FORM_data1;
>> @@ -243,13 +245,13 @@ namespace llvm {
>>
>>      /// EmitValue - Emit integer of appropriate size.
>>      ///
>> -    virtual void EmitValue(AsmPrinter *AP, uint16_t Form) const;
>> +    virtual void EmitValue(AsmPrinter *AP, dwarf::Form Form) const;
>>
>>      uint64_t getValue() const { return Integer; }
>>
>>      /// SizeOf - Determine size of integer value in bytes.
>>      ///
>> -    virtual unsigned SizeOf(AsmPrinter *AP, uint16_t Form) const;
>> +    virtual unsigned SizeOf(AsmPrinter *AP, dwarf::Form Form) const;
>>
>>      // Implement isa/cast/dyncast.
>>      static bool classof(const DIEValue *I) { return I->getType() ==
>> isInteger; }
>> @@ -269,7 +271,7 @@ namespace llvm {
>>
>>      /// EmitValue - Emit expression value.
>>      ///
>> -    virtual void EmitValue(AsmPrinter *AP, uint16_t Form) const;
>> +    virtual void EmitValue(AsmPrinter *AP, dwarf::Form Form) const;
>>
>>      /// getValue - Get MCExpr.
>>      ///
>> @@ -277,7 +279,7 @@ namespace llvm {
>>
>>      /// SizeOf - Determine size of expression value in bytes.
>>      ///
>> -    virtual unsigned SizeOf(AsmPrinter *AP, uint16_t Form) const;
>> +    virtual unsigned SizeOf(AsmPrinter *AP, dwarf::Form Form) const;
>>
>>      // Implement isa/cast/dyncast.
>>      static bool classof(const DIEValue *E) { return E->getType() ==
>> isExpr; }
>> @@ -297,7 +299,7 @@ namespace llvm {
>>
>>      /// EmitValue - Emit label value.
>>      ///
>> -    virtual void EmitValue(AsmPrinter *AP, uint16_t Form) const;
>> +    virtual void EmitValue(AsmPrinter *AP, dwarf::Form Form) const;
>>
>>      /// getValue - Get MCSymbol.
>>      ///
>> @@ -305,7 +307,7 @@ namespace llvm {
>>
>>      /// SizeOf - Determine size of label value in bytes.
>>      ///
>> -    virtual unsigned SizeOf(AsmPrinter *AP, uint16_t Form) const;
>> +    virtual unsigned SizeOf(AsmPrinter *AP, dwarf::Form Form) const;
>>
>>      // Implement isa/cast/dyncast.
>>      static bool classof(const DIEValue *L) { return L->getType() ==
>> isLabel; }
>> @@ -327,11 +329,11 @@ namespace llvm {
>>
>>      /// EmitValue - Emit delta value.
>>      ///
>> -    virtual void EmitValue(AsmPrinter *AP, uint16_t Form) const;
>> +    virtual void EmitValue(AsmPrinter *AP, dwarf::Form Form) const;
>>
>>      /// SizeOf - Determine size of delta value in bytes.
>>      ///
>> -    virtual unsigned SizeOf(AsmPrinter *AP, uint16_t Form) const;
>> +    virtual unsigned SizeOf(AsmPrinter *AP, dwarf::Form Form) const;
>>
>>      // Implement isa/cast/dyncast.
>>      static bool classof(const DIEValue *D) { return D->getType() ==
>> isDelta; }
>> @@ -357,11 +359,11 @@ namespace llvm {
>>
>>      /// EmitValue - Emit delta value.
>>      ///
>> -    virtual void EmitValue(AsmPrinter *AP, uint16_t Form) const;
>> +    virtual void EmitValue(AsmPrinter *AP, dwarf::Form Form) const;
>>
>>      /// SizeOf - Determine size of delta value in bytes.
>>      ///
>> -    virtual unsigned SizeOf(AsmPrinter *AP, uint16_t Form) const;
>> +    virtual unsigned SizeOf(AsmPrinter *AP, dwarf::Form Form) const;
>>
>>      // Implement isa/cast/dyncast.
>>      static bool classof(const DIEValue *D) { return D->getType() ==
>> isString; }
>> @@ -386,11 +388,11 @@ namespace llvm {
>>
>>      /// EmitValue - Emit debug information entry offset.
>>      ///
>> -    virtual void EmitValue(AsmPrinter *AP, uint16_t Form) const;
>> +    virtual void EmitValue(AsmPrinter *AP, dwarf::Form Form) const;
>>
>>      /// SizeOf - Determine size of debug information entry in bytes.
>>      ///
>> -    virtual unsigned SizeOf(AsmPrinter *AP, uint16_t Form) const {
>> +    virtual unsigned SizeOf(AsmPrinter *AP, dwarf::Form Form) const {
>>        return Form == dwarf::DW_FORM_ref_addr ? getRefAddrSize(AP)
>>                                               : sizeof(int32_t);
>>      }
>> @@ -412,9 +414,7 @@ namespace llvm {
>>    class DIEBlock : public DIEValue, public DIE {
>>      unsigned Size;                // Size in bytes excluding size header.
>>    public:
>> -    DIEBlock()
>> -      : DIEValue(isBlock), DIE(0), Size(0) {}
>> -    virtual ~DIEBlock() {}
>> +    DIEBlock() : DIEValue(isBlock), DIE(0), Size(0) {}
>>
>>      /// ComputeSize - calculate the size of the block.
>>      ///
>> @@ -422,7 +422,7 @@ namespace llvm {
>>
>>      /// BestForm - Choose the best form for data.
>>      ///
>> -    uint16_t BestForm() const {
>> +    dwarf::Form BestForm() const {
>>        if ((unsigned char)Size == Size)  return dwarf::DW_FORM_block1;
>>        if ((unsigned short)Size == Size) return dwarf::DW_FORM_block2;
>>        if ((unsigned int)Size == Size)   return dwarf::DW_FORM_block4;
>> @@ -431,11 +431,11 @@ namespace llvm {
>>
>>      /// EmitValue - Emit block data.
>>      ///
>> -    virtual void EmitValue(AsmPrinter *AP, uint16_t Form) const;
>> +    virtual void EmitValue(AsmPrinter *AP, dwarf::Form Form) const;
>>
>>      /// SizeOf - Determine size of block data in bytes.
>>      ///
>> -    virtual unsigned SizeOf(AsmPrinter *AP, uint16_t Form) const;
>> +    virtual unsigned SizeOf(AsmPrinter *AP, dwarf::Form Form) const;
>>
>>      // Implement isa/cast/dyncast.
>>      static bool classof(const DIEValue *E) { return E->getType() ==
>> isBlock; }
>>
>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp?rev=193091&r1=193090&r2=193091&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp Mon Oct 21
>> 12:28:37 2013
>> @@ -96,7 +96,7 @@ int64_t CompileUnit::getDefaultLowerBoun
>>  }
>>
>>  /// addFlag - Add a flag that is true.
>> -void CompileUnit::addFlag(DIE *Die, uint16_t Attribute) {
>> +void CompileUnit::addFlag(DIE *Die, dwarf::Attribute Attribute) {
>>    if (DD->getDwarfVersion() >= 4)
>>      Die->addValue(Attribute, dwarf::DW_FORM_flag_present, DIEIntegerOne);
>>    else
>> @@ -105,23 +105,32 @@ void CompileUnit::addFlag(DIE *Die, uint
>>
>>  /// addUInt - Add an unsigned integer attribute data and value.
>>  ///
>> -void CompileUnit::addUInt(DIE *Die, uint16_t Attribute, uint16_t Form,
>> -                          uint64_t Integer) {
>> +void CompileUnit::addUInt(DIE *Die, dwarf::Attribute Attribute,
>> +                          Optional<dwarf::Form> Form, uint64_t Integer) {
>>    if (!Form)
>>      Form = DIEInteger::BestForm(false, Integer);
>>    DIEValue *Value = Integer == 1 ? DIEIntegerOne : new
>> (DIEValueAllocator)
>>                          DIEInteger(Integer);
>> -  Die->addValue(Attribute, Form, Value);
>> +  Die->addValue(Attribute, *Form, Value);
>> +}
>> +
>> +void CompileUnit::addUInt(DIEBlock *Block, dwarf::Form Form, uint64_t
>> Integer) {
>> +  addUInt(Block, (dwarf::Attribute)0, Form, Integer);
>>  }
>>
>>  /// addSInt - Add an signed integer attribute data and value.
>>  ///
>> -void CompileUnit::addSInt(DIE *Die, uint16_t Attribute, uint16_t Form,
>> -                          int64_t Integer) {
>> +void CompileUnit::addSInt(DIE *Die, dwarf::Attribute Attribute,
>> +                          Optional<dwarf::Form> Form, int64_t Integer) {
>>    if (!Form)
>>      Form = DIEInteger::BestForm(true, Integer);
>>    DIEValue *Value = new (DIEValueAllocator) DIEInteger(Integer);
>> -  Die->addValue(Attribute, Form, Value);
>> +  Die->addValue(Attribute, *Form, Value);
>> +}
>> +
>> +void CompileUnit::addSInt(DIEBlock *Die, Optional<dwarf::Form> Form,
>> +                          int64_t Integer) {
>> +  addSInt(Die, (dwarf::Attribute)0, Form, Integer);
>>  }
>>
>>  /// addString - Add a string attribute data and value. We always emit a
>> @@ -129,9 +138,9 @@ void CompileUnit::addSInt(DIE *Die, uint
>>  /// more predictable sizes. In the case of split dwarf we emit an index
>>  /// into another table which gets us the static offset into the string
>>  /// table.
>> -void CompileUnit::addString(DIE *Die, uint16_t Attribute, StringRef
>> String) {
>> +void CompileUnit::addString(DIE *Die, dwarf::Attribute Attribute,
>> StringRef String) {
>>    DIEValue *Value;
>> -  uint16_t Form;
>> +  dwarf::Form Form;
>>    if (!DD->useSplitDwarf()) {
>>      MCSymbol *Symb = DU->getStringPoolEntry(String);
>>      if (Asm->needsRelocationsForDwarfStringPool())
>> @@ -152,7 +161,7 @@ void CompileUnit::addString(DIE *Die, ui
>>
>>  /// addLocalString - Add a string attribute data and value. This is
>> guaranteed
>>  /// to be in the local string pool instead of indirected.
>> -void CompileUnit::addLocalString(DIE *Die, uint16_t Attribute,
>> +void CompileUnit::addLocalString(DIE *Die, dwarf::Attribute Attribute,
>>                                   StringRef String) {
>>    MCSymbol *Symb = DU->getStringPoolEntry(String);
>>    DIEValue *Value;
>> @@ -167,24 +176,28 @@ void CompileUnit::addLocalString(DIE *Di
>>
>>  /// addExpr - Add a Dwarf expression attribute data and value.
>>  ///
>> -void CompileUnit::addExpr(DIE *Die, uint16_t Attribute, uint16_t Form,
>> -                          const MCExpr *Expr) {
>> +void CompileUnit::addExpr(DIEBlock *Die, dwarf::Form Form, const MCExpr
>> *Expr) {
>>    DIEValue *Value = new (DIEValueAllocator) DIEExpr(Expr);
>> -  Die->addValue(Attribute, Form, Value);
>> +  Die->addValue((dwarf::Attribute)0, Form, Value);
>>  }
>>
>>  /// addLabel - Add a Dwarf label attribute data and value.
>>  ///
>> -void CompileUnit::addLabel(DIE *Die, uint16_t Attribute, uint16_t Form,
>> +void CompileUnit::addLabel(DIE *Die, dwarf::Attribute Attribute,
>> dwarf::Form Form,
>>                             const MCSymbol *Label) {
>>    DIEValue *Value = new (DIEValueAllocator) DIELabel(Label);
>>    Die->addValue(Attribute, Form, Value);
>>  }
>>
>> +void CompileUnit::addLabel(DIEBlock *Die, dwarf::Form Form,
>> +                           const MCSymbol *Label) {
>> +  addLabel(Die, (dwarf::Attribute)0, Form, Label);
>> +}
>> +
>>  /// addLabelAddress - Add a dwarf label attribute data and value using
>>  /// DW_FORM_addr or DW_FORM_GNU_addr_index.
>>  ///
>> -void CompileUnit::addLabelAddress(DIE *Die, uint16_t Attribute,
>> +void CompileUnit::addLabelAddress(DIE *Die, dwarf::Attribute Attribute,
>>                                    MCSymbol *Label) {
>>    if (Label)
>>      DD->addArangeLabel(SymbolCU(this, Label));
>> @@ -207,20 +220,20 @@ void CompileUnit::addLabelAddress(DIE *D
>>  /// addOpAddress - Add a dwarf op address data and value using the
>>  /// form given and an op of either DW_FORM_addr or
>> DW_FORM_GNU_addr_index.
>>  ///
>> -void CompileUnit::addOpAddress(DIE *Die, const MCSymbol *Sym) {
>> +void CompileUnit::addOpAddress(DIEBlock *Die, const MCSymbol *Sym) {
>>    DD->addArangeLabel(SymbolCU(this, Sym));
>>    if (!DD->useSplitDwarf()) {
>> -    addUInt(Die, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
>> -    addLabel(Die, 0, dwarf::DW_FORM_udata, Sym);
>> +    addUInt(Die, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
>> +    addLabel(Die, dwarf::DW_FORM_udata, Sym);
>>    } else {
>> -    addUInt(Die, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_addr_index);
>> -    addUInt(Die, 0, dwarf::DW_FORM_GNU_addr_index,
>> DU->getAddrPoolIndex(Sym));
>> +    addUInt(Die, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_addr_index);
>> +    addUInt(Die, dwarf::DW_FORM_GNU_addr_index,
>> DU->getAddrPoolIndex(Sym));
>>    }
>>  }
>>
>>  /// addDelta - Add a label delta attribute data and value.
>>  ///
>> -void CompileUnit::addDelta(DIE *Die, uint16_t Attribute, uint16_t Form,
>> +void CompileUnit::addDelta(DIE *Die, dwarf::Attribute Attribute,
>> dwarf::Form Form,
>>                             const MCSymbol *Hi, const MCSymbol *Lo) {
>>    DIEValue *Value = new (DIEValueAllocator) DIEDelta(Hi, Lo);
>>    Die->addValue(Attribute, Form, Value);
>> @@ -228,14 +241,14 @@ void CompileUnit::addDelta(DIE *Die, uin
>>
>>  /// addDIEEntry - Add a DIE attribute data and value.
>>  ///
>> -void CompileUnit::addDIEEntry(DIE *Die, uint16_t Attribute, DIE *Entry) {
>> +void CompileUnit::addDIEEntry(DIE *Die, dwarf::Attribute Attribute, DIE
>> *Entry) {
>>    // We currently only use ref4.
>>    Die->addValue(Attribute, dwarf::DW_FORM_ref4, createDIEEntry(Entry));
>>  }
>>
>>  /// addBlock - Add block data.
>>  ///
>> -void CompileUnit::addBlock(DIE *Die, uint16_t Attribute, uint16_t Form,
>> +void CompileUnit::addBlock(DIE *Die, dwarf::Attribute Attribute,
>>                             DIEBlock *Block) {
>>    Block->ComputeSize(Asm);
>>    DIEBlocks.push_back(Block); // Memoize so we can call the destructor
>> later on.
>> @@ -256,8 +269,8 @@ void CompileUnit::addSourceLine(DIE *Die
>>        DD->getOrCreateSourceID(V.getContext().getFilename(),
>>                                V.getContext().getDirectory(),
>> getUniqueID());
>>    assert(FileID && "Invalid file id");
>> -  addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
>> -  addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
>> +  addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
>> +  addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
>>  }
>>
>>  /// addSourceLine - Add location information to specified debug
>> information
>> @@ -273,8 +286,8 @@ void CompileUnit::addSourceLine(DIE *Die
>>    unsigned FileID =
>>        DD->getOrCreateSourceID(G.getFilename(), G.getDirectory(),
>> getUniqueID());
>>    assert(FileID && "Invalid file id");
>> -  addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
>> -  addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
>> +  addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
>> +  addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
>>  }
>>
>>  /// addSourceLine - Add location information to specified debug
>> information
>> @@ -292,8 +305,8 @@ void CompileUnit::addSourceLine(DIE *Die
>>    unsigned FileID = DD->getOrCreateSourceID(SP.getFilename(),
>> SP.getDirectory(),
>>                                              getUniqueID());
>>    assert(FileID && "Invalid file id");
>> -  addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
>> -  addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
>> +  addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
>> +  addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
>>  }
>>
>>  /// addSourceLine - Add location information to specified debug
>> information
>> @@ -309,8 +322,8 @@ void CompileUnit::addSourceLine(DIE *Die
>>    unsigned FileID = DD->getOrCreateSourceID(Ty.getFilename(),
>> Ty.getDirectory(),
>>                                              getUniqueID());
>>    assert(FileID && "Invalid file id");
>> -  addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
>> -  addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
>> +  addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
>> +  addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
>>  }
>>
>>  /// addSourceLine - Add location information to specified debug
>> information
>> @@ -327,8 +340,8 @@ void CompileUnit::addSourceLine(DIE *Die
>>    unsigned FileID = DD->getOrCreateSourceID(File.getFilename(),
>>                                              File.getDirectory(),
>> getUniqueID());
>>    assert(FileID && "Invalid file id");
>> -  addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
>> -  addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
>> +  addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
>> +  addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
>>  }
>>
>>  /// addSourceLine - Add location information to specified debug
>> information
>> @@ -346,8 +359,8 @@ void CompileUnit::addSourceLine(DIE *Die
>>    unsigned FileID =
>>        DD->getOrCreateSourceID(FN, NS.getDirectory(), getUniqueID());
>>    assert(FileID && "Invalid file id");
>> -  addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
>> -  addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
>> +  addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
>> +  addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
>>  }
>>
>>  /// addVariableAddress - Add DW_AT_location attribute for a
>> @@ -364,37 +377,38 @@ void CompileUnit::addVariableAddress(con
>>  }
>>
>>  /// addRegisterOp - Add register operand.
>> -void CompileUnit::addRegisterOp(DIE *TheDie, unsigned Reg) {
>> +void CompileUnit::addRegisterOp(DIEBlock *TheDie, unsigned Reg) {
>>    const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
>>    unsigned DWReg = RI->getDwarfRegNum(Reg, false);
>>    if (DWReg < 32)
>> -    addUInt(TheDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_reg0 + DWReg);
>> +    addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_reg0 + DWReg);
>>    else {
>> -    addUInt(TheDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_regx);
>> -    addUInt(TheDie, 0, dwarf::DW_FORM_udata, DWReg);
>> +    addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_regx);
>> +    addUInt(TheDie, dwarf::DW_FORM_udata, DWReg);
>>    }
>>  }
>>
>>  /// addRegisterOffset - Add register offset.
>> -void CompileUnit::addRegisterOffset(DIE *TheDie, unsigned Reg, int64_t
>> Offset) {
>> +void CompileUnit::addRegisterOffset(DIEBlock *TheDie, unsigned Reg,
>> +                                    int64_t Offset) {
>>    const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
>>    unsigned DWReg = RI->getDwarfRegNum(Reg, false);
>>    const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
>>    if (Reg == TRI->getFrameRegister(*Asm->MF))
>>      // If variable offset is based in frame register then use fbreg.
>> -    addUInt(TheDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_fbreg);
>> +    addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_fbreg);
>>    else if (DWReg < 32)
>> -    addUInt(TheDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_breg0 + DWReg);
>> +    addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_breg0 + DWReg);
>>    else {
>> -    addUInt(TheDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_bregx);
>> -    addUInt(TheDie, 0, dwarf::DW_FORM_udata, DWReg);
>> +    addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_bregx);
>> +    addUInt(TheDie, dwarf::DW_FORM_udata, DWReg);
>>    }
>> -  addSInt(TheDie, 0, dwarf::DW_FORM_sdata, Offset);
>> +  addSInt(TheDie, dwarf::DW_FORM_sdata, Offset);
>>  }
>>
>>  /// addAddress - Add an address attribute to a die based on the location
>>  /// provided.
>> -void CompileUnit::addAddress(DIE *Die, uint16_t Attribute,
>> +void CompileUnit::addAddress(DIE *Die, dwarf::Attribute Attribute,
>>                               const MachineLocation &Location, bool
>> Indirect) {
>>    DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
>>
>> @@ -403,12 +417,12 @@ void CompileUnit::addAddress(DIE *Die, u
>>    else {
>>      addRegisterOffset(Block, Location.getReg(), Location.getOffset());
>>      if (Indirect && !Location.isReg()) {
>> -      addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
>> +      addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
>>      }
>>    }
>>
>>    // Now attach the location information to the DIE.
>> -  addBlock(Die, Attribute, 0, Block);
>> +  addBlock(Die, Attribute, Block);
>>  }
>>
>>  /// addComplexAddress - Start with the address based on the location
>> provided,
>> @@ -417,7 +431,7 @@ void CompileUnit::addAddress(DIE *Die, u
>>  /// the starting location.  Add the DWARF information to the die.
>>  ///
>>  void CompileUnit::addComplexAddress(const DbgVariable &DV, DIE *Die,
>> -                                    uint16_t Attribute,
>> +                                    dwarf::Attribute Attribute,
>>                                      const MachineLocation &Location) {
>>    DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
>>    unsigned N = DV.getNumAddrElements();
>> @@ -436,17 +450,17 @@ void CompileUnit::addComplexAddress(cons
>>    for (; i < N; ++i) {
>>      uint64_t Element = DV.getAddrElement(i);
>>      if (Element == DIBuilder::OpPlus) {
>> -      addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
>> -      addUInt(Block, 0, dwarf::DW_FORM_udata, DV.getAddrElement(++i));
>> +      addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
>> +      addUInt(Block, dwarf::DW_FORM_udata, DV.getAddrElement(++i));
>>      } else if (Element == DIBuilder::OpDeref) {
>>        if (!Location.isReg())
>> -        addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
>> +        addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
>>      } else
>>        llvm_unreachable("unknown DIBuilder Opcode");
>>    }
>>
>>    // Now attach the location information to the DIE.
>> -  addBlock(Die, Attribute, 0, Block);
>> +  addBlock(Die, Attribute, Block);
>>  }
>>
>>  /* Byref variables, in Blocks, are declared by the programmer as
>> "SomeType
>> @@ -510,7 +524,7 @@ void CompileUnit::addComplexAddress(cons
>>  /// more information, read large comment just above here.
>>  ///
>>  void CompileUnit::addBlockByrefAddress(const DbgVariable &DV, DIE *Die,
>> -                                       uint16_t Attribute,
>> +                                       dwarf::Attribute Attribute,
>>                                         const MachineLocation &Location) {
>>    DIType Ty = DV.getType();
>>    DIType TmpTy = Ty;
>> @@ -560,30 +574,30 @@ void CompileUnit::addBlockByrefAddress(c
>>    // If we started with a pointer to the __Block_byref... struct, then
>>    // the first thing we need to do is dereference the pointer
>> (DW_OP_deref).
>>    if (isPointer)
>> -    addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
>> +    addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
>>
>>    // Next add the offset for the '__forwarding' field:
>>    // DW_OP_plus_uconst ForwardingFieldOffset.  Note there's no point in
>>    // adding the offset if it's 0.
>>    if (forwardingFieldOffset > 0) {
>> -    addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
>> -    addUInt(Block, 0, dwarf::DW_FORM_udata, forwardingFieldOffset);
>> +    addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
>> +    addUInt(Block, dwarf::DW_FORM_udata, forwardingFieldOffset);
>>    }
>>
>>    // Now dereference the __forwarding field to get to the real
>> __Block_byref
>>    // struct:  DW_OP_deref.
>> -  addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
>> +  addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
>>
>>    // Now that we've got the real __Block_byref... struct, add the offset
>>    // for the variable's field to get to the location of the actual
>> variable:
>>    // DW_OP_plus_uconst varFieldOffset.  Again, don't add if it's 0.
>>    if (varFieldOffset > 0) {
>> -    addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
>> -    addUInt(Block, 0, dwarf::DW_FORM_udata, varFieldOffset);
>> +    addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
>> +    addUInt(Block, dwarf::DW_FORM_udata, varFieldOffset);
>>    }
>>
>>    // Now attach the location information to the DIE.
>> -  addBlock(Die, Attribute, 0, Block);
>> +  addBlock(Die, Attribute, Block);
>>  }
>>
>>  /// isTypeSigned - Return true if the type is signed.
>> @@ -654,7 +668,7 @@ void CompileUnit::addConstantValue(DIE *
>>    assert(MO.isImm() && "Invalid machine operand!");
>>    int SizeInBits = -1;
>>    bool SignedConstant = isTypeSigned(DD, Ty, &SizeInBits);
>> -  uint16_t Form;
>> +  dwarf::Form Form;
>>
>>    // If we're a signed constant definitely use sdata.
>>    if (SignedConstant) {
>> @@ -702,10 +716,10 @@ void CompileUnit::addConstantFPValue(DIE
>>
>>    // Output the constant to DWARF one byte at a time.
>>    for (; Start != Stop; Start += Incr)
>> -    addUInt(Block, 0, dwarf::DW_FORM_data1,
>> +    addUInt(Block, dwarf::DW_FORM_data1,
>>              (unsigned char)0xFF & FltPtr[Start]);
>>
>> -  addBlock(Die, dwarf::DW_AT_const_value, 0, Block);
>> +  addBlock(Die, dwarf::DW_AT_const_value, Block);
>>  }
>>
>>  /// addConstantFPValue - Add constant value entry in variable DIE.
>> @@ -732,7 +746,7 @@ void CompileUnit::addConstantValue(DIE *
>>      }
>>
>>      // Else use data for now unless it's larger than we can deal with.
>> -    uint16_t Form;
>> +    dwarf::Form Form;
>>      switch (CIBitWidth) {
>>      case 8:
>>        Form = dwarf::DW_FORM_data1;
>> @@ -770,10 +784,10 @@ void CompileUnit::addConstantValue(DIE *
>>        c = Ptr64[i / 8] >> (8 * (i & 7));
>>      else
>>        c = Ptr64[(NumBytes - 1 - i) / 8] >> (8 * ((NumBytes - 1 - i) &
>> 7));
>> -    addUInt(Block, 0, dwarf::DW_FORM_data1, c);
>> +    addUInt(Block, dwarf::DW_FORM_data1, c);
>>    }
>>
>> -  addBlock(Die, dwarf::DW_AT_const_value, 0, Block);
>> +  addBlock(Die, dwarf::DW_AT_const_value, Block);
>>  }
>>
>>  /// addTemplateParams - Add template parameters into buffer.
>> @@ -857,7 +871,7 @@ DIE *CompileUnit::getOrCreateTypeDIE(con
>>  }
>>
>>  /// addType - Add a new type attribute to the specified entity.
>> -void CompileUnit::addType(DIE *Entity, DIType Ty, uint16_t Attribute) {
>> +void CompileUnit::addType(DIE *Entity, DIType Ty, dwarf::Attribute
>> Attribute) {
>>    assert(Ty && "Trying to add a type that doesn't exist?");
>>
>>    // Check for pre-existence.
>> @@ -1001,7 +1015,7 @@ void CompileUnit::constructTypeDIE(DIE &
>>            BTy.getEncoding());
>>
>>    uint64_t Size = BTy.getSizeInBits() >> 3;
>> -  addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, Size);
>> +  addUInt(&Buffer, dwarf::DW_AT_byte_size, None, Size);
>>  }
>>
>>  /// constructTypeDIE - Construct derived type die from DIDerivedType.
>> @@ -1022,7 +1036,7 @@ void CompileUnit::constructTypeDIE(DIE &
>>
>>    // Add size if non-zero (derived types might be zero-sized.)
>>    if (Size && Tag != dwarf::DW_TAG_pointer_type)
>> -    addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, Size);
>> +    addUInt(&Buffer, dwarf::DW_AT_byte_size, None, Size);
>>
>>    if (Tag == dwarf::DW_TAG_ptr_to_member_type)
>>      addDIEEntry(&Buffer, dwarf::DW_AT_containing_type,
>> @@ -1182,7 +1196,7 @@ void CompileUnit::constructTypeDIE(DIE &
>>          if (Property.isNonAtomicObjCProperty())
>>            PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_nonatomic;
>>          if (PropertyAttributes)
>> -          addUInt(ElemDie, dwarf::DW_AT_APPLE_property_attribute, 0,
>> +          addUInt(ElemDie, dwarf::DW_AT_APPLE_property_attribute, None,
>>                    PropertyAttributes);
>>
>>          DIEEntry *Entry = getDIEEntry(Element);
>> @@ -1228,10 +1242,10 @@ void CompileUnit::constructTypeDIE(DIE &
>>      // Add size if non-zero (derived types might be zero-sized.)
>>      // TODO: Do we care about size for enum forward declarations?
>>      if (Size)
>> -      addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, Size);
>> +      addUInt(&Buffer, dwarf::DW_AT_byte_size, None, Size);
>>      else if (!CTy.isForwardDecl())
>>        // Add zero size if it is not a forward declaration.
>> -      addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, 0);
>> +      addUInt(&Buffer, dwarf::DW_AT_byte_size, None, 0);
>>
>>      // If we're a forward decl, say so.
>>      if (CTy.isForwardDecl())
>> @@ -1301,8 +1315,8 @@ CompileUnit::getOrCreateTemplateValuePar
>>        addOpAddress(Block, Asm->Mang->getSymbol(GV));
>>        // Emit DW_OP_stack_value to use the address as the immediate
>> value of the
>>        // parameter, rather than a pointer to it.
>> -      addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_stack_value);
>> -      addBlock(ParamDIE, dwarf::DW_AT_location, 0, Block);
>> +      addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_stack_value);
>> +      addBlock(ParamDIE, dwarf::DW_AT_location, Block);
>>      } else if (VP.getTag() == dwarf::DW_TAG_GNU_template_template_param)
>> {
>>        assert(isa<MDString>(Val));
>>        addString(ParamDIE, dwarf::DW_AT_GNU_template_name,
>> @@ -1410,9 +1424,9 @@ DIE *CompileUnit::getOrCreateSubprogramD
>>    if (VK) {
>>      addUInt(SPDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1, VK);
>>      DIEBlock *Block = getDIEBlock();
>> -    addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
>> -    addUInt(Block, 0, dwarf::DW_FORM_udata, SP.getVirtualIndex());
>> -    addBlock(SPDie, dwarf::DW_AT_vtable_elem_location, 0, Block);
>> +    addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
>> +    addUInt(Block, dwarf::DW_FORM_udata, SP.getVirtualIndex());
>> +    addBlock(SPDie, dwarf::DW_AT_vtable_elem_location, Block);
>>      ContainingTypeMap.insert(std::make_pair(SPDie,
>>
>>  resolve(SP.getContainingType())));
>>    }
>> @@ -1539,18 +1553,17 @@ void CompileUnit::createGlobalVariableDI
>>        // Based on GCC's support for TLS:
>>        if (!DD->useSplitDwarf()) {
>>          // 1) Start with a constNu of the appropriate pointer size
>> -        addUInt(Block, 0, dwarf::DW_FORM_data1,
>> +        addUInt(Block, dwarf::DW_FORM_data1,
>>                  PointerSize == 4 ? dwarf::DW_OP_const4u :
>> dwarf::DW_OP_const8u);
>>          // 2) containing the (relocated) offset of the TLS variable
>>          //    within the module's TLS block.
>> -        addExpr(Block, 0, dwarf::DW_FORM_udata, Expr);
>> +        addExpr(Block, dwarf::DW_FORM_udata, Expr);
>>        } else {
>> -        addUInt(Block, 0, dwarf::DW_FORM_data1,
>> dwarf::DW_OP_GNU_const_index);
>> -        addUInt(Block, 0, dwarf::DW_FORM_udata,
>> DU->getAddrPoolIndex(Expr));
>> +        addUInt(Block, dwarf::DW_FORM_data1,
>> dwarf::DW_OP_GNU_const_index);
>> +        addUInt(Block, dwarf::DW_FORM_udata, DU->getAddrPoolIndex(Expr));
>>        }
>>        // 3) followed by a custom OP to make the debugger do a TLS lookup.
>> -      addUInt(Block, 0, dwarf::DW_FORM_data1,
>> -              dwarf::DW_OP_GNU_push_tls_address);
>> +      addUInt(Block, dwarf::DW_FORM_data1,
>> dwarf::DW_OP_GNU_push_tls_address);
>>      } else
>>        addOpAddress(Block, Sym);
>>      // Do not create specification DIE if context is either compile unit
>> @@ -1560,13 +1573,13 @@ void CompileUnit::createGlobalVariableDI
>>        // Create specification DIE.
>>        VariableSpecDIE = new DIE(dwarf::DW_TAG_variable);
>>        addDIEEntry(VariableSpecDIE, dwarf::DW_AT_specification,
>> VariableDIE);
>> -      addBlock(VariableSpecDIE, dwarf::DW_AT_location, 0, Block);
>> +      addBlock(VariableSpecDIE, dwarf::DW_AT_location, Block);
>>        // A static member's declaration is already flagged as such.
>>        if (!SDMDecl.Verify())
>>          addFlag(VariableDIE, dwarf::DW_AT_declaration);
>>        addDie(VariableSpecDIE);
>>      } else {
>> -      addBlock(VariableDIE, dwarf::DW_AT_location, 0, Block);
>> +      addBlock(VariableDIE, dwarf::DW_AT_location, Block);
>>      }
>>      // Add the linkage name.
>>      StringRef LinkageName = GV.getLinkageName();
>> @@ -1591,12 +1604,12 @@ void CompileUnit::createGlobalVariableDI
>>      DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
>>      Value *Ptr = CE->getOperand(0);
>>      addOpAddress(Block, Asm->Mang->getSymbol(cast<GlobalValue>(Ptr)));
>> -    addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
>> +    addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
>>      SmallVector<Value *, 3> Idx(CE->op_begin() + 1, CE->op_end());
>> -    addUInt(Block, 0, dwarf::DW_FORM_udata,
>> +    addUInt(Block, dwarf::DW_FORM_udata,
>>              Asm->getDataLayout().getIndexedOffset(Ptr->getType(), Idx));
>> -    addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
>> -    addBlock(VariableDIE, dwarf::DW_AT_location, 0, Block);
>> +    addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
>> +    addBlock(VariableDIE, dwarf::DW_AT_location, Block);
>>    }
>>
>>    if (addToAccelTable) {
>> @@ -1631,12 +1644,12 @@ void CompileUnit::constructSubrangeDIE(D
>>    int64_t Count = SR.getCount();
>>
>>    if (DefaultLowerBound == -1 || LowerBound != DefaultLowerBound)
>> -    addUInt(DW_Subrange, dwarf::DW_AT_lower_bound, 0, LowerBound);
>> +    addUInt(DW_Subrange, dwarf::DW_AT_lower_bound, None, LowerBound);
>>
>>    if (Count != -1 && Count != 0)
>>      // FIXME: An unbounded array should reference the expression that
>> defines
>>      // the array.
>> -    addUInt(DW_Subrange, dwarf::DW_AT_upper_bound, 0, LowerBound + Count
>> - 1);
>> +    addUInt(DW_Subrange, dwarf::DW_AT_upper_bound, None, LowerBound +
>> Count - 1);
>>
>>    Buffer.addChild(DW_Subrange);
>>  }
>> @@ -1657,7 +1670,7 @@ void CompileUnit::constructArrayTypeDIE(
>>      // Construct an anonymous type for index type.
>>      IdxTy = new DIE(dwarf::DW_TAG_base_type);
>>      addString(IdxTy, dwarf::DW_AT_name, "int");
>> -    addUInt(IdxTy, dwarf::DW_AT_byte_size, 0, sizeof(int32_t));
>> +    addUInt(IdxTy, dwarf::DW_AT_byte_size, None, sizeof(int32_t));
>>      addUInt(IdxTy, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
>>              dwarf::DW_ATE_signed);
>>      addDie(IdxTy);
>> @@ -1787,15 +1800,16 @@ DIE *CompileUnit::createMemberDIE(DIDeri
>>    addSourceLine(MemberDie, DT);
>>
>>    DIEBlock *MemLocationDie = new (DIEValueAllocator) DIEBlock();
>> -  addUInt(MemLocationDie, 0, dwarf::DW_FORM_data1,
>> dwarf::DW_OP_plus_uconst);
>> +  addUInt(MemLocationDie, dwarf::DW_FORM_data1,
>> dwarf::DW_OP_plus_uconst);
>>
>>    uint64_t Size = DT.getSizeInBits();
>>    uint64_t FieldSize = getBaseTypeSize(DD, DT);
>>
>>    if (Size != FieldSize) {
>>      // Handle bitfield.
>> -    addUInt(MemberDie, dwarf::DW_AT_byte_size, 0, getBaseTypeSize(DD,
>> DT) >> 3);
>> -    addUInt(MemberDie, dwarf::DW_AT_bit_size, 0, DT.getSizeInBits());
>> +    addUInt(MemberDie, dwarf::DW_AT_byte_size, None,
>> +            getBaseTypeSize(DD, DT) >> 3);
>> +    addUInt(MemberDie, dwarf::DW_AT_bit_size, None, DT.getSizeInBits());
>>
>>      uint64_t Offset = DT.getOffsetInBits();
>>      uint64_t AlignMask = ~(DT.getAlignInBits() - 1);
>> @@ -1806,15 +1820,15 @@ DIE *CompileUnit::createMemberDIE(DIDeri
>>      // Maybe we need to work from the other end.
>>      if (Asm->getDataLayout().isLittleEndian())
>>        Offset = FieldSize - (Offset + Size);
>> -    addUInt(MemberDie, dwarf::DW_AT_bit_offset, 0, Offset);
>> +    addUInt(MemberDie, dwarf::DW_AT_bit_offset, None, Offset);
>>
>>      // Here WD_AT_data_member_location points to the anonymous
>>      // field that includes this bit field.
>> -    addUInt(MemLocationDie, 0, dwarf::DW_FORM_udata, FieldOffset >> 3);
>> +    addUInt(MemLocationDie, dwarf::DW_FORM_udata, FieldOffset >> 3);
>>
>>    } else
>>      // This is not a bitfield.
>> -    addUInt(MemLocationDie, 0, dwarf::DW_FORM_udata,
>> DT.getOffsetInBits() >> 3);
>> +    addUInt(MemLocationDie, dwarf::DW_FORM_udata, DT.getOffsetInBits()
>> >> 3);
>>
>>    if (DT.getTag() == dwarf::DW_TAG_inheritance && DT.isVirtual()) {
>>
>> @@ -1823,17 +1837,17 @@ DIE *CompileUnit::createMemberDIE(DIDeri
>>      // BaseAddr = ObAddr + *((*ObAddr) - Offset)
>>
>>      DIEBlock *VBaseLocationDie = new (DIEValueAllocator) DIEBlock();
>> -    addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_dup);
>> -    addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1,
>> dwarf::DW_OP_deref);
>> -    addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1,
>> dwarf::DW_OP_constu);
>> -    addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_udata,
>> DT.getOffsetInBits());
>> -    addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1,
>> dwarf::DW_OP_minus);
>> -    addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1,
>> dwarf::DW_OP_deref);
>> -    addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1,
>> dwarf::DW_OP_plus);
>> +    addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_dup);
>> +    addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
>> +    addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
>> +    addUInt(VBaseLocationDie, dwarf::DW_FORM_udata,
>> DT.getOffsetInBits());
>> +    addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_minus);
>> +    addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
>> +    addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
>>
>> -    addBlock(MemberDie, dwarf::DW_AT_data_member_location, 0,
>> VBaseLocationDie);
>> +    addBlock(MemberDie, dwarf::DW_AT_data_member_location,
>> VBaseLocationDie);
>>    } else
>> -    addBlock(MemberDie, dwarf::DW_AT_data_member_location, 0,
>> MemLocationDie);
>> +    addBlock(MemberDie, dwarf::DW_AT_data_member_location,
>> MemLocationDie);
>>
>>    if (DT.isProtected())
>>      addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
>>
>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h?rev=193091&r1=193090&r2=193091&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h (original)
>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h Mon Oct 21
>> 12:28:37 2013
>> @@ -17,6 +17,7 @@
>>  #include "DIE.h"
>>  #include "DwarfDebug.h"
>>  #include "llvm/ADT/DenseMap.h"
>> +#include "llvm/ADT/Optional.h"
>>  #include "llvm/ADT/OwningPtr.h"
>>  #include "llvm/ADT/StringMap.h"
>>  #include "llvm/DebugInfo.h"
>> @@ -166,56 +167,63 @@ public:
>>    void addDie(DIE *Buffer) { CUDie->addChild(Buffer); }
>>
>>    /// addFlag - Add a flag that is true to the DIE.
>> -  void addFlag(DIE *Die, uint16_t Attribute);
>> +  void addFlag(DIE *Die, dwarf::Attribute Attribute);
>>
>>    /// addUInt - Add an unsigned integer attribute data and value.
>>    ///
>> -  void addUInt(DIE *Die, uint16_t Attribute, uint16_t Form, uint64_t
>> Integer);
>> +  void addUInt(DIE *Die, dwarf::Attribute Attribute,
>> Optional<dwarf::Form> Form,
>> +               uint64_t Integer);
>> +
>> +  void addUInt(DIEBlock *Block, dwarf::Form Form, uint64_t Integer);
>>
>>    /// addSInt - Add an signed integer attribute data and value.
>>    ///
>> -  void addSInt(DIE *Die, uint16_t Attribute, uint16_t Form, int64_t
>> Integer);
>> +  void addSInt(DIE *Die, dwarf::Attribute Attribute,
>> Optional<dwarf::Form> Form,
>> +               int64_t Integer);
>> +
>> +  void addSInt(DIEBlock *Die, Optional<dwarf::Form> Form, int64_t
>> Integer);
>>
>>    /// addString - Add a string attribute data and value.
>>    ///
>> -  void addString(DIE *Die, uint16_t Attribute, const StringRef Str);
>> +  void addString(DIE *Die, dwarf::Attribute Attribute, const StringRef
>> Str);
>>
>>    /// addLocalString - Add a string attribute data and value.
>>    ///
>> -  void addLocalString(DIE *Die, uint16_t Attribute, const StringRef Str);
>> +  void addLocalString(DIE *Die, dwarf::Attribute Attribute, const
>> StringRef Str);
>>
>>    /// addExpr - Add a Dwarf expression attribute data and value.
>>    ///
>> -  void addExpr(DIE *Die, uint16_t Attribute, uint16_t Form, const MCExpr
>> *Expr);
>> +  void addExpr(DIEBlock *Die, dwarf::Form Form, const MCExpr *Expr);
>>
>>    /// addLabel - Add a Dwarf label attribute data and value.
>>    ///
>> -  void addLabel(DIE *Die, uint16_t Attribute, uint16_t Form,
>> +  void addLabel(DIE *Die, dwarf::Attribute Attribute, dwarf::Form Form,
>>                  const MCSymbol *Label);
>>
>> +  void addLabel(DIEBlock *Die, dwarf::Form Form, const MCSymbol *Label);
>> +
>>    /// addLabelAddress - Add a dwarf label attribute data and value using
>>    /// either DW_FORM_addr or DW_FORM_GNU_addr_index.
>>    ///
>> -  void addLabelAddress(DIE *Die, uint16_t Attribute, MCSymbol *Label);
>> +  void addLabelAddress(DIE *Die, dwarf::Attribute Attribute, MCSymbol
>> *Label);
>>
>>    /// addOpAddress - Add a dwarf op address data and value using the
>>    /// form given and an op of either DW_FORM_addr or
>> DW_FORM_GNU_addr_index.
>>    ///
>> -  void addOpAddress(DIE *Die, const MCSymbol *Label);
>> -  void addOpAddress(DIE *Die, const MCSymbolRefExpr *Label);
>> +  void addOpAddress(DIEBlock *Die, const MCSymbol *Label);
>>
>>    /// addDelta - Add a label delta attribute data and value.
>>    ///
>> -  void addDelta(DIE *Die, uint16_t Attribute, uint16_t Form, const
>> MCSymbol *Hi,
>> +  void addDelta(DIE *Die, dwarf::Attribute Attribute, dwarf::Form Form,
>> const MCSymbol *Hi,
>>                  const MCSymbol *Lo);
>>
>>    /// addDIEEntry - Add a DIE attribute data and value.
>>    ///
>> -  void addDIEEntry(DIE *Die, uint16_t Attribute, DIE *Entry);
>> +  void addDIEEntry(DIE *Die, dwarf::Attribute Attribute, DIE *Entry);
>>
>>    /// addBlock - Add block data.
>>    ///
>> -  void addBlock(DIE *Die, uint16_t Attribute, uint16_t Form, DIEBlock
>> *Block);
>> +  void addBlock(DIE *Die, dwarf::Attribute Attribute, DIEBlock *Block);
>>
>>    /// addSourceLine - Add location information to specified debug
>> information
>>    /// entry.
>> @@ -228,7 +236,7 @@ public:
>>
>>    /// addAddress - Add an address attribute to a die based on the
>> location
>>    /// provided.
>> -  void addAddress(DIE *Die, uint16_t Attribute, const MachineLocation
>> &Location,
>> +  void addAddress(DIE *Die, dwarf::Attribute Attribute, const
>> MachineLocation &Location,
>>                    bool Indirect = false);
>>
>>    /// addConstantValue - Add constant value entry in variable DIE.
>> @@ -244,17 +252,17 @@ public:
>>    void addTemplateParams(DIE &Buffer, DIArray TParams);
>>
>>    /// addRegisterOp - Add register operand.
>> -  void addRegisterOp(DIE *TheDie, unsigned Reg);
>> +  void addRegisterOp(DIEBlock *TheDie, unsigned Reg);
>>
>>    /// addRegisterOffset - Add register offset.
>> -  void addRegisterOffset(DIE *TheDie, unsigned Reg, int64_t Offset);
>> +  void addRegisterOffset(DIEBlock *TheDie, unsigned Reg, int64_t Offset);
>>
>>    /// addComplexAddress - Start with the address based on the location
>> provided,
>>    /// and generate the DWARF information necessary to find the actual
>> variable
>>    /// (navigating the extra location information encoded in the type)
>> based on
>>    /// the starting location.  Add the DWARF information to the die.
>>    ///
>> -  void addComplexAddress(const DbgVariable &DV, DIE *Die, uint16_t
>> Attribute,
>> +  void addComplexAddress(const DbgVariable &DV, DIE *Die,
>> dwarf::Attribute Attribute,
>>                           const MachineLocation &Location);
>>
>>    // FIXME: Should be reformulated in terms of addComplexAddress.
>> @@ -264,7 +272,7 @@ public:
>>    /// starting location.  Add the DWARF information to the die.
>>  Obsolete,
>>    /// please use addComplexAddress instead.
>>    ///
>> -  void addBlockByrefAddress(const DbgVariable &DV, DIE *Die, uint16_t
>> Attribute,
>> +  void addBlockByrefAddress(const DbgVariable &DV, DIE *Die,
>> dwarf::Attribute Attribute,
>>                              const MachineLocation &Location);
>>
>>    /// addVariableAddress - Add DW_AT_location attribute for a
>> @@ -278,7 +286,7 @@ public:
>>    /// addType - Add a new type attribute to the specified entity. This
>> takes
>>    /// and attribute parameter because DW_AT_friend attributes are also
>>    /// type references.
>> -  void addType(DIE *Entity, DIType Ty, uint16_t Attribute =
>> dwarf::DW_AT_type);
>> +  void addType(DIE *Entity, DIType Ty, dwarf::Attribute Attribute =
>> dwarf::DW_AT_type);
>>
>>    /// getOrCreateNameSpace - Create a DIE for DINameSpace.
>>    DIE *getOrCreateNameSpace(DINameSpace NS);
>>
>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=193091&r1=193090&r2=193091&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Mon Oct 21 12:28:37
>> 2013
>> @@ -558,10 +558,10 @@ DIE *DwarfDebug::constructInlinedScopeDI
>>
>>    // Add the call site information to the DIE.
>>    DILocation DL(Scope->getInlinedAt());
>> -  TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_file, 0,
>> +  TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_file, None,
>>                   getOrCreateSourceID(DL.getFilename(), DL.getDirectory(),
>>                                       TheCU->getUniqueID()));
>> -  TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_line, 0,
>> DL.getLineNumber());
>> +  TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_line, None,
>> DL.getLineNumber());
>>
>>    // Add name to the name table, we do this here because we're guaranteed
>>    // to have concrete versions of our DW_TAG_inlined_subprogram nodes.
>> @@ -886,8 +886,8 @@ void DwarfDebug::constructImportedEntity
>>    unsigned FileID =
>> getOrCreateSourceID(Module.getContext().getFilename(),
>>
>>  Module.getContext().getDirectory(),
>>                                          TheCU->getUniqueID());
>> -  TheCU->addUInt(IMDie, dwarf::DW_AT_decl_file, 0, FileID);
>> -  TheCU->addUInt(IMDie, dwarf::DW_AT_decl_line, 0,
>> Module.getLineNumber());
>> +  TheCU->addUInt(IMDie, dwarf::DW_AT_decl_file, None, FileID);
>> +  TheCU->addUInt(IMDie, dwarf::DW_AT_decl_line, None,
>> Module.getLineNumber());
>>    TheCU->addDIEEntry(IMDie, dwarf::DW_AT_import, EntityDie);
>>    StringRef Name = Module.getName();
>>    if (!Name.empty())
>> @@ -955,14 +955,14 @@ void DwarfDebug::computeInlinedDIEs() {
>>    for (SmallPtrSet<DIE *, 4>::iterator AI =
>> InlinedSubprogramDIEs.begin(),
>>           AE = InlinedSubprogramDIEs.end(); AI != AE; ++AI) {
>>      DIE *ISP = *AI;
>> -    FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
>> +    FirstCU->addUInt(ISP, dwarf::DW_AT_inline, None,
>> dwarf::DW_INL_inlined);
>>    }
>>    for (DenseMap<const MDNode *, DIE *>::iterator AI =
>> AbstractSPDies.begin(),
>>           AE = AbstractSPDies.end(); AI != AE; ++AI) {
>>      DIE *ISP = AI->second;
>>      if (InlinedSubprogramDIEs.count(ISP))
>>        continue;
>> -    FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
>> +    FirstCU->addUInt(ISP, dwarf::DW_AT_inline, None,
>> dwarf::DW_INL_inlined);
>>    }
>>  }
>>
>> @@ -2047,8 +2047,8 @@ void DwarfDebug::emitDIE(DIE *Die, std::
>>
>>    // Emit the DIE attribute values.
>>    for (unsigned i = 0, N = Values.size(); i < N; ++i) {
>> -    unsigned Attr = AbbrevData[i].getAttribute();
>> -    unsigned Form = AbbrevData[i].getForm();
>> +    dwarf::Attribute Attr = AbbrevData[i].getAttribute();
>> +    dwarf::Form Form = AbbrevData[i].getForm();
>>      assert(Form && "Too many attributes for DIE (check abbreviation)");
>>
>>      if (Asm->isVerbose())
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20131021/90cc1985/attachment.html>


More information about the llvm-commits mailing list