Migrate the serialization of ASTContext's AutoDeduceTy and
AutoRRefDeductTy from the "special types" block to predefined
types. The latter behaves better when loading multiple AST files.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137120 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Serialization/ASTCommon.h b/lib/Serialization/ASTCommon.h
index 838df13..367f57f 100644
--- a/lib/Serialization/ASTCommon.h
+++ b/lib/Serialization/ASTCommon.h
@@ -15,6 +15,7 @@
 #define LLVM_CLANG_SERIALIZATION_LIB_AST_COMMON_H
 
 #include "clang/Serialization/ASTBitCodes.h"
+#include "clang/AST/ASTContext.h"
 
 namespace clang {
 
@@ -31,7 +32,7 @@
 TypeIdx TypeIdxFromBuiltin(const BuiltinType *BT);
 
 template <typename IdxForTypeTy>
-TypeID MakeTypeID(QualType T, IdxForTypeTy IdxForType) {
+TypeID MakeTypeID(ASTContext &Context, QualType T, IdxForTypeTy IdxForType) {
   if (T.isNull())
     return PREDEF_TYPE_NULL_ID;
 
@@ -46,6 +47,11 @@
   if (const BuiltinType *BT = dyn_cast<BuiltinType>(T.getTypePtr()))
     return TypeIdxFromBuiltin(BT).asTypeID(FastQuals);
 
+  if (T == Context.AutoDeductTy)
+    return TypeIdx(PREDEF_TYPE_AUTO_DEDUCT).asTypeID(FastQuals);
+  if (T == Context.AutoRRefDeductTy)
+    return TypeIdx(PREDEF_TYPE_AUTO_RREF_DEDUCT).asTypeID(FastQuals);
+
   return IdxForType(T).asTypeID(FastQuals);
 }