<div dir="ltr">Please mention in revert commit messages the reason for the revert - handy for spectators and when looking back over the history to see why a change might be problematic, etc.</div><br><div class="gmail_quote"><div dir="ltr">On Thu, Sep 14, 2017 at 3:50 AM Jonas Devlieghere via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: jdevlieghere<br>
Date: Thu Sep 14 03:49:15 2017<br>
New Revision: 313253<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=313253&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=313253&view=rev</a><br>
Log:<br>
Revert "[dwarfdump] Add DWARF verifiers for address ranges"<br>
<br>
This reverts commit r313250.<br>
<br>
Modified:<br>
    llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDebugRangeList.h<br>
    llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDie.h<br>
    llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFVerifier.h<br>
    llvm/trunk/lib/DebugInfo/DWARF/DWARFVerifier.cpp<br>
    llvm/trunk/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp<br>
<br>
Modified: llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDebugRangeList.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDebugRangeList.h?rev=313253&r1=313252&r2=313253&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDebugRangeList.h?rev=313253&r1=313252&r2=313253&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDebugRangeList.h (original)<br>
+++ llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDebugRangeList.h Thu Sep 14 03:49:15 2017<br>
@@ -25,38 +25,8 @@ struct DWARFAddressRange {<br>
   uint64_t LowPC;<br>
   uint64_t HighPC;<br>
   uint64_t SectionIndex;<br>
-<br>
-  DWARFAddressRange() = default;<br>
-<br>
-  /// Used for unit testing.<br>
-  DWARFAddressRange(uint64_t LowPC, uint64_t HighPC, uint64_t SectionIndex = 0)<br>
-      : LowPC(LowPC), HighPC(HighPC), SectionIndex(SectionIndex) {}<br>
-<br>
-  /// Returns true if LowPC is smaller or equal to HighPC. This accounts for<br>
-  /// dead-stripped ranges.<br>
-  bool valid() const { return LowPC <= HighPC; }<br>
-<br>
-  /// Returns true if [LowPC, HighPC) intersects with [RHS.LowPC, RHS.HighPC).<br>
-  bool intersects(const DWARFAddressRange &RHS) const {<br>
-    // Empty ranges can't intersect.<br>
-    if (LowPC == HighPC || RHS.LowPC == RHS.HighPC)<br>
-      return false;<br>
-    return (LowPC < RHS.HighPC) && (HighPC > RHS.LowPC);<br>
-  }<br>
-<br>
-  /// Returns true if [LowPC, HighPC) fully contains [RHS.LowPC, RHS.HighPC).<br>
-  bool contains(const DWARFAddressRange &RHS) const {<br>
-    if (LowPC <= RHS.LowPC && RHS.LowPC <= HighPC)<br>
-      return LowPC <= RHS.HighPC && RHS.HighPC <= HighPC;<br>
-    return false;<br>
-  }<br>
 };<br>
<br>
-static inline bool operator<(const DWARFAddressRange &LHS,<br>
-                             const DWARFAddressRange &RHS) {<br>
-  return std::tie(LHS.LowPC, LHS.HighPC) < std::tie(RHS.LowPC, RHS.HighPC);<br>
-}<br>
-<br>
 /// DWARFAddressRangesVector - represents a set of absolute address ranges.<br>
 using DWARFAddressRangesVector = std::vector<DWARFAddressRange>;<br>
<br>
<br>
Modified: llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDie.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDie.h?rev=313253&r1=313252&r2=313253&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDie.h?rev=313253&r1=313252&r2=313253&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDie.h (original)<br>
+++ llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDie.h Thu Sep 14 03:49:15 2017<br>
@@ -308,10 +308,6 @@ inline bool operator!=(const DWARFDie &L<br>
   return !(LHS == RHS);<br>
 }<br>
<br>
-inline bool operator<(const DWARFDie &LHS, const DWARFDie &RHS) {<br>
-  return LHS.getOffset() < RHS.getOffset();<br>
-}<br>
-<br>
 class DWARFDie::iterator : public iterator_facade_base<iterator,<br>
                                                       std::forward_iterator_tag,<br>
                                                       const DWARFDie> {<br>
<br>
Modified: llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFVerifier.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFVerifier.h?rev=313253&r1=313252&r2=313253&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFVerifier.h?rev=313253&r1=313252&r2=313253&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFVerifier.h (original)<br>
+++ llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFVerifier.h Thu Sep 14 03:49:15 2017<br>
@@ -11,8 +11,6 @@<br>
 #define LLVM_DEBUGINFO_DWARF_DWARFVERIFIER_H<br>
<br>
 #include "llvm/DebugInfo/DIContext.h"<br>
-#include "llvm/DebugInfo/DWARF/DWARFDebugRangeList.h"<br>
-#include "llvm/DebugInfo/DWARF/DWARFDie.h"<br>
<br>
 #include <cstdint><br>
 #include <map><br>
@@ -32,61 +30,6 @@ struct DWARFSection;<br>
<br>
 /// A class that verifies DWARF debug information given a DWARF Context.<br>
 class DWARFVerifier {<br>
-public:<br>
-  /// A class that keeps the address range information for a single DIE.<br>
-  struct DieRangeInfo {<br>
-    DWARFDie Die;<br>
-<br>
-    /// Sorted DWARFAddressRanges.<br>
-    std::vector<DWARFAddressRange> Ranges;<br>
-<br>
-    /// Sorted DWARFAddressRangeInfo.<br>
-    std::set<DieRangeInfo> Children;<br>
-<br>
-    DieRangeInfo() = default;<br>
-    DieRangeInfo(DWARFDie Die) : Die(Die) {}<br>
-<br>
-    /// Used for unit testing.<br>
-    DieRangeInfo(std::vector<DWARFAddressRange> Ranges)<br>
-        : Ranges(std::move(Ranges)) {}<br>
-<br>
-    typedef std::vector<DWARFAddressRange>::const_iterator<br>
-        address_range_iterator;<br>
-    typedef std::set<DieRangeInfo>::const_iterator die_range_info_iterator;<br>
-<br>
-    /// Inserts the address range. If the range overlaps with an existing<br>
-    /// range, the range is *not* added and an iterator to the overlapping<br>
-    /// range is returned.<br>
-    ///<br>
-    /// This is used for finding overlapping ranges within the same DIE.<br>
-    address_range_iterator insert(const DWARFAddressRange &R);<br>
-<br>
-    /// Finds an address range in the sorted vector of ranges.<br>
-    address_range_iterator findRange(const DWARFAddressRange &R) const {<br>
-      const auto Begin = Ranges.cbegin();<br>
-      const auto End = Ranges.cend();<br>
-      auto Iter = std::upper_bound(Begin, End, R);<br>
-      if (Iter != Begin)<br>
-        --Iter;<br>
-      return Iter;<br>
-    }<br>
-<br>
-    /// Inserts the address range info. If any of its ranges overlaps with a<br>
-    /// range in an existing range info, the range info is *not* added and an<br>
-    /// iterator to the overlapping range info.<br>
-    ///<br>
-    /// This is used for finding overlapping children of the same DIE.<br>
-    die_range_info_iterator insert(const DieRangeInfo &RI);<br>
-<br>
-    /// Return true if ranges in this object contains all ranges within RHS.<br>
-    bool contains(const DieRangeInfo &RHS) const;<br>
-<br>
-    /// Return true if any range in this object intersects with any range in<br>
-    /// RHS.<br>
-    bool intersects(const DieRangeInfo &RHS) const;<br>
-  };<br>
-<br>
-private:<br>
   raw_ostream &OS;<br>
   DWARFContext &DCtx;<br>
   DIDumpOptions DumpOpts;<br>
@@ -141,7 +84,7 @@ private:<br>
   /// - cases in which lowPC >= highPC<br>
   ///<br>
   /// \returns Number of errors that occured during verification.<br>
-  unsigned verifyDieRanges(const DWARFDie &Die, DieRangeInfo &ParentRI);<br>
+  unsigned verifyDieRanges(const DWARFDie &Die);<br>
<br>
   /// Verifies the attribute's DWARF attribute and its value.<br>
   ///<br>
@@ -253,11 +196,6 @@ public:<br>
   bool handleAccelTables();<br>
 };<br>
<br>
-static inline bool operator<(const DWARFVerifier::DieRangeInfo &LHS,<br>
-                             const DWARFVerifier::DieRangeInfo &RHS) {<br>
-  return std::tie(LHS.Ranges, LHS.Die) < std::tie(RHS.Ranges, RHS.Die);<br>
-}<br>
-<br>
 } // end namespace llvm<br>
<br>
 #endif // LLVM_DEBUGINFO_DWARF_DWARFCONTEXT_H<br>
<br>
Modified: llvm/trunk/lib/DebugInfo/DWARF/DWARFVerifier.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFVerifier.cpp?rev=313253&r1=313252&r2=313253&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFVerifier.cpp?rev=313253&r1=313252&r2=313253&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/DebugInfo/DWARF/DWARFVerifier.cpp (original)<br>
+++ llvm/trunk/lib/DebugInfo/DWARF/DWARFVerifier.cpp Thu Sep 14 03:49:15 2017<br>
@@ -24,83 +24,6 @@ using namespace llvm;<br>
 using namespace dwarf;<br>
 using namespace object;<br>
<br>
-DWARFVerifier::DieRangeInfo::address_range_iterator<br>
-DWARFVerifier::DieRangeInfo::insert(const DWARFAddressRange &R) {<br>
-  const auto Begin = Ranges.cbegin();<br>
-  const auto End = Ranges.cend();<br>
-  auto Pos = std::lower_bound(Begin, End, R);<br>
-<br>
-  if (Pos != End) {<br>
-    if (Pos->intersects(R))<br>
-      return Pos;<br>
-    if (Pos != Begin) {<br>
-      auto Iter = Pos - 1;<br>
-      if (Iter->intersects(R))<br>
-        return Iter;<br>
-    }<br>
-  }<br>
-<br>
-  Ranges.insert(Pos, R);<br>
-  return Ranges.cend();<br>
-}<br>
-<br>
-DWARFVerifier::DieRangeInfo::die_range_info_iterator<br>
-DWARFVerifier::DieRangeInfo::insert(const DieRangeInfo &RI) {<br>
-  const auto End = Children.end();<br>
-  auto Iter = Children.begin();<br>
-  while (Iter != End) {<br>
-    if (Iter->intersects(RI))<br>
-      return Iter;<br>
-    ++Iter;<br>
-  }<br>
-  Children.insert(RI);<br>
-  return Children.cend();<br>
-}<br>
-<br>
-bool DWARFVerifier::DieRangeInfo::contains(const DieRangeInfo &RHS) const {<br>
-  // Both list of ranges are sorted so we can make this fast.<br>
-<br>
-  if (Ranges.empty() || RHS.Ranges.empty())<br>
-    return false;<br>
-<br>
-  // Since the ranges are sorted we can advance where we start searching with<br>
-  // this object's ranges as we traverse RHS.Ranges.<br>
-  const auto End = Ranges.cend();<br>
-  auto Iter = findRange(RHS.Ranges.front());<br>
-<br>
-  // Now linearly walk the ranges in this object and see if they contain each<br>
-  // ranges from RHS.Ranges.<br>
-  for (const auto &R : RHS.Ranges) {<br>
-    while (Iter != End) {<br>
-      if (Iter->contains(R))<br>
-        break;<br>
-      ++Iter;<br>
-    }<br>
-    if (Iter == End)<br>
-      return false;<br>
-  }<br>
-  return true;<br>
-}<br>
-<br>
-bool DWARFVerifier::DieRangeInfo::intersects(const DieRangeInfo &RHS) const {<br>
-  if (Ranges.empty() || RHS.Ranges.empty())<br>
-    return false;<br>
-<br>
-  const auto End = Ranges.end();<br>
-  auto Iter = findRange(RHS.Ranges.front());<br>
-  for (const auto &R : RHS.Ranges) {<br>
-    if (R.HighPC <= Iter->LowPC)<br>
-      continue;<br>
-    while (Iter != End) {<br>
-      if (Iter->intersects(R))<br>
-        return true;<br>
-      ++Iter;<br>
-    }<br>
-  }<br>
-<br>
-  return false;<br>
-}<br>
-<br>
 bool DWARFVerifier::verifyUnitHeader(const DWARFDataExtractor DebugInfoData,<br>
                                      uint32_t *Offset, unsigned UnitIndex,<br>
                                      uint8_t &UnitType, bool &isUnitDWARF64) {<br>
@@ -171,15 +94,12 @@ bool DWARFVerifier::verifyUnitContents(D<br>
     auto Die = Unit.getDIEAtIndex(I);<br>
     if (Die.getTag() == DW_TAG_null)<br>
       continue;<br>
+    NumUnitErrors += verifyDieRanges(Die);<br>
     for (auto AttrValue : Die.attributes()) {<br>
       NumUnitErrors += verifyDebugInfoAttribute(Die, AttrValue);<br>
       NumUnitErrors += verifyDebugInfoForm(Die, AttrValue);<br>
     }<br>
   }<br>
-<br>
-  DieRangeInfo RI;<br>
-  DWARFDie Die = Unit.getUnitDIE(/* ExtractUnitDIEOnly = */ false);<br>
-  NumUnitErrors += verifyDieRanges(Die, RI);<br>
   return NumUnitErrors == 0;<br>
 }<br>
<br>
@@ -290,67 +210,16 @@ bool DWARFVerifier::handleDebugInfo() {<br>
   return (isHeaderChainValid && NumDebugInfoErrors == 0);<br>
 }<br>
<br>
-unsigned DWARFVerifier::verifyDieRanges(const DWARFDie &Die,<br>
-                                        DieRangeInfo &ParentRI) {<br>
+unsigned DWARFVerifier::verifyDieRanges(const DWARFDie &Die) {<br>
   unsigned NumErrors = 0;<br>
-<br>
-  if (!Die.isValid())<br>
-    return NumErrors;<br>
-<br>
-  DWARFAddressRangesVector Ranges = Die.getAddressRanges();<br>
-<br>
-  // Build RI for this DIE and check that ranges within this DIE do not<br>
-  // overlap.<br>
-  DieRangeInfo RI(Die);<br>
-  for (auto Range : Ranges) {<br>
-    if (!Range.valid()) {<br>
+  for (auto Range : Die.getAddressRanges()) {<br>
+    if (Range.LowPC >= Range.HighPC) {<br>
       ++NumErrors;<br>
       OS << format("error: Invalid address range [0x%08" PRIx64<br>
                    " - 0x%08" PRIx64 "].\n",<br>
                    Range.LowPC, Range.HighPC);<br>
-      continue;<br>
     }<br>
-<br>
-    // Verify that ranges don't intersect.<br>
-    const auto IntersectingRange = RI.insert(Range);<br>
-    if (IntersectingRange != RI.Ranges.cend()) {<br>
-      ++NumErrors;<br>
-      OS << format("error: DIE has overlapping address ranges: [0x%08" PRIx64<br>
-                   " - 0x%08" PRIx64 "] and [0x%08" PRIx64 " - 0x%08" PRIx64<br>
-                   "].\n",<br>
-                   Range.LowPC, Range.HighPC, IntersectingRange->LowPC,<br>
-                   IntersectingRange->HighPC);<br>
-      break;<br>
-    }<br>
-  }<br>
-<br>
-  // Verify that children don't intersect.<br>
-  const auto IntersectingChild = ParentRI.insert(RI);<br>
-  if (IntersectingChild != ParentRI.Children.cend()) {<br>
-    ++NumErrors;<br>
-    OS << "error: DIEs have overlapping address ranges:";<br>
-    Die.dump(OS, 0);<br>
-    IntersectingChild->Die.dump(OS, 0);<br>
-    OS << "\n";<br>
   }<br>
-<br>
-  // Verify that ranges are contained within their parent.<br>
-  bool ShouldBeContained = !Ranges.empty() && !ParentRI.Ranges.empty() &&<br>
-                           !(Die.getTag() == DW_TAG_subprogram &&<br>
-                             ParentRI.Die.getTag() == DW_TAG_subprogram);<br>
-  if (ShouldBeContained && !ParentRI.contains(RI)) {<br>
-    ++NumErrors;<br>
-    OS << "error: DIE address ranges are not "<br>
-          "contained in its parent's ranges:";<br>
-    Die.dump(OS, 0);<br>
-    ParentRI.Die.dump(OS, 0);<br>
-    OS << "\n";<br>
-  }<br>
-<br>
-  // Recursively check children.<br>
-  for (DWARFDie Child : Die)<br>
-    NumErrors += verifyDieRanges(Child, RI);<br>
-<br>
   return NumErrors;<br>
 }<br>
<br>
<br>
Modified: llvm/trunk/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp?rev=313253&r1=313252&r2=313253&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp?rev=313253&r1=313252&r2=313253&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp (original)<br>
+++ llvm/trunk/unittests/DebugInfo/DWARF/DWARFDebugInfoTest.cpp Thu Sep 14 03:49:15 2017<br>
@@ -20,7 +20,6 @@<br>
 #include "llvm/DebugInfo/DWARF/DWARFContext.h"<br>
 #include "llvm/DebugInfo/DWARF/DWARFDie.h"<br>
 #include "llvm/DebugInfo/DWARF/DWARFFormValue.h"<br>
-#include "llvm/DebugInfo/DWARF/DWARFVerifier.h"<br>
 #include "llvm/MC/MCContext.h"<br>
 #include "llvm/MC/MCSectionELF.h"<br>
 #include "llvm/MC/MCStreamer.h"<br>
@@ -1673,15 +1672,9 @@ void VerifyError(DWARFContext &DwarfCont<br>
   EXPECT_TRUE(Str.str().contains(Error));<br>
 }<br>
<br>
-void VerifySuccess(DWARFContext &DwarfContext) {<br>
-  SmallString<1024> Str;<br>
-  raw_svector_ostream Strm(Str);<br>
-  EXPECT_TRUE(DwarfContext.verify(Strm, DIDT_All));<br>
-}<br>
-<br>
 TEST(DWARFDebugInfo, TestDwarfVerifyInvalidCURef) {<br>
   // Create a single compile unit with a single function that has a DW_AT_type<br>
-  // that is CU relative. The CU offset is not valid because it is larger than<br>
+  // that is CU relative. The CU offset is not valid becuase it is larger than<br>
   // the compile unit itself.<br>
<br>
   const char *yamldata = R"(<br>
@@ -2354,643 +2347,4 @@ TEST(DWARFDebugInfo, TestErrorReportingP<br>
   EXPECT_TRUE(Errors == 1);<br>
 }<br>
<br>
-TEST(DWARFDebugInfo, TestDwarfVerifyCURangesIncomplete) {<br>
-  // Create a single compile unit with a single function. The compile<br>
-  // unit has a DW_AT_ranges attribute that doesn't fully contain the<br>
-  // address range of the function. The verification should fail due to<br>
-  // the CU ranges not containing all of the address ranges of all of the<br>
-  // functions.<br>
-  StringRef yamldata = R"(<br>
-    debug_str:<br>
-      - ''<br>
-      - /tmp/main.c<br>
-    debug_abbrev:<br>
-      - Code:            0x00000001<br>
-        Tag:             DW_TAG_compile_unit<br>
-        Children:        DW_CHILDREN_yes<br>
-        Attributes:<br>
-          - Attribute:       DW_AT_low_pc<br>
-            Form:            DW_FORM_addr<br>
-          - Attribute:       DW_AT_high_pc<br>
-            Form:            DW_FORM_addr<br>
-          - Attribute:       DW_AT_name<br>
-            Form:            DW_FORM_strp<br>
-      - Code:            0x00000002<br>
-        Tag:             DW_TAG_subprogram<br>
-        Children:        DW_CHILDREN_no<br>
-        Attributes:<br>
-          - Attribute:       DW_AT_low_pc<br>
-            Form:            DW_FORM_addr<br>
-          - Attribute:       DW_AT_high_pc<br>
-            Form:            DW_FORM_addr<br>
-    debug_info:<br>
-      - Length:<br>
-          TotalLength:     46<br>
-        Version:         4<br>
-        AbbrOffset:      0<br>
-        AddrSize:        8<br>
-        Entries:<br>
-          - AbbrCode:        0x00000001<br>
-            Values:<br>
-              - Value:           0x0000000000001000<br>
-              - Value:           0x0000000000001500<br>
-              - Value:           0x0000000000000001<br>
-          - AbbrCode:        0x00000002<br>
-            Values:<br>
-              - Value:           0x0000000000001000<br>
-              - Value:           0x0000000000002000<br>
-          - AbbrCode:        0x00000000<br>
-            Values:<br>
-  )";<br>
-  auto ErrOrSections = DWARFYAML::EmitDebugSections(yamldata);<br>
-  ASSERT_TRUE((bool)ErrOrSections);<br>
-  std::unique_ptr<DWARFContext> DwarfContext =<br>
-      DWARFContext::create(*ErrOrSections, 8);<br>
-  VerifyError(*DwarfContext, "error: DIE address ranges are not "<br>
-                             "contained in its parent's ranges:");<br>
-}<br>
-<br>
-TEST(DWARFDebugInfo, TestDwarfVerifyLexicalBlockRanges) {<br>
-  // Create a single compile unit with a single function that has a lexical<br>
-  // block whose address range is not contained in the function address range.<br>
-  StringRef yamldata = R"(<br>
-    debug_str:<br>
-      - ''<br>
-      - /tmp/main.c<br>
-      - main<br>
-    debug_abbrev:<br>
-      - Code:            0x00000001<br>
-        Tag:             DW_TAG_compile_unit<br>
-        Children:        DW_CHILDREN_yes<br>
-        Attributes:<br>
-          - Attribute:       DW_AT_name<br>
-            Form:            DW_FORM_strp<br>
-      - Code:            0x00000002<br>
-        Tag:             DW_TAG_subprogram<br>
-        Children:        DW_CHILDREN_yes<br>
-        Attributes:<br>
-          - Attribute:       DW_AT_name<br>
-            Form:            DW_FORM_strp<br>
-          - Attribute:       DW_AT_low_pc<br>
-            Form:            DW_FORM_addr<br>
-          - Attribute:       DW_AT_high_pc<br>
-            Form:            DW_FORM_addr<br>
-      - Code:            0x00000003<br>
-        Tag:             DW_TAG_lexical_block<br>
-        Children:        DW_CHILDREN_no<br>
-        Attributes:<br>
-          - Attribute:       DW_AT_low_pc<br>
-            Form:            DW_FORM_addr<br>
-          - Attribute:       DW_AT_high_pc<br>
-            Form:            DW_FORM_addr<br>
-    debug_info:<br>
-      - Length:<br>
-          TotalLength:     52<br>
-        Version:         4<br>
-        AbbrOffset:      0<br>
-        AddrSize:        8<br>
-        Entries:<br>
-          - AbbrCode:        0x00000001<br>
-            Values:<br>
-              - Value:           0x0000000000000001<br>
-          - AbbrCode:        0x00000002<br>
-            Values:<br>
-              - Value:           0x000000000000000D<br>
-              - Value:           0x0000000000001000<br>
-              - Value:           0x0000000000002000<br>
-          - AbbrCode:        0x00000003<br>
-            Values:<br>
-              - Value:           0x0000000000001000<br>
-              - Value:           0x0000000000002001<br>
-          - AbbrCode:        0x00000000<br>
-            Values:<br>
-          - AbbrCode:        0x00000000<br>
-            Values:<br>
-  )";<br>
-  auto ErrOrSections = DWARFYAML::EmitDebugSections(yamldata);<br>
-  ASSERT_TRUE((bool)ErrOrSections);<br>
-  std::unique_ptr<DWARFContext> DwarfContext =<br>
-      DWARFContext::create(*ErrOrSections, 8);<br>
-  VerifyError(*DwarfContext, "error: DIE address ranges are not "<br>
-                             "contained in its parent's ranges:");<br>
-}<br>
-<br>
-TEST(DWARFDebugInfo, TestDwarfVerifyOverlappingFunctionRanges) {<br>
-  // Create a single compile unit with a two functions that have overlapping<br>
-  // address ranges.<br>
-  StringRef yamldata = R"(<br>
-    debug_str:<br>
-      - ''<br>
-      - /tmp/main.c<br>
-      - main<br>
-      - foo<br>
-    debug_abbrev:<br>
-      - Code:            0x00000001<br>
-        Tag:             DW_TAG_compile_unit<br>
-        Children:        DW_CHILDREN_yes<br>
-        Attributes:<br>
-          - Attribute:       DW_AT_name<br>
-            Form:            DW_FORM_strp<br>
-      - Code:            0x00000002<br>
-        Tag:             DW_TAG_subprogram<br>
-        Children:        DW_CHILDREN_no<br>
-        Attributes:<br>
-          - Attribute:       DW_AT_name<br>
-            Form:            DW_FORM_strp<br>
-          - Attribute:       DW_AT_low_pc<br>
-            Form:            DW_FORM_addr<br>
-          - Attribute:       DW_AT_high_pc<br>
-            Form:            DW_FORM_addr<br>
-    debug_info:<br>
-      - Length:<br>
-          TotalLength:     55<br>
-        Version:         4<br>
-        AbbrOffset:      0<br>
-        AddrSize:        8<br>
-        Entries:<br>
-          - AbbrCode:        0x00000001<br>
-            Values:<br>
-              - Value:           0x0000000000000001<br>
-          - AbbrCode:        0x00000002<br>
-            Values:<br>
-              - Value:           0x000000000000000D<br>
-              - Value:           0x0000000000001000<br>
-              - Value:           0x0000000000002000<br>
-          - AbbrCode:        0x00000002<br>
-            Values:<br>
-              - Value:           0x0000000000000012<br>
-              - Value:           0x0000000000001FFF<br>
-              - Value:           0x0000000000002000<br>
-          - AbbrCode:        0x00000000<br>
-            Values:<br>
-  )";<br>
-  auto ErrOrSections = DWARFYAML::EmitDebugSections(yamldata);<br>
-  ASSERT_TRUE((bool)ErrOrSections);<br>
-  std::unique_ptr<DWARFContext> DwarfContext =<br>
-      DWARFContext::create(*ErrOrSections, 8);<br>
-  VerifyError(*DwarfContext, "error: DIEs have overlapping address ranges:");<br>
-}<br>
-<br>
-TEST(DWARFDebugInfo, TestDwarfVerifyOverlappingLexicalBlockRanges) {<br>
-  // Create a single compile unit with a one function that has two lexical<br>
-  // blocks with overlapping address ranges.<br>
-  StringRef yamldata = R"(<br>
-    debug_str:<br>
-      - ''<br>
-      - /tmp/main.c<br>
-      - main<br>
-    debug_abbrev:<br>
-      - Code:            0x00000001<br>
-        Tag:             DW_TAG_compile_unit<br>
-        Children:        DW_CHILDREN_yes<br>
-        Attributes:<br>
-          - Attribute:       DW_AT_low_pc<br>
-            Form:            DW_FORM_addr<br>
-          - Attribute:       DW_AT_high_pc<br>
-            Form:            DW_FORM_addr<br>
-          - Attribute:       DW_AT_name<br>
-            Form:            DW_FORM_strp<br>
-      - Code:            0x00000002<br>
-        Tag:             DW_TAG_subprogram<br>
-        Children:        DW_CHILDREN_yes<br>
-        Attributes:<br>
-          - Attribute:       DW_AT_name<br>
-            Form:            DW_FORM_strp<br>
-          - Attribute:       DW_AT_low_pc<br>
-            Form:            DW_FORM_addr<br>
-          - Attribute:       DW_AT_high_pc<br>
-            Form:            DW_FORM_addr<br>
-      - Code:            0x00000003<br>
-        Tag:             DW_TAG_lexical_block<br>
-        Children:        DW_CHILDREN_no<br>
-        Attributes:<br>
-          - Attribute:       DW_AT_low_pc<br>
-            Form:            DW_FORM_addr<br>
-          - Attribute:       DW_AT_high_pc<br>
-            Form:            DW_FORM_addr<br>
-    debug_info:<br>
-      - Length:<br>
-          TotalLength:     85<br>
-        Version:         4<br>
-        AbbrOffset:      0<br>
-        AddrSize:        8<br>
-        Entries:<br>
-          - AbbrCode:        0x00000001<br>
-            Values:<br>
-              - Value:           0x0000000000001000<br>
-              - Value:           0x0000000000002000<br>
-              - Value:           0x0000000000000001<br>
-          - AbbrCode:        0x00000002<br>
-            Values:<br>
-              - Value:           0x000000000000000D<br>
-              - Value:           0x0000000000001000<br>
-              - Value:           0x0000000000002000<br>
-          - AbbrCode:        0x00000003<br>
-            Values:<br>
-              - Value:           0x0000000000001100<br>
-              - Value:           0x0000000000001300<br>
-          - AbbrCode:        0x00000003<br>
-            Values:<br>
-              - Value:           0x00000000000012FF<br>
-              - Value:           0x0000000000001300<br>
-          - AbbrCode:        0x00000000<br>
-            Values:<br>
-          - AbbrCode:        0x00000000<br>
-            Values:<br>
-  )";<br>
-  auto ErrOrSections = DWARFYAML::EmitDebugSections(yamldata);<br>
-  ASSERT_TRUE((bool)ErrOrSections);<br>
-  std::unique_ptr<DWARFContext> DwarfContext =<br>
-      DWARFContext::create(*ErrOrSections, 8);<br>
-  VerifyError(*DwarfContext, "error: DIEs have overlapping address ranges:");<br>
-}<br>
-<br>
-TEST(DWARFDebugInfo, TestDwarfVerifyInvalidDIERange) {<br>
-  // Create a single compile unit with a single function that has an invalid<br>
-  // address range where the high PC is smaller than the low PC.<br>
-  StringRef yamldata = R"(<br>
-    debug_str:<br>
-      - ''<br>
-      - /tmp/main.c<br>
-      - main<br>
-    debug_abbrev:<br>
-      - Code:            0x00000001<br>
-        Tag:             DW_TAG_compile_unit<br>
-        Children:        DW_CHILDREN_yes<br>
-        Attributes:<br>
-          - Attribute:       DW_AT_name<br>
-            Form:            DW_FORM_strp<br>
-      - Code:            0x00000002<br>
-        Tag:             DW_TAG_subprogram<br>
-        Children:        DW_CHILDREN_no<br>
-        Attributes:<br>
-          - Attribute:       DW_AT_name<br>
-            Form:            DW_FORM_strp<br>
-          - Attribute:       DW_AT_low_pc<br>
-            Form:            DW_FORM_addr<br>
-          - Attribute:       DW_AT_high_pc<br>
-            Form:            DW_FORM_addr<br>
-    debug_info:<br>
-      - Length:<br>
-          TotalLength:     34<br>
-        Version:         4<br>
-        AbbrOffset:      0<br>
-        AddrSize:        8<br>
-        Entries:<br>
-          - AbbrCode:        0x00000001<br>
-            Values:<br>
-              - Value:           0x0000000000000001<br>
-          - AbbrCode:        0x00000002<br>
-            Values:<br>
-              - Value:           0x000000000000000D<br>
-              - Value:           0x0000000000001000<br>
-              - Value:           0x0000000000000900<br>
-          - AbbrCode:        0x00000000<br>
-            Values:<br>
-  )";<br>
-  auto ErrOrSections = DWARFYAML::EmitDebugSections(yamldata);<br>
-  ASSERT_TRUE((bool)ErrOrSections);<br>
-  std::unique_ptr<DWARFContext> DwarfContext =<br>
-      DWARFContext::create(*ErrOrSections, 8);<br>
-  VerifyError(*DwarfContext, "error: Invalid address range");<br>
-}<br>
-<br>
-TEST(DWARFDebugInfo, TestDwarfVerifyElidedDoesntFail) {<br>
-  // Create a single compile unit with two functions: one that has a valid range<br>
-  // and one whose low and high PC are the same. When the low and high PC are<br>
-  // the same, this indicates the function was dead code stripped. We want to<br>
-  // ensure that verification succeeds.<br>
-  StringRef yamldata = R"(<br>
-    debug_str:<br>
-      - ''<br>
-      - /tmp/main.c<br>
-      - main<br>
-      - elided<br>
-    debug_abbrev:<br>
-      - Code:            0x00000001<br>
-        Tag:             DW_TAG_compile_unit<br>
-        Children:        DW_CHILDREN_yes<br>
-        Attributes:<br>
-          - Attribute:       DW_AT_low_pc<br>
-            Form:            DW_FORM_addr<br>
-          - Attribute:       DW_AT_high_pc<br>
-            Form:            DW_FORM_addr<br>
-          - Attribute:       DW_AT_name<br>
-            Form:            DW_FORM_strp<br>
-      - Code:            0x00000002<br>
-        Tag:             DW_TAG_subprogram<br>
-        Children:        DW_CHILDREN_no<br>
-        Attributes:<br>
-          - Attribute:       DW_AT_name<br>
-            Form:            DW_FORM_strp<br>
-          - Attribute:       DW_AT_low_pc<br>
-            Form:            DW_FORM_addr<br>
-          - Attribute:       DW_AT_high_pc<br>
-            Form:            DW_FORM_addr<br>
-    debug_info:<br>
-      - Length:<br>
-          TotalLength:     71<br>
-        Version:         4<br>
-        AbbrOffset:      0<br>
-        AddrSize:        8<br>
-        Entries:<br>
-          - AbbrCode:        0x00000001<br>
-            Values:<br>
-              - Value:           0x0000000000001000<br>
-              - Value:           0x0000000000002000<br>
-              - Value:           0x0000000000000001<br>
-          - AbbrCode:        0x00000002<br>
-            Values:<br>
-              - Value:           0x000000000000000D<br>
-              - Value:           0x0000000000001000<br>
-              - Value:           0x0000000000002000<br>
-          - AbbrCode:        0x00000002<br>
-            Values:<br>
-              - Value:           0x0000000000000012<br>
-              - Value:           0x0000000000002000<br>
-              - Value:           0x0000000000002000<br>
-          - AbbrCode:        0x00000000<br>
-            Values:<br>
-  )";<br>
-  auto ErrOrSections = DWARFYAML::EmitDebugSections(yamldata);<br>
-  ASSERT_TRUE((bool)ErrOrSections);<br>
-  std::unique_ptr<DWARFContext> DwarfContext =<br>
-      DWARFContext::create(*ErrOrSections, 8);<br>
-  VerifySuccess(*DwarfContext);<br>
-}<br>
-<br>
-TEST(DWARFDebugInfo, TestDwarfVerifyNestedFunctions) {<br>
-  // Create a single compile unit with a nested function which is not contained<br>
-  // in its parent. Although LLVM doesn't generate this, it is valid accoridng<br>
-  // to the DWARF standard.<br>
-  StringRef yamldata = R"(<br>
-    debug_str:<br>
-      - ''<br>
-      - /tmp/main.c<br>
-      - main<br>
-      - nested<br>
-    debug_abbrev:<br>
-      - Code:            0x00000001<br>
-        Tag:             DW_TAG_compile_unit<br>
-        Children:        DW_CHILDREN_yes<br>
-        Attributes:<br>
-          - Attribute:       DW_AT_low_pc<br>
-            Form:            DW_FORM_addr<br>
-          - Attribute:       DW_AT_high_pc<br>
-            Form:            DW_FORM_addr<br>
-          - Attribute:       DW_AT_name<br>
-            Form:            DW_FORM_strp<br>
-      - Code:            0x00000002<br>
-        Tag:             DW_TAG_subprogram<br>
-        Children:        DW_CHILDREN_yes<br>
-        Attributes:<br>
-          - Attribute:       DW_AT_name<br>
-            Form:            DW_FORM_strp<br>
-          - Attribute:       DW_AT_low_pc<br>
-            Form:            DW_FORM_addr<br>
-          - Attribute:       DW_AT_high_pc<br>
-            Form:            DW_FORM_addr<br>
-    debug_info:<br>
-      - Length:<br>
-          TotalLength:     73<br>
-        Version:         4<br>
-        AbbrOffset:      0<br>
-        AddrSize:        8<br>
-        Entries:<br>
-          - AbbrCode:        0x00000001<br>
-            Values:<br>
-              - Value:           0x0000000000001000<br>
-              - Value:           0x0000000000002000<br>
-              - Value:           0x0000000000000001<br>
-          - AbbrCode:        0x00000002<br>
-            Values:<br>
-              - Value:           0x000000000000000D<br>
-              - Value:           0x0000000000001000<br>
-              - Value:           0x0000000000001500<br>
-          - AbbrCode:        0x00000002<br>
-            Values:<br>
-              - Value:           0x0000000000000012<br>
-              - Value:           0x0000000000001500<br>
-              - Value:           0x0000000000002000<br>
-          - AbbrCode:        0x00000000<br>
-            Values:<br>
-          - AbbrCode:        0x00000000<br>
-            Values:<br>
-          - AbbrCode:        0x00000000<br>
-            Values:<br>
-  )";<br>
-  auto ErrOrSections = DWARFYAML::EmitDebugSections(yamldata);<br>
-  ASSERT_TRUE((bool)ErrOrSections);<br>
-  std::unique_ptr<DWARFContext> DwarfContext =<br>
-      DWARFContext::create(*ErrOrSections, 8);<br>
-  VerifySuccess(*DwarfContext);<br>
-}<br>
-<br>
-TEST(DWARFDebugInfo, TestDwarfRangesContains) {<br>
-  DWARFAddressRange R(0x10, 0x20);<br>
-<br>
-  //----------------------------------------------------------------------<br>
-  // Test ranges that start before R...<br>
-  //----------------------------------------------------------------------<br>
-  // Other range ends before start of R<br>
-  ASSERT_FALSE(R.contains({0x0f, 0x10}));<br>
-  // Other range end address is start of a R<br>
-  ASSERT_FALSE(R.contains({0x0f, 0x11}));<br>
-  // Other range end address is at and of R<br>
-  ASSERT_FALSE(R.contains({0x0f, 0x20}));<br>
-  // Other range end address is past end of R<br>
-  ASSERT_FALSE(R.contains({0x0f, 0x40}));<br>
-<br>
-  //----------------------------------------------------------------------<br>
-  // Test ranges that start at R's start address<br>
-  //----------------------------------------------------------------------<br>
-  // Ensure empty ranges matches<br>
-  ASSERT_TRUE(R.contains({0x10, 0x10}));<br>
-  // 1 byte of Range<br>
-  ASSERT_TRUE(R.contains({0x10, 0x11}));<br>
-  // same as Range<br>
-  ASSERT_TRUE(R.contains({0x10, 0x20}));<br>
-  // 1 byte past Range<br>
-  ASSERT_FALSE(R.contains({0x10, 0x21}));<br>
-<br>
-  //----------------------------------------------------------------------<br>
-  // Test ranges that start inside Range<br>
-  //----------------------------------------------------------------------<br>
-  // empty in range<br>
-  ASSERT_TRUE(R.contains({0x11, 0x11}));<br>
-  // all in Range<br>
-  ASSERT_TRUE(R.contains({0x11, 0x1f}));<br>
-  // ends at end of Range<br>
-  ASSERT_TRUE(R.contains({0x11, 0x20}));<br>
-  // ends past Range<br>
-  ASSERT_FALSE(R.contains({0x11, 0x21}));<br>
-<br>
-  //----------------------------------------------------------------------<br>
-  // Test ranges that start at last bytes of Range<br>
-  //----------------------------------------------------------------------<br>
-  // ends at end of Range<br>
-  ASSERT_TRUE(R.contains({0x1f, 0x20}));<br>
-  // ends past Range<br>
-  ASSERT_FALSE(R.contains({0x1f, 0x21}));<br>
-<br>
-  //----------------------------------------------------------------------<br>
-  // Test ranges that start after Range<br>
-  //----------------------------------------------------------------------<br>
-  // empty considered in Range<br>
-  ASSERT_TRUE(R.contains({0x20, 0x20}));<br>
-  // valid past Range<br>
-  ASSERT_FALSE(R.contains({0x20, 0x21}));<br>
-}<br>
-<br>
-TEST(DWARFDebugInfo, TestDWARFDieRangeInfoContains) {<br>
-  DWARFVerifier::DieRangeInfo Ranges({{0x10, 0x20}, {0x30, 0x40}});<br>
-<br>
-  ASSERT_FALSE(Ranges.contains({{{0x0f, 0x10}}}));<br>
-  ASSERT_FALSE(Ranges.contains({{{0x20, 0x30}}}));<br>
-  ASSERT_FALSE(Ranges.contains({{{0x40, 0x41}}}));<br>
-  ASSERT_TRUE(Ranges.contains({{{0x10, 0x20}}}));<br>
-  ASSERT_TRUE(Ranges.contains({{{0x11, 0x12}}}));<br>
-  ASSERT_TRUE(Ranges.contains({{{0x1f, 0x20}}}));<br>
-  ASSERT_TRUE(Ranges.contains({{{0x30, 0x40}}}));<br>
-  ASSERT_TRUE(Ranges.contains({{{0x31, 0x32}}}));<br>
-  ASSERT_TRUE(Ranges.contains({{{0x3f, 0x40}}}));<br>
-  ASSERT_TRUE(Ranges.contains({{{0x10, 0x20}, {0x30, 0x40}}}));<br>
-  ASSERT_TRUE(Ranges.contains({{{0x11, 0x12}, {0x31, 0x32}}}));<br>
-  ASSERT_TRUE(Ranges.contains(<br>
-      {{{0x11, 0x12}, {0x12, 0x13}, {0x31, 0x32}, {0x32, 0x33}}}));<br>
-  ASSERT_FALSE(Ranges.contains({{{0x11, 0x12},<br>
-                                 {0x12, 0x13},<br>
-                                 {0x20, 0x21},<br>
-                                 {0x31, 0x32},<br>
-                                 {0x32, 0x33}}}));<br>
-  ASSERT_FALSE(Ranges.contains(<br>
-      {{{0x11, 0x12}, {0x12, 0x13}, {0x31, 0x32}, {0x32, 0x41}}}));<br>
-}<br>
-<br>
-namespace {<br>
-<br>
-void AssertRangesIntersect(const DWARFAddressRange &LHS,<br>
-                           const DWARFAddressRange &RHS) {<br>
-  ASSERT_TRUE(LHS.intersects(RHS));<br>
-  ASSERT_TRUE(RHS.intersects(LHS));<br>
-}<br>
-void AssertRangesDontIntersect(const DWARFAddressRange &LHS,<br>
-                               const DWARFAddressRange &RHS) {<br>
-  ASSERT_FALSE(LHS.intersects(RHS));<br>
-  ASSERT_FALSE(RHS.intersects(LHS));<br>
-}<br>
-<br>
-void AssertRangesIntersect(const DWARFVerifier::DieRangeInfo &LHS,<br>
-                           const DWARFAddressRangesVector &Ranges) {<br>
-  DWARFVerifier::DieRangeInfo RHS(Ranges);<br>
-  ASSERT_TRUE(LHS.intersects(RHS));<br>
-  ASSERT_TRUE(RHS.intersects(LHS));<br>
-}<br>
-<br>
-void AssertRangesDontIntersect(const DWARFVerifier::DieRangeInfo &LHS,<br>
-                               const DWARFAddressRangesVector &Ranges) {<br>
-  DWARFVerifier::DieRangeInfo RHS(Ranges);<br>
-  ASSERT_FALSE(LHS.intersects(RHS));<br>
-  ASSERT_FALSE(RHS.intersects(LHS));<br>
-}<br>
-<br>
-} // namespace<br>
-TEST(DWARFDebugInfo, TestDwarfRangesIntersect) {<br>
-  DWARFAddressRange R(0x10, 0x20);<br>
-<br>
-  //----------------------------------------------------------------------<br>
-  // Test ranges that start before R...<br>
-  //----------------------------------------------------------------------<br>
-  // Other range ends before start of R<br>
-  AssertRangesDontIntersect(R, {0x00, 0x10});<br>
-  // Other range end address is start of a R<br>
-  AssertRangesIntersect(R, {0x00, 0x11});<br>
-  // Other range end address is in R<br>
-  AssertRangesIntersect(R, {0x00, 0x15});<br>
-  // Other range end address is at and of R<br>
-  AssertRangesIntersect(R, {0x00, 0x20});<br>
-  // Other range end address is past end of R<br>
-  AssertRangesIntersect(R, {0x00, 0x40});<br>
-<br>
-  //----------------------------------------------------------------------<br>
-  // Test ranges that start at R's start address<br>
-  //----------------------------------------------------------------------<br>
-  // Ensure empty ranges doesn't match<br>
-  AssertRangesDontIntersect(R, {0x10, 0x10});<br>
-  // 1 byte of Range<br>
-  AssertRangesIntersect(R, {0x10, 0x11});<br>
-  // same as Range<br>
-  AssertRangesIntersect(R, {0x10, 0x20});<br>
-  // 1 byte past Range<br>
-  AssertRangesIntersect(R, {0x10, 0x21});<br>
-<br>
-  //----------------------------------------------------------------------<br>
-  // Test ranges that start inside Range<br>
-  //----------------------------------------------------------------------<br>
-  // empty in range<br>
-  AssertRangesDontIntersect(R, {0x11, 0x11});<br>
-  // all in Range<br>
-  AssertRangesIntersect(R, {0x11, 0x1f});<br>
-  // ends at end of Range<br>
-  AssertRangesIntersect(R, {0x11, 0x20});<br>
-  // ends past Range<br>
-  AssertRangesIntersect(R, {0x11, 0x21});<br>
-<br>
-  //----------------------------------------------------------------------<br>
-  // Test ranges that start at last bytes of Range<br>
-  //----------------------------------------------------------------------<br>
-  // ends at end of Range<br>
-  AssertRangesIntersect(R, {0x1f, 0x20});<br>
-  // ends past Range<br>
-  AssertRangesIntersect(R, {0x1f, 0x21});<br>
-<br>
-  //----------------------------------------------------------------------<br>
-  // Test ranges that start after Range<br>
-  //----------------------------------------------------------------------<br>
-  // empty just past in Range<br>
-  AssertRangesDontIntersect(R, {0x20, 0x20});<br>
-  // valid past Range<br>
-  AssertRangesDontIntersect(R, {0x20, 0x21});<br>
-}<br>
-<br>
-TEST(DWARFDebugInfo, TestDWARFDieRangeInfoIntersects) {<br>
-<br>
-  DWARFVerifier::DieRangeInfo Ranges({{0x10, 0x20}, {0x30, 0x40}});<br>
-<br>
-  // Test empty range<br>
-  AssertRangesDontIntersect(Ranges, {});<br>
-  // Test range that appears before all ranges in Ranges<br>
-  AssertRangesDontIntersect(Ranges, {{0x00, 0x10}});<br>
-  // Test range that appears between ranges in Ranges<br>
-  AssertRangesDontIntersect(Ranges, {{0x20, 0x30}});<br>
-  // Test range that appears after ranges in Ranges<br>
-  AssertRangesDontIntersect(Ranges, {{0x40, 0x50}});<br>
-<br>
-  // Test range that start before first range<br>
-  AssertRangesIntersect(Ranges, {{0x00, 0x11}});<br>
-  // Test range that start at first range<br>
-  AssertRangesIntersect(Ranges, {{0x10, 0x11}});<br>
-  // Test range that start in first range<br>
-  AssertRangesIntersect(Ranges, {{0x11, 0x12}});<br>
-  // Test range that start at end of first range<br>
-  AssertRangesIntersect(Ranges, {{0x1f, 0x20}});<br>
-  // Test range that starts at end of first range<br>
-  AssertRangesDontIntersect(Ranges, {{0x20, 0x21}});<br>
-  // Test range that starts at end of first range<br>
-  AssertRangesIntersect(Ranges, {{0x20, 0x31}});<br>
-<br>
-  // Test range that start before second range and ends before second<br>
-  AssertRangesDontIntersect(Ranges, {{0x2f, 0x30}});<br>
-  // Test range that start before second range and ends in second<br>
-  AssertRangesIntersect(Ranges, {{0x2f, 0x31}});<br>
-  // Test range that start at second range<br>
-  AssertRangesIntersect(Ranges, {{0x30, 0x31}});<br>
-  // Test range that start in second range<br>
-  AssertRangesIntersect(Ranges, {{0x31, 0x32}});<br>
-  // Test range that start at end of second range<br>
-  AssertRangesIntersect(Ranges, {{0x3f, 0x40}});<br>
-  // Test range that starts at end of second range<br>
-  AssertRangesDontIntersect(Ranges, {{0x40, 0x41}});<br>
-}<br>
-<br>
 } // end anonymous namespace<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>