aadsm updated this revision to Diff 198114.
aadsm added a comment.
Herald added subscribers: jdoerfert, MaskRay, eraman, arichardson, mgorny, 
emaste.
Herald added a reviewer: espindola.
- Renamed CompareFileAndLine to FileAndLineEqual and made it return a bool
- Made include_inlined_functions a mandatory parameter in 
GetSameLineContiguousAddressRange
- Fix documentation
- Refactored the object file creation from YAML
- Got rid of a bunch of macros
- Improved the test case


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D61235/new/

https://reviews.llvm.org/D61235

Files:
  lldb/include/lldb/Core/AddressRange.h
  lldb/include/lldb/Symbol/Block.h
  lldb/include/lldb/Symbol/Declaration.h
  lldb/include/lldb/Symbol/LineEntry.h
  lldb/source/Core/AddressRange.cpp
  lldb/source/Symbol/Block.cpp
  lldb/source/Symbol/Declaration.cpp
  lldb/source/Symbol/LineEntry.cpp
  lldb/source/Target/Thread.cpp
  lldb/source/Target/ThreadPlanStepOut.cpp
  lldb/source/Target/ThreadPlanStepRange.cpp
  lldb/tools/lldb-test/lldb-test.cpp
  lldb/unittests/Core/CMakeLists.txt
  lldb/unittests/Core/MangledTest.cpp
  lldb/unittests/Interpreter/TestCompletion.cpp
  lldb/unittests/ObjectFile/ELF/CMakeLists.txt
  lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp
  lldb/unittests/Symbol/CMakeLists.txt
  lldb/unittests/Symbol/Inputs/inlined-functions.yaml
  lldb/unittests/Symbol/TestDWARFCallFrameInfo.cpp
  lldb/unittests/Symbol/TestLineEntry.cpp
  lldb/unittests/TestingSupport/CMakeLists.txt
  lldb/unittests/TestingSupport/TestUtilities.cpp
  lldb/unittests/TestingSupport/TestUtilities.h

Index: lldb/unittests/TestingSupport/TestUtilities.h
===================================================================
--- lldb/unittests/TestingSupport/TestUtilities.h
+++ lldb/unittests/TestingSupport/TestUtilities.h
@@ -9,11 +9,26 @@
 #ifndef LLDB_UNITTESTS_UTILITY_HELPERS_TESTUTILITIES_H
 #define LLDB_UNITTESTS_UTILITY_HELPERS_TESTUTILITIES_H
 
+#include "llvm/ADT/SmallString.h"
 #include "llvm/ADT/Twine.h"
+#include "llvm/Support/Error.h"
 #include <string>
 
+#define ASSERT_NO_ERROR(x)                                                     \
+  if (std::error_code ASSERT_NO_ERROR_ec = x) {                                \
+    llvm::SmallString<128> MessageStorage;                                     \
+    llvm::raw_svector_ostream Message(MessageStorage);                         \
+    Message << #x ": did not return errc::success.\n"                          \
+            << "error number: " << ASSERT_NO_ERROR_ec.value() << "\n"          \
+            << "error message: " << ASSERT_NO_ERROR_ec.message() << "\n";      \
+    GTEST_FATAL_FAILURE_(MessageStorage.c_str());                              \
+  } else {                                                                     \
+  }
+
 namespace lldb_private {
 std::string GetInputFilePath(const llvm::Twine &name);
+llvm::Error ReadYAMLObjectFile(const llvm::Twine &yaml_name,
+                               llvm::SmallString<128> &obj);
 }
 
 #endif
Index: lldb/unittests/TestingSupport/TestUtilities.cpp
===================================================================
--- lldb/unittests/TestingSupport/TestUtilities.cpp
+++ lldb/unittests/TestingSupport/TestUtilities.cpp
@@ -9,7 +9,9 @@
 #include "TestUtilities.h"
 #include "llvm/ADT/SmallString.h"
 #include "llvm/Support/FileSystem.h"
+#include "llvm/Support/FormatVariadic.h"
 #include "llvm/Support/Path.h"
+#include "llvm/Support/Program.h"
 
 extern const char *TestMainArgv0;
 
@@ -19,3 +21,24 @@
   llvm::sys::path::append(result, "Inputs", name);
   return result.str();
 }
+
+llvm::Error
+lldb_private::ReadYAMLObjectFile(const llvm::Twine &yaml_name,
+                                 llvm::SmallString<128> &object_file) {
+  std::string yaml = GetInputFilePath(yaml_name);
+  llvm::StringRef args[] = {YAML2OBJ, yaml};
+  llvm::StringRef obj_ref = object_file;
+  const llvm::Optional<llvm::StringRef> redirects[] = {llvm::None, obj_ref,
+                                                       llvm::None};
+  if (llvm::sys::ExecuteAndWait(YAML2OBJ, args, llvm::None, redirects) != 0)
+    return llvm::createStringError(llvm::inconvertibleErrorCode(),
+                                   "Error running yaml2obj %s.", yaml.c_str());
+  uint64_t size;
+  if (auto ec = llvm::sys::fs::file_size(object_file, size))
+    return llvm::errorCodeToError(ec);
+  if (size == 0)
+    return llvm::createStringError(
+        llvm::inconvertibleErrorCode(),
+        "Empty object file created from yaml2obj %s.", yaml.c_str());
+  return llvm::Error::success();
+}
\ No newline at end of file
Index: lldb/unittests/TestingSupport/CMakeLists.txt
===================================================================
--- lldb/unittests/TestingSupport/CMakeLists.txt
+++ lldb/unittests/TestingSupport/CMakeLists.txt
@@ -9,3 +9,6 @@
   LINK_COMPONENTS
     Support
   )
+
+add_dependencies(lldbUtilityHelpers yaml2obj)
+add_definitions(-DYAML2OBJ="$<TARGET_FILE:yaml2obj>")
\ No newline at end of file
Index: lldb/unittests/Symbol/TestLineEntry.cpp
===================================================================
--- /dev/null
+++ lldb/unittests/Symbol/TestLineEntry.cpp
@@ -0,0 +1,235 @@
+//===-- TestLineEntry.cpp ------------------------------*- C++ -*-===//
+//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "gtest/gtest.h"
+#include <iostream>
+
+#include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h"
+#include "Plugins/SymbolFile/DWARF/DWARFASTParserClang.h"
+#include "Plugins/SymbolFile/DWARF/SymbolFileDWARF.h"
+#include "Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.h"
+#include "TestingSupport/TestUtilities.h"
+#include "lldb/Symbol/ClangASTContext.h"
+
+#include "lldb/Core/Module.h"
+#include "lldb/Host/FileSystem.h"
+#include "lldb/Host/HostInfo.h"
+#include "lldb/Symbol/CompileUnit.h"
+#include "lldb/Symbol/SymbolContext.h"
+#include "lldb/Utility/StreamString.h"
+
+#include "llvm/Support/FileUtilities.h"
+#include "llvm/Support/Program.h"
+#include "llvm/Testing/Support/Error.h"
+
+using namespace lldb_private;
+using namespace lldb;
+
+class LineEntryTest : public testing::Test {
+public:
+  void SetUp() override {
+    FileSystem::Initialize();
+    HostInfo::Initialize();
+    ObjectFileMachO::Initialize();
+    SymbolVendorMacOSX::Initialize();
+    SymbolFileDWARF::Initialize();
+    ClangASTContext::Initialize();
+  }
+
+  void TearDown() override {
+    ClangASTContext::Terminate();
+    SymbolFileDWARF::Terminate();
+    SymbolVendorMacOSX::Terminate();
+    ObjectFileMachO::Terminate();
+    HostInfo::Terminate();
+    FileSystem::Terminate();
+  }
+
+protected:
+  llvm::Expected<ModuleSP> GetModule();
+  llvm::Expected<LineEntry> GetLineEntryForLine(uint32_t line);
+  ModuleSP m_module_sp;
+};
+
+llvm::Expected<ModuleSP> LineEntryTest::GetModule() {
+  if (m_module_sp)
+    return m_module_sp;
+
+  llvm::SmallString<128> obj;
+  if (auto ec = llvm::sys::fs::createTemporaryFile("source-%%%%%%", "obj", obj))
+    return llvm::errorCodeToError(ec);
+  llvm::FileRemover obj_remover(obj);
+  if (auto error = ReadYAMLObjectFile("inlined-functions.yaml", obj))
+    return llvm::Error(std::move(error));
+
+  m_module_sp = std::make_shared<Module>(ModuleSpec(FileSpec(obj)));
+  // Preload because the temporary file will be gone once we exit this function.
+  m_module_sp->PreloadSymbols();
+  return m_module_sp;
+}
+
+llvm::Expected<LineEntry> LineEntryTest::GetLineEntryForLine(uint32_t line) {
+  auto expected_module_so = GetModule();
+
+  if (!expected_module_so)
+    return llvm::createStringError(llvm::inconvertibleErrorCode(),
+                                   "Not able to get module for test object.");
+
+  auto module = expected_module_so->get();
+  bool check_inlines = true;
+  bool exact = true;
+  SymbolContextList sc_comp_units;
+  SymbolContextList sc_line_entries;
+  FileSpec file_spec("inlined-functions.cpp");
+  module->ResolveSymbolContextsForFileSpec(file_spec, line, check_inlines,
+                                           lldb::eSymbolContextCompUnit,
+                                           sc_comp_units);
+  if (sc_comp_units.GetSize() == 0)
+    return llvm::createStringError(llvm::inconvertibleErrorCode(),
+                                   "No comp unit found on the test object.");
+  sc_comp_units[0].comp_unit->ResolveSymbolContext(
+      file_spec, line, check_inlines, exact, eSymbolContextLineEntry,
+      sc_line_entries);
+  if (sc_line_entries.GetSize() == 0)
+    return llvm::createStringError(llvm::inconvertibleErrorCode(),
+                                   "No line entry found on the test object.");
+  return sc_line_entries[0].line_entry;
+}
+
+TEST_F(LineEntryTest, GetSameLineContiguousAddressRangeNoInlines) {
+  auto line_entry = GetLineEntryForLine(18);
+  ASSERT_THAT_EXPECTED(line_entry, llvm::Succeeded());
+  bool include_inlined_functions = false;
+  auto range =
+      line_entry->GetSameLineContiguousAddressRange(include_inlined_functions);
+  ASSERT_EQ(range.GetByteSize(), (uint64_t)0x24);
+}
+
+TEST_F(LineEntryTest, GetSameLineContiguousAddressRangeOneInline) {
+  auto line_entry = GetLineEntryForLine(18);
+  ASSERT_THAT_EXPECTED(line_entry, llvm::Succeeded());
+  bool include_inlined_functions = true;
+  auto range =
+      line_entry->GetSameLineContiguousAddressRange(include_inlined_functions);
+  ASSERT_EQ(range.GetByteSize(), (uint64_t)0x49);
+}
+
+TEST_F(LineEntryTest, GetSameLineContiguousAddressRangeNestedInline) {
+  auto line_entry = GetLineEntryForLine(12);
+  ASSERT_THAT_EXPECTED(line_entry, llvm::Succeeded());
+  bool include_inlined_functions = true;
+  auto range =
+      line_entry->GetSameLineContiguousAddressRange(include_inlined_functions);
+  ASSERT_EQ(range.GetByteSize(), (uint64_t)0x33);
+}
+
+/*
+# inlined-functions.cpp
+inline __attribute__((always_inline)) int sum2(int a, int b) {
+    int result = a + b;
+    return result;
+}
+
+int sum3(int a, int b, int c) {
+    int result = a + b + c;
+    return result;
+}
+
+inline __attribute__((always_inline)) int sum4(int a, int b, int c, int d) {
+    int result = sum2(a, b) + sum2(c, d);
+    result += 0;
+    return result;
+}
+
+int main(int argc, char** argv) {
+    sum3(3, 4, 5) + sum2(1, 2);
+    int sum = sum4(1, 2, 3, 4);
+    sum2(5, 6);
+    return 0;
+}
+
+// g++ -c inlined-functions.cpp -o inlined-functions.o -g -Wno-unused-value
+// obj2yaml inlined-functions.o > inlined-functions.yaml
+
+# Dump of source line per address:
+# inlined-functions.cpp is src.cpp for space considerations.
+0x20: src.cpp:17
+0x21: src.cpp:17
+0x26: src.cpp:17
+0x27: src.cpp:17
+0x29: src.cpp:17
+0x2e: src.cpp:17
+0x2f: src.cpp:17
+0x31: src.cpp:17
+0x36: src.cpp:18
+0x37: src.cpp:18
+0x39: src.cpp:18
+0x3e: src.cpp:18
+0x3f: src.cpp:18
+0x41: src.cpp:18
+0x46: src.cpp:18
+0x47: src.cpp:18
+0x49: src.cpp:18
+0x4e: src.cpp:18
+0x4f: src.cpp:18
+0x51: src.cpp:18
+0x56: src.cpp:18
+0x57: src.cpp:18
+0x59: src.cpp:18
+0x5e: src.cpp:18 -> s...@src.cpp:2
+0x5f: src.cpp:18 -> s...@src.cpp:2
+0x61: src.cpp:18 -> s...@src.cpp:2
+0x66: src.cpp:18 -> s...@src.cpp:2
+0x67: src.cpp:18 -> s...@src.cpp:2
+0x69: src.cpp:18 -> s...@src.cpp:2
+0x6e: src.cpp:18 -> s...@src.cpp:2
+0x6f: src.cpp:18 -> s...@src.cpp:2
+0x71: src.cpp:18 -> s...@src.cpp:2
+0x76: src.cpp:18 -> s...@src.cpp:2
+0x77: src.cpp:18 -> s...@src.cpp:2
+0x79: src.cpp:18 -> s...@src.cpp:2
+0x7e: src.cpp:18 -> s...@src.cpp:2
+0x7f: src.cpp:19 -> s...@src.cpp:12
+0x81: src.cpp:19 -> s...@src.cpp:12
+0x86: src.cpp:19 -> s...@src.cpp:12
+0x87: src.cpp:19 -> s...@src.cpp:12
+0x89: src.cpp:19 -> s...@src.cpp:12
+0x8e: src.cpp:19 -> s...@src.cpp:12 -> s...@src.cpp:2
+0x8f: src.cpp:19 -> s...@src.cpp:12 -> s...@src.cpp:2
+0x91: src.cpp:19 -> s...@src.cpp:12 -> s...@src.cpp:2
+0x96: src.cpp:19 -> s...@src.cpp:12 -> s...@src.cpp:3
+0x97: src.cpp:19 -> s...@src.cpp:12
+0x99: src.cpp:19 -> s...@src.cpp:12
+0x9e: src.cpp:19 -> s...@src.cpp:12
+0x9f: src.cpp:19 -> s...@src.cpp:12
+0xa1: src.cpp:19 -> s...@src.cpp:12
+0xa6: src.cpp:19 -> s...@src.cpp:12 -> s...@src.cpp:2
+0xa7: src.cpp:19 -> s...@src.cpp:12 -> s...@src.cpp:2
+0xa9: src.cpp:19 -> s...@src.cpp:12 -> s...@src.cpp:2
+0xae: src.cpp:19 -> s...@src.cpp:12
+0xaf: src.cpp:19 -> s...@src.cpp:12
+0xb1: src.cpp:19 -> s...@src.cpp:12
+0xb6: src.cpp:19 -> s...@src.cpp:13
+0xb7: src.cpp:19 -> s...@src.cpp:13
+0xb9: src.cpp:19 -> s...@src.cpp:14
+0xbe: src.cpp:19
+0xbf: src.cpp:19
+0xc1: src.cpp:19
+0xc6: src.cpp:19
+0xc7: src.cpp:19
+0xc9: src.cpp:19
+0xce: src.cpp:20 -> s...@src.cpp:2
+0xcf: src.cpp:20 -> s...@src.cpp:2
+0xd1: src.cpp:20 -> s...@src.cpp:2
+0xd6: src.cpp:21
+0xd7: src.cpp:21
+0xd9: src.cpp:21
+0xde: src.cpp:21
+*/
Index: lldb/unittests/Symbol/TestDWARFCallFrameInfo.cpp
===================================================================
--- lldb/unittests/Symbol/TestDWARFCallFrameInfo.cpp
+++ lldb/unittests/Symbol/TestDWARFCallFrameInfo.cpp
@@ -20,6 +20,7 @@
 #include "lldb/Host/HostInfo.h"
 #include "lldb/Symbol/DWARFCallFrameInfo.h"
 #include "lldb/Utility/StreamString.h"
+#include "llvm/Testing/Support/Error.h"
 
 #include "llvm/Support/FileUtilities.h"
 #include "llvm/Support/Path.h"
@@ -47,17 +48,6 @@
   void TestBasic(DWARFCallFrameInfo::Type type, llvm::StringRef symbol);
 };
 
-#define ASSERT_NO_ERROR(x)                                                     \
-  if (std::error_code ASSERT_NO_ERROR_ec = x) {                                \
-    llvm::SmallString<128> MessageStorage;                                     \
-    llvm::raw_svector_ostream Message(MessageStorage);                         \
-    Message << #x ": did not return errc::success.\n"                          \
-            << "error number: " << ASSERT_NO_ERROR_ec.value() << "\n"          \
-            << "error message: " << ASSERT_NO_ERROR_ec.message() << "\n";      \
-    GTEST_FATAL_FAILURE_(MessageStorage.c_str());                              \
-  } else {                                                                     \
-  }
-
 namespace lldb_private {
 static std::ostream &operator<<(std::ostream &OS, const UnwindPlan::Row &row) {
   StreamString SS;
@@ -94,23 +84,12 @@
 
 void DWARFCallFrameInfoTest::TestBasic(DWARFCallFrameInfo::Type type,
                                        llvm::StringRef symbol) {
-  std::string yaml = GetInputFilePath("basic-call-frame-info.yaml");
   llvm::SmallString<128> obj;
-
   ASSERT_NO_ERROR(llvm::sys::fs::createTemporaryFile(
       "basic-call-frame-info-%%%%%%", "obj", obj));
   llvm::FileRemover obj_remover(obj);
-
-  llvm::StringRef args[] = {YAML2OBJ, yaml};
-  llvm::StringRef obj_ref = obj;
-  const llvm::Optional<llvm::StringRef> redirects[] = {llvm::None, obj_ref,
-                                                       llvm::None};
-  ASSERT_EQ(0,
-            llvm::sys::ExecuteAndWait(YAML2OBJ, args, llvm::None, redirects));
-
-  uint64_t size;
-  ASSERT_NO_ERROR(llvm::sys::fs::file_size(obj, size));
-  ASSERT_GT(size, 0u);
+  ASSERT_THAT_ERROR(ReadYAMLObjectFile("basic-call-frame-info.yaml", obj),
+                    llvm::Succeeded());
 
   auto module_sp = std::make_shared<Module>(ModuleSpec(FileSpec(obj)));
   SectionList *list = module_sp->GetSectionList();
Index: lldb/unittests/Symbol/Inputs/inlined-functions.yaml
===================================================================
--- /dev/null
+++ lldb/unittests/Symbol/Inputs/inlined-functions.yaml
@@ -0,0 +1,943 @@
+--- !mach-o
+FileHeader:      
+  magic:           0xFEEDFACF
+  cputype:         0x01000007
+  cpusubtype:      0x00000003
+  filetype:        0x00000001
+  ncmds:           4
+  sizeofcmds:      1160
+  flags:           0x00002000
+  reserved:        0x00000000
+LoadCommands:    
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         1032
+    segname:         ''
+    vmaddr:          0
+    vmsize:          2022
+    fileoff:         1192
+    filesize:        2022
+    maxprot:         7
+    initprot:        7
+    nsects:          6
+    flags:           0
+    Sections:        
+      - sectname:        __text
+        segname:         __TEXT
+        addr:            0x0000000000000000
+        size:            224
+        offset:          0x000004A8
+        align:           4
+        reloff:          0x00000C90
+        nreloc:          1
+        flags:           0x80000400
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+      - sectname:        __debug_str
+        segname:         __DWARF
+        addr:            0x00000000000000E0
+        size:            223
+        offset:          0x00000588
+        align:           0
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x02000000
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+      - sectname:        __debug_abbrev
+        segname:         __DWARF
+        addr:            0x00000000000001BF
+        size:            190
+        offset:          0x00000667
+        align:           0
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x02000000
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+      - sectname:        __debug_info
+        segname:         __DWARF
+        addr:            0x000000000000027D
+        size:            583
+        offset:          0x00000725
+        align:           0
+        reloff:          0x00000C98
+        nreloc:          8
+        flags:           0x02000000
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+      - sectname:        __compact_unwind
+        segname:         __LD
+        addr:            0x0000000000000670
+        size:            64
+        offset:          0x00000B18
+        align:           3
+        reloff:          0x00000CD8
+        nreloc:          2
+        flags:           0x02000000
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+      - sectname:        __debug_line
+        segname:         __DWARF
+        addr:            0x0000000000000718
+        size:            206
+        offset:          0x00000BC0
+        align:           0
+        reloff:          0x00000CE8
+        nreloc:          1
+        flags:           0x02000000
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+  - cmd:             LC_BUILD_VERSION
+    cmdsize:         24
+    platform:        1
+    minos:           658944
+    sdk:             658944
+    ntools:          0
+  - cmd:             LC_SYMTAB
+    cmdsize:         24
+    symoff:          3312
+    nsyms:           2
+    stroff:          3344
+    strsize:         20
+  - cmd:             LC_DYSYMTAB
+    cmdsize:         80
+    ilocalsym:       0
+    nlocalsym:       0
+    iextdefsym:      0
+    nextdefsym:      2
+    iundefsym:       2
+    nundefsym:       0
+    tocoff:          0
+    ntoc:            0
+    modtaboff:       0
+    nmodtab:         0
+    extrefsymoff:    0
+    nextrefsyms:     0
+    indirectsymoff:  0
+    nindirectsyms:   0
+    extreloff:       0
+    nextrel:         0
+    locreloff:       0
+    nlocrel:         0
+LinkEditData:    
+  NameList:        
+    - n_strx:          7
+      n_type:          0x0F
+      n_sect:          1
+      n_desc:          0
+      n_value:         0
+    - n_strx:          1
+      n_type:          0x0F
+      n_sect:          1
+      n_desc:          0
+      n_value:         32
+  StringTable:     
+    - ''
+    - _main
+    - __Z4sum3iii
+    - ''
+DWARF:           
+  debug_str:       
+    - 'Apple LLVM version 10.0.1 (clang-1001.0.46.3)'
+    - inlined-functions.cpp
+    - '/Users/aadsm/Projects/llvm-project/lldb/unittests/Symbol/Inputs'
+    - sum3
+    - _Z4sum3iii
+    - _Z4sum2ii
+    - sum2
+    - int
+    - a
+    - b
+    - result
+    - _Z4sum4iiii
+    - sum4
+    - c
+    - d
+    - main
+    - argc
+    - argv
+    - char
+    - sum
+  debug_abbrev:    
+    - Code:            0x00000001
+      Tag:             DW_TAG_compile_unit
+      Children:        DW_CHILDREN_yes
+      Attributes:      
+        - Attribute:       DW_AT_producer
+          Form:            DW_FORM_strp
+        - Attribute:       DW_AT_language
+          Form:            DW_FORM_data2
+        - Attribute:       DW_AT_name
+          Form:            DW_FORM_strp
+        - Attribute:       DW_AT_stmt_list
+          Form:            DW_FORM_sec_offset
+        - Attribute:       DW_AT_comp_dir
+          Form:            DW_FORM_strp
+        - Attribute:       DW_AT_low_pc
+          Form:            DW_FORM_addr
+        - Attribute:       DW_AT_high_pc
+          Form:            DW_FORM_data4
+    - Code:            0x00000002
+      Tag:             DW_TAG_subprogram
+      Children:        DW_CHILDREN_yes
+      Attributes:      
+        - Attribute:       DW_AT_low_pc
+          Form:            DW_FORM_addr
+        - Attribute:       DW_AT_high_pc
+          Form:            DW_FORM_data4
+        - Attribute:       DW_AT_frame_base
+          Form:            DW_FORM_exprloc
+        - Attribute:       DW_AT_linkage_name
+          Form:            DW_FORM_strp
+        - Attribute:       DW_AT_name
+          Form:            DW_FORM_strp
+        - Attribute:       DW_AT_decl_file
+          Form:            DW_FORM_data1
+        - Attribute:       DW_AT_decl_line
+          Form:            DW_FORM_data1
+        - Attribute:       DW_AT_type
+          Form:            DW_FORM_ref4
+        - Attribute:       DW_AT_external
+          Form:            DW_FORM_flag_present
+    - Code:            0x00000003
+      Tag:             DW_TAG_formal_parameter
+      Children:        DW_CHILDREN_no
+      Attributes:      
+        - Attribute:       DW_AT_location
+          Form:            DW_FORM_exprloc
+        - Attribute:       DW_AT_name
+          Form:            DW_FORM_strp
+        - Attribute:       DW_AT_decl_file
+          Form:            DW_FORM_data1
+        - Attribute:       DW_AT_decl_line
+          Form:            DW_FORM_data1
+        - Attribute:       DW_AT_type
+          Form:            DW_FORM_ref4
+    - Code:            0x00000004
+      Tag:             DW_TAG_variable
+      Children:        DW_CHILDREN_no
+      Attributes:      
+        - Attribute:       DW_AT_location
+          Form:            DW_FORM_exprloc
+        - Attribute:       DW_AT_name
+          Form:            DW_FORM_strp
+        - Attribute:       DW_AT_decl_file
+          Form:            DW_FORM_data1
+        - Attribute:       DW_AT_decl_line
+          Form:            DW_FORM_data1
+        - Attribute:       DW_AT_type
+          Form:            DW_FORM_ref4
+    - Code:            0x00000005
+      Tag:             DW_TAG_subprogram
+      Children:        DW_CHILDREN_yes
+      Attributes:      
+        - Attribute:       DW_AT_linkage_name
+          Form:            DW_FORM_strp
+        - Attribute:       DW_AT_name
+          Form:            DW_FORM_strp
+        - Attribute:       DW_AT_decl_file
+          Form:            DW_FORM_data1
+        - Attribute:       DW_AT_decl_line
+          Form:            DW_FORM_data1
+        - Attribute:       DW_AT_type
+          Form:            DW_FORM_ref4
+        - Attribute:       DW_AT_external
+          Form:            DW_FORM_flag_present
+        - Attribute:       DW_AT_inline
+          Form:            DW_FORM_data1
+    - Code:            0x00000006
+      Tag:             DW_TAG_formal_parameter
+      Children:        DW_CHILDREN_no
+      Attributes:      
+        - Attribute:       DW_AT_name
+          Form:            DW_FORM_strp
+        - Attribute:       DW_AT_decl_file
+          Form:            DW_FORM_data1
+        - Attribute:       DW_AT_decl_line
+          Form:            DW_FORM_data1
+        - Attribute:       DW_AT_type
+          Form:            DW_FORM_ref4
+    - Code:            0x00000007
+      Tag:             DW_TAG_variable
+      Children:        DW_CHILDREN_no
+      Attributes:      
+        - Attribute:       DW_AT_name
+          Form:            DW_FORM_strp
+        - Attribute:       DW_AT_decl_file
+          Form:            DW_FORM_data1
+        - Attribute:       DW_AT_decl_line
+          Form:            DW_FORM_data1
+        - Attribute:       DW_AT_type
+          Form:            DW_FORM_ref4
+    - Code:            0x00000008
+      Tag:             DW_TAG_base_type
+      Children:        DW_CHILDREN_no
+      Attributes:      
+        - Attribute:       DW_AT_name
+          Form:            DW_FORM_strp
+        - Attribute:       DW_AT_encoding
+          Form:            DW_FORM_data1
+        - Attribute:       DW_AT_byte_size
+          Form:            DW_FORM_data1
+    - Code:            0x00000009
+      Tag:             DW_TAG_subprogram
+      Children:        DW_CHILDREN_yes
+      Attributes:      
+        - Attribute:       DW_AT_low_pc
+          Form:            DW_FORM_addr
+        - Attribute:       DW_AT_high_pc
+          Form:            DW_FORM_data4
+        - Attribute:       DW_AT_frame_base
+          Form:            DW_FORM_exprloc
+        - Attribute:       DW_AT_name
+          Form:            DW_FORM_strp
+        - Attribute:       DW_AT_decl_file
+          Form:            DW_FORM_data1
+        - Attribute:       DW_AT_decl_line
+          Form:            DW_FORM_data1
+        - Attribute:       DW_AT_type
+          Form:            DW_FORM_ref4
+        - Attribute:       DW_AT_external
+          Form:            DW_FORM_flag_present
+    - Code:            0x0000000A
+      Tag:             DW_TAG_inlined_subroutine
+      Children:        DW_CHILDREN_yes
+      Attributes:      
+        - Attribute:       DW_AT_abstract_origin
+          Form:            DW_FORM_ref4
+        - Attribute:       DW_AT_low_pc
+          Form:            DW_FORM_addr
+        - Attribute:       DW_AT_high_pc
+          Form:            DW_FORM_data4
+        - Attribute:       DW_AT_call_file
+          Form:            DW_FORM_data1
+        - Attribute:       DW_AT_call_line
+          Form:            DW_FORM_data1
+    - Code:            0x0000000B
+      Tag:             DW_TAG_formal_parameter
+      Children:        DW_CHILDREN_no
+      Attributes:      
+        - Attribute:       DW_AT_location
+          Form:            DW_FORM_exprloc
+        - Attribute:       DW_AT_abstract_origin
+          Form:            DW_FORM_ref4
+    - Code:            0x0000000C
+      Tag:             DW_TAG_variable
+      Children:        DW_CHILDREN_no
+      Attributes:      
+        - Attribute:       DW_AT_location
+          Form:            DW_FORM_exprloc
+        - Attribute:       DW_AT_abstract_origin
+          Form:            DW_FORM_ref4
+    - Code:            0x0000000D
+      Tag:             DW_TAG_pointer_type
+      Children:        DW_CHILDREN_no
+      Attributes:      
+        - Attribute:       DW_AT_type
+          Form:            DW_FORM_ref4
+  debug_info:      
+    - Length:          
+        TotalLength:     579
+      Version:         4
+      AbbrOffset:      0
+      AddrSize:        8
+      Entries:         
+        - AbbrCode:        0x00000001
+          Values:          
+            - Value:           0x0000000000000000
+            - Value:           0x0000000000000004
+            - Value:           0x000000000000002E
+            - Value:           0x0000000000000000
+            - Value:           0x0000000000000044
+            - Value:           0x0000000000000000
+            - Value:           0x00000000000000E0
+        - AbbrCode:        0x00000002
+          Values:          
+            - Value:           0x0000000000000000
+            - Value:           0x000000000000001E
+            - Value:           0x0000000000000001
+              BlockData:       
+                - 0x56
+            - Value:           0x0000000000000089
+            - Value:           0x0000000000000084
+            - Value:           0x0000000000000001
+            - Value:           0x0000000000000006
+            - Value:           0x00000000000000B2
+            - Value:           0x0000000000000001
+        - AbbrCode:        0x00000003
+          Values:          
+            - Value:           0x0000000000000002
+              BlockData:       
+                - 0x91
+                - 0x7C
+            - Value:           0x00000000000000A7
+            - Value:           0x0000000000000001
+            - Value:           0x0000000000000006
+            - Value:           0x00000000000000B2
+        - AbbrCode:        0x00000003
+          Values:          
+            - Value:           0x0000000000000002
+              BlockData:       
+                - 0x91
+                - 0x78
+            - Value:           0x00000000000000A9
+            - Value:           0x0000000000000001
+            - Value:           0x0000000000000006
+            - Value:           0x00000000000000B2
+        - AbbrCode:        0x00000003
+          Values:          
+            - Value:           0x0000000000000002
+              BlockData:       
+                - 0x91
+                - 0x74
+            - Value:           0x00000000000000C3
+            - Value:           0x0000000000000001
+            - Value:           0x0000000000000006
+            - Value:           0x00000000000000B2
+        - AbbrCode:        0x00000004
+          Values:          
+            - Value:           0x0000000000000002
+              BlockData:       
+                - 0x91
+                - 0x70
+            - Value:           0x00000000000000AB
+            - Value:           0x0000000000000001
+            - Value:           0x0000000000000007
+            - Value:           0x00000000000000B2
+        - AbbrCode:        0x00000000
+          Values:          []
+        - AbbrCode:        0x00000005
+          Values:          
+            - Value:           0x0000000000000094
+            - Value:           0x000000000000009E
+            - Value:           0x0000000000000001
+            - Value:           0x0000000000000001
+            - Value:           0x00000000000000B2
+            - Value:           0x0000000000000001
+            - Value:           0x0000000000000001
+        - AbbrCode:        0x00000006
+          Values:          
+            - Value:           0x00000000000000A7
+            - Value:           0x0000000000000001
+            - Value:           0x0000000000000001
+            - Value:           0x00000000000000B2
+        - AbbrCode:        0x00000006
+          Values:          
+            - Value:           0x00000000000000A9
+            - Value:           0x0000000000000001
+            - Value:           0x0000000000000001
+            - Value:           0x00000000000000B2
+        - AbbrCode:        0x00000007
+          Values:          
+            - Value:           0x00000000000000AB
+            - Value:           0x0000000000000001
+            - Value:           0x0000000000000002
+            - Value:           0x00000000000000B2
+        - AbbrCode:        0x00000000
+          Values:          []
+        - AbbrCode:        0x00000008
+          Values:          
+            - Value:           0x00000000000000A3
+            - Value:           0x0000000000000005
+            - Value:           0x0000000000000004
+        - AbbrCode:        0x00000005
+          Values:          
+            - Value:           0x00000000000000B2
+            - Value:           0x00000000000000BE
+            - Value:           0x0000000000000001
+            - Value:           0x000000000000000B
+            - Value:           0x00000000000000B2
+            - Value:           0x0000000000000001
+            - Value:           0x0000000000000001
+        - AbbrCode:        0x00000006
+          Values:          
+            - Value:           0x00000000000000A7
+            - Value:           0x0000000000000001
+            - Value:           0x000000000000000B
+            - Value:           0x00000000000000B2
+        - AbbrCode:        0x00000006
+          Values:          
+            - Value:           0x00000000000000A9
+            - Value:           0x0000000000000001
+            - Value:           0x000000000000000B
+            - Value:           0x00000000000000B2
+        - AbbrCode:        0x00000006
+          Values:          
+            - Value:           0x00000000000000C3
+            - Value:           0x0000000000000001
+            - Value:           0x000000000000000B
+            - Value:           0x00000000000000B2
+        - AbbrCode:        0x00000006
+          Values:          
+            - Value:           0x00000000000000C5
+            - Value:           0x0000000000000001
+            - Value:           0x000000000000000B
+            - Value:           0x00000000000000B2
+        - AbbrCode:        0x00000007
+          Values:          
+            - Value:           0x00000000000000AB
+            - Value:           0x0000000000000001
+            - Value:           0x000000000000000C
+            - Value:           0x00000000000000B2
+        - AbbrCode:        0x00000000
+          Values:          []
+        - AbbrCode:        0x00000009
+          Values:          
+            - Value:           0x0000000000000020
+            - Value:           0x00000000000000C0
+            - Value:           0x0000000000000001
+              BlockData:       
+                - 0x56
+            - Value:           0x00000000000000C7
+            - Value:           0x0000000000000001
+            - Value:           0x0000000000000011
+            - Value:           0x00000000000000B2
+            - Value:           0x0000000000000001
+        - AbbrCode:        0x00000003
+          Values:          
+            - Value:           0x0000000000000003
+              BlockData:       
+                - 0x91
+                - 0xB4
+                - 0x7F
+            - Value:           0x00000000000000CC
+            - Value:           0x0000000000000001
+            - Value:           0x0000000000000011
+            - Value:           0x00000000000000B2
+        - AbbrCode:        0x00000003
+          Values:          
+            - Value:           0x0000000000000003
+              BlockData:       
+                - 0x91
+                - 0xA8
+                - 0x7F
+            - Value:           0x00000000000000D1
+            - Value:           0x0000000000000001
+            - Value:           0x0000000000000011
+            - Value:           0x0000000000000235
+        - AbbrCode:        0x00000004
+          Values:          
+            - Value:           0x0000000000000003
+              BlockData:       
+                - 0x91
+                - 0xA4
+                - 0x7F
+            - Value:           0x00000000000000DB
+            - Value:           0x0000000000000001
+            - Value:           0x0000000000000013
+            - Value:           0x00000000000000B2
+        - AbbrCode:        0x0000000A
+          Values:          
+            - Value:           0x0000000000000080
+            - Value:           0x000000000000005A
+            - Value:           0x0000000000000025
+            - Value:           0x0000000000000001
+            - Value:           0x0000000000000012
+        - AbbrCode:        0x0000000B
+          Values:          
+            - Value:           0x0000000000000002
+              BlockData:       
+                - 0x91
+                - 0x44
+            - Value:           0x0000000000000090
+        - AbbrCode:        0x0000000B
+          Values:          
+            - Value:           0x0000000000000002
+              BlockData:       
+                - 0x91
+                - 0x40
+            - Value:           0x000000000000009B
+        - AbbrCode:        0x0000000C
+          Values:          
+            - Value:           0x0000000000000003
+              BlockData:       
+                - 0x91
+                - 0xBC
+                - 0x7F
+            - Value:           0x00000000000000A6
+        - AbbrCode:        0x00000000
+          Values:          []
+        - AbbrCode:        0x0000000A
+          Values:          
+            - Value:           0x00000000000000B9
+            - Value:           0x000000000000007F
+            - Value:           0x000000000000003C
+            - Value:           0x0000000000000001
+            - Value:           0x0000000000000013
+        - AbbrCode:        0x0000000B
+          Values:          
+            - Value:           0x0000000000000002
+              BlockData:       
+                - 0x91
+                - 0x64
+            - Value:           0x00000000000000C9
+        - AbbrCode:        0x0000000B
+          Values:          
+            - Value:           0x0000000000000002
+              BlockData:       
+                - 0x91
+                - 0x60
+            - Value:           0x00000000000000D4
+        - AbbrCode:        0x0000000B
+          Values:          
+            - Value:           0x0000000000000002
+              BlockData:       
+                - 0x91
+                - 0x5C
+            - Value:           0x00000000000000DF
+        - AbbrCode:        0x0000000B
+          Values:          
+            - Value:           0x0000000000000002
+              BlockData:       
+                - 0x91
+                - 0x58
+            - Value:           0x00000000000000EA
+        - AbbrCode:        0x0000000C
+          Values:          
+            - Value:           0x0000000000000002
+              BlockData:       
+                - 0x91
+                - 0x54
+            - Value:           0x00000000000000F5
+        - AbbrCode:        0x0000000A
+          Values:          
+            - Value:           0x0000000000000080
+            - Value:           0x000000000000008B
+            - Value:           0x000000000000000C
+            - Value:           0x0000000000000001
+            - Value:           0x000000000000000C
+        - AbbrCode:        0x0000000B
+          Values:          
+            - Value:           0x0000000000000002
+              BlockData:       
+                - 0x91
+                - 0x70
+            - Value:           0x0000000000000090
+        - AbbrCode:        0x0000000B
+          Values:          
+            - Value:           0x0000000000000002
+              BlockData:       
+                - 0x91
+                - 0x6C
+            - Value:           0x000000000000009B
+        - AbbrCode:        0x0000000C
+          Values:          
+            - Value:           0x0000000000000002
+              BlockData:       
+                - 0x91
+                - 0x68
+            - Value:           0x00000000000000A6
+        - AbbrCode:        0x00000000
+          Values:          []
+        - AbbrCode:        0x0000000A
+          Values:          
+            - Value:           0x0000000000000080
+            - Value:           0x00000000000000A3
+            - Value:           0x0000000000000009
+            - Value:           0x0000000000000001
+            - Value:           0x000000000000000C
+        - AbbrCode:        0x0000000B
+          Values:          
+            - Value:           0x0000000000000002
+              BlockData:       
+                - 0x91
+                - 0x7C
+            - Value:           0x0000000000000090
+        - AbbrCode:        0x0000000B
+          Values:          
+            - Value:           0x0000000000000002
+              BlockData:       
+                - 0x91
+                - 0x78
+            - Value:           0x000000000000009B
+        - AbbrCode:        0x0000000C
+          Values:          
+            - Value:           0x0000000000000002
+              BlockData:       
+                - 0x91
+                - 0x74
+            - Value:           0x00000000000000A6
+        - AbbrCode:        0x00000000
+          Values:          []
+        - AbbrCode:        0x00000000
+          Values:          []
+        - AbbrCode:        0x0000000A
+          Values:          
+            - Value:           0x0000000000000080
+            - Value:           0x00000000000000CC
+            - Value:           0x0000000000000009
+            - Value:           0x0000000000000001
+            - Value:           0x0000000000000014
+        - AbbrCode:        0x0000000B
+          Values:          
+            - Value:           0x0000000000000002
+              BlockData:       
+                - 0x91
+                - 0x50
+            - Value:           0x0000000000000090
+        - AbbrCode:        0x0000000B
+          Values:          
+            - Value:           0x0000000000000002
+              BlockData:       
+                - 0x91
+                - 0x4C
+            - Value:           0x000000000000009B
+        - AbbrCode:        0x0000000C
+          Values:          
+            - Value:           0x0000000000000002
+              BlockData:       
+                - 0x91
+                - 0x48
+            - Value:           0x00000000000000A6
+        - AbbrCode:        0x00000000
+          Values:          []
+        - AbbrCode:        0x00000000
+          Values:          []
+        - AbbrCode:        0x0000000D
+          Values:          
+            - Value:           0x000000000000023A
+        - AbbrCode:        0x0000000D
+          Values:          
+            - Value:           0x000000000000023F
+        - AbbrCode:        0x00000008
+          Values:          
+            - Value:           0x00000000000000D6
+            - Value:           0x0000000000000006
+            - Value:           0x0000000000000001
+        - AbbrCode:        0x00000000
+          Values:          []
+  debug_line:      
+    - Length:          
+        TotalLength:     202
+      Version:         4
+      PrologueLength:  45
+      MinInstLength:   1
+      MaxOpsPerInst:   1
+      DefaultIsStmt:   1
+      LineBase:        251
+      LineRange:       14
+      OpcodeBase:      13
+      StandardOpcodeLengths: [ 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 ]
+      IncludeDirs:     []
+      Files:           
+        - Name:            inlined-functions.cpp
+          DirIdx:          0
+          ModTime:         0
+          Length:          0
+      Opcodes:         
+        - Opcode:          DW_LNS_extended_op
+          ExtLen:          9
+          SubOpcode:       DW_LNE_set_address
+          Data:            0
+        - Opcode:          0x17
+          Data:            0
+        - Opcode:          DW_LNS_set_column
+          Data:            18
+        - Opcode:          DW_LNS_set_prologue_end
+          Data:            18
+        - Opcode:          0xC9
+          Data:            18
+        - Opcode:          DW_LNS_set_column
+          Data:            20
+        - Opcode:          DW_LNS_negate_stmt
+          Data:            20
+        - Opcode:          0x3C
+          Data:            20
+        - Opcode:          DW_LNS_set_column
+          Data:            24
+        - Opcode:          0x3C
+          Data:            24
+        - Opcode:          DW_LNS_set_column
+          Data:            9
+        - Opcode:          0x3C
+          Data:            9
+        - Opcode:          DW_LNS_set_column
+          Data:            12
+        - Opcode:          DW_LNS_negate_stmt
+          Data:            12
+        - Opcode:          0x3D
+          Data:            12
+        - Opcode:          DW_LNS_set_column
+          Data:            5
+        - Opcode:          DW_LNS_negate_stmt
+          Data:            5
+        - Opcode:          0x3C
+          Data:            5
+        - Opcode:          DW_LNS_set_column
+          Data:            0
+        - Opcode:          DW_LNS_negate_stmt
+          Data:            0
+        - Opcode:          DW_LNS_advance_line
+          SData:           9
+          Data:            0
+        - Opcode:          0x4A
+          Data:            0
+        - Opcode:          DW_LNS_set_column
+          Data:            5
+        - Opcode:          DW_LNS_set_prologue_end
+          Data:            5
+        - Opcode:          DW_LNS_const_add_pc
+          Data:            5
+        - Opcode:          0x59
+          Data:            5
+        - Opcode:          DW_LNS_set_column
+          Data:            18
+        - Opcode:          DW_LNS_advance_line
+          SData:           -16
+          Data:            18
+        - Opcode:          DW_LNS_advance_pc
+          Data:            36
+        - Opcode:          DW_LNS_copy
+          Data:            36
+        - Opcode:          DW_LNS_set_column
+          Data:            20
+        - Opcode:          DW_LNS_negate_stmt
+          Data:            20
+        - Opcode:          0x3C
+          Data:            20
+        - Opcode:          DW_LNS_set_column
+          Data:            9
+        - Opcode:          0x3C
+          Data:            9
+        - Opcode:          DW_LNS_set_column
+          Data:            23
+        - Opcode:          DW_LNS_negate_stmt
+          Data:            23
+        - Opcode:          DW_LNS_advance_line
+          SData:           10
+          Data:            23
+        - Opcode:          DW_LNS_const_add_pc
+          Data:            23
+        - Opcode:          0xD6
+          Data:            23
+        - Opcode:          DW_LNS_set_column
+          Data:            26
+        - Opcode:          DW_LNS_negate_stmt
+          Data:            26
+        - Opcode:          0x3C
+          Data:            26
+        - Opcode:          DW_LNS_set_column
+          Data:            18
+        - Opcode:          DW_LNS_negate_stmt
+          Data:            18
+        - Opcode:          DW_LNS_advance_line
+          SData:           -10
+          Data:            18
+        - Opcode:          0x90
+          Data:            18
+        - Opcode:          DW_LNS_set_column
+          Data:            20
+        - Opcode:          DW_LNS_negate_stmt
+          Data:            20
+        - Opcode:          0x3C
+          Data:            20
+        - Opcode:          DW_LNS_set_column
+          Data:            9
+        - Opcode:          0x3C
+          Data:            9
+        - Opcode:          DW_LNS_set_column
+          Data:            12
+        - Opcode:          DW_LNS_negate_stmt
+          Data:            12
+        - Opcode:          0x3D
+          Data:            12
+        - Opcode:          DW_LNS_set_column
+          Data:            36
+        - Opcode:          DW_LNS_advance_line
+          SData:           9
+          Data:            36
+        - Opcode:          0x3C
+          Data:            36
+        - Opcode:          DW_LNS_set_column
+          Data:            39
+        - Opcode:          DW_LNS_negate_stmt
+          Data:            39
+        - Opcode:          0x3C
+          Data:            39
+        - Opcode:          DW_LNS_set_column
+          Data:            18
+        - Opcode:          DW_LNS_negate_stmt
+          Data:            18
+        - Opcode:          DW_LNS_advance_line
+          SData:           -10
+          Data:            18
+        - Opcode:          0x90
+          Data:            18
+        - Opcode:          DW_LNS_set_column
+          Data:            20
+        - Opcode:          DW_LNS_negate_stmt
+          Data:            20
+        - Opcode:          0x3C
+          Data:            20
+        - Opcode:          DW_LNS_set_column
+          Data:            9
+        - Opcode:          0x3C
+          Data:            9
+        - Opcode:          DW_LNS_set_column
+          Data:            29
+        - Opcode:          DW_LNS_negate_stmt
+          Data:            29
+        - Opcode:          DW_LNS_advance_line
+          SData:           10
+          Data:            29
+        - Opcode:          0x3C
+          Data:            29
+        - Opcode:          DW_LNS_set_column
+          Data:            9
+        - Opcode:          DW_LNS_negate_stmt
+          Data:            9
+        - Opcode:          0x3C
+          Data:            9
+        - Opcode:          DW_LNS_set_column
+          Data:            12
+        - Opcode:          DW_LNS_negate_stmt
+          Data:            12
+        - Opcode:          0x3D
+          Data:            12
+        - Opcode:          0x67
+          Data:            12
+        - Opcode:          DW_LNS_set_column
+          Data:            9
+        - Opcode:          0x41
+          Data:            9
+        - Opcode:          DW_LNS_set_column
+          Data:            18
+        - Opcode:          DW_LNS_advance_line
+          SData:           -17
+          Data:            18
+        - Opcode:          DW_LNS_const_add_pc
+          Data:            18
+        - Opcode:          0x12
+          Data:            18
+        - Opcode:          DW_LNS_set_column
+          Data:            20
+        - Opcode:          DW_LNS_negate_stmt
+          Data:            20
+        - Opcode:          0x3C
+          Data:            20
+        - Opcode:          DW_LNS_set_column
+          Data:            9
+        - Opcode:          0x3C
+          Data:            9
+        - Opcode:          DW_LNS_set_column
+          Data:            5
+        - Opcode:          DW_LNS_negate_stmt
+          Data:            5
+        - Opcode:          DW_LNS_advance_line
+          SData:           19
+          Data:            5
+        - Opcode:          0x3C
+          Data:            5
+        - Opcode:          DW_LNS_advance_pc
+          Data:            11
+        - Opcode:          DW_LNS_extended_op
+          ExtLen:          1
+          SubOpcode:       DW_LNE_end_sequence
+          Data:            11
+...
Index: lldb/unittests/Symbol/CMakeLists.txt
===================================================================
--- lldb/unittests/Symbol/CMakeLists.txt
+++ lldb/unittests/Symbol/CMakeLists.txt
@@ -4,17 +4,21 @@
   TestClangASTContext.cpp
   TestDWARFCallFrameInfo.cpp
   TestType.cpp
+  TestLineEntry.cpp
 
   LINK_LIBS
     lldbHost
     lldbSymbol
     lldbUtilityHelpers
     lldbPluginObjectFileELF
+    lldbPluginObjectFileMachO
+    lldbPluginSymbolVendorMacOSX
+    lldbPluginSymbolFileDWARF
+    LLVMTestingSupport
   )
 
-add_dependencies(SymbolTests yaml2obj)
-add_definitions(-DYAML2OBJ="$<TARGET_FILE:yaml2obj>")
 set(test_inputs
   basic-call-frame-info.yaml
+  inlined-functions.yaml
   )
 add_unittest_inputs(SymbolTests "${test_inputs}")
Index: lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp
===================================================================
--- lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp
+++ lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp
@@ -22,6 +22,7 @@
 #include "llvm/Support/Path.h"
 #include "llvm/Support/Program.h"
 #include "llvm/Support/raw_ostream.h"
+#include "llvm/Testing/Support/Error.h"
 #include "gtest/gtest.h"
 
 using namespace lldb_private;
@@ -46,33 +47,14 @@
 protected:
 };
 
-#define ASSERT_NO_ERROR(x)                                                     \
-  if (std::error_code ASSERT_NO_ERROR_ec = x) {                                \
-    llvm::SmallString<128> MessageStorage;                                     \
-    llvm::raw_svector_ostream Message(MessageStorage);                         \
-    Message << #x ": did not return errc::success.\n"                          \
-            << "error number: " << ASSERT_NO_ERROR_ec.value() << "\n"          \
-            << "error message: " << ASSERT_NO_ERROR_ec.message() << "\n";      \
-    GTEST_FATAL_FAILURE_(MessageStorage.c_str());                              \
-  } else {                                                                     \
-  }
-
 TEST_F(ObjectFileELFTest, SectionsResolveConsistently) {
-  std::string yaml = GetInputFilePath("sections-resolve-consistently.yaml");
   llvm::SmallString<128> obj;
   ASSERT_NO_ERROR(llvm::sys::fs::createTemporaryFile(
       "sections-resolve-consistently-%%%%%%", "obj", obj));
-
   llvm::FileRemover remover(obj);
-  llvm::StringRef args[] = {YAML2OBJ, yaml};
-  llvm::StringRef obj_ref = obj;
-  const llvm::Optional<llvm::StringRef> redirects[] = {llvm::None, obj_ref,
-                                                       llvm::None};
-  ASSERT_EQ(0,
-            llvm::sys::ExecuteAndWait(YAML2OBJ, args, llvm::None, redirects));
-  uint64_t size;
-  ASSERT_NO_ERROR(llvm::sys::fs::file_size(obj, size));
-  ASSERT_GT(size, 0u);
+  ASSERT_THAT_ERROR(
+      ReadYAMLObjectFile("sections-resolve-consistently.yaml", obj),
+      llvm::Succeeded());
 
   ModuleSpec spec{FileSpec(obj)};
   spec.GetSymbolFileSpec().SetFile(obj, FileSpec::Style::native);
@@ -155,21 +137,12 @@
 }
 
 TEST_F(ObjectFileELFTest, TestAARCH64Relocations) {
-  std::string yaml = GetInputFilePath("debug-info-relocations.pcm.yaml");
   llvm::SmallString<128> obj;
   ASSERT_NO_ERROR(llvm::sys::fs::createTemporaryFile(
       "debug-info-relocations-%%%%%%", "obj", obj));
-
   llvm::FileRemover remover(obj);
-  llvm::StringRef args[] = {YAML2OBJ, yaml};
-  llvm::StringRef obj_ref = obj;
-  const llvm::Optional<llvm::StringRef> redirects[] = {llvm::None, obj_ref,
-                                                       llvm::None};
-  ASSERT_EQ(0,
-            llvm::sys::ExecuteAndWait(YAML2OBJ, args, llvm::None, redirects));
-  uint64_t size;
-  ASSERT_NO_ERROR(llvm::sys::fs::file_size(obj, size));
-  ASSERT_GT(size, 0u);
+  ASSERT_THAT_ERROR(ReadYAMLObjectFile("debug-info-relocations.pcm.yaml", obj),
+                    llvm::Succeeded());
 
   ModuleSpec spec{FileSpec(obj)};
   spec.GetSymbolFileSpec().SetFile(obj, FileSpec::Style::native);
Index: lldb/unittests/ObjectFile/ELF/CMakeLists.txt
===================================================================
--- lldb/unittests/ObjectFile/ELF/CMakeLists.txt
+++ lldb/unittests/ObjectFile/ELF/CMakeLists.txt
@@ -6,11 +6,9 @@
     lldbPluginSymbolVendorELF
     lldbCore
     lldbUtilityHelpers
+    LLVMTestingSupport
   )
 
-add_dependencies(ObjectFileELFTests yaml2obj)
-add_definitions(-DYAML2OBJ="$<TARGET_FILE:yaml2obj>")
-
 set(test_inputs
   early-section-headers.so
   debug-info-relocations.pcm.yaml
Index: lldb/unittests/Interpreter/TestCompletion.cpp
===================================================================
--- lldb/unittests/Interpreter/TestCompletion.cpp
+++ lldb/unittests/Interpreter/TestCompletion.cpp
@@ -15,6 +15,7 @@
 #include "gtest/gtest.h"
 
 #include "TestingSupport/MockTildeExpressionResolver.h"
+#include "TestingSupport/TestUtilities.h"
 #include "llvm/ADT/SmallString.h"
 #include "llvm/Support/FileSystem.h"
 #include "llvm/Support/Path.h"
@@ -25,17 +26,6 @@
 using namespace llvm;
 using namespace lldb_private;
 
-#define ASSERT_NO_ERROR(x)                                                     \
-  if (std::error_code ASSERT_NO_ERROR_ec = x) {                                \
-    SmallString<128> MessageStorage;                                           \
-    raw_svector_ostream Message(MessageStorage);                               \
-    Message << #x ": did not return errc::success.\n"                          \
-            << "error number: " << ASSERT_NO_ERROR_ec.value() << "\n"          \
-            << "error message: " << ASSERT_NO_ERROR_ec.message() << "\n";      \
-    GTEST_FATAL_FAILURE_(MessageStorage.c_str());                              \
-  } else {                                                                     \
-  }
-
 namespace {
 
 class CompletionTest : public testing::Test {
Index: lldb/unittests/Core/MangledTest.cpp
===================================================================
--- lldb/unittests/Core/MangledTest.cpp
+++ lldb/unittests/Core/MangledTest.cpp
@@ -20,6 +20,7 @@
 #include "llvm/Support/FileUtilities.h"
 #include "llvm/Support/Path.h"
 #include "llvm/Support/Program.h"
+#include "llvm/Testing/Support/Error.h"
 
 #include "gtest/gtest.h"
 
@@ -49,38 +50,18 @@
   EXPECT_STREQ("", TheDemangled.GetCString());
 }
 
-#define ASSERT_NO_ERROR(x)                                                     \
-  if (std::error_code ASSERT_NO_ERROR_ec = x) {                                \
-    llvm::SmallString<128> MessageStorage;                                     \
-    llvm::raw_svector_ostream Message(MessageStorage);                         \
-    Message << #x ": did not return errc::success.\n"                          \
-            << "error number: " << ASSERT_NO_ERROR_ec.value() << "\n"          \
-            << "error message: " << ASSERT_NO_ERROR_ec.message() << "\n";      \
-    GTEST_FATAL_FAILURE_(MessageStorage.c_str());                              \
-  } else {                                                                     \
-  }
-
 TEST(MangledTest, NameIndexes_FindFunctionSymbols) {
   FileSystem::Initialize();
   HostInfo::Initialize();
   ObjectFileELF::Initialize();
   SymbolVendorELF::Initialize();
 
-  std::string Yaml = GetInputFilePath("mangled-function-names.yaml");
   llvm::SmallString<128> Obj;
   ASSERT_NO_ERROR(llvm::sys::fs::createTemporaryFile(
       "mangled-function-names-%%%%%%", "obj", Obj));
-
   llvm::FileRemover Deleter(Obj);
-  llvm::StringRef Args[] = {YAML2OBJ, Yaml};
-  llvm::StringRef ObjRef = Obj;
-  const llvm::Optional<llvm::StringRef> redirects[] = {llvm::None, ObjRef,
-                                                       llvm::None};
-  ASSERT_EQ(0,
-            llvm::sys::ExecuteAndWait(YAML2OBJ, Args, llvm::None, redirects));
-  uint64_t Size;
-  ASSERT_NO_ERROR(llvm::sys::fs::file_size(Obj, Size));
-  ASSERT_GT(Size, 0u);
+  ASSERT_THAT_ERROR(ReadYAMLObjectFile("mangled-function-names.yaml", Obj),
+                    llvm::Succeeded());
 
   ModuleSpec Spec{FileSpec(Obj)};
   Spec.GetSymbolFileSpec().SetFile(Obj, FileSpec::Style::native);
Index: lldb/unittests/Core/CMakeLists.txt
===================================================================
--- lldb/unittests/Core/CMakeLists.txt
+++ lldb/unittests/Core/CMakeLists.txt
@@ -10,13 +10,11 @@
     lldbPluginObjectFileELF
     lldbPluginSymbolVendorELF
     lldbUtilityHelpers
+    LLVMTestingSupport
   LINK_COMPONENTS
     Support
   )
 
-add_dependencies(LLDBCoreTests yaml2obj)
-add_definitions(-DYAML2OBJ="$<TARGET_FILE:yaml2obj>")
-
 set(test_inputs
   mangled-function-names.yaml
   )
Index: lldb/tools/lldb-test/lldb-test.cpp
===================================================================
--- lldb/tools/lldb-test/lldb-test.cpp
+++ lldb/tools/lldb-test/lldb-test.cpp
@@ -364,8 +364,10 @@
       cu_sp->FindLineEntry(0, Line, &src_file, false, &le);
       if (!le.IsValid())
         continue;
-
-      auto addr = le.GetSameLineContiguousAddressRange().GetBaseAddress();
+      const bool include_inlined_functions = false;
+      auto addr =
+          le.GetSameLineContiguousAddressRange(include_inlined_functions)
+              .GetBaseAddress();
       if (!addr.IsValid())
         continue;
 
@@ -414,8 +416,9 @@
     cu_sp->FindLineEntry(0, Line, &src_file, false, &le);
     if (!le.IsValid())
       continue;
-
-    auto addr = le.GetSameLineContiguousAddressRange().GetBaseAddress();
+    const bool include_inlined_functions = false;
+    auto addr = le.GetSameLineContiguousAddressRange(include_inlined_functions)
+                    .GetBaseAddress();
     if (!addr.IsValid())
       continue;
 
Index: lldb/source/Target/ThreadPlanStepRange.cpp
===================================================================
--- lldb/source/Target/ThreadPlanStepRange.cpp
+++ lldb/source/Target/ThreadPlanStepRange.cpp
@@ -126,8 +126,10 @@
           new_context.line_entry.original_file) {
         if (m_addr_context.line_entry.line == new_context.line_entry.line) {
           m_addr_context = new_context;
-          AddRange(
-              m_addr_context.line_entry.GetSameLineContiguousAddressRange());
+          const bool include_inlined_functions =
+              GetKind() == eKindStepOverRange;
+          AddRange(m_addr_context.line_entry.GetSameLineContiguousAddressRange(
+              include_inlined_functions));
           ret_value = true;
           if (log) {
             StreamString s;
@@ -142,8 +144,10 @@
         } else if (new_context.line_entry.line == 0) {
           new_context.line_entry.line = m_addr_context.line_entry.line;
           m_addr_context = new_context;
-          AddRange(
-              m_addr_context.line_entry.GetSameLineContiguousAddressRange());
+          const bool include_inlined_functions =
+              GetKind() == eKindStepOverRange;
+          AddRange(m_addr_context.line_entry.GetSameLineContiguousAddressRange(
+              include_inlined_functions));
           ret_value = true;
           if (log) {
             StreamString s;
Index: lldb/source/Target/ThreadPlanStepOut.cpp
===================================================================
--- lldb/source/Target/ThreadPlanStepOut.cpp
+++ lldb/source/Target/ThreadPlanStepOut.cpp
@@ -110,8 +110,9 @@
       return_address_decr_pc.CalculateSymbolContext(
           &return_address_sc, lldb::eSymbolContextLineEntry);
       if (return_address_sc.line_entry.IsValid()) {
-        range =
-            return_address_sc.line_entry.GetSameLineContiguousAddressRange();
+        const bool include_inlined_functions = false;
+        range = return_address_sc.line_entry.GetSameLineContiguousAddressRange(
+            include_inlined_functions);
         if (range.GetByteSize() > 0) {
           return_address =
               m_thread.GetProcess()->AdvanceAddressToNextBranchInstruction(
Index: lldb/source/Target/Thread.cpp
===================================================================
--- lldb/source/Target/Thread.cpp
+++ lldb/source/Target/Thread.cpp
@@ -1395,10 +1395,12 @@
     bool abort_other_plans, const LineEntry &line_entry,
     const SymbolContext &addr_context, lldb::RunMode stop_other_threads,
     Status &status, LazyBool step_out_avoids_code_withoug_debug_info) {
+  const bool include_inlined_functions = true;
+  auto address_range =
+      line_entry.GetSameLineContiguousAddressRange(include_inlined_functions);
   return QueueThreadPlanForStepOverRange(
-      abort_other_plans, line_entry.GetSameLineContiguousAddressRange(),
-      addr_context, stop_other_threads, status,
-      step_out_avoids_code_withoug_debug_info);
+      abort_other_plans, address_range, addr_context, stop_other_threads,
+      status, step_out_avoids_code_withoug_debug_info);
 }
 
 ThreadPlanSP Thread::QueueThreadPlanForStepInRange(
@@ -1428,8 +1430,10 @@
     lldb::RunMode stop_other_threads, Status &status,
     LazyBool step_in_avoids_code_without_debug_info,
     LazyBool step_out_avoids_code_without_debug_info) {
+  const bool include_inlined_functions = false;
   return QueueThreadPlanForStepInRange(
-      abort_other_plans, line_entry.GetSameLineContiguousAddressRange(),
+      abort_other_plans,
+      line_entry.GetSameLineContiguousAddressRange(include_inlined_functions),
       addr_context, step_in_target, stop_other_threads, status,
       step_in_avoids_code_without_debug_info,
       step_out_avoids_code_without_debug_info);
Index: lldb/source/Symbol/LineEntry.cpp
===================================================================
--- lldb/source/Symbol/LineEntry.cpp
+++ lldb/source/Symbol/LineEntry.cpp
@@ -190,40 +190,62 @@
   return FileSpec::Compare(a.file, b.file, true);
 }
 
-AddressRange LineEntry::GetSameLineContiguousAddressRange() const {
+AddressRange LineEntry::GetSameLineContiguousAddressRange(
+    bool include_inlined_functions) const {
   // Add each LineEntry's range to complete_line_range until we find a
   // different file / line number.
   AddressRange complete_line_range = range;
+  auto symbol_context_scope = lldb::eSymbolContextLineEntry;
+  Declaration start_call_site(original_file, line);
+  if (include_inlined_functions)
+    symbol_context_scope |= lldb::eSymbolContextBlock;
 
   while (true) {
     SymbolContext next_line_sc;
     Address range_end(complete_line_range.GetBaseAddress());
     range_end.Slide(complete_line_range.GetByteSize());
-    range_end.CalculateSymbolContext(&next_line_sc,
-                                     lldb::eSymbolContextLineEntry);
+    range_end.CalculateSymbolContext(&next_line_sc, symbol_context_scope);
 
-    if (next_line_sc.line_entry.IsValid() &&
-        next_line_sc.line_entry.range.GetByteSize() > 0 &&
-        original_file == next_line_sc.line_entry.original_file) {
+    if (!next_line_sc.line_entry.IsValid() ||
+        next_line_sc.line_entry.range.GetByteSize() == 0)
+      break;
+
+    if (original_file == next_line_sc.line_entry.original_file &&
+        (next_line_sc.line_entry.line == 0 ||
+         line == next_line_sc.line_entry.line)) {
       // Include any line 0 entries - they indicate that this is compiler-
       // generated code that does not correspond to user source code.
-      if (next_line_sc.line_entry.line == 0) {
-        complete_line_range.SetByteSize(
-            complete_line_range.GetByteSize() +
-            next_line_sc.line_entry.range.GetByteSize());
-        continue;
-      }
-
-      if (line == next_line_sc.line_entry.line) {
-        // next_line_sc is the same file & line as this LineEntry, so extend
-        // our AddressRange by its size and continue to see if there are more
-        // LineEntries that we can combine.
-        complete_line_range.SetByteSize(
-            complete_line_range.GetByteSize() +
-            next_line_sc.line_entry.range.GetByteSize());
-        continue;
-      }
+      // next_line_sc is the same file & line as this LineEntry, so extend
+      // our AddressRange by its size and continue to see if there are more
+      // LineEntries that we can combine. However, if there was nothing to
+      // extend we're done.
+      if (!complete_line_range.Extend(next_line_sc.line_entry.range))
+        break;
+      continue;
+    }
+
+    if (include_inlined_functions && next_line_sc.block &&
+        next_line_sc.block->GetContainingInlinedBlock() != nullptr) {
+      // The next_line_sc might be in a different file if it's an inlined
+      // function. If this is the case then we still want to expand our line
+      // range to include them if the inlined function is at the same call site
+      // as this line entry. The current block could represent a nested inline
+      // function call so we need to need to check up the block tree to see if
+      // we find one.
+      auto inlined_parent_block =
+          next_line_sc.block->GetContainingInlinedBlockWithCallSite(
+              start_call_site);
+      if (!inlined_parent_block)
+        // We didn't find any parent inlined block with a call site at this line
+        // entry so this inlined function is probably at another line.
+        break;
+      // Extend our AddressRange by the size of the inlined block, but if there
+      // was nothing to add then we're done.
+      if (!complete_line_range.Extend(next_line_sc.line_entry.range))
+        break;
+      continue;
     }
+
     break;
   }
   return complete_line_range;
Index: lldb/source/Symbol/Declaration.cpp
===================================================================
--- lldb/source/Symbol/Declaration.cpp
+++ lldb/source/Symbol/Declaration.cpp
@@ -83,6 +83,11 @@
   return 0;
 }
 
+bool Declaration::FileAndLineEqual(const Declaration &declaration) const {
+  int file_compare = FileSpec::Compare(this->m_file, declaration.m_file, true);
+  return file_compare == 0 && this->m_line == declaration.m_line;
+}
+
 bool lldb_private::operator==(const Declaration &lhs, const Declaration &rhs) {
 #ifdef LLDB_ENABLE_DECLARATION_COLUMNS
   if (lhs.GetColumn() == rhs.GetColumn())
Index: lldb/source/Symbol/Block.cpp
===================================================================
--- lldb/source/Symbol/Block.cpp
+++ lldb/source/Symbol/Block.cpp
@@ -212,6 +212,21 @@
   return nullptr;
 }
 
+Block *Block::GetContainingInlinedBlockWithCallSite(
+    const Declaration &find_call_site) {
+  auto inlined_block = GetContainingInlinedBlock();
+
+  while (inlined_block) {
+    auto function_info = inlined_block->GetInlinedFunctionInfo();
+
+    if (function_info &&
+        function_info->GetCallSite().FileAndLineEqual(find_call_site))
+      return inlined_block;
+    inlined_block = inlined_block->GetInlinedParent();
+  }
+  return nullptr;
+}
+
 bool Block::GetRangeContainingOffset(const addr_t offset, Range &range) {
   const Range *range_ptr = m_ranges.FindEntryThatContains(offset);
   if (range_ptr) {
Index: lldb/source/Core/AddressRange.cpp
===================================================================
--- lldb/source/Core/AddressRange.cpp
+++ lldb/source/Core/AddressRange.cpp
@@ -122,6 +122,24 @@
   return false;
 }
 
+bool AddressRange::Extend(const AddressRange &rhs_range) {
+  addr_t lhs_end_addr = GetBaseAddress().GetFileAddress() + GetByteSize();
+  addr_t rhs_base_addr = rhs_range.GetBaseAddress().GetFileAddress();
+
+  if (!ContainsFileAddress(rhs_range.GetBaseAddress()) &&
+      lhs_end_addr != rhs_base_addr)
+    // The ranges don't intersect at all on the right side of this range.
+    return false;
+
+  addr_t rhs_end_addr = rhs_base_addr + rhs_range.GetByteSize();
+  if (lhs_end_addr >= rhs_end_addr)
+    // The rhs range totally overlaps this one, nothing to add.
+    return false;
+
+  m_byte_size += rhs_end_addr - lhs_end_addr;
+  return true;
+}
+
 void AddressRange::Clear() {
   m_base_addr.Clear();
   m_byte_size = 0;
Index: lldb/include/lldb/Symbol/LineEntry.h
===================================================================
--- lldb/include/lldb/Symbol/LineEntry.h
+++ lldb/include/lldb/Symbol/LineEntry.h
@@ -123,13 +123,21 @@
   /// LineEntry (and it will include the range of the following LineEntries
   /// that match either 32 or 0.)
   ///
+  /// When \b include_inlined_functions is \b true inlined functions with
+  /// a call site at this LineEntry will also be included in the complete
+  /// range.
+  ///
   /// If the initial LineEntry this method is called on is a line #0, only the
   /// range of contiuous LineEntries with line #0 will be included in the
   /// complete range.
   ///
+  /// @param[in] include_inlined_functions
+  ///     Whether to include inlined functions at the same line or not.
+  ///
   /// \return
   ///     The contiguous AddressRange for this source line.
-  AddressRange GetSameLineContiguousAddressRange() const;
+  AddressRange
+  GetSameLineContiguousAddressRange(bool include_inlined_functions) const;
 
   /// Apply file mappings from target.source-map to the LineEntry's file.
   ///
Index: lldb/include/lldb/Symbol/Declaration.h
===================================================================
--- lldb/include/lldb/Symbol/Declaration.h
+++ lldb/include/lldb/Symbol/Declaration.h
@@ -107,6 +107,17 @@
   ///     \li 1 if lhs > rhs
   static int Compare(const Declaration &lhs, const Declaration &rhs);
 
+  /// Checks if this object has the same file and line as another declaration
+  /// object.
+  ///
+  /// \param[in] declaration
+  ///     The const Declaration object to compare with.
+  ///
+  /// \return
+  ///     Returns \b true if \b declaration is at the same file and
+  ///     line, \b false otherwise.
+  bool FileAndLineEqual(const Declaration &declaration) const;
+
   /// Dump a description of this object to a Stream.
   ///
   /// Dump a description of the contents of this object to the supplied stream
Index: lldb/include/lldb/Symbol/Block.h
===================================================================
--- lldb/include/lldb/Symbol/Block.h
+++ lldb/include/lldb/Symbol/Block.h
@@ -185,6 +185,22 @@
   ///     parent.
   Block *GetInlinedParent();
 
+  //------------------------------------------------------------------
+  /// Get the inlined block at the given call site that contains this block.
+  ///
+  /// @param[in] find_call_site
+  ///     a declaration with the file and line of the call site to find.
+  ///
+  /// @return
+  ///     If this block contains inlined function info and is at the call
+  ///     site given by the file and line at the given \b declaration, then
+  ///     it will return this block, otherwise the parent blocks will be
+  ///     searched to see if any is at the call site. nullptr will be returned
+  ///     if no block is found at the call site.
+  //------------------------------------------------------------------
+  Block *
+  GetContainingInlinedBlockWithCallSite(const Declaration &find_call_site);
+
   /// Get the sibling block for this block.
   ///
   /// \return
Index: lldb/include/lldb/Core/AddressRange.h
===================================================================
--- lldb/include/lldb/Core/AddressRange.h
+++ lldb/include/lldb/Core/AddressRange.h
@@ -163,6 +163,20 @@
   ///     range, \b false otherwise.
   bool ContainsLoadAddress(lldb::addr_t load_addr, Target *target) const;
 
+  //------------------------------------------------------------------
+  /// Extends this range with \b rhs_range if it overlaps this range on the
+  /// right side. The range overlaps on the right side if the base address
+  /// of \b rhs_range lies within this range or if it's contiguous on its
+  /// right side.
+  ///
+  /// @param[in] rhs_range
+  ///     The range to extend at the right side.
+  ///
+  /// @return
+  ///     Returns \b true if this range was extended, \b false otherwise.
+  //------------------------------------------------------------------
+  bool Extend(const AddressRange &rhs_range);
+
   /// Dump a description of this object to a Stream.
   ///
   /// Dump a description of the contents of this object to the supplied stream
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to