diff --git a/Sema/SemaChecking.cpp b/Sema/SemaChecking.cpp
index d7b8de2..29d4e79 100644
--- a/Sema/SemaChecking.cpp
+++ b/Sema/SemaChecking.cpp
@@ -88,15 +88,7 @@
 /// CheckBuiltinCFStringArgument - Checks that the argument to the builtin
 /// CFString constructor is correct
 bool Sema::CheckBuiltinCFStringArgument(Expr* Arg) {
-  // FIXME: This should go in a helper.
-  while (1) {
-    if (ParenExpr *PE = dyn_cast<ParenExpr>(Arg))
-      Arg = PE->getSubExpr();
-    else if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(Arg))
-      Arg = ICE->getSubExpr();
-    else
-      break;
-  }
+  Arg = IgnoreParenCasts(Arg);
   
   StringLiteral *Literal = dyn_cast<StringLiteral>(Arg);
 
@@ -265,16 +257,7 @@
     return;
   }
   
-  Expr *OrigFormatExpr = TheCall->getArg(format_idx);
-  // FIXME: This should go in a helper.
-  while (1) {
-    if (ParenExpr *PE = dyn_cast<ParenExpr>(OrigFormatExpr))
-      OrigFormatExpr = PE->getSubExpr();
-    else if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(OrigFormatExpr))
-      OrigFormatExpr = ICE->getSubExpr();
-    else
-      break;
-  }
+  Expr *OrigFormatExpr = IgnoreParenCasts(TheCall->getArg(format_idx));
   
   // CHECK: format string is not a string literal.
   // 
@@ -284,7 +267,6 @@
   // the compiler and thereby (2) can practically remove the source of
   // many format string exploits.
   StringLiteral *FExpr = dyn_cast<StringLiteral>(OrigFormatExpr);
-  
   if (FExpr == NULL) {
     // For vprintf* functions (i.e., HasVAListArg==true), we add a
     // special check to see if the format string is a function parameter
@@ -305,8 +287,8 @@
     //    if the argument is a DeclRefExpr that references a parameter.  We'll
     //    add proper support for checking the attribute later.
     if (HasVAListArg)
-      if (DeclRefExpr* DR = dyn_cast<DeclRefExpr>(IgnoreParen(OrigFormatExpr)))
-          if (isa<ParmVarDecl>(DR->getDecl()))
+      if (DeclRefExpr* DR = dyn_cast<DeclRefExpr>(OrigFormatExpr))
+        if (isa<ParmVarDecl>(DR->getDecl()))
           return;
     
     Diag(TheCall->getArg(format_idx)->getLocStart(), 
@@ -358,7 +340,7 @@
   unsigned LastConversionIdx = 0;
   
   for (; StrIdx < StrLen; ++StrIdx) {
-
+    
     // Is the number of detected conversion conversions greater than
     // the number of matching data arguments?  If so, stop.
     if (!HasVAListArg && numConversions > numDataArgs) break;
@@ -367,10 +349,8 @@
     if (Str[StrIdx] == '\0') {
       // The string returned by getStrData() is not null-terminated,
       // so the presence of a null character is likely an error.
-      SourceLocation Loc = FExpr->getLocStart();
-      Loc = PP.AdvanceToTokenCharacter(Loc, StrIdx+1);
-    
-      Diag(Loc, diag::warn_printf_format_string_contains_null_char,
+      Diag(PP.AdvanceToTokenCharacter(FExpr->getLocStart(), StrIdx+1),
+           diag::warn_printf_format_string_contains_null_char,
            Fn->getSourceRange());
       return;
     }
@@ -391,7 +371,6 @@
       ++numConversions;
       
       if (!HasVAListArg && numConversions > numDataArgs) {
-        
         SourceLocation Loc = FExpr->getLocStart();
         Loc = PP.AdvanceToTokenCharacter(Loc, StrIdx+1);
 
@@ -489,7 +468,6 @@
         LastConversionIdx = StrIdx;
         ++numConversions;
       }
-      
       break;
               
     default:
diff --git a/Sema/SemaUtil.h b/Sema/SemaUtil.h
index 2932862..b167346 100644
--- a/Sema/SemaUtil.h
+++ b/Sema/SemaUtil.h
@@ -38,10 +38,8 @@
     else if (ImplicitCastExpr* P = dyn_cast<ImplicitCastExpr>(E))
       E = P->getSubExpr();
     else
-      break;
+      return E;
   }
-  
-  return E;
 }
 
 /// Utility method to determine if a CallExpr is a call to a builtin.
