diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h
index c5ee725..3254d23 100644
--- a/lib/Sema/Sema.h
+++ b/lib/Sema/Sema.h
@@ -444,8 +444,8 @@
   virtual ExprResult ActOnIdentifierExpr(Scope *S, SourceLocation Loc,
                                          IdentifierInfo &II,
                                          bool HasTrailingLParen);
-  virtual ExprResult ActOnPreDefinedExpr(SourceLocation Loc,
-                                            tok::TokenKind Kind);
+  virtual ExprResult ActOnPredefinedExpr(SourceLocation Loc,
+                                         tok::TokenKind Kind);
   virtual ExprResult ActOnNumericConstant(const Token &);
   virtual ExprResult ActOnCharacterConstant(const Token &);
   virtual ExprResult ActOnParenExpr(SourceLocation L, SourceLocation R,
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index da0d1ec..c776a5b 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -862,7 +862,7 @@
            CheckArithmeticConstantExpression(ASE->getIdx());
   }
   case Expr::StringLiteralClass:
-  case Expr::PreDefinedExprClass:
+  case Expr::PredefinedExprClass:
     return false;
   case Expr::UnaryOperatorClass: {
     const UnaryOperator *Exp = cast<UnaryOperator>(Init);
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp
index 003f3de..b44fd87 100644
--- a/lib/Sema/SemaExpr.cpp
+++ b/lib/Sema/SemaExpr.cpp
@@ -397,15 +397,15 @@
   abort();
 }
 
-Sema::ExprResult Sema::ActOnPreDefinedExpr(SourceLocation Loc,
+Sema::ExprResult Sema::ActOnPredefinedExpr(SourceLocation Loc,
                                            tok::TokenKind Kind) {
-  PreDefinedExpr::IdentType IT;
+  PredefinedExpr::IdentType IT;
   
   switch (Kind) {
   default: assert(0 && "Unknown simple primary expr!");
-  case tok::kw___func__: IT = PreDefinedExpr::Func; break; // [C99 6.4.2.2]
-  case tok::kw___FUNCTION__: IT = PreDefinedExpr::Function; break;
-  case tok::kw___PRETTY_FUNCTION__: IT = PreDefinedExpr::PrettyFunction; break;
+  case tok::kw___func__: IT = PredefinedExpr::Func; break; // [C99 6.4.2.2]
+  case tok::kw___FUNCTION__: IT = PredefinedExpr::Function; break;
+  case tok::kw___PRETTY_FUNCTION__: IT = PredefinedExpr::PrettyFunction; break;
   }
 
   // Verify that this is in a function context.
@@ -423,7 +423,7 @@
   llvm::APInt LengthI(32, Length + 1);
   QualType ResTy = Context.CharTy.getQualifiedType(QualType::Const);
   ResTy = Context.getConstantArrayType(ResTy, LengthI, ArrayType::Normal, 0);
-  return new PreDefinedExpr(Loc, ResTy, IT);
+  return new PredefinedExpr(Loc, ResTy, IT);
 }
 
 Sema::ExprResult Sema::ActOnCharacterConstant(const Token &Tok) {
diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp
index be7cf06..c48a19b 100644
--- a/lib/Sema/SemaExprCXX.cpp
+++ b/lib/Sema/SemaExprCXX.cpp
@@ -62,8 +62,8 @@
 
   if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(CurContext))
     if (MD->isInstance())
-      return new PreDefinedExpr(ThisLoc, MD->getThisType(Context),
-                                PreDefinedExpr::CXXThis);
+      return new PredefinedExpr(ThisLoc, MD->getThisType(Context),
+                                PredefinedExpr::CXXThis);
 
   return Diag(ThisLoc, diag::err_invalid_this_use);
 }
diff --git a/lib/Sema/SemaExprObjC.cpp b/lib/Sema/SemaExprObjC.cpp
index 9575d4c..8acd1f2 100644
--- a/lib/Sema/SemaExprObjC.cpp
+++ b/lib/Sema/SemaExprObjC.cpp
@@ -158,8 +158,8 @@
     if (getCurMethodDecl()->isInstance()) {
       QualType superTy = Context.getObjCInterfaceType(ClassDecl);
       superTy = Context.getPointerType(superTy);
-      ExprResult ReceiverExpr = new PreDefinedExpr(SourceLocation(), superTy,
-          PreDefinedExpr::ObjCSuper);
+      ExprResult ReceiverExpr = new PredefinedExpr(SourceLocation(), superTy,
+          PredefinedExpr::ObjCSuper);
       // We are really in an instance method, redirect.
       return ActOnInstanceMessage(ReceiverExpr.Val, Sel, lbrac, rbrac,
                                   Args, NumArgs);
