diff --git a/tools/bugpoint/BugDriver.cpp b/tools/bugpoint/BugDriver.cpp
index ee602b3..1bac8da 100644
--- a/tools/bugpoint/BugDriver.cpp
+++ b/tools/bugpoint/BugDriver.cpp
@@ -79,7 +79,7 @@
                 << InputFilename << "'!\n";
     }
   } catch (const ParseException &E) {
-    std::cerr << "bugpoint: " << E.getMessage() << "\n";
+    std::cerr << "bugpoint: " << E.getMessage() << '\n';
     Result = 0;
   }
   return Result;
@@ -107,7 +107,7 @@
     std::string ErrorMessage;
     if (LinkModules(Program, M.get(), &ErrorMessage)) {
       std::cerr << ToolName << ": error linking in '" << Filenames[i] << "': "
-                << ErrorMessage << "\n";
+                << ErrorMessage << '\n';
       return true;
     }
   }
@@ -143,7 +143,7 @@
   std::cout << "Running the code generator to test for a crash: ";
   try {
     compileProgram(Program);
-    std::cout << "\n";
+    std::cout << '\n';
   } catch (ToolExecutionError &TEE) {
     std::cout << TEE.what();
     return debugCodeGeneratorCrash();
@@ -160,7 +160,7 @@
     try {
       ReferenceOutputFile = executeProgramWithCBE("bugpoint.reference.out");
       CreatedOutput = true;
-      std::cout << "Reference output is: " << ReferenceOutputFile << "\n";
+      std::cout << "Reference output is: " << ReferenceOutputFile << '\n';
     } catch (ToolExecutionError &TEE) {
       std::cerr << TEE.what();
       if (Interpreter != cbe) {
diff --git a/tools/bugpoint/CrashDebugger.cpp b/tools/bugpoint/CrashDebugger.cpp
index 90e2edc..92aa996 100644
--- a/tools/bugpoint/CrashDebugger.cpp
+++ b/tools/bugpoint/CrashDebugger.cpp
@@ -329,7 +329,7 @@
   do {
     --Simplification;
     std::cout << "\n*** Attempting to reduce testcase by deleting instruc"
-              << "tions: Simplification Level #" << Simplification << "\n";
+              << "tions: Simplification Level #" << Simplification << '\n';
 
     // Now that we have deleted the functions that are unnecessary for the
     // program, try to remove instructions that are not necessary to cause the
@@ -416,7 +416,7 @@
 
   std::cout << "\n*** Found crashing pass"
             << (PassesToRun.size() == 1 ? ": " : "es: ")
-            << getPassesString(PassesToRun) << "\n";
+            << getPassesString(PassesToRun) << '\n';
 
   EmitProgressBytecode("passinput");
 
@@ -425,8 +425,9 @@
 
 static bool TestForCodeGenCrash(BugDriver &BD, Module *M) {
   try {
-    std::cerr << "\n";
+    std::cerr << '\n';
     BD.compileProgram(M);
+    std::cerr << '\n';
     return false;
   } catch (ToolExecutionError &TEE) {
     std::cerr << "<crash>\n";
diff --git a/tools/bugpoint/ExecutionDriver.cpp b/tools/bugpoint/ExecutionDriver.cpp
index 12ca123..7d6c4aa 100644
--- a/tools/bugpoint/ExecutionDriver.cpp
+++ b/tools/bugpoint/ExecutionDriver.cpp
@@ -42,7 +42,7 @@
 
   cl::opt<bool>
   CheckProgramExitCode("check-exit-code",
-                       cl::desc("Assume nonzero exit code is failure (default on)"),
+                   cl::desc("Assume nonzero exit code is failure (default on)"),
                        cl::init(true));
 
   cl::opt<std::string>
@@ -279,7 +279,7 @@
   bool FilesDifferent = false;
   if (DiffFiles(ReferenceOutputFile, Output, &Error)) {
     if (!Error.empty()) {
-      std::cerr << "While diffing output: " << Error << "\n";
+      std::cerr << "While diffing output: " << Error << '\n';
       exit(1);
     }
     FilesDifferent = true;
diff --git a/tools/bugpoint/Miscompilation.cpp b/tools/bugpoint/Miscompilation.cpp
index 2eedd60..0b7711b 100644
--- a/tools/bugpoint/Miscompilation.cpp
+++ b/tools/bugpoint/Miscompilation.cpp
@@ -174,7 +174,7 @@
   if (!DeleteInputs) M1 = CloneModule(M1);
   if (LinkModules(M1, M2, &ErrorMsg)) {
     std::cerr << BD.getToolName() << ": Error linking modules together:"
-              << ErrorMsg << "\n";
+              << ErrorMsg << '\n';
     exit(1);
   }
   if (DeleteInputs) delete M2;  // We are done with this module...
@@ -203,7 +203,7 @@
             << " run through the pass"
             << (BD.getPassesToRun().size() == 1 ? "" : "es") << ":";
   PrintFunctionList(Funcs);
-  std::cout << "\n";
+  std::cout << '\n';
 
   // Split the module into the two halves of the program we want.
   Module *ToNotOptimize = CloneModule(BD.getProgram());
@@ -296,7 +296,7 @@
     std::string ErrorMsg;
     if (LinkModules(ToNotOptimize, ToOptimizeLoopExtracted, &ErrorMsg)) {
       std::cerr << BD.getToolName() << ": Error linking modules together:"
-                << ErrorMsg << "\n";
+                << ErrorMsg << '\n';
       exit(1);
     }
 
@@ -359,7 +359,7 @@
   } else {
     std::cout << "blocks are extracted.";
   }
-  std::cout << "\n";
+  std::cout << '\n';
 
   // Split the module into the two halves of the program we want.
   Module *ToNotOptimize = CloneModule(BD.getProgram());
@@ -426,7 +426,7 @@
   std::string ErrorMsg;
   if (LinkModules(ProgClone, Extracted, &ErrorMsg)) {
     std::cerr << BD.getToolName() << ": Error linking modules together:"
-              << ErrorMsg << "\n";
+              << ErrorMsg << '\n';
     exit(1);
   }
 
@@ -473,7 +473,7 @@
             << (MiscompiledFunctions.size() == 1 ? " is" : "s are")
             << " being miscompiled: ";
   PrintFunctionList(MiscompiledFunctions);
-  std::cout << "\n";
+  std::cout << '\n';
 
   // See if we can rip any loops out of the miscompiled functions and still
   // trigger the problem.
@@ -493,7 +493,7 @@
               << (MiscompiledFunctions.size() == 1 ? " is" : "s are")
               << " being miscompiled: ";
     PrintFunctionList(MiscompiledFunctions);
-    std::cout << "\n";
+    std::cout << '\n';
   }
 
   if (ExtractBlocks(BD, TestFn, MiscompiledFunctions)) {
@@ -512,7 +512,7 @@
               << (MiscompiledFunctions.size() == 1 ? " is" : "s are")
               << " being miscompiled: ";
     PrintFunctionList(MiscompiledFunctions);
-    std::cout << "\n";
+    std::cout << '\n';
   }
 
   return MiscompiledFunctions;
@@ -552,7 +552,7 @@
 
   std::cout << "\n*** Found miscompiling pass"
             << (getPassesToRun().size() == 1 ? "" : "es") << ": "
-            << getPassesString(getPassesToRun()) << "\n";
+            << getPassesString(getPassesToRun()) << '\n';
   EmitProgressBytecode("passinput");
 
   std::vector<Function*> MiscompiledFunctions =
@@ -807,7 +807,7 @@
   }
   for (unsigned i=0, e = InputArgv.size(); i != e; ++i)
     std::cout << " " << InputArgv[i];
-  std::cout << "\n";
+  std::cout << '\n';
   std::cout << "The shared object was created with:\n  llc -march=c "
             << SafeModuleBC << " -o temporary.c\n"
             << "  gcc -xc temporary.c -O2 -o " << SharedObject
diff --git a/tools/bugpoint/bugpoint.cpp b/tools/bugpoint/bugpoint.cpp
index 9bf3a00..056ff52 100644
--- a/tools/bugpoint/bugpoint.cpp
+++ b/tools/bugpoint/bugpoint.cpp
@@ -57,7 +57,7 @@
   try {
     return D.run();
   } catch (ToolExecutionError &TEE) {
-    std::cerr << "Tool execution error: " << TEE.what() << "\n";
+    std::cerr << "Tool execution error: " << TEE.what() << '\n';
     return 1;
   } catch (...) {
     std::cerr << "Whoops, an exception leaked out of bugpoint.  "
