At Fariborz's request, a somewhat cleaner bit-combining hack.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@116524 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/Type.cpp b/lib/AST/Type.cpp
index 89c39d8..1452507 100644
--- a/lib/AST/Type.cpp
+++ b/lib/AST/Type.cpp
@@ -312,7 +312,7 @@
                                unsigned NumProtocols)
   : Type(ObjCObject, Canonical, false, false),
     BaseType(Base) {
-  SubclassBits = NumProtocols;
+  ObjCObjectTypeBits.NumProtocols = NumProtocols;
   assert(getNumProtocols() == NumProtocols &&
          "bitfield overflow in protocol count");
   if (NumProtocols)
@@ -917,7 +917,7 @@
 }
 
 const char *Type::getTypeClassName() const {
-  switch (TC) {
+  switch (TypeBits.TC) {
   default: assert(0 && "Type class not in TypeNodes.def!");
 #define ABSTRACT_TYPE(Derived, Base)
 #define TYPE(Derived, Base) case Derived: return #Derived;
@@ -1273,28 +1273,28 @@
   if (this != CanonicalType.getTypePtr())
     return CanonicalType->getLinkage();
   
-  if (!LinkageKnown) {
+  if (!TypeBits.LinkageKnown) {
     std::pair<Linkage, bool> Result = getLinkageUnnamedLocalImpl();
-    CachedLinkage = Result.first;
-    CachedLocalOrUnnamed = Result.second;
-    LinkageKnown = true;
+    TypeBits.CachedLinkage = Result.first;
+    TypeBits.CachedLocalOrUnnamed = Result.second;
+    TypeBits.LinkageKnown = true;
   }
   
-  return static_cast<clang::Linkage>(CachedLinkage);
+  return static_cast<clang::Linkage>(TypeBits.CachedLinkage);
 }
 
 bool Type::hasUnnamedOrLocalType() const {
   if (this != CanonicalType.getTypePtr())
     return CanonicalType->hasUnnamedOrLocalType();
   
-  if (!LinkageKnown) {
+  if (!TypeBits.LinkageKnown) {
     std::pair<Linkage, bool> Result = getLinkageUnnamedLocalImpl();
-    CachedLinkage = Result.first;
-    CachedLocalOrUnnamed = Result.second;
-    LinkageKnown = true;
+    TypeBits.CachedLinkage = Result.first;
+    TypeBits.CachedLocalOrUnnamed = Result.second;
+    TypeBits.LinkageKnown = true;
   }
   
-  return CachedLocalOrUnnamed;
+  return TypeBits.CachedLocalOrUnnamed;
 }
 
 std::pair<Linkage, bool> Type::getLinkageUnnamedLocalImpl() const { 
@@ -1307,7 +1307,7 @@
   if (this != CanonicalType.getTypePtr())
     CanonicalType->ClearLinkageCache();
   else
-    LinkageKnown = false;
+    TypeBits.LinkageKnown = false;
 }
 
 std::pair<Linkage, bool> BuiltinType::getLinkageUnnamedLocalImpl() const {
diff --git a/lib/Serialization/ASTReader.cpp b/lib/Serialization/ASTReader.cpp
index 23f2eaa..2002ccd 100644
--- a/lib/Serialization/ASTReader.cpp
+++ b/lib/Serialization/ASTReader.cpp
@@ -2729,7 +2729,7 @@
     }
     bool IsDependent = Record[0];
     QualType T = Context->getRecordType(cast<RecordDecl>(GetDecl(Record[1])));
-    T->Dependent = IsDependent;
+    T->setDependent(IsDependent);
     return T;
   }
 
@@ -2740,7 +2740,7 @@
     }
     bool IsDependent = Record[0];
     QualType T = Context->getEnumType(cast<EnumDecl>(GetDecl(Record[1])));
-    T->Dependent = IsDependent;
+    T->setDependent(IsDependent);
     return T;
   }
 
@@ -2855,7 +2855,7 @@
     else
       T = Context->getTemplateSpecializationType(Name, Args.data(),
                                                  Args.size(), Canon);
-    T->Dependent = IsDependent;
+    T->setDependent(IsDependent);
     return T;
   }
   }