Support DependentScopeDeclRefExpr for PCH.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@106998 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Frontend/PCHReaderStmt.cpp b/lib/Frontend/PCHReaderStmt.cpp
index a2334d7..5f9ee3b 100644
--- a/lib/Frontend/PCHReaderStmt.cpp
+++ b/lib/Frontend/PCHReaderStmt.cpp
@@ -147,6 +147,7 @@
     unsigned VisitCXXExprWithTemporaries(CXXExprWithTemporaries *E);
     
     unsigned VisitCXXDependentScopeMemberExpr(CXXDependentScopeMemberExpr *E);
+    unsigned VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E);
     unsigned VisitCXXUnresolvedConstructExpr(CXXUnresolvedConstructExpr *E);
 
     unsigned VisitOverloadExpr(OverloadExpr *E);
@@ -1185,6 +1186,26 @@
 }
 
 unsigned
+PCHStmtReader::VisitDependentScopeDeclRefExpr(DependentScopeDeclRefExpr *E) {
+  VisitExpr(E);
+  unsigned NumExprs = 0;
+  
+  unsigned NumTemplateArgs = Record[Idx++];
+  assert((NumTemplateArgs != 0) == E->hasExplicitTemplateArgs() &&
+         "Read wrong record during creation ?");
+  if (E->hasExplicitTemplateArgs())
+    NumExprs
+      = ReadExplicitTemplateArgumentList(E->getExplicitTemplateArgs(),
+                                         NumTemplateArgs, StmtStack.end());
+
+  E->setDeclName(Reader.ReadDeclarationName(Record, Idx));
+  E->setLocation(Reader.ReadSourceLocation(Record, Idx));
+  E->setQualifierRange(Reader.ReadSourceRange(Record, Idx));
+  E->setQualifier(Reader.ReadNestedNameSpecifier(Record, Idx));
+  return NumExprs;
+}
+
+unsigned
 PCHStmtReader::VisitCXXUnresolvedConstructExpr(CXXUnresolvedConstructExpr *E) {
   VisitExpr(E);
   assert(Record[Idx] == E->arg_size() && "Read wrong record during creation ?");
@@ -1635,6 +1656,11 @@
                       /*NumTemplateArgs=*/Record[PCHStmtReader::NumExprFields]);
       break;
       
+    case pch::EXPR_CXX_DEPENDENT_SCOPE_DECL_REF:
+      S = DependentScopeDeclRefExpr::CreateEmpty(*Context,
+                      /*NumTemplateArgs=*/Record[PCHStmtReader::NumExprFields]);
+      break;
+      
     case pch::EXPR_CXX_UNRESOLVED_CONSTRUCT:
       S = CXXUnresolvedConstructExpr::CreateEmpty(*Context,
                               /*NumArgs=*/Record[PCHStmtReader::NumExprFields]);