diff --git a/Driver/PrintParserCallbacks.cpp b/Driver/PrintParserCallbacks.cpp
index fec13e3..caae11b 100644
--- a/Driver/PrintParserCallbacks.cpp
+++ b/Driver/PrintParserCallbacks.cpp
@@ -403,7 +403,7 @@
       return 0;
     }
   
-    virtual ExprResult ActOnPreDefinedExpr(SourceLocation Loc,
+    virtual ExprResult ActOnPredefinedExpr(SourceLocation Loc,
                                            tok::TokenKind Kind) {
       llvm::cout << __FUNCTION__ << "\n";
       return 0;
diff --git a/Driver/RewriteObjC.cpp b/Driver/RewriteObjC.cpp
index 59a77e7..0796b68 100644
--- a/Driver/RewriteObjC.cpp
+++ b/Driver/RewriteObjC.cpp
@@ -1941,8 +1941,8 @@
   // check if we are sending a message to 'super'
   if (!CurMethodDecl || !CurMethodDecl->isInstance()) return 0;
   
-  if (PreDefinedExpr *PDE = dyn_cast<PreDefinedExpr>(recExpr))
-    if (PDE->getIdentType() == PreDefinedExpr::ObjCSuper) {
+  if (PredefinedExpr *PDE = dyn_cast<PredefinedExpr>(recExpr))
+    if (PDE->getIdentType() == PredefinedExpr::ObjCSuper) {
       const PointerType *PT = PDE->getType()->getAsPointerType();
       assert(PT);
       ObjCInterfaceType *IT = cast<ObjCInterfaceType>(PT->getPointeeType());
diff --git a/include/clang/AST/Expr.h b/include/clang/AST/Expr.h
index 5d8cd43..a92b940 100644
--- a/include/clang/AST/Expr.h
+++ b/include/clang/AST/Expr.h
@@ -229,8 +229,8 @@
   static DeclRefExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C);
 };
 
-/// PreDefinedExpr - [C99 6.4.2.2] - A pre-defined identifier such as __func__.
-class PreDefinedExpr : public Expr {
+/// PredefinedExpr - [C99 6.4.2.2] - A predefined identifier such as __func__.
+class PredefinedExpr : public Expr {
 public:
   enum IdentType {
     Func,
@@ -244,24 +244,24 @@
   SourceLocation Loc;
   IdentType Type;
 public:
-  PreDefinedExpr(SourceLocation l, QualType type, IdentType IT) 
-    : Expr(PreDefinedExprClass, type), Loc(l), Type(IT) {}
+  PredefinedExpr(SourceLocation l, QualType type, IdentType IT) 
+    : Expr(PredefinedExprClass, type), Loc(l), Type(IT) {}
   
   IdentType getIdentType() const { return Type; }
   
   virtual SourceRange getSourceRange() const { return SourceRange(Loc); }
 
   static bool classof(const Stmt *T) { 
-    return T->getStmtClass() == PreDefinedExprClass; 
+    return T->getStmtClass() == PredefinedExprClass; 
   }
-  static bool classof(const PreDefinedExpr *) { return true; }
+  static bool classof(const PredefinedExpr *) { return true; }
   
   // Iterators
   virtual child_iterator child_begin();
   virtual child_iterator child_end();
   
   virtual void EmitImpl(llvm::Serializer& S) const;
-  static PreDefinedExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C);
+  static PredefinedExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C);
 };
 
 class IntegerLiteral : public Expr {
diff --git a/include/clang/AST/StmtNodes.def b/include/clang/AST/StmtNodes.def
index d156f92..3f2b355 100644
--- a/include/clang/AST/StmtNodes.def
+++ b/include/clang/AST/StmtNodes.def
@@ -58,7 +58,7 @@
 FIRST_EXPR(31)
 // Expressions.
 STMT(31, Expr                  , Stmt)
-STMT(32, PreDefinedExpr        , Expr)
+STMT(32, PredefinedExpr        , Expr)
 STMT(33, DeclRefExpr           , Expr)
 STMT(34, IntegerLiteral        , Expr)
 STMT(35, FloatingLiteral       , Expr)
diff --git a/include/clang/Parse/Action.h b/include/clang/Parse/Action.h
index 1f04826..110e26f 100644
--- a/include/clang/Parse/Action.h
+++ b/include/clang/Parse/Action.h
@@ -387,7 +387,7 @@
     return 0;
   }
   
-  virtual ExprResult ActOnPreDefinedExpr(SourceLocation Loc,
+  virtual ExprResult ActOnPredefinedExpr(SourceLocation Loc,
                                          tok::TokenKind Kind) {
     return 0;
   }
diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp
index 2f12c4e..8cf3b37 100644
--- a/lib/AST/Expr.cpp
+++ b/lib/AST/Expr.cpp
@@ -439,9 +439,9 @@
     return LV_Valid;
   case ObjCPropertyRefExprClass: // FIXME: check if read-only property.
     return LV_Valid;
-  case PreDefinedExprClass:
-    return (cast<PreDefinedExpr>(this)->getIdentType()
-               == PreDefinedExpr::CXXThis
+  case PredefinedExprClass:
+    return (cast<PredefinedExpr>(this)->getIdentType()
+               == PredefinedExpr::CXXThis
             ? LV_InvalidExpression : LV_Valid);
   case CXXDefaultArgExprClass:
     return cast<CXXDefaultArgExpr>(this)->getExpr()->isLvalue(Ctx);
@@ -510,7 +510,7 @@
   }
   case ArraySubscriptExprClass:
     return cast<ArraySubscriptExpr>(this)->getBase()->hasGlobalStorage();
-  case PreDefinedExprClass:
+  case PredefinedExprClass:
     return true;
   case CXXDefaultArgExprClass:
     return cast<CXXDefaultArgExpr>(this)->getExpr()->hasGlobalStorage();
@@ -1263,9 +1263,9 @@
 Stmt::child_iterator ObjCSuperRefExpr::child_begin() { return child_iterator();}
 Stmt::child_iterator ObjCSuperRefExpr::child_end() { return child_iterator(); }
 
-// PreDefinedExpr
-Stmt::child_iterator PreDefinedExpr::child_begin() { return child_iterator(); }
-Stmt::child_iterator PreDefinedExpr::child_end() { return child_iterator(); }
+// PredefinedExpr
+Stmt::child_iterator PredefinedExpr::child_begin() { return child_iterator(); }
+Stmt::child_iterator PredefinedExpr::child_end() { return child_iterator(); }
 
 // IntegerLiteral
 Stmt::child_iterator IntegerLiteral::child_begin() { return child_iterator(); }
diff --git a/lib/AST/StmtDumper.cpp b/lib/AST/StmtDumper.cpp
index a710e23..6d0569e 100644
--- a/lib/AST/StmtDumper.cpp
+++ b/lib/AST/StmtDumper.cpp
@@ -116,7 +116,7 @@
     // Exprs
     void VisitExpr(Expr *Node);
     void VisitDeclRefExpr(DeclRefExpr *Node);
-    void VisitPreDefinedExpr(PreDefinedExpr *Node);
+    void VisitPredefinedExpr(PredefinedExpr *Node);
     void VisitCharacterLiteral(CharacterLiteral *Node);
     void VisitIntegerLiteral(IntegerLiteral *Node);
     void VisitFloatingLiteral(FloatingLiteral *Node);
@@ -308,14 +308,14 @@
     fprintf(F, " isFreeIvar");
 }
 
-void StmtDumper::VisitPreDefinedExpr(PreDefinedExpr *Node) {
+void StmtDumper::VisitPredefinedExpr(PredefinedExpr *Node) {
   DumpExpr(Node);
   switch (Node->getIdentType()) {
   default: assert(0 && "unknown case");
-  case PreDefinedExpr::Func:           fprintf(F, " __func__"); break;
-  case PreDefinedExpr::Function:       fprintf(F, " __FUNCTION__"); break;
-  case PreDefinedExpr::PrettyFunction: fprintf(F, " __PRETTY_FUNCTION__");break;
-  case PreDefinedExpr::ObjCSuper:      fprintf(F, "super"); break;
+  case PredefinedExpr::Func:           fprintf(F, " __func__"); break;
+  case PredefinedExpr::Function:       fprintf(F, " __FUNCTION__"); break;
+  case PredefinedExpr::PrettyFunction: fprintf(F, " __PRETTY_FUNCTION__");break;
+  case PredefinedExpr::ObjCSuper:      fprintf(F, "super"); break;
   }
 }
 
diff --git a/lib/AST/StmtPrinter.cpp b/lib/AST/StmtPrinter.cpp
index 0984ca0..a9818f8 100644
--- a/lib/AST/StmtPrinter.cpp
+++ b/lib/AST/StmtPrinter.cpp
@@ -496,20 +496,20 @@
   // FIXME: OS << Node->getDecl()->getName();
 }
 
-void StmtPrinter::VisitPreDefinedExpr(PreDefinedExpr *Node) {
+void StmtPrinter::VisitPredefinedExpr(PredefinedExpr *Node) {
   switch (Node->getIdentType()) {
     default:
       assert(0 && "unknown case");
-    case PreDefinedExpr::Func:
+    case PredefinedExpr::Func:
       OS << "__func__";
       break;
-    case PreDefinedExpr::Function:
+    case PredefinedExpr::Function:
       OS << "__FUNCTION__";
       break;
-    case PreDefinedExpr::PrettyFunction:
+    case PredefinedExpr::PrettyFunction:
       OS << "__PRETTY_FUNCTION__";
       break;
-    case PreDefinedExpr::ObjCSuper:
+    case PredefinedExpr::ObjCSuper:
       OS << "super";
       break;
   }
diff --git a/lib/AST/StmtSerialization.cpp b/lib/AST/StmtSerialization.cpp
index 03091fe..cc26b27 100644
--- a/lib/AST/StmtSerialization.cpp
+++ b/lib/AST/StmtSerialization.cpp
@@ -130,8 +130,8 @@
     case ParenExprClass:
       return ParenExpr::CreateImpl(D, C);
       
-    case PreDefinedExprClass:
-      return PreDefinedExpr::CreateImpl(D, C);
+    case PredefinedExprClass:
+      return PredefinedExpr::CreateImpl(D, C);
       
     case ReturnStmtClass:
       return ReturnStmt::CreateImpl(D, C);
@@ -741,17 +741,17 @@
   return new ParenExpr(L,R,val);
 }
 
-void PreDefinedExpr::EmitImpl(Serializer& S) const {
+void PredefinedExpr::EmitImpl(Serializer& S) const {
   S.Emit(Loc);
   S.EmitInt(getIdentType());
   S.Emit(getType());  
 }
 
-PreDefinedExpr* PreDefinedExpr::CreateImpl(Deserializer& D, ASTContext& C) {
+PredefinedExpr* PredefinedExpr::CreateImpl(Deserializer& D, ASTContext& C) {
   SourceLocation Loc = SourceLocation::ReadVal(D);
   IdentType it = static_cast<IdentType>(D.ReadInt());
   QualType Q = QualType::ReadVal(D);
-  return new PreDefinedExpr(Loc,Q,it);
+  return new PredefinedExpr(Loc,Q,it);
 }
 
 void ReturnStmt::EmitImpl(Serializer& S) const {
diff --git a/lib/Analysis/CheckObjCDealloc.cpp b/lib/Analysis/CheckObjCDealloc.cpp
index 39d1e05..f6a3fd0 100644
--- a/lib/Analysis/CheckObjCDealloc.cpp
+++ b/lib/Analysis/CheckObjCDealloc.cpp
@@ -29,8 +29,8 @@
   if (ObjCMessageExpr* ME = dyn_cast<ObjCMessageExpr>(S))
     if (ME->getSelector() == Dealloc)
       if (Expr* Receiver = ME->getReceiver()->IgnoreParenCasts())
-        if (PreDefinedExpr* E = dyn_cast<PreDefinedExpr>(Receiver))
-          if (E->getIdentType() == PreDefinedExpr::ObjCSuper)
+        if (PredefinedExpr* E = dyn_cast<PredefinedExpr>(Receiver))
+          if (E->getIdentType() == PredefinedExpr::ObjCSuper)
             return true;
 
   // Recurse to children.
diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp
index 7c5feb1..091001e 100644
--- a/lib/CodeGen/CGExpr.cpp
+++ b/lib/CodeGen/CGExpr.cpp
@@ -104,8 +104,8 @@
   case Expr::CallExprClass: return EmitCallExprLValue(cast<CallExpr>(E));
   case Expr::DeclRefExprClass: return EmitDeclRefLValue(cast<DeclRefExpr>(E));
   case Expr::ParenExprClass:return EmitLValue(cast<ParenExpr>(E)->getSubExpr());
-  case Expr::PreDefinedExprClass:
-    return EmitPreDefinedLValue(cast<PreDefinedExpr>(E));
+  case Expr::PredefinedExprClass:
+    return EmitPredefinedLValue(cast<PredefinedExpr>(E));
   case Expr::StringLiteralClass:
     return EmitStringLiteralLValue(cast<StringLiteral>(E));
 
@@ -507,7 +507,7 @@
   return LValue::MakeAddr(CGM.GetAddrOfConstantString(StringLiteral),0);
 }
 
-LValue CodeGenFunction::EmitPreDefinedLValue(const PreDefinedExpr *E) {
+LValue CodeGenFunction::EmitPredefinedLValue(const PredefinedExpr *E) {
   std::string FunctionName;
   if(const FunctionDecl *FD = dyn_cast<FunctionDecl>(CurFuncDecl)) {
     FunctionName = FD->getName();
@@ -520,13 +520,13 @@
   switch (E->getIdentType()) {
     default:
       assert(0 && "unknown pre-defined ident type");
-    case PreDefinedExpr::Func:
+    case PredefinedExpr::Func:
       GlobalVarName = "__func__.";
       break;
-    case PreDefinedExpr::Function:
+    case PredefinedExpr::Function:
       GlobalVarName = "__FUNCTION__.";
       break;
-    case PreDefinedExpr::PrettyFunction:
+    case PredefinedExpr::PrettyFunction:
       // FIXME:: Demangle C++ method names
       GlobalVarName = "__PRETTY_FUNCTION__.";
       break;
diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp
index 7f4bed7..17ef1ed 100644
--- a/lib/CodeGen/CGExprScalar.cpp
+++ b/lib/CodeGen/CGExprScalar.cpp
@@ -138,7 +138,7 @@
   Value *VisitExtVectorElementExpr(Expr *E) { return EmitLoadOfLValue(E); }
   Value *VisitCompoundLiteralExpr(CompoundLiteralExpr *E) { return EmitLoadOfLValue(E); }
   Value *VisitStringLiteral(Expr *E)  { return EmitLValue(E).getAddress(); }
-  Value *VisitPreDefinedExpr(Expr *E) { return EmitLValue(E).getAddress(); }
+  Value *VisitPredefinedExpr(Expr *E) { return EmitLValue(E).getAddress(); }
 
   Value *VisitInitListExpr(InitListExpr *E) {
     unsigned NumInitElements = E->getNumInits();
diff --git a/lib/CodeGen/CGObjC.cpp b/lib/CodeGen/CGObjC.cpp
index 9bf53d9..6a0400e 100644
--- a/lib/CodeGen/CGObjC.cpp
+++ b/lib/CodeGen/CGObjC.cpp
@@ -56,9 +56,9 @@
     llvm::Value *ClassName = CGM.GetAddrOfConstantString(classname);
     ClassName = Builder.CreateStructGEP(ClassName, 0);
     Receiver = Runtime->LookupClass(Builder, ClassName);
-  } else if (isa<PreDefinedExpr>(E->getReceiver())) {
-    assert(cast<PreDefinedExpr>(E->getReceiver())->getIdentType() == 
-           PreDefinedExpr::ObjCSuper);
+  } else if (const PredefinedExpr *PDE =
+               dyn_cast<PredefinedExpr>(E->getReceiver())) {
+    assert(PDE->getIdentType() == PredefinedExpr::ObjCSuper);
     isSuperMessage = true;
     Receiver = LoadObjCSelf();
   } else {
diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h
index 27917a4..fd2d033 100644
--- a/lib/CodeGen/CodeGenFunction.h
+++ b/lib/CodeGen/CodeGenFunction.h
@@ -434,7 +434,7 @@
   
   LValue EmitDeclRefLValue(const DeclRefExpr *E);
   LValue EmitStringLiteralLValue(const StringLiteral *E);
-  LValue EmitPreDefinedLValue(const PreDefinedExpr *E);
+  LValue EmitPredefinedLValue(const PredefinedExpr *E);
   LValue EmitUnaryOpLValue(const UnaryOperator *E);
   LValue EmitArraySubscriptExpr(const ArraySubscriptExpr *E);
   LValue EmitExtVectorElementExpr(const ExtVectorElementExpr *E);
diff --git a/lib/Parse/ParseExpr.cpp b/lib/Parse/ParseExpr.cpp
index d992956..2ecca33 100644
--- a/lib/Parse/ParseExpr.cpp
+++ b/lib/Parse/ParseExpr.cpp
@@ -466,7 +466,7 @@
   case tok::kw___func__:       // primary-expression: __func__ [C99 6.4.2.2]
   case tok::kw___FUNCTION__:   // primary-expression: __FUNCTION__ [GNU]
   case tok::kw___PRETTY_FUNCTION__:  // primary-expression: __P..Y_F..N__ [GNU]
-    Res = Actions.ActOnPreDefinedExpr(Tok.getLocation(), SavedKind);
+    Res = Actions.ActOnPredefinedExpr(Tok.getLocation(), SavedKind);
     ConsumeToken();
     // These can be followed by postfix-expr pieces.
     return ParsePostfixExpressionSuffix(Res);
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);
