Add ExplicitCastExpr to replace the current CastExpr, and have ImplicitCastExpr and ExplicitCastExpr derive from a common base class (CastExpr):

Expr
  -> CastExpr
     -> ExplicitCastExpr
     -> ImplicitCastExpr 

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54955 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp
index a8782c1..e5e80db 100644
--- a/lib/Sema/SemaChecking.cpp
+++ b/lib/Sema/SemaChecking.cpp
@@ -783,16 +783,10 @@
     
   // For casts, we need to handle conversions from arrays to
   // pointer values, and pointer-to-pointer conversions.
-  case Stmt::CastExprClass:
+  case Stmt::ExplicitCastExprClass:
   case Stmt::ImplicitCastExprClass: {
     
-    Expr* SubExpr;
-    
-    if (ImplicitCastExpr *IE = dyn_cast<ImplicitCastExpr>(E))
-      SubExpr = IE->getSubExpr();
-    else
-      SubExpr = cast<CastExpr>(E)->getSubExpr();
-    
+    Expr* SubExpr = cast<CastExpr>(E)->getSubExpr();
     QualType T = SubExpr->getType();
     
     if (T->isPointerType() || T->isObjCQualifiedIdType())