diff --git a/internal/ceres/blas.cc b/internal/ceres/blas.cc
index d63ca51..f79b1eb 100644
--- a/internal/ceres/blas.cc
+++ b/internal/ceres/blas.cc
@@ -72,7 +72,7 @@
          c,
          &ldc);
 #endif
-};
+}
 
 }  // namespace internal
 }  // namespace ceres
diff --git a/internal/ceres/blas.h b/internal/ceres/blas.h
index a5c6862..2ab6663 100644
--- a/internal/ceres/blas.h
+++ b/internal/ceres/blas.h
@@ -38,7 +38,6 @@
 
 class BLAS {
  public:
-
   // transpose = true  : c = alpha * a'a + beta * c;
   // transpose = false : c = alpha * aa' + beta * c;
   //
diff --git a/internal/ceres/compressed_col_sparse_matrix_utils.h b/internal/ceres/compressed_col_sparse_matrix_utils.h
index 494a8a5..c8de2a1 100644
--- a/internal/ceres/compressed_col_sparse_matrix_utils.h
+++ b/internal/ceres/compressed_col_sparse_matrix_utils.h
@@ -80,7 +80,7 @@
       rhs_and_solution[r] -= v * rhs_and_solution[c];
     }
   }
-};
+}
 
 // Solve the linear system
 //
@@ -100,8 +100,8 @@
       rhs_and_solution[c] -= v * rhs_and_solution[r];
     }
     rhs_and_solution[c] =  rhs_and_solution[c] / values[cols[c + 1] - 1];
-  };
-};
+  }
+}
 
 // Given a upper triangular matrix R in compressed column form, solve
 // the linear system,
@@ -131,10 +131,10 @@
       solution[c] -= v * solution[r];
     }
     solution[c] =  solution[c] / values[cols[c + 1] - 1];
-  };
-  SolveUpperTriangularInPlace(num_cols, rows, cols, values, solution);
-};
+  }
 
+  SolveUpperTriangularInPlace(num_cols, rows, cols, values, solution);
+}
 
 }  // namespace internal
 }  // namespace ceres
diff --git a/internal/ceres/dense_normal_cholesky_solver.cc b/internal/ceres/dense_normal_cholesky_solver.cc
index 677987e..fbf3cbe 100644
--- a/internal/ceres/dense_normal_cholesky_solver.cc
+++ b/internal/ceres/dense_normal_cholesky_solver.cc
@@ -54,11 +54,11 @@
     const double* b,
     const LinearSolver::PerSolveOptions& per_solve_options,
     double* x) {
-   if (options_.dense_linear_algebra_library_type == EIGEN) {
-     return SolveUsingEigen(A, b, per_solve_options, x);
-   } else {
-     return SolveUsingLAPACK(A, b, per_solve_options, x);
-   }
+  if (options_.dense_linear_algebra_library_type == EIGEN) {
+    return SolveUsingEigen(A, b, per_solve_options, x);
+  } else {
+    return SolveUsingLAPACK(A, b, per_solve_options, x);
+  }
 }
 
 LinearSolver::Summary DenseNormalCholeskySolver::SolveUsingEigen(
@@ -93,7 +93,6 @@
   }
   event_logger.AddEvent("Product");
 
-  // Use dsyrk instead for the product.
   LinearSolver::Summary summary;
   summary.num_iterations = 1;
   summary.termination_type = TOLERANCE;
@@ -139,7 +138,8 @@
 
   // TODO(sameeragarwal): Replace this with a gemv call for true blasness.
   //   rhs = A'b
-  VectorRef(x, num_cols) =  A->matrix().transpose() * ConstVectorRef(b, A->num_rows());
+  VectorRef(x, num_cols) =
+      A->matrix().transpose() * ConstVectorRef(b, A->num_rows());
   event_logger.AddEvent("Product");
 
   const int info = LAPACK::SolveInPlaceUsingCholesky(num_cols, lhs.data(), x);
diff --git a/internal/ceres/dense_qr_solver.cc b/internal/ceres/dense_qr_solver.cc
index c61a96f..d76d58b 100644
--- a/internal/ceres/dense_qr_solver.cc
+++ b/internal/ceres/dense_qr_solver.cc
@@ -76,6 +76,8 @@
     A->AppendDiagonal(per_solve_options.D);
   }
 
+  // TODO(sameeragarwal): Since we are copying anyways, the diagonal
+  // can be appended to the matrix instead of doing it on A.
   lhs_ =  A->matrix();
 
   if (per_solve_options.D != NULL) {
@@ -91,7 +93,8 @@
   rhs_.head(num_rows) = ConstVectorRef(b, num_rows);
 
   if (work_.rows() == 1) {
-    const int work_size = LAPACK::EstimateWorkSizeForQR(lhs_.rows(), lhs_.cols());
+    const int work_size =
+        LAPACK::EstimateWorkSizeForQR(lhs_.rows(), lhs_.cols());
     VLOG(3) << "Working memory for Dense QR factorization: "
             << work_size * sizeof(double);
     work_.resize(work_size);
@@ -128,7 +131,6 @@
   const int num_rows = A->num_rows();
   const int num_cols = A->num_cols();
 
-
   if (per_solve_options.D != NULL) {
     // Temporarily append a diagonal block to the A matrix, but undo
     // it before returning the matrix to the user.
diff --git a/internal/ceres/lapack.cc b/internal/ceres/lapack.cc
index 6e7d21b..73bfa69 100644
--- a/internal/ceres/lapack.cc
+++ b/internal/ceres/lapack.cc
@@ -101,11 +101,22 @@
   int lwork = -1;
   double work;
   int info = 0;
-  dgels_(&trans, &num_rows, &num_cols, &nrhs, NULL, &num_rows, NULL, &num_rows, &work, &lwork, &info);
+  dgels_(&trans,
+         &num_rows,
+         &num_cols,
+         &nrhs,
+         NULL,
+         &num_rows,
+         NULL,
+         &num_rows,
+         &work,
+         &lwork,
+         &info);
+
   CHECK_EQ(info, 0);
   return work;
 #endif
-};
+}
 
 int LAPACK::SolveUsingQR(int num_rows,
                          int num_cols,
@@ -126,10 +137,21 @@
   int info = 0;
   double* lhs = const_cast<double*>(in_lhs);
 
-  dgels_(&trans, &m, &n, &nrhs, lhs, &lda, rhs_and_solution, &ldb, work, &work_size, &info);
+  dgels_(&trans,
+         &m,
+         &n,
+         &nrhs,
+         lhs,
+         &lda,
+         rhs_and_solution,
+         &ldb,
+         work,
+         &work_size,
+         &info);
+
   return info;
 #endif
-};
+}
 
 }  // namespace internal
 }  // namespace ceres
diff --git a/internal/ceres/schur_complement_solver_test.cc b/internal/ceres/schur_complement_solver_test.cc
index 745ea8e..d91c162 100644
--- a/internal/ceres/schur_complement_solver_test.cc
+++ b/internal/ceres/schur_complement_solver_test.cc
@@ -160,7 +160,8 @@
 #ifndef CERES_NO_SUITESPARSE
 TEST_F(SchurComplementSolverTest,
        SparseSchurWithSuiteSparseSmallProblemNoPostOrdering) {
-  ComputeAndCompareSolutions(2, false, SPARSE_SCHUR, EIGEN, SUITE_SPARSE, false);
+  ComputeAndCompareSolutions(
+      2, false, SPARSE_SCHUR, EIGEN, SUITE_SPARSE, false);
   ComputeAndCompareSolutions(2, true, SPARSE_SCHUR, EIGEN, SUITE_SPARSE, false);
 }
 
@@ -172,7 +173,8 @@
 
 TEST_F(SchurComplementSolverTest,
        SparseSchurWithSuiteSparseLargeProblemNoPostOrdering) {
-  ComputeAndCompareSolutions(3, false, SPARSE_SCHUR, EIGEN, SUITE_SPARSE, false);
+  ComputeAndCompareSolutions(
+      3, false, SPARSE_SCHUR, EIGEN, SUITE_SPARSE, false);
   ComputeAndCompareSolutions(3, true, SPARSE_SCHUR, EIGEN, SUITE_SPARSE, false);
 }
 
diff --git a/internal/ceres/solver_impl.cc b/internal/ceres/solver_impl.cc
index bd731fe..06c65f9 100644
--- a/internal/ceres/solver_impl.cc
+++ b/internal/ceres/solver_impl.cc
@@ -1231,7 +1231,7 @@
   // done.
 #if !defined(CERES_NO_SUITESPARSE) && defined(CERES_NO_CAMD)
   if (IsSchurType(linear_solver_options.type) &&
-      linear_solver_options.sparse_linear_algebra_library_type == SUITE_SPARSE) {
+      options->sparse_linear_algebra_library_type == SUITE_SPARSE) {
     linear_solver_options.use_postordering = true;
   }
 #endif
diff --git a/internal/ceres/suitesparse.h b/internal/ceres/suitesparse.h
index c177292..859e20e 100644
--- a/internal/ceres/suitesparse.h
+++ b/internal/ceres/suitesparse.h
@@ -268,7 +268,7 @@
 }  // namespace internal
 }  // namespace ceres
 
-#else // CERES_NO_SUITESPARSE
+#else  // CERES_NO_SUITESPARSE
 
 class SuiteSparse {};
 typedef void cholmod_factor;
