diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp
index 9a08886..bbf5411 100644
--- a/lib/AST/Expr.cpp
+++ b/lib/AST/Expr.cpp
@@ -490,8 +490,8 @@
   return V.convertToDouble();
 }
 
-int StringLiteral::mapCharByteWidth(TargetInfo const &target, StringKind k) {
-  int CharByteWidth = 0;
+int StringLiteral::mapCharByteWidth(TargetInfo const &target,StringKind k) {
+  int CharByteWidth;
   switch(k) {
     case Ascii:
     case UTF8:
diff --git a/lib/CodeGen/CGExprAgg.cpp b/lib/CodeGen/CGExprAgg.cpp
index 8f0e584..47984af 100644
--- a/lib/CodeGen/CGExprAgg.cpp
+++ b/lib/CodeGen/CGExprAgg.cpp
@@ -469,7 +469,7 @@
   llvm::BasicBlock *ContBlock = CGF.createBasicBlock("cond.end");
 
   // Bind the common expression if necessary.
-  CodeGenFunction::OpaqueValueMapping(CGF, E);
+  CodeGenFunction::OpaqueValueMapping binding(CGF, E);
 
   CodeGenFunction::ConditionalEvaluation eval(CGF);
   CGF.EmitBranchOnBoolExpr(E->getCond(), LHSBlock, RHSBlock);
diff --git a/lib/CodeGen/CGExprComplex.cpp b/lib/CodeGen/CGExprComplex.cpp
index 982044e..d58db67 100644
--- a/lib/CodeGen/CGExprComplex.cpp
+++ b/lib/CodeGen/CGExprComplex.cpp
@@ -680,7 +680,7 @@
   llvm::BasicBlock *ContBlock = CGF.createBasicBlock("cond.end");
 
   // Bind the common expression if necessary.
-  CodeGenFunction::OpaqueValueMapping(CGF, E);
+  CodeGenFunction::OpaqueValueMapping binding(CGF, E);
 
   CodeGenFunction::ConditionalEvaluation eval(CGF);
   CGF.EmitBranchOnBoolExpr(E->getCond(), LHSBlock, RHSBlock);
diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp
index 2be086d..c2aec36 100644
--- a/lib/CodeGen/CGExprScalar.cpp
+++ b/lib/CodeGen/CGExprScalar.cpp
@@ -2483,7 +2483,7 @@
   TestAndClearIgnoreResultAssign();
 
   // Bind the common expression if necessary.
-  CodeGenFunction::OpaqueValueMapping(CGF, E);
+  CodeGenFunction::OpaqueValueMapping binding(CGF, E);
 
   Expr *condExpr = E->getCond();
   Expr *lhsExpr = E->getTrueExpr();
diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp
index 76be9bd..e69e2cb 100644
--- a/lib/Driver/Tools.cpp
+++ b/lib/Driver/Tools.cpp
@@ -737,7 +737,7 @@
   const Driver &D = getToolChain().getDriver();
 
   StringRef ArchName;
-  const char *CPUName = 0;
+  const char *CPUName;
 
   // Set target cpu and architecture.
   if (Arg *A = Args.getLastArg(options::OPT_mcpu_EQ)) {
diff --git a/lib/Serialization/ASTReaderDecl.cpp b/lib/Serialization/ASTReaderDecl.cpp
index da79be9..51a275a 100644
--- a/lib/Serialization/ASTReaderDecl.cpp
+++ b/lib/Serialization/ASTReaderDecl.cpp
@@ -1226,7 +1226,7 @@
   RedeclKind Kind = (RedeclKind)Record[Idx++];
   
   // Determine the first declaration ID.
-  DeclID FirstDeclID = 0;
+  DeclID FirstDeclID;
   switch (Kind) {
   case FirstDeclaration: {
     FirstDeclID = ThisDeclID;
@@ -1481,7 +1481,7 @@
   enum RedeclKind { FirstDeclaration = 0, FirstInFile, PointsToPrevious };
   RedeclKind Kind = (RedeclKind)Record[Idx++];
   
-  DeclID FirstDeclID = 0;
+  DeclID FirstDeclID;
   switch (Kind) {
   case FirstDeclaration:
     FirstDeclID = ThisDeclID;
