diff --git a/lldb/source/DataFormatters/CXXFunctionPointer.cpp b/lldb/source/DataFormatters/CXXFunctionPointer.cpp
index c9e0ccb..88e4444 100644
--- a/lldb/source/DataFormatters/CXXFunctionPointer.cpp
+++ b/lldb/source/DataFormatters/CXXFunctionPointer.cpp
@@ -1,4 +1,5 @@
-//===-- CXXFormatterFunctions.cpp---------------------------------*- C++ -*-===//
+//===-- CXXFormatterFunctions.cpp---------------------------------*- C++
+//-*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -20,47 +21,38 @@
 using namespace lldb_private;
 using namespace lldb_private::formatters;
 
-bool
-lldb_private::formatters::CXXFunctionPointerSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options)
-{
-    std::string destination;
-    StreamString sstr;
-    AddressType func_ptr_address_type = eAddressTypeInvalid;
-    addr_t func_ptr_address = valobj.GetPointerValue (&func_ptr_address_type);
-    if (func_ptr_address != 0 && func_ptr_address != LLDB_INVALID_ADDRESS)
-    {
-        switch (func_ptr_address_type)
-        {
-            case eAddressTypeInvalid:
-            case eAddressTypeFile:
-            case eAddressTypeHost:
-                break;
-                
-            case eAddressTypeLoad:
-            {
-                ExecutionContext exe_ctx (valobj.GetExecutionContextRef());
-                
-                Address so_addr;
-                Target *target = exe_ctx.GetTargetPtr();
-                if (target && target->GetSectionLoadList().IsEmpty() == false)
-                {
-                    if (target->GetSectionLoadList().ResolveLoadAddress(func_ptr_address, so_addr))
-                    {
-                        so_addr.Dump (&sstr,
-                                      exe_ctx.GetBestExecutionContextScope(),
-                                      Address::DumpStyleResolvedDescription,
-                                      Address::DumpStyleSectionNameOffset);
-                    }
-                }
-            }
-                break;
+bool lldb_private::formatters::CXXFunctionPointerSummaryProvider(
+    ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) {
+  std::string destination;
+  StreamString sstr;
+  AddressType func_ptr_address_type = eAddressTypeInvalid;
+  addr_t func_ptr_address = valobj.GetPointerValue(&func_ptr_address_type);
+  if (func_ptr_address != 0 && func_ptr_address != LLDB_INVALID_ADDRESS) {
+    switch (func_ptr_address_type) {
+    case eAddressTypeInvalid:
+    case eAddressTypeFile:
+    case eAddressTypeHost:
+      break;
+
+    case eAddressTypeLoad: {
+      ExecutionContext exe_ctx(valobj.GetExecutionContextRef());
+
+      Address so_addr;
+      Target *target = exe_ctx.GetTargetPtr();
+      if (target && target->GetSectionLoadList().IsEmpty() == false) {
+        if (target->GetSectionLoadList().ResolveLoadAddress(func_ptr_address,
+                                                            so_addr)) {
+          so_addr.Dump(&sstr, exe_ctx.GetBestExecutionContextScope(),
+                       Address::DumpStyleResolvedDescription,
+                       Address::DumpStyleSectionNameOffset);
         }
+      }
+    } break;
     }
-    if (sstr.GetSize() > 0)
-    {
-        stream.Printf("(%s)", sstr.GetData());
-        return true;
-    }
-    else
-        return false;
+  }
+  if (sstr.GetSize() > 0) {
+    stream.Printf("(%s)", sstr.GetData());
+    return true;
+  } else
+    return false;
 }
