PCH support for ExtQualType

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69230 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Frontend/PCHReader.cpp b/lib/Frontend/PCHReader.cpp
index e5656d6..0bd254f 100644
--- a/lib/Frontend/PCHReader.cpp
+++ b/lib/Frontend/PCHReader.cpp
@@ -1079,10 +1079,20 @@
     assert(false && "Should never jump to an attribute block");
     return QualType();
 
-  case pch::TYPE_EXT_QUAL:
-    // FIXME: Deserialize ExtQualType
-    assert(false && "Cannot deserialize qualified types yet");
-    return QualType();
+  case pch::TYPE_EXT_QUAL: {
+    assert(Record.size() == 3 && 
+           "Incorrect encoding of extended qualifier type");
+    QualType Base = GetType(Record[0]);
+    QualType::GCAttrTypes GCAttr = (QualType::GCAttrTypes)Record[1];
+    unsigned AddressSpace = Record[2];
+    
+    QualType T = Base;
+    if (GCAttr != QualType::GCNone)
+      T = Context.getObjCGCQualType(T, GCAttr);
+    if (AddressSpace)
+      T = Context.getAddrSpaceQualType(T, AddressSpace);
+    return T;
+  }
 
   case pch::TYPE_FIXED_WIDTH_INT: {
     assert(Record.size() == 2 && "Incorrect encoding of fixed-width int type");