diff --git a/Android.mk b/Android.mk
index 4ef4372..c1561de 100644
--- a/Android.mk
+++ b/Android.mk
@@ -334,7 +334,7 @@
 .PHONY: cpplint-art
 cpplint-art:
 	./art/tools/cpplint.py \
-	    --filter=-,+build/header_guard,+whitespace/braces,+whitespace/comma,+runtime/explicit,+whitespace/newline,+whitespace/parens,+build/namespaces,+readability/fn_size,+whitespace/operators,+readability/braces,+whitespace/indent \
+	    --filter=-,+build/header_guard,+whitespace/braces,+whitespace/comma,+runtime/explicit,+whitespace/newline,+whitespace/parens,+build/namespaces,+readability/fn_size,+whitespace/operators,+readability/braces,+whitespace/indent,+whitespace/blank_line,+whitespace/end_of_line,+whitespace/labels,+whitespace/semicolon \
 	    $(shell find art -name *.h -o -name *$(ART_CPP_EXTENSION) | grep -v art/compiler/llvm/generated/)
 
 # "mm cpplint-art-aspirational" to see warnings we would like to fix
diff --git a/compiler/dex/mir_graph.cc b/compiler/dex/mir_graph.cc
index a768a19..c2ee8e8 100644
--- a/compiler/dex/mir_graph.cc
+++ b/compiler/dex/mir_graph.cc
@@ -453,7 +453,7 @@
     cur_block->successor_block_list.blocks =
         new (arena_) GrowableArray<SuccessorBlockInfo*>(arena_, 2, kGrowableArraySuccessorBlocks);
 
-    for (;iterator.HasNext(); iterator.Next()) {
+    for (; iterator.HasNext(); iterator.Next()) {
       BasicBlock *catch_block = FindBlock(iterator.GetHandlerAddress(), false /* split*/,
                                          false /* creat */, NULL  /* immed_pred_block_p */);
       catch_block->catch_entry = true;
@@ -994,9 +994,10 @@
       case Instruction::k22b:
         str.append(StringPrintf(", #%d", insn.vC));
         break;
-      default:
-        ; // Nothing left to print
+      default: {
+        // Nothing left to print
       }
+    }
   }
   if (nop) {
     str.append("]--optimized away");
diff --git a/compiler/dex/mir_optimization.cc b/compiler/dex/mir_optimization.cc
index 22c738a..d79b26e 100644
--- a/compiler/dex/mir_optimization.cc
+++ b/compiler/dex/mir_optimization.cc
@@ -191,9 +191,9 @@
     case Instruction::GOTO_16:
     case Instruction::GOTO_32:
       return kSelectGoto;
-    default:;
+    default:
+      return kSelectNone;
   }
-  return kSelectNone;
 }
 
 int MIRGraph::GetSSAUseCount(int s_reg) {
diff --git a/compiler/dex/quick/codegen_util.cc b/compiler/dex/quick/codegen_util.cc
index 7a59644..8daa397 100644
--- a/compiler/dex/quick/codegen_util.cc
+++ b/compiler/dex/quick/codegen_util.cc
@@ -461,7 +461,7 @@
 }
 
 static int AssignLiteralOffsetCommon(LIR* lir, int offset) {
-  for (;lir != NULL; lir = lir->next) {
+  for (; lir != NULL; lir = lir->next) {
     lir->offset = offset;
     offset += 4;
   }
diff --git a/compiler/dex/quick/ralloc_util.cc b/compiler/dex/quick/ralloc_util.cc
index 92bd94e..4542f8f 100644
--- a/compiler/dex/quick/ralloc_util.cc
+++ b/compiler/dex/quick/ralloc_util.cc
@@ -507,7 +507,7 @@
   if (start && finish) {
     LIR *p;
     DCHECK_EQ(s_reg1, s_reg2);
-    for (p = start; ;p = p->next) {
+    for (p = start; ; p = p->next) {
       NopLIR(p);
       if (p == finish)
         break;
diff --git a/compiler/dex/vreg_analysis.cc b/compiler/dex/vreg_analysis.cc
index a97d1ec..b50fe71 100644
--- a/compiler/dex/vreg_analysis.cc
+++ b/compiler/dex/vreg_analysis.cc
@@ -282,7 +282,7 @@
         bool defined_ref = rl_temp.defined && rl_temp.ref;
         bool is_wide = rl_temp.wide || ((attrs & DF_A_WIDE) != 0);
         bool is_high = is_phi && rl_temp.wide && rl_temp.high_word;
-        for (int i = 0; i < ssa_rep->num_uses;i++) {
+        for (int i = 0; i < ssa_rep->num_uses; i++) {
           rl_temp = reg_location_[ssa_rep->uses[i]];
           defined_fp |= rl_temp.defined && rl_temp.fp;
           defined_core |= rl_temp.defined && rl_temp.core;
diff --git a/compiler/llvm/llvm_compilation_unit.cc b/compiler/llvm/llvm_compilation_unit.cc
index 592059e..d4568b5 100644
--- a/compiler/llvm/llvm_compilation_unit.cc
+++ b/compiler/llvm/llvm_compilation_unit.cc
@@ -19,7 +19,7 @@
 // #define  stat64    stat
 // #define  fstat64   fstat
 // #define  lstat64   lstat
-// 
+//
 // which causes grief. bionic probably should not do that.
 #include <llvm/Target/TargetLibraryInfo.h>
 
diff --git a/runtime/base/histogram_test.cc b/runtime/base/histogram_test.cc
index 9f3587a..5592f1c 100644
--- a/runtime/base/histogram_test.cc
+++ b/runtime/base/histogram_test.cc
@@ -129,7 +129,6 @@
   EXPECT_GE(PerValue, 132);
   EXPECT_LE(PerValue, 145);
 }
-;
 
 TEST(Histtest, Reset) {
   UniquePtr<Histogram<uint64_t> > hist(new Histogram<uint64_t>("Reset"));
@@ -173,7 +172,6 @@
   EXPECT_GE(PerValue, 132);
   EXPECT_LE(PerValue, 145);
 }
-;
 
 TEST(Histtest, MultipleCreateHist) {
   UniquePtr<Histogram<uint64_t> > hist(new Histogram<uint64_t>("MultipleCreateHist"));
diff --git a/runtime/base/mutex.cc b/runtime/base/mutex.cc
index 1df0207..af45f3f 100644
--- a/runtime/base/mutex.cc
+++ b/runtime/base/mutex.cc
@@ -460,8 +460,8 @@
   return os;
 }
 
-ReaderWriterMutex::ReaderWriterMutex(const char* name, LockLevel level) :
-    BaseMutex(name, level)
+ReaderWriterMutex::ReaderWriterMutex(const char* name, LockLevel level)
+    : BaseMutex(name, level)
 #if ART_USE_FUTEXES
     , state_(0), exclusive_owner_(0), num_pending_readers_(0), num_pending_writers_(0)
 #endif
diff --git a/runtime/base/timing_logger.cc b/runtime/base/timing_logger.cc
index c7cbbe5..bf6fd17 100644
--- a/runtime/base/timing_logger.cc
+++ b/runtime/base/timing_logger.cc
@@ -46,7 +46,6 @@
 uint64_t TimingLogger::GetTotalNs() const {
   return times_.back() - times_.front();
 }
-;
 
 void TimingLogger::Dump(std::ostream &os) const {
   uint64_t largest_time = 0;
diff --git a/runtime/dex_instruction.h b/runtime/dex_instruction.h
index c3424dc..502f378 100644
--- a/runtime/dex_instruction.h
+++ b/runtime/dex_instruction.h
@@ -88,7 +88,7 @@
     DEX_INSTRUCTION_LIST(INSTRUCTION_ENUM)
 #undef DEX_INSTRUCTION_LIST
 #undef INSTRUCTION_ENUM
-  } ;
+  };
 
   enum Format {
     k10x,  // op
diff --git a/runtime/elf_file.cc b/runtime/elf_file.cc
index 6ce36e8..0be274c 100644
--- a/runtime/elf_file.cc
+++ b/runtime/elf_file.cc
@@ -22,23 +22,23 @@
 
 namespace art {
 
-ElfFile::ElfFile() :
-  file_(NULL),
-  writable_(false),
-  program_header_only_(false),
-  header_(NULL),
-  base_address_(NULL),
-  program_headers_start_(NULL),
-  section_headers_start_(NULL),
-  dynamic_program_header_(NULL),
-  dynamic_section_start_(NULL),
-  symtab_section_start_(NULL),
-  dynsym_section_start_(NULL),
-  strtab_section_start_(NULL),
-  dynstr_section_start_(NULL),
-  hash_section_start_(NULL),
-  symtab_symbol_table_(NULL),
-  dynsym_symbol_table_(NULL) {}
+ElfFile::ElfFile()
+  : file_(NULL),
+    writable_(false),
+    program_header_only_(false),
+    header_(NULL),
+    base_address_(NULL),
+    program_headers_start_(NULL),
+    section_headers_start_(NULL),
+    dynamic_program_header_(NULL),
+    dynamic_section_start_(NULL),
+    symtab_section_start_(NULL),
+    dynsym_section_start_(NULL),
+    strtab_section_start_(NULL),
+    dynstr_section_start_(NULL),
+    hash_section_start_(NULL),
+    symtab_symbol_table_(NULL),
+    dynsym_symbol_table_(NULL) {}
 
 ElfFile* ElfFile::Open(File* file, bool writable, bool program_header_only) {
   UniquePtr<ElfFile> elf_file(new ElfFile());
diff --git a/runtime/gc/accounting/mod_union_table-inl.h b/runtime/gc/accounting/mod_union_table-inl.h
index 9ea74d4..29450c1 100644
--- a/runtime/gc/accounting/mod_union_table-inl.h
+++ b/runtime/gc/accounting/mod_union_table-inl.h
@@ -27,7 +27,7 @@
 
 // A mod-union table to record image references to the Zygote and alloc space.
 class ModUnionTableToZygoteAllocspace : public ModUnionTableReferenceCache {
-public:
+ public:
   explicit ModUnionTableToZygoteAllocspace(Heap* heap) : ModUnionTableReferenceCache(heap) {}
 
   bool AddReference(const mirror::Object* /* obj */, const mirror::Object* ref) {
diff --git a/runtime/gc/accounting/mod_union_table.cc b/runtime/gc/accounting/mod_union_table.cc
index 940ed13..b33cbce 100644
--- a/runtime/gc/accounting/mod_union_table.cc
+++ b/runtime/gc/accounting/mod_union_table.cc
@@ -252,7 +252,7 @@
     const byte* card = &*it->first;
     if (*card == CardTable::kCardClean) {
       std::set<const Object*> reference_set;
-      for (It2 itr = it->second.begin(); itr != it->second.end();++itr) {
+      for (It2 itr = it->second.begin(); itr != it->second.end(); ++itr) {
         reference_set.insert(*itr);
       }
       ModUnionCheckReferences visitor(this, reference_set);
@@ -284,7 +284,7 @@
     uintptr_t end = start + CardTable::kCardSize;
     os << reinterpret_cast<void*>(start) << "-" << reinterpret_cast<void*>(end) << "->{";
     typedef std::vector<const Object*>::const_iterator It3;
-    for (It3 itr = it->second.begin(); itr != it->second.end();++itr) {
+    for (It3 itr = it->second.begin(); itr != it->second.end(); ++itr) {
       os << reinterpret_cast<const void*>(*itr) << ",";
     }
     os << "},";
diff --git a/runtime/gc/accounting/space_bitmap_test.cc b/runtime/gc/accounting/space_bitmap_test.cc
index 516a449..806f301 100644
--- a/runtime/gc/accounting/space_bitmap_test.cc
+++ b/runtime/gc/accounting/space_bitmap_test.cc
@@ -66,7 +66,7 @@
   EXPECT_TRUE(space_bitmap.get() != NULL);
 
   // Set all the odd bits in the first BitsPerWord * 3 to one.
-  for (size_t j = 0;j < kBitsPerWord * 3; ++j) {
+  for (size_t j = 0; j < kBitsPerWord * 3; ++j) {
     const mirror::Object* obj =
         reinterpret_cast<mirror::Object*>(heap_begin + j * SpaceBitmap::kAlignment);
     if (reinterpret_cast<uintptr_t>(obj) & 0xF) {
diff --git a/runtime/gc/collector/mark_sweep.cc b/runtime/gc/collector/mark_sweep.cc
index 2d07f062..dd72c0a 100644
--- a/runtime/gc/collector/mark_sweep.cc
+++ b/runtime/gc/collector/mark_sweep.cc
@@ -894,7 +894,7 @@
 
   // Empty the allocation stack.
   Thread* self = Thread::Current();
-  for (size_t i = 0;i < count;++i) {
+  for (size_t i = 0; i < count; ++i) {
     Object* obj = objects[i];
     // There should only be objects in the AllocSpace/LargeObjectSpace in the allocation stack.
     if (LIKELY(mark_bitmap->HasAddress(obj))) {
@@ -1271,7 +1271,7 @@
     const size_t fifo_size = 4;
     const size_t fifo_mask = fifo_size - 1;
     const Object* fifo[fifo_size];
-    for (size_t i = 0;i < fifo_size;++i) {
+    for (size_t i = 0; i < fifo_size; ++i) {
       fifo[i] = NULL;
     }
     size_t fifo_pos = 0;
diff --git a/runtime/gc/collector/partial_mark_sweep.h b/runtime/gc/collector/partial_mark_sweep.h
index 718c62e..25304b9 100644
--- a/runtime/gc/collector/partial_mark_sweep.h
+++ b/runtime/gc/collector/partial_mark_sweep.h
@@ -33,7 +33,7 @@
   explicit PartialMarkSweep(Heap* heap, bool is_concurrent, const std::string& name_prefix = "");
   ~PartialMarkSweep() {}
 
-protected:
+ protected:
   // Bind the live bits to the mark bits of bitmaps for spaces that aren't collected for partial
   // collections, ie the Zygote space. Also mark this space is immune.
   virtual void BindBitmaps() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
diff --git a/runtime/gc/collector/sticky_mark_sweep.h b/runtime/gc/collector/sticky_mark_sweep.h
index 8cd4aed..e009b62 100644
--- a/runtime/gc/collector/sticky_mark_sweep.h
+++ b/runtime/gc/collector/sticky_mark_sweep.h
@@ -34,7 +34,7 @@
   explicit StickyMarkSweep(Heap* heap, bool is_concurrent, const std::string& name_prefix = "");
   ~StickyMarkSweep() {}
 
-protected:
+ protected:
   // Bind the live bits to the mark bits of bitmaps for all spaces, all spaces other than the
   // alloc space will be marked as immune.
   void BindBitmaps() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
diff --git a/runtime/gc/space/large_object_space.h b/runtime/gc/space/large_object_space.h
index 20a4867..09c55ec 100644
--- a/runtime/gc/space/large_object_space.h
+++ b/runtime/gc/space/large_object_space.h
@@ -89,7 +89,7 @@
   // TODO: disabling thread safety analysis as this may be called when we already hold lock_.
   bool Contains(const mirror::Object* obj) const NO_THREAD_SAFETY_ANALYSIS;
 
-private:
+ private:
   explicit LargeObjectMapSpace(const std::string& name);
   virtual ~LargeObjectMapSpace() {}
 
diff --git a/runtime/gc/space/space.cc b/runtime/gc/space/space.cc
index eae281a..de48b74 100644
--- a/runtime/gc/space/space.cc
+++ b/runtime/gc/space/space.cc
@@ -22,8 +22,8 @@
 namespace gc {
 namespace space {
 
-Space::Space(const std::string& name, GcRetentionPolicy gc_retention_policy) :
-    name_(name), gc_retention_policy_(gc_retention_policy) { }
+Space::Space(const std::string& name, GcRetentionPolicy gc_retention_policy)
+    : name_(name), gc_retention_policy_(gc_retention_policy) { }
 
 void Space::Dump(std::ostream& os) const {
   os << GetName() << ":" << GetGcRetentionPolicy();
diff --git a/runtime/runtime_support.h b/runtime/runtime_support.h
index a6c3b38..43c6784 100644
--- a/runtime/runtime_support.h
+++ b/runtime/runtime_support.h
@@ -354,7 +354,7 @@
 JValue InvokeProxyInvocationHandler(ScopedObjectAccessUnchecked& soa, const char* shorty,
                                     jobject rcvr_jobj, jobject interface_method_jobj,
                                     std::vector<jvalue>& args)
-    SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) ;
+    SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
 
 // Entry point for deoptimization.
 static inline uintptr_t GetDeoptimizationEntryPoint() {
diff --git a/runtime/runtime_support_llvm.cc b/runtime/runtime_support_llvm.cc
index 7b4c3ca..9d83f9e 100644
--- a/runtime/runtime_support_llvm.cc
+++ b/runtime/runtime_support_llvm.cc
@@ -105,7 +105,6 @@
 }  // namespace art
 
 extern "C" {
-
 using ::art::CatchHandlerIterator;
 using ::art::DexFile;
 using ::art::FindFieldFast;
@@ -923,5 +922,4 @@
 void art_portable_constructor_barrier() {
   LOG(FATAL) << "Implemented by IRBuilder.";
 }
-
 }  // extern "C"
diff --git a/runtime/thread_pool.h b/runtime/thread_pool.h
index 7b626fb..c26926c 100644
--- a/runtime/thread_pool.h
+++ b/runtime/thread_pool.h
@@ -30,7 +30,7 @@
 class ThreadPool;
 
 class Task : public Closure {
-public:
+ public:
   // Called when references reaches 0.
   virtual void Finalize() { }
 };
diff --git a/runtime/verifier/method_verifier.cc b/runtime/verifier/method_verifier.cc
index f414b79..ca4dce4 100644
--- a/runtime/verifier/method_verifier.cc
+++ b/runtime/verifier/method_verifier.cc
@@ -58,7 +58,7 @@
         interesting = flags[i].IsOpcode();
         break;
       case kTrackCompilerInterestPoints:
-        interesting = flags[i].IsCompileTimeInfoPoint() || flags[i].IsBranchTarget() ;
+        interesting = flags[i].IsCompileTimeInfoPoint() || flags[i].IsBranchTarget();
         break;
       case kTrackRegsBranches:
         interesting = flags[i].IsBranchTarget();
@@ -3756,7 +3756,7 @@
   }
 
   UniquePtr<PcToConcreteMethodMap> pc_to_concrete_method_map;
-  const uint16_t* insns = code_item_->insns_ ;
+  const uint16_t* insns = code_item_->insns_;
   const Instruction* inst = Instruction::At(insns);
   const Instruction* end = Instruction::At(insns + code_item_->insns_size_in_code_units_);
 
diff --git a/runtime/verifier/reg_type.h b/runtime/verifier/reg_type.h
index fa9fc8c..33f4195 100644
--- a/runtime/verifier/reg_type.h
+++ b/runtime/verifier/reg_type.h
@@ -200,7 +200,7 @@
   bool IsJavaLangObject() const SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
   bool IsArrayTypes() const SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
   bool IsObjectArrayTypes() const SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
-  Primitive::Type GetPrimitiveType() const ;
+  Primitive::Type GetPrimitiveType() const;
   bool IsJavaLangObjectArray() const SHARED_LOCKS_REQUIRED(Locks::mutator_lock_);
   bool IsInstantiableTypes() const;
   const std::string& GetDescriptor() const {
