]> granicus.if.org Git - llvm/commitdiff
[dwarfdump] Remove bogus verifier error
authorJonas Devlieghere <jonas@devlieghere.com>
Wed, 3 Apr 2019 19:57:13 +0000 (19:57 +0000)
committerJonas Devlieghere <jonas@devlieghere.com>
Wed, 3 Apr 2019 19:57:13 +0000 (19:57 +0000)
The standard doesn't require a DW_TAG_variable, DW_TAG_formal_parameter
or DW_TAG_constant to A DW_AT_type attribute describing the type of the
variable. It only specifies that it *can* have one.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357628 91177308-0d34-0410-b5e6-96231b3b80d8

lib/DebugInfo/DWARF/DWARFVerifier.cpp
test/tools/llvm-dwarfdump/X86/verify_debug_info.s

index dce622d8066aaa25d2d69b6e72f430555a62f057..6f68553bb7b6429cf7123aec4ce98c68985ddc7b 100644 (file)
@@ -178,21 +178,11 @@ unsigned DWARFVerifier::verifyUnitContents(DWARFUnit &Unit) {
     if (Die.getTag() == DW_TAG_null)
       continue;
 
-    bool HasTypeAttr = false;
     for (auto AttrValue : Die.attributes()) {
       NumUnitErrors += verifyDebugInfoAttribute(Die, AttrValue);
       NumUnitErrors += verifyDebugInfoForm(Die, AttrValue);
-      HasTypeAttr |= (AttrValue.Attr == DW_AT_type);
     }
 
-    if (!HasTypeAttr && (Die.getTag() == DW_TAG_formal_parameter ||
-                         Die.getTag() == DW_TAG_variable ||
-                         Die.getTag() == DW_TAG_array_type)) {
-      error() << "DIE with tag " << TagString(Die.getTag())
-              << " is missing type attribute:\n";
-      dump(Die) << '\n';
-      NumUnitErrors++;
-    }
     NumUnitErrors += verifyDebugInfoCallSite(Die);
   }
 
@@ -621,7 +611,7 @@ unsigned DWARFVerifier::verifyDebugInfoForm(const DWARFDie &Die,
       dump(Die) << '\n';
       break;
     }
-    // Check that the index is within the bounds of the section. 
+    // Check that the index is within the bounds of the section.
     unsigned ItemSize = DieCU->getDwarfStringOffsetsByteSize();
     // Use a 64-bit type to calculate the offset to guard against overflow.
     uint64_t Offset =
index e3eae9b986f5fa5e2aeefe6041f4cefd114e1dfd..96ee933dbd1ee92318e9140477e638025ba0a923 100644 (file)
 # CHECK-NEXT: DW_AT_prototyped [DW_FORM_flag_present]   (true)
 # CHECK-NEXT: DW_AT_type [DW_FORM_ref4] (cu + 0x0052 => {0x00000052} "")
 # CHECK-NEXT: DW_AT_external [DW_FORM_flag_present]     (true){{[[:space:]]}}
-# CHECK-NEXT: error: DIE with tag DW_TAG_variable is missing type attribute:{{[[:space:]]}}
-# CHECK-NEXT: 0x00000044: DW_TAG_variable [3]
-# CHECK-NEXT: DW_AT_location [DW_FORM_exprloc]  (DW_OP_fbreg -8)
-# CHECK-NEXT: DW_AT_name [DW_FORM_strp] ( .debug_str[0x0000006a] = "a")
-# CHECK-NEXT: DW_AT_decl_file [DW_FORM_data1]   (0x01)
-# CHECK-NEXT: DW_AT_decl_line [DW_FORM_data1]   (2)
-# CHECK-NEXT: DW_AT_use_location [DW_FORM_ref4] (cu + 0x0053 => {0x00000053}){{[[:space:]]}}
 # CHECK-NEXT: error: Compilation unit root DIE is not a unit DIE: DW_TAG_null.
 # CHECK-NEXT: error: Compilation unit type (DW_UT_compile) and root DIE (DW_TAG_null) do not match.
 # CHECK-NEXT: error: Units[2] - start offset: 0x00000068