diff --git a/include/lldb/Symbol/SymbolContext.h b/include/lldb/Symbol/SymbolContext.h
index 0175b91..be2fd32 100644
--- a/include/lldb/Symbol/SymbolContext.h
+++ b/include/lldb/Symbol/SymbolContext.h
@@ -15,6 +15,7 @@
 
 #include "lldb/lldb-private.h"
 #include "lldb/Core/Address.h"
+#include "lldb/Core/Mangled.h"
 #include "lldb/Symbol/ClangASTType.h"
 #include "lldb/Symbol/LineEntry.h"
 
@@ -266,6 +267,23 @@
 //                                        const char *line_number,
 //                                        const char *symbol);
 
+    //------------------------------------------------------------------
+    /// Find a name of the innermost function for the symbol context.
+    ///
+    /// For instance, if the symbol context contains an inlined block,
+    /// it will return the inlined function name.
+    ///
+    /// @param[in] prefer_mangled
+    ///    if \btrue, then the mangled name will be returned if there
+    ///    is one.  Otherwise the unmangled name will be returned if it
+    ///    is available.
+    ///
+    /// @return
+    ///     The name of the function represented by this symbol context.
+    //------------------------------------------------------------------
+    ConstString
+    GetFunctionName (Mangled::NamePreference preference = Mangled::ePreferDemangled);
+
     bool
     GetParentInlinedFrameInfo (const Address &curr_frame_pc, 
                                bool is_concrete_frame,
diff --git a/source/Commands/CommandCompletions.cpp b/source/Commands/CommandCompletions.cpp
index 3ea62aa..4fb2d97 100644
--- a/source/Commands/CommandCompletions.cpp
+++ b/source/Commands/CommandCompletions.cpp
@@ -627,14 +627,9 @@
         {
             if (sc_list.GetContextAtIndex(i, sc))
             {
-                if (sc.function)
-                {
-                    m_match_set.insert (sc.function->GetMangled().GetDemangledName());
-                }
-                else if (sc.symbol && sc.symbol->GetAddressRangePtr())
-                {
-                    m_match_set.insert (sc.symbol->GetMangled().GetName());
-                }
+                ConstString func_name = sc.GetFunctionName(Mangled::ePreferDemangled);
+                if (!func_name.IsEmpty())
+                    m_match_set.insert (func_name);
             }
         }
     }
diff --git a/source/Symbol/SymbolContext.cpp b/source/Symbol/SymbolContext.cpp
index c7b2fb2..80ffd34 100644
--- a/source/Symbol/SymbolContext.cpp
+++ b/source/Symbol/SymbolContext.cpp
@@ -575,6 +575,29 @@
     return false;
 }
 
+ConstString 
+SymbolContext::GetFunctionName (Mangled::NamePreference preference)
+{
+    if (function)
+    {
+        if (block)
+        {
+            const InlineFunctionInfo *inline_info = block->GetInlinedFunctionInfo();
+            if (inline_info)
+                return inline_info->GetName(); 
+        }
+        return function->GetMangled().GetName(preference);
+    }
+    else if (symbol && symbol->GetAddressRangePtr())
+    {
+        return symbol->GetMangled().GetName(preference);
+    }
+    else
+    {
+        // No function, return an empty string.
+        return ConstString();
+    }
+}
 
 //----------------------------------------------------------------------
 //
