diff --git a/src/compiler.cc b/src/compiler.cc
index fd18713..a726606 100644
--- a/src/compiler.cc
+++ b/src/compiler.cc
@@ -64,12 +64,13 @@
 
 class AOTCompilationStats {
  public:
-  AOTCompilationStats() : stats_lock_("AOT compilation statistics lock"),
-     types_in_dex_cache_(0), types_not_in_dex_cache_(0),
-     strings_in_dex_cache_(0), strings_not_in_dex_cache_(0),
-     resolved_types_(0), unresolved_types_(0),
-     resolved_instance_fields_(0), unresolved_instance_fields_(0),
-     resolved_local_static_fields_(0), resolved_static_fields_(0), unresolved_static_fields_(0) {
+  AOTCompilationStats()
+      : stats_lock_("AOT compilation statistics lock"),
+        types_in_dex_cache_(0), types_not_in_dex_cache_(0),
+        strings_in_dex_cache_(0), strings_not_in_dex_cache_(0),
+        resolved_types_(0), unresolved_types_(0),
+        resolved_instance_fields_(0), unresolved_instance_fields_(0),
+        resolved_local_static_fields_(0), resolved_static_fields_(0), unresolved_static_fields_(0) {
     for (size_t i = 0; i <= kMaxInvokeType; i++) {
       resolved_methods_[i] = 0;
       unresolved_methods_[i] = 0;
diff --git a/src/debugger.cc b/src/debugger.cc
index 9e3ab3f..147a9b6 100644
--- a/src/debugger.cc
+++ b/src/debugger.cc
@@ -1488,8 +1488,8 @@
 static int GetStackDepth(Thread* thread) {
   struct CountStackDepthVisitor : public StackVisitor {
     CountStackDepthVisitor(const ManagedStack* stack,
-                           const std::vector<TraceStackFrame>* trace_stack) :
-                             StackVisitor(stack, trace_stack), depth(0) {}
+                           const std::vector<TraceStackFrame>* trace_stack)
+        : StackVisitor(stack, trace_stack), depth(0) {}
 
     bool VisitFrame() {
       if (!GetMethod()->IsRuntimeMethod()) {
@@ -1620,8 +1620,8 @@
 static Object* GetThis(Method** quickFrame) {
   struct FrameIdVisitor : public StackVisitor {
     FrameIdVisitor(const ManagedStack* stack, const std::vector<TraceStackFrame>* trace_stack,
-                   Method** m) : StackVisitor(stack, trace_stack),
-        quick_frame_to_find(m) , frame_id(0) {}
+                   Method** m)
+        : StackVisitor(stack, trace_stack), quick_frame_to_find(m) , frame_id(0) {}
 
     virtual bool VisitFrame() {
       if (quick_frame_to_find != GetCurrentQuickFrame()) {
@@ -1667,10 +1667,10 @@
   struct GetLocalVisitor : public StackVisitor {
     GetLocalVisitor(const ManagedStack* stack, const std::vector<TraceStackFrame>* trace_stack,
                     Context* context, JDWP::FrameId frameId, int slot, JDWP::JdwpTag tag,
-                    uint8_t* buf, size_t width) :
-      StackVisitor(stack, trace_stack, context), frame_id_(frameId), slot_(slot), tag_(tag),
-      buf_(buf), width_(width) {
-    }
+                    uint8_t* buf, size_t width)
+        : StackVisitor(stack, trace_stack, context), frame_id_(frameId), slot_(slot), tag_(tag),
+          buf_(buf), width_(width) {}
+
     bool VisitFrame() {
       if (GetFrameId() != frame_id_) {
         return true;  // Not our frame, carry on.
@@ -1781,10 +1781,10 @@
   struct SetLocalVisitor : public StackVisitor {
     SetLocalVisitor(const ManagedStack* stack, const std::vector<TraceStackFrame>* trace_stack,
                     JDWP::FrameId frame_id, int slot, JDWP::JdwpTag tag, uint64_t value,
-                    size_t width) :
-                      StackVisitor(stack, trace_stack), frame_id_(frame_id), slot_(slot), tag_(tag),
-                      value_(value), width_(width) {
-    }
+                    size_t width)
+        : StackVisitor(stack, trace_stack), frame_id_(frame_id), slot_(slot), tag_(tag),
+          value_(value), width_(width) {}
+
     bool VisitFrame() {
       if (GetFrameId() != frame_id_) {
         return true;  // Not our frame, carry on.
@@ -2059,12 +2059,13 @@
 
   struct SingleStepStackVisitor : public StackVisitor {
     SingleStepStackVisitor(const ManagedStack* stack,
-                           const std::vector<TraceStackFrame>* trace_stack) :
-                             StackVisitor(stack, trace_stack) {
+                           const std::vector<TraceStackFrame>* trace_stack)
+        : StackVisitor(stack, trace_stack) {
       MutexLock mu(gBreakpointsLock); // Keep GCC happy.
       gSingleStepControl.method = NULL;
       gSingleStepControl.stack_depth = 0;
     }
+
     bool VisitFrame() {
       MutexLock mu(gBreakpointsLock); // Keep GCC happy.
       const Method* m = GetMethod();
@@ -2953,9 +2954,8 @@
 
 struct AllocRecordStackVisitor : public StackVisitor {
   AllocRecordStackVisitor(const ManagedStack* stack,
-                          const std::vector<TraceStackFrame>* trace_stack, AllocRecord* record) :
-    StackVisitor(stack, trace_stack), record(record), depth(0) {
-  }
+                          const std::vector<TraceStackFrame>* trace_stack, AllocRecord* record)
+      : StackVisitor(stack, trace_stack), record(record), depth(0) {}
 
   bool VisitFrame() {
     if (depth >= kMaxAllocRecordStackDepth) {
diff --git a/src/dex_file.cc b/src/dex_file.cc
index 4d244fd..b4eb524 100644
--- a/src/dex_file.cc
+++ b/src/dex_file.cc
@@ -885,8 +885,11 @@
 }
 
 EncodedStaticFieldValueIterator::EncodedStaticFieldValueIterator(const DexFile& dex_file,
-    DexCache* dex_cache, ClassLinker* linker, const DexFile::ClassDef& class_def) :
-    dex_file_(dex_file), dex_cache_(dex_cache), linker_(linker), array_size_(), pos_(-1), type_(0) {
+                                                                 DexCache* dex_cache,
+                                                                 ClassLinker* linker,
+                                                                 const DexFile::ClassDef& class_def)
+    : dex_file_(dex_file), dex_cache_(dex_cache), linker_(linker), array_size_(), pos_(-1),
+      type_(0) {
   ptr_ = dex_file.GetEncodedStaticFieldValuesArray(class_def);
   if (ptr_ == NULL) {
     array_size_ = 0;
diff --git a/src/dex_file.h b/src/dex_file.h
index 668e695..993716c 100644
--- a/src/dex_file.h
+++ b/src/dex_file.h
@@ -734,8 +734,8 @@
   };
 
   struct LocalInfo {
-    LocalInfo() : name_(NULL), descriptor_(NULL), signature_(NULL), start_address_(0),
-        is_live_(false) {}
+    LocalInfo()
+        : name_(NULL), descriptor_(NULL), signature_(NULL), start_address_(0), is_live_(false) {}
 
     const char* name_;  // E.g., list
     const char* descriptor_;  // E.g., Ljava/util/LinkedList;
@@ -748,8 +748,8 @@
   };
 
   struct LineNumFromPcContext {
-    LineNumFromPcContext(uint32_t address, uint32_t line_num) :
-                           address_(address), line_num_(line_num) {}
+    LineNumFromPcContext(uint32_t address, uint32_t line_num)
+        : address_(address), line_num_(line_num) {}
     uint32_t address_;
     uint32_t line_num_;
    private:
diff --git a/src/file_linux.h b/src/file_linux.h
index b7dcd23..b5d6f3b 100644
--- a/src/file_linux.h
+++ b/src/file_linux.h
@@ -23,8 +23,8 @@
 
 class LinuxFile : public File {
  public:
-  LinuxFile(const char* name, int fd, bool auto_close) :
-        File(name), fd_(fd), auto_close_(auto_close) {}
+  LinuxFile(const char* name, int fd, bool auto_close)
+      : File(name), fd_(fd), auto_close_(auto_close) {}
   virtual ~LinuxFile();
 
   virtual void Close();
diff --git a/src/mark_stack.h b/src/mark_stack.h
index cd308c5..7d4114e 100644
--- a/src/mark_stack.h
+++ b/src/mark_stack.h
@@ -53,9 +53,7 @@
   void Reset();
 
  private:
-  MarkStack() :
-      begin_(NULL), limit_(NULL), ptr_(NULL) {
-  }
+  MarkStack() : begin_(NULL), limit_(NULL), ptr_(NULL) {}
 
   void Init();
 
diff --git a/src/oat/jni/arm/calling_convention_arm.h b/src/oat/jni/arm/calling_convention_arm.h
index cb1d6a9..527ffa1 100644
--- a/src/oat/jni/arm/calling_convention_arm.h
+++ b/src/oat/jni/arm/calling_convention_arm.h
@@ -24,8 +24,8 @@
 
 class ArmManagedRuntimeCallingConvention : public ManagedRuntimeCallingConvention {
  public:
-  ArmManagedRuntimeCallingConvention(bool is_static, bool is_synchronized, const char* shorty) :
-      ManagedRuntimeCallingConvention(is_static, is_synchronized, shorty) {}
+  ArmManagedRuntimeCallingConvention(bool is_static, bool is_synchronized, const char* shorty)
+      : ManagedRuntimeCallingConvention(is_static, is_synchronized, shorty) {}
   virtual ~ArmManagedRuntimeCallingConvention() {}
   // Calling convention
   virtual ManagedRegister ReturnRegister();
diff --git a/src/oat/jni/calling_convention.h b/src/oat/jni/calling_convention.h
index 6feff0f..ae6c7ed 100644
--- a/src/oat/jni/calling_convention.h
+++ b/src/oat/jni/calling_convention.h
@@ -188,8 +188,8 @@
   virtual const std::vector<ManagedRegister>& EntrySpills() = 0;
 
  protected:
-  ManagedRuntimeCallingConvention(bool is_static, bool is_synchronized, const char* shorty) :
-      CallingConvention(is_static, is_synchronized, shorty) {}
+  ManagedRuntimeCallingConvention(bool is_static, bool is_synchronized, const char* shorty)
+      : CallingConvention(is_static, is_synchronized, shorty) {}
 };
 
 // Abstraction for JNI calling conventions
@@ -275,8 +275,8 @@
     kObjectOrClass = 1
   };
 
-  explicit JniCallingConvention(bool is_static, bool is_synchronized, const char* shorty) :
-      CallingConvention(is_static, is_synchronized, shorty) {}
+  explicit JniCallingConvention(bool is_static, bool is_synchronized, const char* shorty)
+      : CallingConvention(is_static, is_synchronized, shorty) {}
 
   // Number of stack slots for outgoing arguments, above which the SIRT is
   // located
diff --git a/src/oat/jni/x86/calling_convention_x86.h b/src/oat/jni/x86/calling_convention_x86.h
index e32b8fd..3bf4f7c 100644
--- a/src/oat/jni/x86/calling_convention_x86.h
+++ b/src/oat/jni/x86/calling_convention_x86.h
@@ -25,8 +25,8 @@
 class X86ManagedRuntimeCallingConvention : public ManagedRuntimeCallingConvention {
  public:
   explicit X86ManagedRuntimeCallingConvention(bool is_static, bool is_synchronized,
-                                              const char* shorty) :
-      ManagedRuntimeCallingConvention(is_static, is_synchronized, shorty) {}
+                                              const char* shorty)
+      : ManagedRuntimeCallingConvention(is_static, is_synchronized, shorty) {}
   virtual ~X86ManagedRuntimeCallingConvention() {}
   // Calling convention
   virtual ManagedRegister ReturnRegister();
@@ -45,8 +45,8 @@
 
 class X86JniCallingConvention : public JniCallingConvention {
  public:
-  X86JniCallingConvention(bool is_static, bool is_synchronized, const char* shorty) :
-      JniCallingConvention(is_static, is_synchronized, shorty) {}
+  X86JniCallingConvention(bool is_static, bool is_synchronized, const char* shorty)
+      : JniCallingConvention(is_static, is_synchronized, shorty) {}
   virtual ~X86JniCallingConvention() {}
   // Calling convention
   virtual ManagedRegister ReturnRegister();
diff --git a/src/oat/utils/arm/assembler_arm.h b/src/oat/utils/arm/assembler_arm.h
index 31c3ab0..edfaf30 100644
--- a/src/oat/utils/arm/assembler_arm.h
+++ b/src/oat/utils/arm/assembler_arm.h
@@ -661,9 +661,9 @@
  public:
   ArmSuspendCountSlowPath(ArmManagedRegister return_reg,
                           FrameOffset return_save_location,
-                          size_t return_size) :
-     return_register_(return_reg), return_save_location_(return_save_location),
-     return_size_(return_size) {}
+                          size_t return_size)
+      : return_register_(return_reg), return_save_location_(return_save_location),
+        return_size_(return_size) {}
   virtual void Emit(Assembler *sp_asm);
 
  private:
diff --git a/src/oat/utils/x86/assembler_x86.h b/src/oat/utils/x86/assembler_x86.h
index d4356b6..c8edf44 100644
--- a/src/oat/utils/x86/assembler_x86.h
+++ b/src/oat/utils/x86/assembler_x86.h
@@ -659,9 +659,9 @@
  public:
   X86SuspendCountSlowPath(X86ManagedRegister return_reg,
                           FrameOffset return_save_location,
-                          size_t return_size) :
-     return_register_(return_reg), return_save_location_(return_save_location),
-     return_size_(return_size) {}
+                          size_t return_size)
+      : return_register_(return_reg), return_save_location_(return_save_location),
+        return_size_(return_size) {}
   virtual void Emit(Assembler *sp_asm);
 
  private:
diff --git a/src/oatdump.cc b/src/oatdump.cc
index ac5e41d..b599eaa 100644
--- a/src/oatdump.cc
+++ b/src/oatdump.cc
@@ -515,10 +515,9 @@
  public:
   explicit ImageDumper(std::ostream& os, const std::string& image_filename,
                        const std::string& host_prefix, Space& image_space,
-                       const ImageHeader& image_header) : os_(os),
-                       image_filename_(image_filename), host_prefix_(host_prefix),
-                       image_space_(image_space), image_header_(image_header) {
-  }
+                       const ImageHeader& image_header)
+      : os_(os), image_filename_(image_filename), host_prefix_(host_prefix),
+        image_space_(image_space), image_header_(image_header) {}
 
   void Dump() {
     os_ << "MAGIC:\n";
diff --git a/src/object_utils.h b/src/object_utils.h
index c8d50a1..8b2aab9 100644
--- a/src/object_utils.h
+++ b/src/object_utils.h
@@ -249,8 +249,8 @@
  public:
   FieldHelper() : class_linker_(NULL), dex_cache_(NULL), dex_file_(NULL), field_(NULL) {}
   explicit FieldHelper(const Field* f) : class_linker_(NULL), dex_cache_(NULL), dex_file_(NULL), field_(f) {}
-  FieldHelper(const Field* f, ClassLinker* l) : class_linker_(l), dex_cache_(NULL), dex_file_(NULL),
-      field_(f) {}
+  FieldHelper(const Field* f, ClassLinker* l)
+      : class_linker_(l), dex_cache_(NULL), dex_file_(NULL), field_(f) {}
 
   void ChangeField(const Field* new_f) {
     DCHECK(new_f != NULL);
@@ -377,14 +377,19 @@
 
 class MethodHelper {
  public:
-  MethodHelper() : class_linker_(NULL), dex_cache_(NULL), dex_file_(NULL), method_(NULL),
-      shorty_(NULL), shorty_len_(0) {}
-  explicit MethodHelper(const Method* m) : class_linker_(NULL), dex_cache_(NULL), dex_file_(NULL),
-      method_(NULL), shorty_(NULL), shorty_len_(0) {
+  MethodHelper()
+      : class_linker_(NULL), dex_cache_(NULL), dex_file_(NULL), method_(NULL), shorty_(NULL),
+        shorty_len_(0) {}
+
+  explicit MethodHelper(const Method* m)
+      : class_linker_(NULL), dex_cache_(NULL), dex_file_(NULL), method_(NULL), shorty_(NULL),
+        shorty_len_(0) {
     SetMethod(m);
   }
-  MethodHelper(const Method* m, ClassLinker* l) : class_linker_(l), dex_cache_(NULL),
-      dex_file_(NULL), method_(NULL), shorty_(NULL), shorty_len_(0) {
+
+  MethodHelper(const Method* m, ClassLinker* l)
+      : class_linker_(l), dex_cache_(NULL), dex_file_(NULL), method_(NULL), shorty_(NULL),
+        shorty_len_(0) {
     SetMethod(m);
   }
 
diff --git a/src/space.h b/src/space.h
index ca7f1f1..76d4817 100644
--- a/src/space.h
+++ b/src/space.h
@@ -98,8 +98,8 @@
   virtual bool IsImageSpace() const = 0;
 
  protected:
-  Space(const std::string& name, MemMap* mem_map, byte* end) : name_(name), mem_map_(mem_map),
-      begin_(mem_map->Begin()), end_(end) {}
+  Space(const std::string& name, MemMap* mem_map, byte* end)
+      : name_(name), mem_map_(mem_map), begin_(mem_map->Begin()), end_(end) {}
 
   std::string name_;
   // Underlying storage of the space
@@ -182,8 +182,8 @@
   friend class Space;
 
   AllocSpace(const std::string& name, MemMap* mem_map, void* mspace, byte* end,
-             size_t growth_limit) :
-    Space(name, mem_map, end), mspace_(mspace), growth_limit_(growth_limit) {
+             size_t growth_limit)
+      : Space(name, mem_map, end), mspace_(mspace), growth_limit_(growth_limit) {
     CHECK(mspace != NULL);
   }
 
@@ -234,8 +234,8 @@
  private:
   friend class Space;
 
-  ImageSpace(const std::string& name, MemMap* mem_map) :
-      Space(name, mem_map, mem_map->End()) {}
+  ImageSpace(const std::string& name, MemMap* mem_map)
+      : Space(name, mem_map, mem_map->End()) {}
 
   DISALLOW_COPY_AND_ASSIGN(ImageSpace);
 };
diff --git a/src/stack.cc b/src/stack.cc
index 07a1cb1..e7c632c 100644
--- a/src/stack.cc
+++ b/src/stack.cc
@@ -173,8 +173,8 @@
 size_t StackVisitor::ComputeNumFrames() const {
   struct NumFramesVisitor : public StackVisitor {
     explicit NumFramesVisitor(const ManagedStack* stack,
-                              const std::vector<TraceStackFrame>* trace_stack) :
-                                StackVisitor(stack, trace_stack), frames(0) {}
+                              const std::vector<TraceStackFrame>* trace_stack)
+        : StackVisitor(stack, trace_stack), frames(0) {}
 
     virtual bool VisitFrame() {
       frames++;
diff --git a/src/stack.h b/src/stack.h
index 243ca28..ff0bcd0 100644
--- a/src/stack.h
+++ b/src/stack.h
@@ -146,8 +146,8 @@
 // code.
 class PACKED ManagedStack {
  public:
-  ManagedStack() : link_(NULL), top_shadow_frame_(NULL),
-                   top_quick_frame_(NULL), top_quick_frame_pc_(0) {}
+  ManagedStack()
+      : link_(NULL), top_shadow_frame_(NULL), top_quick_frame_(NULL), top_quick_frame_pc_(0) {}
   void PushManagedStackFragment(ManagedStack* fragment);
   void PopManagedStackFragment(const ManagedStack& record);
 
@@ -215,9 +215,10 @@
 class StackVisitor {
  protected:
   StackVisitor(const ManagedStack* stack, const std::vector<TraceStackFrame>* trace_stack,
-               Context* context = NULL) :
-    stack_start_(stack), trace_stack_(trace_stack), cur_shadow_frame_(NULL), cur_quick_frame_(NULL),
-    cur_quick_frame_pc_(0), num_frames_(0), cur_depth_(0), context_(context) {}
+               Context* context = NULL)
+      : stack_start_(stack), trace_stack_(trace_stack), cur_shadow_frame_(NULL),
+        cur_quick_frame_(NULL), cur_quick_frame_pc_(0), num_frames_(0), cur_depth_(0),
+        context_(context) {}
 
  public:
   virtual ~StackVisitor() {}
diff --git a/src/thread.cc b/src/thread.cc
index 940cd88..9f88f5a 100644
--- a/src/thread.cc
+++ b/src/thread.cc
@@ -519,9 +519,9 @@
 }
 
 struct StackDumpVisitor : public StackVisitor {
-  StackDumpVisitor(std::ostream& os, const Thread* thread) :
-    StackVisitor(thread->GetManagedStack(), thread->GetTraceStack()), last_method(NULL),
-    last_line_number(0), repetition_count(0), os(os), thread(thread), frame_count(0) {
+  StackDumpVisitor(std::ostream& os, const Thread* thread)
+      : StackVisitor(thread->GetManagedStack(), thread->GetTraceStack()), last_method(NULL),
+        last_line_number(0), repetition_count(0), os(os), thread(thread), frame_count(0) {
   }
 
   virtual ~StackDumpVisitor() {
@@ -998,9 +998,8 @@
 class CountStackDepthVisitor : public StackVisitor {
  public:
   CountStackDepthVisitor(const ManagedStack* stack,
-                         const std::vector<TraceStackFrame>* trace_stack) :
-                           StackVisitor(stack, trace_stack), depth_(0), skip_depth_(0),
-                           skipping_(true) {}
+                         const std::vector<TraceStackFrame>* trace_stack)
+      : StackVisitor(stack, trace_stack), depth_(0), skip_depth_(0), skipping_(true) {}
 
   bool VisitFrame() {
     // We want to skip frames up to and including the exception's constructor.
@@ -1039,9 +1038,9 @@
  public:
   explicit BuildInternalStackTraceVisitor(const ManagedStack* stack,
                                           const std::vector<TraceStackFrame>* trace_stack,
-                                          int skip_depth) :
-    StackVisitor(stack, trace_stack), skip_depth_(skip_depth), count_(0), dex_pc_trace_(NULL),
-    method_trace_(NULL) {}
+                                          int skip_depth)
+      : StackVisitor(stack, trace_stack), skip_depth_(skip_depth), count_(0), dex_pc_trace_(NULL),
+        method_trace_(NULL) {}
 
   bool Init(int depth, const ScopedJniThreadState& ts) {
     // Allocate method trace with an extra slot that will hold the PC trace
@@ -1551,8 +1550,8 @@
 Method* Thread::GetCurrentMethod(uint32_t* dex_pc, size_t* frame_id) const {
   struct CurrentMethodVisitor : public StackVisitor {
     CurrentMethodVisitor(const ManagedStack* stack,
-                         const std::vector<TraceStackFrame>* trace_stack) :
-      StackVisitor(stack, trace_stack), method_(NULL), dex_pc_(0), frame_id_(0) {}
+                         const std::vector<TraceStackFrame>* trace_stack)
+        : StackVisitor(stack, trace_stack), method_(NULL), dex_pc_(0), frame_id_(0) {}
 
     virtual bool VisitFrame() {
       Method* m = GetMethod();
@@ -1596,10 +1595,8 @@
 class ReferenceMapVisitor : public StackVisitor {
  public:
   ReferenceMapVisitor(const ManagedStack* stack, const std::vector<TraceStackFrame>* trace_stack,
-                      Context* context, Heap::RootVisitor* root_visitor,
-                      void* arg) : StackVisitor(stack, trace_stack, context),
-                      root_visitor_(root_visitor), arg_(arg) {
-  }
+                      Context* context, Heap::RootVisitor* root_visitor, void* arg)
+      : StackVisitor(stack, trace_stack, context), root_visitor_(root_visitor), arg_(arg) {}
 
   bool VisitFrame() {
     if (false) {
diff --git a/src/trace.cc b/src/trace.cc
index 7b7c3eb..6b5d668 100644
--- a/src/trace.cc
+++ b/src/trace.cc
@@ -196,8 +196,8 @@
 
 static void TraceRestoreStack(Thread* self, void*) {
   struct RestoreStackVisitor : public StackVisitor {
-    RestoreStackVisitor(Thread* self) : StackVisitor(self->GetManagedStack(),
-                                                     self->GetTraceStack()), self_(self) {}
+    RestoreStackVisitor(Thread* self)
+        : StackVisitor(self->GetManagedStack(), self->GetTraceStack()), self_(self) {}
 
     virtual bool VisitFrame() {
       if (self_->IsTraceStackEmpty()) {
diff --git a/src/verifier/reg_type.h b/src/verifier/reg_type.h
index 6f0193f..41a9255 100644
--- a/src/verifier/reg_type.h
+++ b/src/verifier/reg_type.h
@@ -306,9 +306,9 @@
  private:
   friend class RegTypeCache;
 
-  RegType(Type type, Object* klass_or_descriptor, uint32_t allocation_pc_or_constant, uint16_t cache_id) :
-    type_(type), klass_or_descriptor_(klass_or_descriptor), allocation_pc_or_constant_(allocation_pc_or_constant),
-    cache_id_(cache_id) {
+  RegType(Type type, Object* klass_or_descriptor, uint32_t allocation_pc_or_constant, uint16_t cache_id)
+      : type_(type), klass_or_descriptor_(klass_or_descriptor),
+        allocation_pc_or_constant_(allocation_pc_or_constant), cache_id_(cache_id) {
     DCHECK(IsConstant() || IsUninitializedTypes() || allocation_pc_or_constant == 0);
     if (!IsConstant() && !IsLongConstant() && !IsLongConstantHigh() && !IsUndefined() &&
         !IsConflict()) {
diff --git a/src/verifier/register_line.h b/src/verifier/register_line.h
index f9a2345..e501e13 100644
--- a/src/verifier/register_line.h
+++ b/src/verifier/register_line.h
@@ -53,8 +53,8 @@
 // (which is not visible to the GC).
 class RegisterLine {
  public:
-  RegisterLine(size_t num_regs, MethodVerifier* verifier) :
-    line_(new uint16_t[num_regs]), verifier_(verifier), num_regs_(num_regs) {
+  RegisterLine(size_t num_regs, MethodVerifier* verifier)
+      : line_(new uint16_t[num_regs]), verifier_(verifier), num_regs_(num_regs) {
     memset(line_.get(), 0, num_regs_ * sizeof(uint16_t));
     result_[0] = RegType::kRegTypeUndefined;
     result_[1] = RegType::kRegTypeUndefined;
