diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp
index 11e6bcf..3c7401f 100644
--- a/lib/AST/Decl.cpp
+++ b/lib/AST/Decl.cpp
@@ -211,29 +211,29 @@
   return new (Mem) TranslationUnitDecl();
 }
 
-VarDecl *VarDecl::Create(ASTContext &C, DeclContext *CD,
+VarDecl *VarDecl::Create(ASTContext &C, DeclContext *DC,
                          SourceLocation L,
                          IdentifierInfo *Id, QualType T,
                          StorageClass S, ScopedDecl *PrevDecl) {
   void *Mem = C.getAllocator().Allocate<VarDecl>();
-  return new (Mem) VarDecl(Var, CD, L, Id, T, S, PrevDecl);
+  return new (Mem) VarDecl(Var, DC, L, Id, T, S, PrevDecl);
 }
 
-ParmVarDecl *ParmVarDecl::Create(ASTContext &C, DeclContext *CD,
+ParmVarDecl *ParmVarDecl::Create(ASTContext &C, DeclContext *DC,
                                  SourceLocation L, IdentifierInfo *Id,
                                  QualType T, StorageClass S,
                                  Expr *DefArg, ScopedDecl *PrevDecl) {
   void *Mem = C.getAllocator().Allocate<ParmVarDecl>();
-  return new (Mem) ParmVarDecl(CD, L, Id, T, S, DefArg, PrevDecl);
+  return new (Mem) ParmVarDecl(DC, L, Id, T, S, DefArg, PrevDecl);
 }
 
-FunctionDecl *FunctionDecl::Create(ASTContext &C, DeclContext *CD,
+FunctionDecl *FunctionDecl::Create(ASTContext &C, DeclContext *DC,
                                    SourceLocation L, 
                                    IdentifierInfo *Id, QualType T, 
                                    StorageClass S, bool isInline, 
                                    ScopedDecl *PrevDecl) {
   void *Mem = C.getAllocator().Allocate<FunctionDecl>();
-  return new (Mem) FunctionDecl(CD, L, Id, T, S, isInline, PrevDecl);
+  return new (Mem) FunctionDecl(DC, L, Id, T, S, isInline, PrevDecl);
 }
 
 FieldDecl *FieldDecl::Create(ASTContext &C, SourceLocation L,
@@ -252,26 +252,26 @@
   return new (Mem) EnumConstantDecl(CD, L, Id, T, E, V, PrevDecl);
 }
 
-TypedefDecl *TypedefDecl::Create(ASTContext &C, DeclContext *CD,
+TypedefDecl *TypedefDecl::Create(ASTContext &C, DeclContext *DC,
                                  SourceLocation L,
                                  IdentifierInfo *Id, QualType T,
                                  ScopedDecl *PD) {
   void *Mem = C.getAllocator().Allocate<TypedefDecl>();
-  return new (Mem) TypedefDecl(CD, L, Id, T, PD);
+  return new (Mem) TypedefDecl(DC, L, Id, T, PD);
 }
 
-EnumDecl *EnumDecl::Create(ASTContext &C, DeclContext *CD, SourceLocation L,
+EnumDecl *EnumDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation L,
                            IdentifierInfo *Id,
                            ScopedDecl *PrevDecl) {
   void *Mem = C.getAllocator().Allocate<EnumDecl>();
-  return new (Mem) EnumDecl(CD, L, Id, PrevDecl);
+  return new (Mem) EnumDecl(DC, L, Id, PrevDecl);
 }
 
-RecordDecl *RecordDecl::Create(ASTContext &C, Kind DK, DeclContext *CD,
+RecordDecl *RecordDecl::Create(ASTContext &C, Kind DK, DeclContext *DC,
                                SourceLocation L, IdentifierInfo *Id,
                                ScopedDecl *PrevDecl) {
   void *Mem = C.getAllocator().Allocate<RecordDecl>();
-  return new (Mem) RecordDecl(DK, CD, L, Id, PrevDecl);
+  return new (Mem) RecordDecl(DK, DC, L, Id, PrevDecl);
 }
 
 FileScopeAsmDecl *FileScopeAsmDecl::Create(ASTContext &C,
diff --git a/lib/AST/DeclSerialization.cpp b/lib/AST/DeclSerialization.cpp
index e7442ff..6186649 100644
--- a/lib/AST/DeclSerialization.cpp
+++ b/lib/AST/DeclSerialization.cpp
@@ -115,7 +115,7 @@
   D.ReadPtr(Next);                                  // From ScopedDecl.
   Decl *TmpD;
   D.ReadPtr(TmpD);                                  // From ScopedDecl.
-  CtxDecl = cast_or_null<DeclContext>(TmpD);
+  DeclCtx = cast_or_null<DeclContext>(TmpD);
 }
     
   //===------------------------------------------------------------===//
diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h
index e70da93..da878f3 100644
--- a/lib/Sema/Sema.h
+++ b/lib/Sema/Sema.h
@@ -258,7 +258,7 @@
                              DeclTy **Elements, unsigned NumElements);
 private:
   /// Set the current declaration context until it gets popped.
-  void PushDeclContext(DeclContext *CD);
+  void PushDeclContext(DeclContext *DC);
   void PopDeclContext();
 
   /// Add this decl to the scope shadowed decl chains.
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index 415908a..c97ecc8 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -42,11 +42,11 @@
   return 0;
 }
 
-void Sema::PushDeclContext(DeclContext *CD) {
-  assert( ( (CD->isFunctionOrMethod() && isa<TranslationUnitDecl>(CurContext))
-            || CD->getParent() == CurContext ) &&
+void Sema::PushDeclContext(DeclContext *DC) {
+  assert( ( (DC->isFunctionOrMethod() && isa<TranslationUnitDecl>(CurContext))
+            || DC->getParent() == CurContext ) &&
       "The next DeclContext should be directly contained in the current one.");
-  CurContext = CD;
+  CurContext = DC;
 }
 
 void Sema::PopDeclContext() {
