Remove tabs, and whitespace cleanups.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81346 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp
index 30e4234..bf1fac9 100644
--- a/lib/AST/ASTContext.cpp
+++ b/lib/AST/ASTContext.cpp
@@ -37,16 +37,16 @@
                        TargetInfo &t,
                        IdentifierTable &idents, SelectorTable &sels,
                        Builtin::Context &builtins,
-                       bool FreeMem, unsigned size_reserve) : 
-  GlobalNestedNameSpecifier(0), CFConstantStringTypeDecl(0), 
+                       bool FreeMem, unsigned size_reserve) :
+  GlobalNestedNameSpecifier(0), CFConstantStringTypeDecl(0),
   ObjCFastEnumerationStateTypeDecl(0), FILEDecl(0), jmp_bufDecl(0),
-  sigjmp_bufDecl(0), SourceMgr(SM), LangOpts(LOpts), 
-  LoadedExternalComments(false), FreeMemory(FreeMem), Target(t), 
+  sigjmp_bufDecl(0), SourceMgr(SM), LangOpts(LOpts),
+  LoadedExternalComments(false), FreeMemory(FreeMem), Target(t),
   Idents(idents), Selectors(sels),
-  BuiltinInfo(builtins), ExternalSource(0), PrintingPolicy(LOpts) {  
+  BuiltinInfo(builtins), ExternalSource(0), PrintingPolicy(LOpts) {
   ObjCIdRedefinitionType = QualType();
   ObjCClassRedefinitionType = QualType();
-  if (size_reserve > 0) Types.reserve(size_reserve);    
+  if (size_reserve > 0) Types.reserve(size_reserve);
   TUDecl = TranslationUnitDecl::Create(*this);
   InitBuiltinTypes();
 }
@@ -79,8 +79,8 @@
   // Destroy nested-name-specifiers.
   for (llvm::FoldingSet<NestedNameSpecifier>::iterator
          NNS = NestedNameSpecifiers.begin(),
-         NNSEnd = NestedNameSpecifiers.end(); 
-       NNS != NNSEnd; 
+         NNSEnd = NestedNameSpecifiers.end();
+       NNS != NNSEnd;
        /* Increment in loop */)
     (*NNS++).Destroy(*this);
 
@@ -90,7 +90,7 @@
   TUDecl->Destroy(*this);
 }
 
-void 
+void
 ASTContext::setExternalSource(llvm::OwningPtr<ExternalASTSource> &Source) {
   ExternalSource.reset(Source.take());
 }
@@ -100,7 +100,7 @@
   fprintf(stderr, "  %d types total.\n", (int)Types.size());
 
   unsigned counts[] = {
-#define TYPE(Name, Parent) 0, 
+#define TYPE(Name, Parent) 0,
 #define ABSTRACT_TYPE(Name, Parent)
 #include "clang/AST/TypeNodes.def"
     0 // Extra
@@ -120,7 +120,7 @@
   ++Idx;
 #define ABSTRACT_TYPE(Name, Parent)
 #include "clang/AST/TypeNodes.def"
-  
+
   fprintf(stderr, "Total bytes = %d\n", int(TotalBytes));
 
   if (ExternalSource.get()) {
@@ -136,10 +136,10 @@
 
 void ASTContext::InitBuiltinTypes() {
   assert(VoidTy.isNull() && "Context reinitialized?");
-  
+
   // C99 6.2.5p19.
   InitBuiltinType(VoidTy,              BuiltinType::Void);
-  
+
   // C99 6.2.5p2.
   InitBuiltinType(BoolTy,              BuiltinType::Bool);
   // C99 6.2.5p3.
@@ -153,14 +153,14 @@
   InitBuiltinType(IntTy,               BuiltinType::Int);
   InitBuiltinType(LongTy,              BuiltinType::Long);
   InitBuiltinType(LongLongTy,          BuiltinType::LongLong);
-  
+
   // C99 6.2.5p6.
   InitBuiltinType(UnsignedCharTy,      BuiltinType::UChar);
   InitBuiltinType(UnsignedShortTy,     BuiltinType::UShort);
   InitBuiltinType(UnsignedIntTy,       BuiltinType::UInt);
   InitBuiltinType(UnsignedLongTy,      BuiltinType::ULong);
   InitBuiltinType(UnsignedLongLongTy,  BuiltinType::ULongLong);
-  
+
   // C99 6.2.5p10.
   InitBuiltinType(FloatTy,             BuiltinType::Float);
   InitBuiltinType(DoubleTy,            BuiltinType::Double);
@@ -195,27 +195,27 @@
   // expressions.
   InitBuiltinType(DependentTy,         BuiltinType::Dependent);
 
-  // Placeholder type for C++0x auto declarations whose real type has 
+  // Placeholder type for C++0x auto declarations whose real type has
   // not yet been deduced.
   InitBuiltinType(UndeducedAutoTy, BuiltinType::UndeducedAuto);
-  
+
   // C99 6.2.5p11.
   FloatComplexTy      = getComplexType(FloatTy);
   DoubleComplexTy     = getComplexType(DoubleTy);
   LongDoubleComplexTy = getComplexType(LongDoubleTy);
 
   BuiltinVaListType = QualType();
-  
+
   // "Builtin" typedefs set by Sema::ActOnTranslationUnitScope().
   ObjCIdTypedefType = QualType();
   ObjCClassTypedefType = QualType();
-  
+
   // Builtin types for 'id' and 'Class'.
   InitBuiltinType(ObjCBuiltinIdTy, BuiltinType::ObjCId);
   InitBuiltinType(ObjCBuiltinClassTy, BuiltinType::ObjCClass);
 
   ObjCConstantStringType = QualType();
-  
+
   // void * type
   VoidPtrTy = getPointerType(VoidTy);
 
@@ -229,11 +229,11 @@
     = InstantiatedFromStaticDataMember.find(Var);
   if (Pos == InstantiatedFromStaticDataMember.end())
     return 0;
-  
+
   return Pos->second;
 }
 
-void 
+void
 ASTContext::setInstantiatedFromStaticDataMember(VarDecl *Inst, VarDecl *Tmpl) {
   assert(Inst->isStaticDataMember() && "Not a static data member");
   assert(Tmpl->isStaticDataMember() && "Not a static data member");
@@ -244,11 +244,11 @@
 
 UnresolvedUsingDecl *
 ASTContext::getInstantiatedFromUnresolvedUsingDecl(UsingDecl *UUD) {
-  llvm::DenseMap<UsingDecl *, UnresolvedUsingDecl *>::iterator Pos 
+  llvm::DenseMap<UsingDecl *, UnresolvedUsingDecl *>::iterator Pos
     = InstantiatedFromUnresolvedUsingDecl.find(UUD);
   if (Pos == InstantiatedFromUnresolvedUsingDecl.end())
     return 0;
-  
+
   return Pos->second;
 }
 
@@ -265,7 +265,7 @@
     = InstantiatedFromUnnamedFieldDecl.find(Field);
   if (Pos == InstantiatedFromUnnamedFieldDecl.end())
     return 0;
-  
+
   return Pos->second;
 }
 
@@ -275,18 +275,18 @@
   assert(!Tmpl->getDeclName() && "Template field decl is not unnamed");
   assert(!InstantiatedFromUnnamedFieldDecl[Inst] &&
          "Already noted what unnamed field was instantiated from");
-  
+
   InstantiatedFromUnnamedFieldDecl[Inst] = Tmpl;
 }
 
 namespace {
-  class BeforeInTranslationUnit 
+  class BeforeInTranslationUnit
     : std::binary_function<SourceRange, SourceRange, bool> {
     SourceManager *SourceMgr;
-    
+
   public:
     explicit BeforeInTranslationUnit(SourceManager *SM) : SourceMgr(SM) { }
-      
+
     bool operator()(SourceRange X, SourceRange Y) {
       return SourceMgr->isBeforeInTranslationUnit(X.getBegin(), Y.getBegin());
     }
@@ -302,14 +302,14 @@
 /// \param Member whether we want to check whether this is a member comment
 /// (which requires a < after the Doxygen-comment delimiter). Otherwise,
 /// we only return true when we find a non-member comment.
-static bool 
-isDoxygenComment(SourceManager &SourceMgr, SourceRange Comment, 
+static bool
+isDoxygenComment(SourceManager &SourceMgr, SourceRange Comment,
                  bool Member = false) {
-  const char *BufferStart 
+  const char *BufferStart
     = SourceMgr.getBufferData(SourceMgr.getFileID(Comment.getBegin())).first;
   const char *Start = BufferStart + SourceMgr.getFileOffset(Comment.getBegin());
   const char* End = BufferStart + SourceMgr.getFileOffset(Comment.getEnd());
-  
+
   if (End - Start < 4)
     return false;
 
@@ -323,32 +323,32 @@
 }
 
 /// \brief Retrieve the comment associated with the given declaration, if
-/// it has one. 
+/// it has one.
 const char *ASTContext::getCommentForDecl(const Decl *D) {
   if (!D)
     return 0;
-  
+
   // Check whether we have cached a comment string for this declaration
   // already.
-  llvm::DenseMap<const Decl *, std::string>::iterator Pos 
+  llvm::DenseMap<const Decl *, std::string>::iterator Pos
     = DeclComments.find(D);
   if (Pos != DeclComments.end())
     return Pos->second.c_str();
 
-  // If we have an external AST source and have not yet loaded comments from 
+  // If we have an external AST source and have not yet loaded comments from
   // that source, do so now.
   if (ExternalSource && !LoadedExternalComments) {
     std::vector<SourceRange> LoadedComments;
     ExternalSource->ReadComments(LoadedComments);
-    
+
     if (!LoadedComments.empty())
       Comments.insert(Comments.begin(), LoadedComments.begin(),
                       LoadedComments.end());
-    
+
     LoadedExternalComments = true;
   }
-  
-  // If there are no comments anywhere, we won't find anything.  
+
+  // If there are no comments anywhere, we won't find anything.
   if (Comments.empty())
     return 0;
 
@@ -360,17 +360,17 @@
 
   // Find the comment that occurs just before this declaration.
   std::vector<SourceRange>::iterator LastComment
-    = std::lower_bound(Comments.begin(), Comments.end(), 
+    = std::lower_bound(Comments.begin(), Comments.end(),
                        SourceRange(DeclStartLoc),
                        BeforeInTranslationUnit(&SourceMgr));
-  
+
   // Decompose the location for the start of the declaration and find the
   // beginning of the file buffer.
-  std::pair<FileID, unsigned> DeclStartDecomp 
+  std::pair<FileID, unsigned> DeclStartDecomp
     = SourceMgr.getDecomposedLoc(DeclStartLoc);
-  const char *FileBufferStart 
+  const char *FileBufferStart
     = SourceMgr.getBufferData(DeclStartDecomp.first).first;
-  
+
   // First check whether we have a comment for a member.
   if (LastComment != Comments.end() &&
       !isa<TagDecl>(D) && !isa<NamespaceDecl>(D) &&
@@ -379,19 +379,19 @@
       = SourceMgr.getDecomposedLoc(LastComment->getEnd());
     if (DeclStartDecomp.first == LastCommentEndDecomp.first &&
         SourceMgr.getLineNumber(DeclStartDecomp.first, DeclStartDecomp.second)
-          == SourceMgr.getLineNumber(LastCommentEndDecomp.first, 
+          == SourceMgr.getLineNumber(LastCommentEndDecomp.first,
                                      LastCommentEndDecomp.second)) {
       // The Doxygen member comment comes after the declaration starts and
       // is on the same line and in the same file as the declaration. This
       // is the comment we want.
       std::string &Result = DeclComments[D];
-      Result.append(FileBufferStart + 
-                      SourceMgr.getFileOffset(LastComment->getBegin()), 
+      Result.append(FileBufferStart +
+                      SourceMgr.getFileOffset(LastComment->getBegin()),
                     FileBufferStart + LastCommentEndDecomp.second + 1);
       return Result.c_str();
     }
   }
-  
+
   if (LastComment == Comments.begin())
     return 0;
   --LastComment;
@@ -399,33 +399,33 @@
   // Decompose the end of the comment.
   std::pair<FileID, unsigned> LastCommentEndDecomp
     = SourceMgr.getDecomposedLoc(LastComment->getEnd());
-  
+
   // If the comment and the declaration aren't in the same file, then they
   // aren't related.
   if (DeclStartDecomp.first != LastCommentEndDecomp.first)
     return 0;
-  
+
   // Check that we actually have a Doxygen comment.
   if (!isDoxygenComment(SourceMgr, *LastComment))
     return 0;
-      
+
   // Compute the starting line for the declaration and for the end of the
   // comment (this is expensive).
-  unsigned DeclStartLine 
+  unsigned DeclStartLine
     = SourceMgr.getLineNumber(DeclStartDecomp.first, DeclStartDecomp.second);
   unsigned CommentEndLine
-    = SourceMgr.getLineNumber(LastCommentEndDecomp.first, 
+    = SourceMgr.getLineNumber(LastCommentEndDecomp.first,
                               LastCommentEndDecomp.second);
-  
+
   // If the comment does not end on the line prior to the declaration, then
   // the comment is not associated with the declaration at all.
   if (CommentEndLine + 1 != DeclStartLine)
     return 0;
-  
+
   // We have a comment, but there may be more comments on the previous lines.
   // Keep looking so long as the comments are still Doxygen comments and are
   // still adjacent.
-  unsigned ExpectedLine 
+  unsigned ExpectedLine
     = SourceMgr.getSpellingLineNumber(LastComment->getBegin()) - 1;
   std::vector<SourceRange>::iterator FirstComment = LastComment;
   while (FirstComment != Comments.begin()) {
@@ -433,31 +433,31 @@
     --FirstComment;
     std::pair<FileID, unsigned> Decomp
       = SourceMgr.getDecomposedLoc(FirstComment->getEnd());
-    
+
     // If this previous comment is in a different file, we're done.
     if (Decomp.first != DeclStartDecomp.first) {
       ++FirstComment;
       break;
     }
-    
+
     // If this comment is not a Doxygen comment, we're done.
     if (!isDoxygenComment(SourceMgr, *FirstComment)) {
       ++FirstComment;
       break;
     }
-    
+
     // If the line number is not what we expected, we're done.
     unsigned Line = SourceMgr.getLineNumber(Decomp.first, Decomp.second);
     if (Line != ExpectedLine) {
       ++FirstComment;
       break;
     }
-    
+
     // Set the next expected line number.
-    ExpectedLine 
+    ExpectedLine
       = SourceMgr.getSpellingLineNumber(FirstComment->getBegin()) - 1;
   }
-  
+
   // The iterator range [FirstComment, LastComment] contains all of the
   // BCPL comments that, together, are associated with this declaration.
   // Form a single comment block string for this declaration that concatenates
@@ -472,10 +472,10 @@
                   FileBufferStart + DecompEnd.second + 1);
     ++FirstComment;
   }
-  
+
   // Append the last comment line.
-  Result.append(FileBufferStart + 
-                  SourceMgr.getFileOffset(LastComment->getBegin()), 
+  Result.append(FileBufferStart +
+                  SourceMgr.getFileOffset(LastComment->getBegin()),
                 FileBufferStart + LastCommentEndDecomp.second + 1);
   return Result.c_str();
 }
@@ -555,7 +555,7 @@
   case Type::ConstantArrayWithoutExpr:
   case Type::ConstantArray: {
     const ConstantArrayType *CAT = cast<ConstantArrayType>(T);
-    
+
     std::pair<uint64_t, unsigned> EltInfo = getTypeInfo(CAT->getElementType());
     Width = EltInfo.first*CAT->getSize().getZExtValue();
     Align = EltInfo.second;
@@ -563,7 +563,7 @@
   }
   case Type::ExtVector:
   case Type::Vector: {
-    std::pair<uint64_t, unsigned> EltInfo = 
+    std::pair<uint64_t, unsigned> EltInfo =
       getTypeInfo(cast<VectorType>(T)->getElementType());
     Width = EltInfo.first*cast<VectorType>(T)->getNumElements();
     Align = Width;
@@ -689,7 +689,7 @@
     // If we ever want to support other ABIs this needs to be abstracted.
 
     QualType Pointee = cast<MemberPointerType>(T)->getPointeeType();
-    std::pair<uint64_t, unsigned> PtrDiffInfo = 
+    std::pair<uint64_t, unsigned> PtrDiffInfo =
       getTypeInfo(getPointerDiffType());
     Width = PtrDiffInfo.first;
     if (Pointee->isFunctionType())
@@ -700,7 +700,7 @@
   case Type::Complex: {
     // Complex types have the same alignment as their elements, but twice the
     // size.
-    std::pair<uint64_t, unsigned> EltInfo = 
+    std::pair<uint64_t, unsigned> EltInfo =
       getTypeInfo(cast<ComplexType>(T)->getElementType());
     Width = EltInfo.first*2;
     Align = EltInfo.second;
@@ -722,7 +722,7 @@
       Align = 1;
       break;
     }
-    
+
     if (const EnumType *ET = dyn_cast<EnumType>(TT))
       return getTypeInfo(ET->getDecl()->getIntegerType());
 
@@ -760,16 +760,16 @@
 
   case Type::QualifiedName:
     return getTypeInfo(cast<QualifiedNameType>(T)->getNamedType().getTypePtr());
-    
+
   case Type::TemplateSpecialization:
-    assert(getCanonicalType(T) != T && 
+    assert(getCanonicalType(T) != T &&
            "Cannot request the size of a dependent type");
     // FIXME: this is likely to be wrong once we support template
     // aliases, since a template alias could refer to a typedef that
     // has an __aligned__ attribute on it.
     return getTypeInfo(getCanonicalType(T));
   }
-  
+
   assert(Align && (Align & (Align-1)) == 0 && "Alignment must be power of 2");
   return std::make_pair(Width, Align);
 }
@@ -829,7 +829,7 @@
        E = PD->prop_end(); I != E; ++I)
     if (ObjCIvarDecl *Ivar = (*I)->getPropertyIvarDecl())
       Ivars.push_back(Ivar);
-  
+
   // Also look into nested protocols.
   for (ObjCProtocolDecl::protocol_iterator P = PD->protocol_begin(),
        E = PD->protocol_end(); P != E; ++P)
@@ -869,8 +869,7 @@
   return count;
 }
 
-unsigned ASTContext::CountSynthesizedIvars(const ObjCInterfaceDecl *OI)
-{
+unsigned ASTContext::CountSynthesizedIvars(const ObjCInterfaceDecl *OI) {
   unsigned count = 0;
   for (ObjCInterfaceDecl::prop_iterator I = OI->prop_begin(),
        E = OI->prop_end(); I != E; ++I) {
@@ -944,7 +943,7 @@
   assert(!D->isForwardDecl() && "Invalid interface decl!");
 
   // Look up this layout, if already laid out, return what we have.
-  ObjCContainerDecl *Key = 
+  ObjCContainerDecl *Key =
     Impl ? (ObjCContainerDecl*) Impl : (ObjCContainerDecl*) D;
   if (const ASTRecordLayout *Entry = ObjCLayouts[Key])
     return *Entry;
@@ -962,10 +961,10 @@
       return getObjCLayout(D, 0);
   }
 
-  const ASTRecordLayout *NewEntry = 
+  const ASTRecordLayout *NewEntry =
     ASTRecordLayoutBuilder::ComputeLayout(*this, D, Impl);
   ObjCLayouts[Key] = NewEntry;
-  
+
   return *NewEntry;
 }
 
@@ -992,10 +991,10 @@
   const ASTRecordLayout *Entry = ASTRecordLayouts[D];
   if (Entry) return *Entry;
 
-  const ASTRecordLayout *NewEntry = 
+  const ASTRecordLayout *NewEntry =
     ASTRecordLayoutBuilder::ComputeLayout(*this, D);
   ASTRecordLayouts[D] = NewEntry;
-  
+
   return *NewEntry;
 }
 
@@ -1013,7 +1012,7 @@
   unsigned CVRQuals = T.getCVRQualifiers();
   QualType::GCAttrTypes GCAttr = QualType::GCNone;
   Type *TypeNode = T.getTypePtr();
-  
+
   if (ExtQualType *EQT = dyn_cast<ExtQualType>(TypeNode)) {
     // If this type already has an address space specified, it cannot get
     // another one.
@@ -1022,7 +1021,7 @@
     GCAttr = EQT->getObjCGCAttr();
     TypeNode = EQT->getBaseType();
   }
-  
+
   // Check if we've already instantiated this type.
   llvm::FoldingSetNodeID ID;
   ExtQualType::Profile(ID, TypeNode, AddressSpace, GCAttr);
@@ -1035,7 +1034,7 @@
   QualType Canonical;
   if (!TypeNode->isCanonical()) {
     Canonical = getAddrSpaceQualType(CanT, AddressSpace);
-    
+
     // Update InsertPos, the previous call could have invalidated it.
     ExtQualType *NewIP = ExtQualTypes.FindNodeOrInsertPos(ID, InsertPos);
     assert(NewIP == 0 && "Shouldn't be in the map!"); NewIP = NewIP;
@@ -1052,7 +1051,7 @@
   QualType CanT = getCanonicalType(T);
   if (CanT.getObjCGCAttr() == GCAttr)
     return T;
-  
+
   if (T->isPointerType()) {
     QualType Pointee = T->getAs<PointerType>()->getPointeeType();
     if (Pointee->isAnyPointerType()) {
@@ -1065,7 +1064,7 @@
   unsigned CVRQuals = T.getCVRQualifiers();
   Type *TypeNode = T.getTypePtr();
   unsigned AddressSpace = 0;
-  
+
   if (ExtQualType *EQT = dyn_cast<ExtQualType>(TypeNode)) {
     // If this type already has an ObjCGC specified, it cannot get
     // another one.
@@ -1074,14 +1073,14 @@
     AddressSpace = EQT->getAddressSpace();
     TypeNode = EQT->getBaseType();
   }
-  
+
   // Check if we've already instantiated an gc qual'd type of this type.
   llvm::FoldingSetNodeID ID;
   ExtQualType::Profile(ID, TypeNode, AddressSpace, GCAttr);
   void *InsertPos = 0;
   if (ExtQualType *EXTQy = ExtQualTypes.FindNodeOrInsertPos(ID, InsertPos))
     return QualType(EXTQy, CVRQuals);
-  
+
   // If the base type isn't canonical, this won't be a canonical type either,
   // so fill in the canonical type field.
   // FIXME: Isn't this also not canonical if the base type is a array
@@ -1089,7 +1088,7 @@
   QualType Canonical;
   if (!T->isCanonical()) {
     Canonical = getObjCGCQualType(CanT, GCAttr);
-    
+
     // Update InsertPos, the previous call could have invalidated it.
     ExtQualType *NewIP = ExtQualTypes.FindNodeOrInsertPos(ID, InsertPos);
     assert(NewIP == 0 && "Shouldn't be in the map!"); NewIP = NewIP;
@@ -1117,10 +1116,10 @@
     ResultType = getBlockPointerType(ResultType);
     ResultType.setCVRQualifiers(T.getCVRQualifiers());
     return qs.apply(ResultType, *this);
-  }    
+  }
   if (!T->isFunctionType())
     assert(0 && "can't noreturn qualify non-pointer to function or block type");
-  
+
   if (const FunctionNoProtoType *F = T->getAsFunctionNoProtoType()) {
     return getFunctionNoProtoType(F->getResultType(), true);
   }
@@ -1138,17 +1137,17 @@
   // structure.
   llvm::FoldingSetNodeID ID;
   ComplexType::Profile(ID, T);
-  
+
   void *InsertPos = 0;
   if (ComplexType *CT = ComplexTypes.FindNodeOrInsertPos(ID, InsertPos))
     return QualType(CT, 0);
-  
+
   // If the pointee type isn't canonical, this won't be a canonical type either,
   // so fill in the canonical type field.
   QualType Canonical;
   if (!T->isCanonical()) {
     Canonical = getComplexType(getCanonicalType(T));
-    
+
     // Get the new insert position for the node we care about.
     ComplexType *NewIP = ComplexTypes.FindNodeOrInsertPos(ID, InsertPos);
     assert(NewIP == 0 && "Shouldn't be in the map!"); NewIP = NewIP;
@@ -1175,17 +1174,17 @@
   // structure.
   llvm::FoldingSetNodeID ID;
   PointerType::Profile(ID, T);
-  
+
   void *InsertPos = 0;
   if (PointerType *PT = PointerTypes.FindNodeOrInsertPos(ID, InsertPos))
     return QualType(PT, 0);
-  
+
   // If the pointee type isn't canonical, this won't be a canonical type either,
   // so fill in the canonical type field.
   QualType Canonical;
   if (!T->isCanonical()) {
     Canonical = getPointerType(getCanonicalType(T));
-   
+
     // Get the new insert position for the node we care about.
     PointerType *NewIP = PointerTypes.FindNodeOrInsertPos(ID, InsertPos);
     assert(NewIP == 0 && "Shouldn't be in the map!"); NewIP = NewIP;
@@ -1196,7 +1195,7 @@
   return QualType(New, 0);
 }
 
-/// getBlockPointerType - Return the uniqued reference to the type for 
+/// getBlockPointerType - Return the uniqued reference to the type for
 /// a pointer to the specified block.
 QualType ASTContext::getBlockPointerType(QualType T) {
   assert(T->isFunctionType() && "block of function types only");
@@ -1204,18 +1203,18 @@
   // structure.
   llvm::FoldingSetNodeID ID;
   BlockPointerType::Profile(ID, T);
-  
+
   void *InsertPos = 0;
   if (BlockPointerType *PT =
         BlockPointerTypes.FindNodeOrInsertPos(ID, InsertPos))
     return QualType(PT, 0);
-  
-  // If the block pointee type isn't canonical, this won't be a canonical 
+
+  // If the block pointee type isn't canonical, this won't be a canonical
   // type either so fill in the canonical type field.
   QualType Canonical;
   if (!T->isCanonical()) {
     Canonical = getBlockPointerType(getCanonicalType(T));
-    
+
     // Get the new insert position for the node we care about.
     BlockPointerType *NewIP =
       BlockPointerTypes.FindNodeOrInsertPos(ID, InsertPos);
@@ -1291,8 +1290,7 @@
 
 /// getMemberPointerType - Return the uniqued reference to the type for a
 /// member pointer to the specified type, in the specified class.
-QualType ASTContext::getMemberPointerType(QualType T, const Type *Cls)
-{
+QualType ASTContext::getMemberPointerType(QualType T, const Type *Cls) {
   // Unique pointers, to guarantee there is only one pointer of a particular
   // structure.
   llvm::FoldingSetNodeID ID;
@@ -1320,9 +1318,9 @@
   return QualType(New, 0);
 }
 
-/// getConstantArrayType - Return the unique reference to the type for an 
+/// getConstantArrayType - Return the unique reference to the type for an
 /// array of the specified element type.
-QualType ASTContext::getConstantArrayType(QualType EltTy, 
+QualType ASTContext::getConstantArrayType(QualType EltTy,
                                           const llvm::APInt &ArySizeIn,
                                           ArrayType::ArraySizeModifier ASM,
                                           unsigned EltTypeQuals) {
@@ -1333,27 +1331,27 @@
   // the target.
   llvm::APInt ArySize(ArySizeIn);
   ArySize.zextOrTrunc(Target.getPointerWidth(EltTy.getAddressSpace()));
-  
+
   llvm::FoldingSetNodeID ID;
   ConstantArrayType::Profile(ID, EltTy, ArySize, ASM, EltTypeQuals);
-      
+
   void *InsertPos = 0;
-  if (ConstantArrayType *ATP = 
+  if (ConstantArrayType *ATP =
       ConstantArrayTypes.FindNodeOrInsertPos(ID, InsertPos))
     return QualType(ATP, 0);
-  
+
   // If the element type isn't canonical, this won't be a canonical type either,
   // so fill in the canonical type field.
   QualType Canonical;
   if (!EltTy->isCanonical()) {
-    Canonical = getConstantArrayType(getCanonicalType(EltTy), ArySize, 
+    Canonical = getConstantArrayType(getCanonicalType(EltTy), ArySize,
                                      ASM, EltTypeQuals);
     // Get the new insert position for the node we care about.
-    ConstantArrayType *NewIP = 
+    ConstantArrayType *NewIP =
       ConstantArrayTypes.FindNodeOrInsertPos(ID, InsertPos);
     assert(NewIP == 0 && "Shouldn't be in the map!"); NewIP = NewIP;
   }
-  
+
   ConstantArrayType *New =
     new(*this,8)ConstantArrayType(EltTy, Canonical, ArySize, ASM, EltTypeQuals);
   ConstantArrayTypes.InsertNode(New, InsertPos);
@@ -1437,11 +1435,11 @@
                                                 ArrayType::ArraySizeModifier ASM,
                                                 unsigned EltTypeQuals,
                                                 SourceRange Brackets) {
-  assert((NumElts->isTypeDependent() || NumElts->isValueDependent()) && 
+  assert((NumElts->isTypeDependent() || NumElts->isValueDependent()) &&
          "Size must be type- or value-dependent!");
 
   llvm::FoldingSetNodeID ID;
-  DependentSizedArrayType::Profile(ID, *this, getCanonicalType(EltTy), ASM, 
+  DependentSizedArrayType::Profile(ID, *this, getCanonicalType(EltTy), ASM,
                                    EltTypeQuals, NumElts);
 
   void *InsertPos = 0;
@@ -1451,7 +1449,7 @@
   if (Canon) {
     // We already have a canonical version of this array type; use it as
     // the canonical type for a newly-built type.
-    New = new (*this,8) DependentSizedArrayType(*this, EltTy, 
+    New = new (*this,8) DependentSizedArrayType(*this, EltTy,
                                                 QualType(Canon, 0),
                                                 NumElts, ASM, EltTypeQuals,
                                                 Brackets);
@@ -1468,10 +1466,10 @@
                                                   SourceRange());
       New = new (*this,8) DependentSizedArrayType(*this, EltTy, Canon,
                                                   NumElts, ASM, EltTypeQuals,
-                                                  Brackets);      
+                                                  Brackets);
     }
   }
-  
+
   Types.push_back(New);
   return QualType(New, 0);
 }
@@ -1483,7 +1481,7 @@
   IncompleteArrayType::Profile(ID, EltTy, ASM, EltTypeQuals);
 
   void *InsertPos = 0;
-  if (IncompleteArrayType *ATP = 
+  if (IncompleteArrayType *ATP =
        IncompleteArrayTypes.FindNodeOrInsertPos(ID, InsertPos))
     return QualType(ATP, 0);
 
@@ -1514,13 +1512,13 @@
 /// the specified element type and size. VectorType must be a built-in type.
 QualType ASTContext::getVectorType(QualType vecType, unsigned NumElts) {
   BuiltinType *baseType;
-  
+
   baseType = dyn_cast<BuiltinType>(getCanonicalType(vecType).getTypePtr());
   assert(baseType != 0 && "getVectorType(): Expecting a built-in type");
-         
+
   // Check if we've already instantiated a vector of this type.
   llvm::FoldingSetNodeID ID;
-  VectorType::Profile(ID, vecType, NumElts, Type::Vector);      
+  VectorType::Profile(ID, vecType, NumElts, Type::Vector);
   void *InsertPos = 0;
   if (VectorType *VTP = VectorTypes.FindNodeOrInsertPos(ID, InsertPos))
     return QualType(VTP, 0);
@@ -1530,7 +1528,7 @@
   QualType Canonical;
   if (!vecType->isCanonical()) {
     Canonical = getVectorType(getCanonicalType(vecType), NumElts);
-    
+
     // Get the new insert position for the node we care about.
     VectorType *NewIP = VectorTypes.FindNodeOrInsertPos(ID, InsertPos);
     assert(NewIP == 0 && "Shouldn't be in the map!"); NewIP = NewIP;
@@ -1545,13 +1543,13 @@
 /// the specified element type and size. VectorType must be a built-in type.
 QualType ASTContext::getExtVectorType(QualType vecType, unsigned NumElts) {
   BuiltinType *baseType;
-  
+
   baseType = dyn_cast<BuiltinType>(getCanonicalType(vecType).getTypePtr());
   assert(baseType != 0 && "getExtVectorType(): Expecting a built-in type");
-         
+
   // Check if we've already instantiated a vector of this type.
   llvm::FoldingSetNodeID ID;
-  VectorType::Profile(ID, vecType, NumElts, Type::ExtVector);      
+  VectorType::Profile(ID, vecType, NumElts, Type::ExtVector);
   void *InsertPos = 0;
   if (VectorType *VTP = VectorTypes.FindNodeOrInsertPos(ID, InsertPos))
     return QualType(VTP, 0);
@@ -1561,7 +1559,7 @@
   QualType Canonical;
   if (!vecType->isCanonical()) {
     Canonical = getExtVectorType(getCanonicalType(vecType), NumElts);
-    
+
     // Get the new insert position for the node we care about.
     VectorType *NewIP = VectorTypes.FindNodeOrInsertPos(ID, InsertPos);
     assert(NewIP == 0 && "Shouldn't be in the map!"); NewIP = NewIP;
@@ -1572,13 +1570,13 @@
   return QualType(New, 0);
 }
 
-QualType ASTContext::getDependentSizedExtVectorType(QualType vecType, 
+QualType ASTContext::getDependentSizedExtVectorType(QualType vecType,
                                                     Expr *SizeExpr,
                                                     SourceLocation AttrLoc) {
   llvm::FoldingSetNodeID ID;
-  DependentSizedExtVectorType::Profile(ID, *this, getCanonicalType(vecType), 
+  DependentSizedExtVectorType::Profile(ID, *this, getCanonicalType(vecType),
                                        SizeExpr);
-  
+
   void *InsertPos = 0;
   DependentSizedExtVectorType *Canon
     = DependentSizedExtVectorTypes.FindNodeOrInsertPos(ID, InsertPos);
@@ -1592,8 +1590,8 @@
   } else {
     QualType CanonVecTy = getCanonicalType(vecType);
     if (CanonVecTy == vecType) {
-      New = new (*this,8) DependentSizedExtVectorType(*this, vecType, 
-                                                      QualType(), SizeExpr, 
+      New = new (*this,8) DependentSizedExtVectorType(*this, vecType,
+                                                      QualType(), SizeExpr,
                                                       AttrLoc);
       DependentSizedExtVectorTypes.InsertNode(New, InsertPos);
     } else {
@@ -1603,7 +1601,7 @@
                                                       SizeExpr, AttrLoc);
     }
   }
-  
+
   Types.push_back(New);
   return QualType(New, 0);
 }
@@ -1615,22 +1613,22 @@
   // structure.
   llvm::FoldingSetNodeID ID;
   FunctionNoProtoType::Profile(ID, ResultTy, NoReturn);
-  
+
   void *InsertPos = 0;
-  if (FunctionNoProtoType *FT = 
+  if (FunctionNoProtoType *FT =
         FunctionNoProtoTypes.FindNodeOrInsertPos(ID, InsertPos))
     return QualType(FT, 0);
-  
+
   QualType Canonical;
   if (!ResultTy->isCanonical()) {
     Canonical = getFunctionNoProtoType(getCanonicalType(ResultTy), NoReturn);
-    
+
     // Get the new insert position for the node we care about.
     FunctionNoProtoType *NewIP =
       FunctionNoProtoTypes.FindNodeOrInsertPos(ID, InsertPos);
     assert(NewIP == 0 && "Shouldn't be in the map!"); NewIP = NewIP;
   }
-  
+
   FunctionNoProtoType *New
     = new (*this,8) FunctionNoProtoType(ResultTy, Canonical, NoReturn);
   Types.push_back(New);
@@ -1653,7 +1651,7 @@
                              NumExs, ExArray, NoReturn);
 
   void *InsertPos = 0;
-  if (FunctionProtoType *FTP = 
+  if (FunctionProtoType *FTP =
         FunctionProtoTypes.FindNodeOrInsertPos(ID, InsertPos))
     return QualType(FTP, 0);
 
@@ -1688,7 +1686,7 @@
   // FunctionProtoType objects are allocated with extra bytes after them
   // for two variable size arrays (for parameter and exception types) at the
   // end of them.
-  FunctionProtoType *FTP = 
+  FunctionProtoType *FTP =
     (FunctionProtoType*)Allocate(sizeof(FunctionProtoType) +
                                  NumArgs*sizeof(QualType) +
                                  NumExs*sizeof(QualType), 8);
@@ -1705,7 +1703,7 @@
 QualType ASTContext::getTypeDeclType(TypeDecl *Decl, TypeDecl* PrevDecl) {
   assert(Decl && "Passed null for Decl param");
   if (Decl->TypeForDecl) return QualType(Decl->TypeForDecl, 0);
-  
+
   if (TypedefDecl *Typedef = dyn_cast<TypedefDecl>(Decl))
     return getTypedefType(Typedef);
   else if (isa<TemplateTypeParmDecl>(Decl)) {
@@ -1735,7 +1733,7 @@
 /// specified typename decl.
 QualType ASTContext::getTypedefType(TypedefDecl *Decl) {
   if (Decl->TypeForDecl) return QualType(Decl->TypeForDecl, 0);
-  
+
   QualType Canonical = getCanonicalType(Decl->getUnderlyingType());
   Decl->TypeForDecl = new(*this,8) TypedefType(Type::Typedef, Decl, Canonical);
   Types.push_back(Decl->TypeForDecl);
@@ -1743,20 +1741,20 @@
 }
 
 /// \brief Retrieve the template type parameter type for a template
-/// parameter or parameter pack with the given depth, index, and (optionally) 
+/// parameter or parameter pack with the given depth, index, and (optionally)
 /// name.
-QualType ASTContext::getTemplateTypeParmType(unsigned Depth, unsigned Index, 
+QualType ASTContext::getTemplateTypeParmType(unsigned Depth, unsigned Index,
                                              bool ParameterPack,
                                              IdentifierInfo *Name) {
   llvm::FoldingSetNodeID ID;
   TemplateTypeParmType::Profile(ID, Depth, Index, ParameterPack, Name);
   void *InsertPos = 0;
-  TemplateTypeParmType *TypeParm 
+  TemplateTypeParmType *TypeParm
     = TemplateTypeParmTypes.FindNodeOrInsertPos(ID, InsertPos);
 
   if (TypeParm)
     return QualType(TypeParm, 0);
-  
+
   if (Name) {
     QualType Canon = getTemplateTypeParmType(Depth, Index, ParameterPack);
     TypeParm = new (*this, 8) TemplateTypeParmType(Depth, Index, ParameterPack,
@@ -1770,7 +1768,7 @@
   return QualType(TypeParm, 0);
 }
 
-QualType 
+QualType
 ASTContext::getTemplateSpecializationType(TemplateName Template,
                                           const TemplateArgument *Args,
                                           unsigned NumArgs,
@@ -1788,65 +1786,65 @@
     // Determine whether this canonical template specialization type already
     // exists.
     llvm::FoldingSetNodeID ID;
-    TemplateSpecializationType::Profile(ID, CanonTemplate, 
+    TemplateSpecializationType::Profile(ID, CanonTemplate,
                                         CanonArgs.data(), NumArgs, *this);
 
     void *InsertPos = 0;
     TemplateSpecializationType *Spec
       = TemplateSpecializationTypes.FindNodeOrInsertPos(ID, InsertPos);
-    
+
     if (!Spec) {
       // Allocate a new canonical template specialization type.
-      void *Mem = Allocate((sizeof(TemplateSpecializationType) + 
+      void *Mem = Allocate((sizeof(TemplateSpecializationType) +
                             sizeof(TemplateArgument) * NumArgs),
                            8);
-      Spec = new (Mem) TemplateSpecializationType(*this, CanonTemplate, 
+      Spec = new (Mem) TemplateSpecializationType(*this, CanonTemplate,
                                                   CanonArgs.data(), NumArgs,
                                                   Canon);
       Types.push_back(Spec);
-      TemplateSpecializationTypes.InsertNode(Spec, InsertPos);      
+      TemplateSpecializationTypes.InsertNode(Spec, InsertPos);
     }
-    
+
     if (Canon.isNull())
       Canon = QualType(Spec, 0);
-    assert(Canon->isDependentType() && 
+    assert(Canon->isDependentType() &&
            "Non-dependent template-id type must have a canonical type");
   }
 
   // Allocate the (non-canonical) template specialization type, but don't
   // try to unique it: these types typically have location information that
   // we don't unique and don't want to lose.
-  void *Mem = Allocate((sizeof(TemplateSpecializationType) + 
+  void *Mem = Allocate((sizeof(TemplateSpecializationType) +
                         sizeof(TemplateArgument) * NumArgs),
                        8);
-  TemplateSpecializationType *Spec 
-    = new (Mem) TemplateSpecializationType(*this, Template, Args, NumArgs, 
+  TemplateSpecializationType *Spec
+    = new (Mem) TemplateSpecializationType(*this, Template, Args, NumArgs,
                                            Canon);
-  
+
   Types.push_back(Spec);
-  return QualType(Spec, 0);  
+  return QualType(Spec, 0);
 }
 
-QualType 
+QualType
 ASTContext::getQualifiedNameType(NestedNameSpecifier *NNS,
                                  QualType NamedType) {
   llvm::FoldingSetNodeID ID;
   QualifiedNameType::Profile(ID, NNS, NamedType);
 
   void *InsertPos = 0;
-  QualifiedNameType *T 
+  QualifiedNameType *T
     = QualifiedNameTypes.FindNodeOrInsertPos(ID, InsertPos);
   if (T)
     return QualType(T, 0);
 
-  T = new (*this) QualifiedNameType(NNS, NamedType, 
+  T = new (*this) QualifiedNameType(NNS, NamedType,
                                     getCanonicalType(NamedType));
   Types.push_back(T);
   QualifiedNameTypes.InsertNode(T, InsertPos);
   return QualType(T, 0);
 }
 
-QualType ASTContext::getTypenameType(NestedNameSpecifier *NNS, 
+QualType ASTContext::getTypenameType(NestedNameSpecifier *NNS,
                                      const IdentifierInfo *Name,
                                      QualType Canon) {
   assert(NNS->isDependent() && "nested-name-specifier must be dependent");
@@ -1861,7 +1859,7 @@
   TypenameType::Profile(ID, NNS, Name);
 
   void *InsertPos = 0;
-  TypenameType *T 
+  TypenameType *T
     = TypenameTypes.FindNodeOrInsertPos(ID, InsertPos);
   if (T)
     return QualType(T, 0);
@@ -1869,11 +1867,11 @@
   T = new (*this) TypenameType(NNS, Name, Canon);
   Types.push_back(T);
   TypenameTypes.InsertNode(T, InsertPos);
-  return QualType(T, 0);  
+  return QualType(T, 0);
 }
 
-QualType 
-ASTContext::getTypenameType(NestedNameSpecifier *NNS, 
+QualType
+ASTContext::getTypenameType(NestedNameSpecifier *NNS,
                             const TemplateSpecializationType *TemplateId,
                             QualType Canon) {
   assert(NNS->isDependent() && "nested-name-specifier must be dependent");
@@ -1894,7 +1892,7 @@
   TypenameType::Profile(ID, NNS, TemplateId);
 
   void *InsertPos = 0;
-  TypenameType *T 
+  TypenameType *T
     = TypenameTypes.FindNodeOrInsertPos(ID, InsertPos);
   if (T)
     return QualType(T, 0);
@@ -1902,7 +1900,7 @@
   T = new (*this) TypenameType(NNS, TemplateId, Canon);
   Types.push_back(T);
   TypenameTypes.InsertNode(T, InsertPos);
-  return QualType(T, 0);    
+  return QualType(T, 0);
 }
 
 QualType
@@ -1910,7 +1908,7 @@
                               ElaboratedType::TagKind Tag) {
   llvm::FoldingSetNodeID ID;
   ElaboratedType::Profile(ID, UnderlyingType, Tag);
-  
+
   void *InsertPos = 0;
   ElaboratedType *T = ElaboratedTypes.FindNodeOrInsertPos(ID, InsertPos);
   if (T)
@@ -1934,7 +1932,7 @@
 static void SortAndUniqueProtocols(ObjCProtocolDecl **&Protocols,
                                    unsigned &NumProtocols) {
   ObjCProtocolDecl **ProtocolsEnd = Protocols+NumProtocols;
-  
+
   // Sort protocols, keyed by name.
   std::sort(Protocols, Protocols+NumProtocols, CmpProtocolNames);
 
@@ -1946,7 +1944,7 @@
 /// getObjCObjectPointerType - Return a ObjCObjectPointerType type for
 /// the given interface decl and the conforming protocol list.
 QualType ASTContext::getObjCObjectPointerType(QualType InterfaceT,
-                                              ObjCProtocolDecl **Protocols, 
+                                              ObjCProtocolDecl **Protocols,
                                               unsigned NumProtocols) {
   // Sort the protocol list alphabetically to canonicalize it.
   if (NumProtocols)
@@ -1963,7 +1961,7 @@
   // No Match;
   ObjCObjectPointerType *QType =
     new (*this,8) ObjCObjectPointerType(InterfaceT, Protocols, NumProtocols);
-  
+
   Types.push_back(QType);
   ObjCObjectPointerTypes.InsertNode(QType, InsertPos);
   return QualType(QType, 0);
@@ -1973,21 +1971,21 @@
 /// specified ObjC interface decl. The list of protocols is optional.
 QualType ASTContext::getObjCInterfaceType(const ObjCInterfaceDecl *Decl,
                        ObjCProtocolDecl **Protocols, unsigned NumProtocols) {
-  if (NumProtocols) 
+  if (NumProtocols)
     // Sort the protocol list alphabetically to canonicalize it.
     SortAndUniqueProtocols(Protocols, NumProtocols);
-  
+
   llvm::FoldingSetNodeID ID;
   ObjCInterfaceType::Profile(ID, Decl, Protocols, NumProtocols);
-  
+
   void *InsertPos = 0;
   if (ObjCInterfaceType *QT =
       ObjCInterfaceTypes.FindNodeOrInsertPos(ID, InsertPos))
     return QualType(QT, 0);
-  
+
   // No Match;
   ObjCInterfaceType *QType =
-    new (*this,8) ObjCInterfaceType(const_cast<ObjCInterfaceDecl*>(Decl), 
+    new (*this,8) ObjCInterfaceType(const_cast<ObjCInterfaceDecl*>(Decl),
                                     Protocols, NumProtocols);
   Types.push_back(QType);
   ObjCInterfaceTypes.InsertNode(QType, InsertPos);
@@ -1997,21 +1995,21 @@
 /// getTypeOfExprType - Unlike many "get<Type>" functions, we can't unique
 /// TypeOfExprType AST's (since expression's are never shared). For example,
 /// multiple declarations that refer to "typeof(x)" all contain different
-/// DeclRefExpr's. This doesn't effect the type checker, since it operates 
+/// DeclRefExpr's. This doesn't effect the type checker, since it operates
 /// on canonical type's (which are always unique).
 QualType ASTContext::getTypeOfExprType(Expr *tofExpr) {
   TypeOfExprType *toe;
   if (tofExpr->isTypeDependent()) {
     llvm::FoldingSetNodeID ID;
     DependentTypeOfExprType::Profile(ID, *this, tofExpr);
-    
+
     void *InsertPos = 0;
     DependentTypeOfExprType *Canon
       = DependentTypeOfExprTypes.FindNodeOrInsertPos(ID, InsertPos);
     if (Canon) {
       // We already have a "canonical" version of an identical, dependent
       // typeof(expr) type. Use that as our canonical type.
-      toe = new (*this, 8) TypeOfExprType(tofExpr, 
+      toe = new (*this, 8) TypeOfExprType(tofExpr,
                                           QualType((TypeOfExprType*)Canon, 0));
     }
     else {
@@ -2031,7 +2029,7 @@
 /// getTypeOfType -  Unlike many "get<Type>" functions, we don't unique
 /// TypeOfType AST's. The only motivation to unique these nodes would be
 /// memory savings. Since typeof(t) is fairly uncommon, space shouldn't be
-/// an issue. This doesn't effect the type checker, since it operates 
+/// an issue. This doesn't effect the type checker, since it operates
 /// on canonical type's (which are always unique).
 QualType ASTContext::getTypeOfType(QualType tofType) {
   QualType Canonical = getCanonicalType(tofType);
@@ -2045,7 +2043,7 @@
 static QualType getDecltypeForExpr(const Expr *e, ASTContext &Context) {
   if (e->isTypeDependent())
     return Context.DependentTy;
-  
+
   // If e is an id expression or a class member access, decltype(e) is defined
   // as the type of the entity named by e.
   if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(e)) {
@@ -2061,28 +2059,28 @@
   // return type of that function.
   if (const CallExpr *CE = dyn_cast<CallExpr>(e->IgnoreParens()))
     return CE->getCallReturnType();
-  
+
   QualType T = e->getType();
-  
-  // Otherwise, where T is the type of e, if e is an lvalue, decltype(e) is 
+
+  // Otherwise, where T is the type of e, if e is an lvalue, decltype(e) is
   // defined as T&, otherwise decltype(e) is defined as T.
   if (e->isLvalue(Context) == Expr::LV_Valid)
     T = Context.getLValueReferenceType(T);
-  
+
   return T;
 }
 
 /// getDecltypeType -  Unlike many "get<Type>" functions, we don't unique
 /// DecltypeType AST's. The only motivation to unique these nodes would be
 /// memory savings. Since decltype(t) is fairly uncommon, space shouldn't be
-/// an issue. This doesn't effect the type checker, since it operates 
+/// an issue. This doesn't effect the type checker, since it operates
 /// on canonical type's (which are always unique).
 QualType ASTContext::getDecltypeType(Expr *e) {
   DecltypeType *dt;
   if (e->isTypeDependent()) {
     llvm::FoldingSetNodeID ID;
     DependentDecltypeType::Profile(ID, *this, e);
-    
+
     void *InsertPos = 0;
     DependentDecltypeType *Canon
       = DependentDecltypeTypes.FindNodeOrInsertPos(ID, InsertPos);
@@ -2100,7 +2098,7 @@
     }
   } else {
     QualType T = getDecltypeForExpr(e, *this);
-    dt = new (*this, 8) DecltypeType(e, T, getCanonicalType(T));    
+    dt = new (*this, 8) DecltypeType(e, T, getCanonicalType(T));
   }
   Types.push_back(dt);
   return QualType(dt, 0);
@@ -2115,9 +2113,9 @@
   return getTypeDeclType(const_cast<TagDecl*>(Decl));
 }
 
-/// getSizeType - Return the unique type for "size_t" (C99 7.17), the result 
-/// of the sizeof operator (C99 6.5.3.4p4). The value is target dependent and 
-/// needs to agree with the definition in <stddef.h>. 
+/// getSizeType - Return the unique type for "size_t" (C99 7.17), the result
+/// of the sizeof operator (C99 6.5.3.4p4). The value is target dependent and
+/// needs to agree with the definition in <stddef.h>.
 QualType ASTContext::getSizeType() const {
   return getFromTargetType(Target.getSizeType());
 }
@@ -2154,10 +2152,10 @@
 /// for exact equality with a simple pointer comparison.
 CanQualType ASTContext::getCanonicalType(QualType T) {
   QualType CanType = T.getTypePtr()->getCanonicalTypeInternal();
-  
+
   // If the result has type qualifiers, make sure to canonicalize them as well.
   unsigned TypeQuals = T.getCVRQualifiers() | CanType.getCVRQualifiers();
-  if (TypeQuals == 0) 
+  if (TypeQuals == 0)
     return CanQualType::CreateUnsafe(CanType);
 
   // If the type qualifiers are on an array type, get the canonical type of the
@@ -2165,12 +2163,12 @@
   ArrayType *AT = dyn_cast<ArrayType>(CanType);
   if (!AT)
     return CanQualType::CreateUnsafe(CanType.getQualifiedType(TypeQuals));
-  
+
   // Get the canonical version of the element with the extra qualifiers on it.
   // This can recursively sink qualifiers through multiple levels of arrays.
   QualType NewEltTy=AT->getElementType().getWithAdditionalQualifiers(TypeQuals);
   NewEltTy = getCanonicalType(NewEltTy);
-  
+
   if (ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(AT))
     return CanQualType::CreateUnsafe(
              getConstantArrayType(NewEltTy, CAT->getSize(),
@@ -2180,7 +2178,7 @@
     return CanQualType::CreateUnsafe(
              getIncompleteArrayType(NewEltTy, IAT->getSizeModifier(),
                                     IAT->getIndexTypeQualifier()));
-  
+
   if (DependentSizedArrayType *DSAT = dyn_cast<DependentSizedArrayType>(AT))
     return CanQualType::CreateUnsafe(
              getDependentSizedArrayType(NewEltTy,
@@ -2205,7 +2203,7 @@
   if (TemplateDecl *Template = Name.getAsTemplateDecl())
     return TemplateName(cast<TemplateDecl>(Template->getCanonicalDecl()));
 
-  // If this template name refers to a set of overloaded function templates, 
+  // If this template name refers to a set of overloaded function templates,
   /// the canonical template name merely stores the set of function templates.
   if (OverloadedFunctionDecl *Ovl = Name.getAsOverloadedFunctionDecl()) {
     OverloadedFunctionDecl *CanonOvl = 0;
@@ -2215,55 +2213,55 @@
       Decl *Canon = F->get()->getCanonicalDecl();
       if (CanonOvl || Canon != F->get()) {
         if (!CanonOvl)
-          CanonOvl = OverloadedFunctionDecl::Create(*this, 
-                                                    Ovl->getDeclContext(), 
+          CanonOvl = OverloadedFunctionDecl::Create(*this,
+                                                    Ovl->getDeclContext(),
                                                     Ovl->getDeclName());
-        
+
         CanonOvl->addOverload(
                     AnyFunctionDecl::getFromNamedDecl(cast<NamedDecl>(Canon)));
       }
     }
-    
+
     return TemplateName(CanonOvl? CanonOvl : Ovl);
   }
-  
+
   DependentTemplateName *DTN = Name.getAsDependentTemplateName();
   assert(DTN && "Non-dependent template names must refer to template decls.");
   return DTN->CanonicalTemplateName;
 }
 
-TemplateArgument 
+TemplateArgument
 ASTContext::getCanonicalTemplateArgument(const TemplateArgument &Arg) {
   switch (Arg.getKind()) {
     case TemplateArgument::Null:
       return Arg;
-      
+
     case TemplateArgument::Expression:
       // FIXME: Build canonical expression?
       return Arg;
-      
+
     case TemplateArgument::Declaration:
       return TemplateArgument(SourceLocation(),
                               Arg.getAsDecl()->getCanonicalDecl());
-      
+
     case TemplateArgument::Integral:
       return TemplateArgument(SourceLocation(),
                               *Arg.getAsIntegral(),
                               getCanonicalType(Arg.getIntegralType()));
-      
+
     case TemplateArgument::Type:
       return TemplateArgument(SourceLocation(),
                               getCanonicalType(Arg.getAsType()));
-      
+
     case TemplateArgument::Pack: {
       // FIXME: Allocate in ASTContext
       TemplateArgument *CanonArgs = new TemplateArgument[Arg.pack_size()];
       unsigned Idx = 0;
-      for (TemplateArgument::pack_iterator A = Arg.pack_begin(), 
+      for (TemplateArgument::pack_iterator A = Arg.pack_begin(),
                                         AEnd = Arg.pack_end();
            A != AEnd; (void)++A, ++Idx)
         CanonArgs[Idx] = getCanonicalTemplateArgument(*A);
-      
+
       TemplateArgument Result;
       Result.setArgumentPack(CanonArgs, Arg.pack_size(), false);
       return Result;
@@ -2277,13 +2275,13 @@
 
 NestedNameSpecifier *
 ASTContext::getCanonicalNestedNameSpecifier(NestedNameSpecifier *NNS) {
-  if (!NNS) 
+  if (!NNS)
     return 0;
 
   switch (NNS->getKind()) {
   case NestedNameSpecifier::Identifier:
     // Canonicalize the prefix but keep the identifier the same.
-    return NestedNameSpecifier::Create(*this, 
+    return NestedNameSpecifier::Create(*this,
                          getCanonicalNestedNameSpecifier(NNS->getPrefix()),
                                        NNS->getAsIdentifier());
 
@@ -2295,8 +2293,8 @@
   case NestedNameSpecifier::TypeSpec:
   case NestedNameSpecifier::TypeSpecWithTemplate: {
     QualType T = getCanonicalType(QualType(NNS->getAsType(), 0));
-    return NestedNameSpecifier::Create(*this, 0, 
-                 NNS->getKind() == NestedNameSpecifier::TypeSpecWithTemplate, 
+    return NestedNameSpecifier::Create(*this, 0,
+                 NNS->getKind() == NestedNameSpecifier::TypeSpecWithTemplate,
                                        T.getTypePtr());
   }
 
@@ -2317,27 +2315,27 @@
     if (const ArrayType *AT = dyn_cast<ArrayType>(T))
       return AT;
   }
-  
+
   // Handle the common negative case fast, ignoring CVR qualifiers.
   QualType CType = T->getCanonicalTypeInternal();
-    
+
   // Make sure to look through type qualifiers (like ExtQuals) for the negative
   // test.
   if (!isa<ArrayType>(CType) &&
       !isa<ArrayType>(CType.getUnqualifiedType()))
     return 0;
-  
+
   // Apply any CVR qualifiers from the array type to the element type.  This
   // implements C99 6.7.3p8: "If the specification of an array type includes
   // any type qualifiers, the element type is so qualified, not the array type."
-  
+
   // If we get here, we either have type qualifiers on the type, or we have
   // sugar such as a typedef in the way.  If we have type qualifiers on the type
   // we must propagate them down into the element type.
   unsigned CVRQuals = T.getCVRQualifiers();
   unsigned AddrSpace = 0;
   Type *Ty = T.getTypePtr();
-  
+
   // Rip through ExtQualType's and typedefs to get to a concrete type.
   while (1) {
     if (const ExtQualType *EXTQT = dyn_cast<ExtQualType>(Ty)) {
@@ -2351,12 +2349,12 @@
       Ty = T.getTypePtr();
     }
   }
-  
+
   // If we have a simple case, just return now.
   const ArrayType *ATy = dyn_cast<ArrayType>(Ty);
   if (ATy == 0 || (AddrSpace == 0 && CVRQuals == 0))
     return ATy;
-  
+
   // Otherwise, we have an array and we have qualifiers on it.  Push the
   // qualifiers into the array element type and return a new array type.
   // Get the canonical version of the element with the extra qualifiers on it.
@@ -2365,7 +2363,7 @@
   if (AddrSpace)
     NewEltTy = getAddrSpaceQualType(NewEltTy, AddrSpace);
   NewEltTy = NewEltTy.getWithAdditionalQualifiers(CVRQuals);
-  
+
   if (const ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(ATy))
     return cast<ArrayType>(getConstantArrayType(NewEltTy, CAT->getSize(),
                                                 CAT->getSizeModifier(),
@@ -2375,16 +2373,16 @@
                                                   IAT->getSizeModifier(),
                                                   IAT->getIndexTypeQualifier()));
 
-  if (const DependentSizedArrayType *DSAT 
+  if (const DependentSizedArrayType *DSAT
         = dyn_cast<DependentSizedArrayType>(ATy))
     return cast<ArrayType>(
-                     getDependentSizedArrayType(NewEltTy, 
+                     getDependentSizedArrayType(NewEltTy,
                                                 DSAT->getSizeExpr() ?
                                               DSAT->getSizeExpr()->Retain() : 0,
                                                 DSAT->getSizeModifier(),
                                                 DSAT->getIndexTypeQualifier(),
                                                 DSAT->getBracketsRange()));
-  
+
   const VariableArrayType *VAT = cast<VariableArrayType>(ATy);
   return cast<ArrayType>(getVariableArrayType(NewEltTy,
                                               VAT->getSizeExpr() ?
@@ -2408,7 +2406,7 @@
   // (C99 6.7.3p8).
   const ArrayType *PrettyArrayType = getAsArrayType(Ty);
   assert(PrettyArrayType && "Not an array type!");
-  
+
   QualType PtrTy = getPointerType(PrettyArrayType->getElementType());
 
   // int x[restrict 4] ->  int *restrict
@@ -2429,15 +2427,15 @@
 
 QualType ASTContext::getBaseElementType(const VariableArrayType *VAT) {
   QualType ElemTy = VAT->getElementType();
-  
+
   if (const VariableArrayType *VAT = getAsVariableArrayType(ElemTy))
     return getBaseElementType(VAT);
-  
+
   return ElemTy;
 }
 
 /// getConstantArrayElementCount - Returns number of constant array elements.
-uint64_t 
+uint64_t
 ASTContext::getConstantArrayElementCount(const ConstantArrayType *CA)  const {
   uint64_t ElementCount = 1;
   do {
@@ -2462,8 +2460,8 @@
   }
 }
 
-/// getFloatingTypeOfSizeWithinDomain - Returns a real floating 
-/// point or a complex type (based on typeDomain/typeSize). 
+/// getFloatingTypeOfSizeWithinDomain - Returns a real floating
+/// point or a complex type (based on typeDomain/typeSize).
 /// 'typeDomain' is a real floating point or complex type.
 /// 'typeSize' is a real floating point or complex type.
 QualType ASTContext::getFloatingTypeOfSizeWithinDomain(QualType Size,
@@ -2490,11 +2488,11 @@
 /// getFloatingTypeOrder - Compare the rank of the two specified floating
 /// point types, ignoring the domain of the type (i.e. 'double' ==
 /// '_Complex double').  If LHS > RHS, return 1.  If LHS == RHS, return 0. If
-/// LHS < RHS, return -1. 
+/// LHS < RHS, return -1.
 int ASTContext::getFloatingTypeOrder(QualType LHS, QualType RHS) {
   FloatingRank LHSR = getFloatingRank(LHS);
   FloatingRank RHSR = getFloatingRank(RHS);
-  
+
   if (LHSR == RHSR)
     return 0;
   if (LHSR > RHSR)
@@ -2597,77 +2595,77 @@
   return (PromotableSize != IntSize) ? IntTy : UnsignedIntTy;
 }
 
-/// getIntegerTypeOrder - Returns the highest ranked integer type: 
+/// getIntegerTypeOrder - Returns the highest ranked integer type:
 /// C99 6.3.1.8p1.  If LHS > RHS, return 1.  If LHS == RHS, return 0. If
-/// LHS < RHS, return -1. 
+/// LHS < RHS, return -1.
 int ASTContext::getIntegerTypeOrder(QualType LHS, QualType RHS) {
   Type *LHSC = getCanonicalType(LHS).getTypePtr();
   Type *RHSC = getCanonicalType(RHS).getTypePtr();
   if (LHSC == RHSC) return 0;
-  
+
   bool LHSUnsigned = LHSC->isUnsignedIntegerType();
   bool RHSUnsigned = RHSC->isUnsignedIntegerType();
-  
+
   unsigned LHSRank = getIntegerRank(LHSC);
   unsigned RHSRank = getIntegerRank(RHSC);
-  
+
   if (LHSUnsigned == RHSUnsigned) {  // Both signed or both unsigned.
     if (LHSRank == RHSRank) return 0;
     return LHSRank > RHSRank ? 1 : -1;
   }
-  
+
   // Otherwise, the LHS is signed and the RHS is unsigned or visa versa.
   if (LHSUnsigned) {
     // If the unsigned [LHS] type is larger, return it.
     if (LHSRank >= RHSRank)
       return 1;
-    
+
     // If the signed type can represent all values of the unsigned type, it
     // wins.  Because we are dealing with 2's complement and types that are
-    // powers of two larger than each other, this is always safe. 
+    // powers of two larger than each other, this is always safe.
     return -1;
   }
 
   // If the unsigned [RHS] type is larger, return it.
   if (RHSRank >= LHSRank)
     return -1;
-  
+
   // If the signed type can represent all values of the unsigned type, it
   // wins.  Because we are dealing with 2's complement and types that are
-  // powers of two larger than each other, this is always safe. 
+  // powers of two larger than each other, this is always safe.
   return 1;
 }
 
-// getCFConstantStringType - Return the type used for constant CFStrings. 
+// getCFConstantStringType - Return the type used for constant CFStrings.
 QualType ASTContext::getCFConstantStringType() {
   if (!CFConstantStringTypeDecl) {
-    CFConstantStringTypeDecl = 
-      RecordDecl::Create(*this, TagDecl::TK_struct, TUDecl, SourceLocation(), 
+    CFConstantStringTypeDecl =
+      RecordDecl::Create(*this, TagDecl::TK_struct, TUDecl, SourceLocation(),
                          &Idents.get("NSConstantString"));
     QualType FieldTypes[4];
-  
+
     // const int *isa;
-    FieldTypes[0] = getPointerType(IntTy.getQualifiedType(QualType::Const));  
+    FieldTypes[0] = getPointerType(IntTy.getQualifiedType(QualType::Const));
     // int flags;
     FieldTypes[1] = IntTy;
     // const char *str;
-    FieldTypes[2] = getPointerType(CharTy.getQualifiedType(QualType::Const));  
+    FieldTypes[2] = getPointerType(CharTy.getQualifiedType(QualType::Const));
     // long length;
-    FieldTypes[3] = LongTy;  
-  
+    FieldTypes[3] = LongTy;
+
     // Create fields
     for (unsigned i = 0; i < 4; ++i) {
-      FieldDecl *Field = FieldDecl::Create(*this, CFConstantStringTypeDecl, 
+      FieldDecl *Field = FieldDecl::Create(*this, CFConstantStringTypeDecl,
                                            SourceLocation(), 0,
                                            FieldTypes[i], /*DInfo=*/0,
-                                           /*BitWidth=*/0, 
+                                           /*BitWidth=*/0,
                                            /*Mutable=*/false);
       CFConstantStringTypeDecl->addDecl(Field);
     }
 
     CFConstantStringTypeDecl->completeDefinition(*this);
   }
-  
+
   return getTagDeclType(CFConstantStringTypeDecl);
 }
 
@@ -2677,13 +2675,12 @@
   CFConstantStringTypeDecl = Rec->getDecl();
 }
 
-QualType ASTContext::getObjCFastEnumerationStateType()
-{
+QualType ASTContext::getObjCFastEnumerationStateType() {
   if (!ObjCFastEnumerationStateTypeDecl) {
     ObjCFastEnumerationStateTypeDecl =
       RecordDecl::Create(*this, TagDecl::TK_struct, TUDecl, SourceLocation(),
                          &Idents.get("__objcFastEnumerationState"));
-    
+
     QualType FieldTypes[] = {
       UnsignedLongTy,
       getPointerType(ObjCIdTypedefType),
@@ -2691,20 +2688,20 @@
       getConstantArrayType(UnsignedLongTy,
                            llvm::APInt(32, 5), ArrayType::Normal, 0)
     };
-    
+
     for (size_t i = 0; i < 4; ++i) {
-      FieldDecl *Field = FieldDecl::Create(*this, 
-                                           ObjCFastEnumerationStateTypeDecl, 
-                                           SourceLocation(), 0, 
+      FieldDecl *Field = FieldDecl::Create(*this,
+                                           ObjCFastEnumerationStateTypeDecl,
+                                           SourceLocation(), 0,
                                            FieldTypes[i], /*DInfo=*/0,
-                                           /*BitWidth=*/0, 
+                                           /*BitWidth=*/0,
                                            /*Mutable=*/false);
       ObjCFastEnumerationStateTypeDecl->addDecl(Field);
     }
-    
+
     ObjCFastEnumerationStateTypeDecl->completeDefinition(*this);
   }
-  
+
   return getTagDeclType(ObjCFastEnumerationStateTypeDecl);
 }
 
@@ -2720,7 +2717,7 @@
   if (const TypedefType *TT = dyn_cast<TypedefType>(T))
     if (IdentifierInfo *II = TT->getDecl()->getIdentifier())
       return II->isStr("BOOL");
-        
+
   return false;
 }
 
@@ -2728,7 +2725,7 @@
 /// purpose.
 int ASTContext::getObjCEncodingTypeSize(QualType type) {
   uint64_t sz = getTypeSize(type);
-  
+
   // Make all integer and enum types at least as large as an int
   if (sz > 0 && type->isIntegralType())
     sz = std::max(sz, getTypeSize(IntTy));
@@ -2740,7 +2737,7 @@
 
 /// getObjCEncodingForMethodDecl - Return the encoded type for this method
 /// declaration.
-void ASTContext::getObjCEncodingForMethodDecl(const ObjCMethodDecl *Decl, 
+void ASTContext::getObjCEncodingForMethodDecl(const ObjCMethodDecl *Decl,
                                               std::string& S) {
   // FIXME: This is not very efficient.
   // Encode type qualifer, 'in', 'inout', etc. for the return type.
@@ -2765,13 +2762,13 @@
   S += llvm::utostr(ParmOffset);
   S += "@0:";
   S += llvm::utostr(PtrSize);
-  
+
   // Argument types.
   ParmOffset = 2 * PtrSize;
   for (ObjCMethodDecl::param_iterator PI = Decl->param_begin(),
        E = Decl->param_end(); PI != E; ++PI) {
     ParmVarDecl *PVDecl = *PI;
-    QualType PType = PVDecl->getOriginalType(); 
+    QualType PType = PVDecl->getOriginalType();
     if (const ArrayType *AT =
           dyn_cast<ArrayType>(PType->getCanonicalTypeInternal())) {
       // Use array's original type only if it has known number of
@@ -2793,11 +2790,11 @@
 /// property declaration. If non-NULL, Container must be either an
 /// ObjCCategoryImplDecl or ObjCImplementationDecl; it should only be
 /// NULL when getting encodings for protocol properties.
-/// Property attributes are stored as a comma-delimited C string. The simple 
-/// attributes readonly and bycopy are encoded as single characters. The 
-/// parametrized attributes, getter=name, setter=name, and ivar=name, are 
-/// encoded as single characters, followed by an identifier. Property types 
-/// are also encoded as a parametrized attribute. The characters used to encode 
+/// Property attributes are stored as a comma-delimited C string. The simple
+/// attributes readonly and bycopy are encoded as single characters. The
+/// parametrized attributes, getter=name, setter=name, and ivar=name, are
+/// encoded as single characters, followed by an identifier. Property types
+/// are also encoded as a parametrized attribute. The characters used to encode
 /// these attributes are defined by the following enumeration:
 /// @code
 /// enum PropertyAttributes {
@@ -2814,7 +2811,7 @@
 /// kPropertyNonAtomic = 'N'         // property non-atomic
 /// };
 /// @endcode
-void ASTContext::getObjCEncodingForPropertyDecl(const ObjCPropertyDecl *PD, 
+void ASTContext::getObjCEncodingForPropertyDecl(const ObjCPropertyDecl *PD,
                                                 const Decl *Container,
                                                 std::string& S) {
   // Collect information from the property implementation decl(s).
@@ -2823,7 +2820,7 @@
 
   // FIXME: Duplicated code due to poor abstraction.
   if (Container) {
-    if (const ObjCCategoryImplDecl *CID = 
+    if (const ObjCCategoryImplDecl *CID =
         dyn_cast<ObjCCategoryImplDecl>(Container)) {
       for (ObjCCategoryImplDecl::propimpl_iterator
              i = CID->propimpl_begin(), e = CID->propimpl_end();
@@ -2850,7 +2847,7 @@
             SynthesizePID = PID;
           }
         }
-      }      
+      }
     }
   }
 
@@ -2860,7 +2857,7 @@
   // Encode result type.
   // GCC has some special rules regarding encoding of properties which
   // closely resembles encoding of ivars.
-  getObjCEncodingForTypeImpl(PD->getType(), S, true, true, 0, 
+  getObjCEncodingForTypeImpl(PD->getType(), S, true, true, 0,
                              true /* outermost type */,
                              true /* encoding for property */);
 
@@ -2870,7 +2867,7 @@
     switch (PD->getSetterKind()) {
     case ObjCPropertyDecl::Assign: break;
     case ObjCPropertyDecl::Copy:   S += ",C"; break;
-    case ObjCPropertyDecl::Retain: S += ",&"; break;      
+    case ObjCPropertyDecl::Retain: S += ",&"; break;
     }
   }
 
@@ -2881,7 +2878,7 @@
 
   if (PD->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_nonatomic)
     S += ",N";
-  
+
   if (PD->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_getter) {
     S += ",G";
     S += PD->getGetterName().getAsString();
@@ -2902,8 +2899,8 @@
 }
 
 /// getLegacyIntegralTypeEncoding -
-/// Another legacy compatibility encoding: 32-bit longs are encoded as 
-/// 'l' or 'L' , but not always.  For typedefs, we need to use 
+/// Another legacy compatibility encoding: 32-bit longs are encoded as
+/// 'l' or 'L' , but not always.  For typedefs, we need to use
 /// 'i' or 'I' instead if encoding a struct field, or a pointer!
 ///
 void ASTContext::getLegacyIntegralTypeEncoding (QualType &PointeeTy) const {
@@ -2912,7 +2909,7 @@
       if (BT->getKind() == BuiltinType::ULong &&
           ((const_cast<ASTContext *>(this))->getIntWidth(PointeeTy) == 32))
         PointeeTy = UnsignedIntTy;
-      else 
+      else
         if (BT->getKind() == BuiltinType::Long &&
             ((const_cast<ASTContext *>(this))->getIntWidth(PointeeTy) == 32))
           PointeeTy = IntTy;
@@ -2926,11 +2923,11 @@
   // directly pointed to, and expanding embedded structures. Note that
   // these rules are sufficient to prevent recursive encoding of the
   // same type.
-  getObjCEncodingForTypeImpl(T, S, true, true, Field, 
+  getObjCEncodingForTypeImpl(T, S, true, true, Field,
                              true /* outermost type */);
 }
 
-static void EncodeBitField(const ASTContext *Context, std::string& S, 
+static void EncodeBitField(const ASTContext *Context, std::string& S,
                            const FieldDecl *FD) {
   const Expr *E = FD->getBitWidth();
   assert(E && "bitfield width not there - getObjCEncodingForTypeImpl");
@@ -2951,16 +2948,16 @@
       return EncodeBitField(this, S, FD);
     char encoding;
     switch (BT->getKind()) {
-    default: assert(0 && "Unhandled builtin type kind");          
+    default: assert(0 && "Unhandled builtin type kind");
     case BuiltinType::Void:       encoding = 'v'; break;
     case BuiltinType::Bool:       encoding = 'B'; break;
     case BuiltinType::Char_U:
     case BuiltinType::UChar:      encoding = 'C'; break;
     case BuiltinType::UShort:     encoding = 'S'; break;
     case BuiltinType::UInt:       encoding = 'I'; break;
-    case BuiltinType::ULong:      
-        encoding = 
-          (const_cast<ASTContext *>(this))->getIntWidth(T) == 32 ? 'L' : 'Q'; 
+    case BuiltinType::ULong:
+        encoding =
+          (const_cast<ASTContext *>(this))->getIntWidth(T) == 32 ? 'L' : 'Q';
         break;
     case BuiltinType::UInt128:    encoding = 'T'; break;
     case BuiltinType::ULongLong:  encoding = 'Q'; break;
@@ -2968,9 +2965,9 @@
     case BuiltinType::SChar:      encoding = 'c'; break;
     case BuiltinType::Short:      encoding = 's'; break;
     case BuiltinType::Int:        encoding = 'i'; break;
-    case BuiltinType::Long:       
-      encoding = 
-        (const_cast<ASTContext *>(this))->getIntWidth(T) == 32 ? 'l' : 'q'; 
+    case BuiltinType::Long:
+      encoding =
+        (const_cast<ASTContext *>(this))->getIntWidth(T) == 32 ? 'l' : 'q';
       break;
     case BuiltinType::LongLong:   encoding = 'q'; break;
     case BuiltinType::Int128:     encoding = 't'; break;
@@ -2978,25 +2975,25 @@
     case BuiltinType::Double:     encoding = 'd'; break;
     case BuiltinType::LongDouble: encoding = 'd'; break;
     }
-  
+
     S += encoding;
     return;
   }
-  
+
   if (const ComplexType *CT = T->getAsComplexType()) {
     S += 'j';
-    getObjCEncodingForTypeImpl(CT->getElementType(), S, false, false, 0, false, 
+    getObjCEncodingForTypeImpl(CT->getElementType(), S, false, false, 0, false,
                                false);
     return;
   }
-  
+
   if (const PointerType *PT = T->getAs<PointerType>()) {
     QualType PointeeTy = PT->getPointeeType();
     bool isReadOnly = false;
     // For historical/compatibility reasons, the read-only qualifier of the
     // pointee gets emitted _before_ the '^'.  The read-only qualifier of
     // the pointer itself gets ignored, _unless_ we are looking at a typedef!
-    // Also, do not emit the 'r' for anything but the outermost type! 
+    // Also, do not emit the 'r' for anything but the outermost type!
     if (isa<TypedefType>(T.getTypePtr())) {
       if (OutermostType && T.isConstQualified()) {
         isReadOnly = true;
@@ -3026,7 +3023,7 @@
       S += ':';
       return;
     }
-    
+
     if (PointeeTy->isCharType()) {
       // char pointer types should be encoded as '*' unless it is a
       // type that has been typedef'd to 'BOOL'.
@@ -3050,11 +3047,11 @@
     S += '^';
     getLegacyIntegralTypeEncoding(PointeeTy);
 
-    getObjCEncodingForTypeImpl(PointeeTy, S, false, ExpandPointedToStructures, 
+    getObjCEncodingForTypeImpl(PointeeTy, S, false, ExpandPointedToStructures,
                                NULL);
     return;
   }
-  
+
   if (const ArrayType *AT =
       // Ignore type qualifiers etc.
         dyn_cast<ArrayType>(T->getCanonicalTypeInternal())) {
@@ -3062,11 +3059,11 @@
       // Incomplete arrays are encoded as a pointer to the array element.
       S += '^';
 
-      getObjCEncodingForTypeImpl(AT->getElementType(), S, 
+      getObjCEncodingForTypeImpl(AT->getElementType(), S,
                                  false, ExpandStructures, FD);
     } else {
       S += '[';
-    
+
       if (const ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(AT))
         S += llvm::utostr(CAT->getSize().getZExtValue());
       else {
@@ -3074,19 +3071,19 @@
         assert(isa<VariableArrayType>(AT) && "Unknown array type!");
         S += '0';
       }
-    
-      getObjCEncodingForTypeImpl(AT->getElementType(), S, 
+
+      getObjCEncodingForTypeImpl(AT->getElementType(), S,
                                  false, ExpandStructures, FD);
       S += ']';
     }
     return;
   }
-  
+
   if (T->getAsFunctionType()) {
     S += '?';
     return;
   }
-  
+
   if (const RecordType *RTy = T->getAs<RecordType>()) {
     RecordDecl *RDecl = RTy->getDecl();
     S += RDecl->isUnion() ? '(' : '{';
@@ -3106,15 +3103,15 @@
           S += Field->getNameAsString();
           S += '"';
         }
-        
+
         // Special case bit-fields.
         if (Field->isBitField()) {
-          getObjCEncodingForTypeImpl(Field->getType(), S, false, true, 
+          getObjCEncodingForTypeImpl(Field->getType(), S, false, true,
                                      (*Field));
         } else {
           QualType qt = Field->getType();
           getLegacyIntegralTypeEncoding(qt);
-          getObjCEncodingForTypeImpl(qt, S, false, true, 
+          getObjCEncodingForTypeImpl(qt, S, false, true,
                                      FD);
         }
       }
@@ -3122,7 +3119,7 @@
     S += RDecl->isUnion() ? ')' : '}';
     return;
   }
-  
+
   if (T->isEnumeralType()) {
     if (FD && FD->isBitField())
       EncodeBitField(this, S, FD);
@@ -3130,12 +3127,12 @@
       S += 'i';
     return;
   }
-  
+
   if (T->isBlockPointerType()) {
     S += "@?"; // Unlike a pointer-to-function, which is "^?".
     return;
   }
-  
+
   if (T->isObjCInterfaceType()) {
     // @encode(class_name)
     ObjCInterfaceDecl *OI = T->getAsObjCInterfaceType()->getDecl();
@@ -3147,29 +3144,29 @@
     CollectObjCIvars(OI, RecFields);
     for (unsigned i = 0, e = RecFields.size(); i != e; ++i) {
       if (RecFields[i]->isBitField())
-        getObjCEncodingForTypeImpl(RecFields[i]->getType(), S, false, true, 
+        getObjCEncodingForTypeImpl(RecFields[i]->getType(), S, false, true,
                                    RecFields[i]);
       else
-        getObjCEncodingForTypeImpl(RecFields[i]->getType(), S, false, true, 
+        getObjCEncodingForTypeImpl(RecFields[i]->getType(), S, false, true,
                                    FD);
     }
     S += '}';
     return;
   }
-  
+
   if (const ObjCObjectPointerType *OPT = T->getAsObjCObjectPointerType()) {
     if (OPT->isObjCIdType()) {
       S += '@';
       return;
     }
-    
+
     if (OPT->isObjCClassType()) {
       S += '#';
       return;
     }
-    
+
     if (OPT->isObjCQualifiedIdType()) {
-      getObjCEncodingForTypeImpl(getObjCIdType(), S, 
+      getObjCEncodingForTypeImpl(getObjCIdType(), S,
                                  ExpandPointedToStructures,
                                  ExpandStructures, FD);
       if (FD || EncodingProperty) {
@@ -3186,16 +3183,16 @@
       }
       return;
     }
-    
+
     QualType PointeeTy = OPT->getPointeeType();
     if (!EncodingProperty &&
         isa<TypedefType>(PointeeTy.getTypePtr())) {
       // Another historical/compatibility reason.
-      // We encode the underlying type which comes out as 
+      // We encode the underlying type which comes out as
       // {...};
       S += '^';
-      getObjCEncodingForTypeImpl(PointeeTy, S, 
-                                 false, ExpandPointedToStructures, 
+      getObjCEncodingForTypeImpl(PointeeTy, S,
+                                 false, ExpandPointedToStructures,
                                  NULL);
       return;
     }
@@ -3209,16 +3206,16 @@
         S += '<';
         S += (*I)->getNameAsString();
         S += '>';
-      } 
+      }
       S += '"';
     }
     return;
   }
-  
+
   assert(0 && "@encode for type not implemented!");
 }
 
-void ASTContext::getObjCEncodingForTypeQualifier(Decl::ObjCDeclQualifier QT, 
+void ASTContext::getObjCEncodingForTypeQualifier(Decl::ObjCDeclQualifier QT,
                                                  std::string& S) const {
   if (QT & Decl::OBJC_TQ_In)
     S += 'n';
@@ -3236,7 +3233,7 @@
 
 void ASTContext::setBuiltinVaListType(QualType T) {
   assert(BuiltinVaListType.isNull() && "__builtin_va_list type already set!");
-    
+
   BuiltinVaListType = T;
 }
 
@@ -3271,15 +3268,15 @@
 }
 
 void ASTContext::setObjCConstantStringInterface(ObjCInterfaceDecl *Decl) {
-  assert(ObjCConstantStringType.isNull() && 
+  assert(ObjCConstantStringType.isNull() &&
          "'NSConstantString' type already set!");
-  
+
   ObjCConstantStringType = getObjCInterfaceType(Decl);
 }
 
 /// \brief Retrieve the template name that represents a qualified
 /// template name such as \c std::vector.
-TemplateName ASTContext::getQualifiedTemplateName(NestedNameSpecifier *NNS, 
+TemplateName ASTContext::getQualifiedTemplateName(NestedNameSpecifier *NNS,
                                                   bool TemplateKeyword,
                                                   TemplateDecl *Template) {
   llvm::FoldingSetNodeID ID;
@@ -3298,12 +3295,12 @@
 
 /// \brief Retrieve the template name that represents a qualified
 /// template name such as \c std::vector.
-TemplateName ASTContext::getQualifiedTemplateName(NestedNameSpecifier *NNS, 
+TemplateName ASTContext::getQualifiedTemplateName(NestedNameSpecifier *NNS,
                                                   bool TemplateKeyword,
                                             OverloadedFunctionDecl *Template) {
   llvm::FoldingSetNodeID ID;
   QualifiedTemplateName::Profile(ID, NNS, TemplateKeyword, Template);
-  
+
   void *InsertPos = 0;
   QualifiedTemplateName *QTN =
   QualifiedTemplateNames.FindNodeOrInsertPos(ID, InsertPos);
@@ -3311,15 +3308,15 @@
     QTN = new (*this,4) QualifiedTemplateName(NNS, TemplateKeyword, Template);
     QualifiedTemplateNames.InsertNode(QTN, InsertPos);
   }
-  
+
   return TemplateName(QTN);
 }
 
 /// \brief Retrieve the template name that represents a dependent
 /// template name such as \c MetaFun::template apply.
-TemplateName ASTContext::getDependentTemplateName(NestedNameSpecifier *NNS, 
+TemplateName ASTContext::getDependentTemplateName(NestedNameSpecifier *NNS,
                                                   const IdentifierInfo *Name) {
-  assert((!NNS || NNS->isDependent()) && 
+  assert((!NNS || NNS->isDependent()) &&
          "Nested name specifier must be dependent");
 
   llvm::FoldingSetNodeID ID;
@@ -3349,7 +3346,7 @@
 /// is actually a value of type @c TargetInfo::IntType.
 QualType ASTContext::getFromTargetType(unsigned Type) const {
   switch (Type) {
-  case TargetInfo::NoInt: return QualType(); 
+  case TargetInfo::NoInt: return QualType();
   case TargetInfo::SignedShort: return ShortTy;
   case TargetInfo::UnsignedShort: return UnsignedShortTy;
   case TargetInfo::SignedInt: return IntTy;
@@ -3379,7 +3376,7 @@
       if (TD->getAttr<ObjCNSObjectAttr>())
         return true;
   }
-  return false;  
+  return false;
 }
 
 /// getObjCGCAttr - Returns one of GCNone, Weak or Strong objc's
@@ -3391,7 +3388,7 @@
       getLangOptions().getGCMode() != LangOptions::NonGC) {
     GCAttrs = Ty.getObjCGCAttr();
     // Default behavious under objective-c's gc is for objective-c pointers
-    // (or pointers to them) be treated as though they were declared 
+    // (or pointers to them) be treated as though they were declared
     // as __strong.
     if (GCAttrs == QualType::GCNone) {
       if (Ty->isObjCObjectPointerType())
@@ -3411,7 +3408,7 @@
 //                        Type Compatibility Testing
 //===----------------------------------------------------------------------===//
 
-/// areCompatVectorTypes - Return true if the two specified vector types are 
+/// areCompatVectorTypes - Return true if the two specified vector types are
 /// compatible.
 static bool areCompatVectorTypes(const VectorType *LHS,
                                  const VectorType *RHS) {
@@ -3451,20 +3448,20 @@
 bool ASTContext::ObjCQualifiedIdTypesAreCompatible(QualType lhs, QualType rhs,
                                                    bool compare) {
   // Allow id<P..> and an 'id' or void* type in all cases.
-  if (lhs->isVoidPointerType() || 
+  if (lhs->isVoidPointerType() ||
       lhs->isObjCIdType() || lhs->isObjCClassType())
     return true;
-  else if (rhs->isVoidPointerType() || 
+  else if (rhs->isVoidPointerType() ||
            rhs->isObjCIdType() || rhs->isObjCClassType())
     return true;
 
   if (const ObjCObjectPointerType *lhsQID = lhs->getAsObjCQualifiedIdType()) {
     const ObjCObjectPointerType *rhsOPT = rhs->getAsObjCObjectPointerType();
-    
+
     if (!rhsOPT) return false;
-    
+
     if (rhsOPT->qual_empty()) {
-      // If the RHS is a unqualified interface pointer "NSString*", 
+      // If the RHS is a unqualified interface pointer "NSString*",
       // make sure we check the class hierarchy.
       if (ObjCInterfaceDecl *rhsID = rhsOPT->getInterfaceDecl()) {
         for (ObjCObjectPointerType::qual_iterator I = lhsQID->qual_begin(),
@@ -3479,7 +3476,7 @@
       // If there are no qualifiers and no interface, we have an 'id'.
       return true;
     }
-    // Both the right and left sides have qualifiers.    
+    // Both the right and left sides have qualifiers.
     for (ObjCObjectPointerType::qual_iterator I = lhsQID->qual_begin(),
          E = lhsQID->qual_end(); I != E; ++I) {
       ObjCProtocolDecl *lhsProto = *I;
@@ -3497,7 +3494,7 @@
           break;
         }
       }
-      // If the RHS is a qualified interface pointer "NSString<P>*", 
+      // If the RHS is a qualified interface pointer "NSString<P>*",
       // make sure we check the class hierarchy.
       if (ObjCInterfaceDecl *rhsID = rhsOPT->getInterfaceDecl()) {
         for (ObjCObjectPointerType::qual_iterator I = lhsQID->qual_begin(),
@@ -3514,14 +3511,14 @@
       if (!match)
         return false;
     }
-    
+
     return true;
   }
-  
+
   const ObjCObjectPointerType *rhsQID = rhs->getAsObjCQualifiedIdType();
   assert(rhsQID && "One of the LHS/RHS should be id<x>");
 
-  if (const ObjCObjectPointerType *lhsOPT = 
+  if (const ObjCObjectPointerType *lhsOPT =
         lhs->getAsObjCInterfacePointerType()) {
     if (lhsOPT->qual_empty()) {
       bool match = false;
@@ -3541,7 +3538,7 @@
       }
       return true;
     }
-    // Both the right and left sides have qualifiers.    
+    // Both the right and left sides have qualifiers.
     for (ObjCObjectPointerType::qual_iterator I = lhsOPT->qual_begin(),
          E = lhsOPT->qual_end(); I != E; ++I) {
       ObjCProtocolDecl *lhsProto = *I;
@@ -3578,15 +3575,15 @@
     return true;
 
   if (LHSOPT->isObjCQualifiedIdType() || RHSOPT->isObjCQualifiedIdType())
-    return ObjCQualifiedIdTypesAreCompatible(QualType(LHSOPT,0), 
-                                             QualType(RHSOPT,0), 
+    return ObjCQualifiedIdTypesAreCompatible(QualType(LHSOPT,0),
+                                             QualType(RHSOPT,0),
                                              false);
 
   const ObjCInterfaceType* LHS = LHSOPT->getInterfaceType();
   const ObjCInterfaceType* RHS = RHSOPT->getInterfaceType();
   if (LHS && RHS) // We have 2 user-defined types.
     return canAssignObjCInterfaces(LHS, RHS);
-    
+
   return false;
 }
 
@@ -3596,17 +3593,17 @@
   // the LHS.
   if (!LHS->getDecl()->isSuperClassOf(RHS->getDecl()))
     return false;
-  
+
   // RHS must have a superset of the protocols in the LHS.  If the LHS is not
   // protocol qualified at all, then we are good.
   if (LHS->getNumProtocols() == 0)
     return true;
-  
+
   // Okay, we know the LHS has protocol qualifiers.  If the RHS doesn't, then it
   // isn't a superset.
   if (RHS->getNumProtocols() == 0)
     return true;  // FIXME: should return false!
-  
+
   for (ObjCInterfaceType::qual_iterator LHSPI = LHS->qual_begin(),
                                         LHSPE = LHS->qual_end();
        LHSPI != LHSPE; LHSPI++) {
@@ -3634,7 +3631,7 @@
   // get the "pointed to" types
   const ObjCObjectPointerType *LHSOPT = LHS->getAsObjCObjectPointerType();
   const ObjCObjectPointerType *RHSOPT = RHS->getAsObjCObjectPointerType();
-  
+
   if (!LHSOPT || !RHSOPT)
     return false;
 
@@ -3642,9 +3639,9 @@
          canAssignObjCInterfaces(RHSOPT, LHSOPT);
 }
 
-/// typesAreCompatible - C99 6.7.3p9: For two qualified types to be compatible, 
+/// typesAreCompatible - C99 6.7.3p9: For two qualified types to be compatible,
 /// both shall have the identically qualified version of a compatible type.
-/// C99 6.2.7p1: Two types have compatible types if their types are the 
+/// C99 6.2.7p1: Two types have compatible types if their types are the
 /// same. See 6.7.[2,3,5] for additional rules.
 bool ASTContext::typesAreCompatible(QualType LHS, QualType RHS) {
   return !mergeTypes(LHS, RHS).isNull();
@@ -3671,7 +3668,7 @@
     allLTypes = false;
   if (NoReturn != rbase->getNoReturnAttr())
     allRTypes = false;
-    
+
   if (lproto && rproto) { // two C99 style function prototypes
     assert(!lproto->hasExceptionSpec() && !rproto->hasExceptionSpec() &&
            "C++ shouldn't be here");
@@ -3783,15 +3780,15 @@
     QualType::GCAttrTypes GCAttr = RHSCan.getObjCGCAttr();
     if (GCAttr != QualType::GCNone) {
       QualType::GCAttrTypes GCLHSAttr = LHSCan.getObjCGCAttr();
-      // __weak attribute must appear on both declarations. 
-      // __strong attribue is redundant if other decl is an objective-c 
+      // __weak attribute must appear on both declarations.
+      // __strong attribue is redundant if other decl is an objective-c
       // object pointer (or decorated with __strong attribute); otherwise
       // issue error.
       if ((GCAttr == QualType::Weak && GCLHSAttr != GCAttr) ||
           (GCAttr == QualType::Strong && GCLHSAttr != GCAttr &&
            !LHSCan->isObjCObjectPointerType()))
         return QualType();
-          
+
       RHS = QualType(cast<ExtQualType>(RHS.getDesugaredType())->getBaseType(),
                      RHS.getCVRQualifiers());
       QualType Result = mergeTypes(LHS, RHS);
@@ -3809,14 +3806,14 @@
     if (GCAttr != QualType::GCNone) {
       QualType::GCAttrTypes GCRHSAttr = RHSCan.getObjCGCAttr();
       // __weak attribute must appear on both declarations. __strong
-      // __strong attribue is redundant if other decl is an objective-c 
+      // __strong attribue is redundant if other decl is an objective-c
       // object pointer (or decorated with __strong attribute); otherwise
       // issue error.
       if ((GCAttr == QualType::Weak && GCRHSAttr != GCAttr) ||
           (GCAttr == QualType::Strong && GCRHSAttr != GCAttr &&
            !RHSCan->isObjCObjectPointerType()))
         return QualType();
-      
+
       LHS = QualType(cast<ExtQualType>(LHS.getDesugaredType())->getBaseType(),
                      LHS.getCVRQualifiers());
       QualType Result = mergeTypes(LHS, RHS);
@@ -3835,15 +3832,15 @@
     LHSClass = Type::ConstantArray;
   if (RHSClass == Type::VariableArray || RHSClass == Type::IncompleteArray)
     RHSClass = Type::ConstantArray;
-  
+
   // Canonicalize ExtVector -> Vector.
   if (LHSClass == Type::ExtVector) LHSClass = Type::Vector;
   if (RHSClass == Type::ExtVector) RHSClass = Type::Vector;
-  
+
   // If the canonical type classes don't match.
   if (LHSClass != RHSClass) {
     // C99 6.7.2.2p4: Each enumerated type shall be compatible with char,
-    // a signed integer type, or an unsigned integer type. 
+    // a signed integer type, or an unsigned integer type.
     if (const EnumType* ETy = LHS->getAsEnumType()) {
       if (ETy->getDecl()->getIntegerType() == RHSCan.getUnqualifiedType())
         return RHS;
@@ -3976,7 +3973,7 @@
     return QualType();
   }
   case Type::ObjCObjectPointer: {
-    if (canAssignObjCInterfaces(LHS->getAsObjCObjectPointerType(), 
+    if (canAssignObjCInterfaces(LHS->getAsObjCObjectPointerType(),
                                 RHS->getAsObjCObjectPointerType()))
       return LHS;
 
@@ -4072,18 +4069,18 @@
 
 /// DecodeTypeFromStr - This decodes one type descriptor from Str, advancing the
 /// pointer over the consumed characters.  This returns the resultant type.
-static QualType DecodeTypeFromStr(const char *&Str, ASTContext &Context, 
+static QualType DecodeTypeFromStr(const char *&Str, ASTContext &Context,
                                   ASTContext::GetBuiltinTypeError &Error,
                                   bool AllowTypeModifiers = true) {
   // Modifiers.
   int HowLong = 0;
   bool Signed = false, Unsigned = false;
-  
+
   // Read the modifiers first.
   bool Done = false;
   while (!Done) {
     switch (*Str++) {
-    default: Done = true; --Str; break; 
+    default: Done = true; --Str; break;
     case 'S':
       assert(!Unsigned && "Can't use both 'S' and 'U' modifiers!");
       assert(!Signed && "Can't use 'S' modifier multiple times!");
@@ -4102,7 +4099,7 @@
   }
 
   QualType Type;
-  
+
   // Read the base type.
   switch (*Str++) {
   default: assert(0 && "Unknown builtin type letter!");
@@ -4186,9 +4183,9 @@
     char *End;
     unsigned NumElements = strtoul(Str, &End, 10);
     assert(End != Str && "Missing vector size");
-    
+
     Str = End;
-    
+
     QualType ElementType = DecodeTypeFromStr(Str, Context, Error, false);
     Type = Context.getVectorType(ElementType, NumElements);
     break;
@@ -4212,10 +4209,10 @@
     }
     break;
   }
-  
+
   if (!AllowTypeModifiers)
     return Type;
-  
+
   Done = false;
   while (!Done) {
     switch (*Str++) {
@@ -4232,7 +4229,7 @@
         break;
     }
   }
-  
+
   return Type;
 }
 
@@ -4240,9 +4237,9 @@
 QualType ASTContext::GetBuiltinType(unsigned id,
                                     GetBuiltinTypeError &Error) {
   const char *TypeStr = BuiltinInfo.GetTypeString(id);
-  
+
   llvm::SmallVector<QualType, 8> ArgTypes;
-  
+
   Error = GE_None;
   QualType ResType = DecodeTypeFromStr(TypeStr, *this, Error);
   if (Error != GE_None)
@@ -4255,7 +4252,7 @@
     // Do array -> pointer decay.  The builtin should use the decayed type.
     if (Ty->isArrayType())
       Ty = getArrayDecayedType(Ty);
-   
+
     ArgTypes.push_back(Ty);
   }
 
@@ -4288,42 +4285,42 @@
   // If both types are identical, no conversion is needed.
   if (lhs == rhs)
     return lhs;
-  
+
   // If either side is a non-arithmetic type (e.g. a pointer), we are done.
   // The caller can deal with this (e.g. pointer + int).
   if (!lhs->isArithmeticType() || !rhs->isArithmeticType())
     return lhs;
-    
-  // At this point, we have two different arithmetic types. 
-  
+
+  // At this point, we have two different arithmetic types.
+
   // Handle complex types first (C99 6.3.1.8p1).
   if (lhs->isComplexType() || rhs->isComplexType()) {
     // if we have an integer operand, the result is the complex type.
-    if (rhs->isIntegerType() || rhs->isComplexIntegerType()) { 
+    if (rhs->isIntegerType() || rhs->isComplexIntegerType()) {
       // convert the rhs to the lhs complex type.
       return lhs;
     }
-    if (lhs->isIntegerType() || lhs->isComplexIntegerType()) { 
+    if (lhs->isIntegerType() || lhs->isComplexIntegerType()) {
       // convert the lhs to the rhs complex type.
       return rhs;
     }
     // This handles complex/complex, complex/float, or float/complex.
-    // When both operands are complex, the shorter operand is converted to the 
-    // type of the longer, and that is the type of the result. This corresponds 
-    // to what is done when combining two real floating-point operands. 
-    // The fun begins when size promotion occur across type domains. 
+    // When both operands are complex, the shorter operand is converted to the
+    // type of the longer, and that is the type of the result. This corresponds
+    // to what is done when combining two real floating-point operands.
+    // The fun begins when size promotion occur across type domains.
     // From H&S 6.3.4: When one operand is complex and the other is a real
-    // floating-point type, the less precise type is converted, within it's 
+    // floating-point type, the less precise type is converted, within it's
     // real or complex domain, to the precision of the other type. For example,
-    // when combining a "long double" with a "double _Complex", the 
+    // when combining a "long double" with a "double _Complex", the
     // "double _Complex" is promoted to "long double _Complex".
     int result = getFloatingTypeOrder(lhs, rhs);
-    
-    if (result > 0) { // The left side is bigger, convert rhs. 
+
+    if (result > 0) { // The left side is bigger, convert rhs.
       rhs = getFloatingTypeOfSizeWithinDomain(lhs, rhs);
-    } else if (result < 0) { // The right side is bigger, convert lhs. 
+    } else if (result < 0) { // The right side is bigger, convert lhs.
       lhs = getFloatingTypeOfSizeWithinDomain(rhs, lhs);
-    } 
+    }
     // At this point, lhs and rhs have the same rank/size. Now, make sure the
     // domains match. This is a requirement for our implementation, C99
     // does not require this promotion.
@@ -4351,7 +4348,7 @@
       // convert lhs to the rhs floating point type.
       return rhs;
     }
-    if (lhs->isComplexIntegerType()) { 
+    if (lhs->isComplexIntegerType()) {
       // convert lhs to the complex floating point type.
       return getComplexType(rhs);
     }
@@ -4369,7 +4366,7 @@
     const ComplexType *rhsComplexInt = rhs->getAsComplexIntegerType();
 
     if (lhsComplexInt && rhsComplexInt) {
-      if (getIntegerTypeOrder(lhsComplexInt->getElementType(), 
+      if (getIntegerTypeOrder(lhsComplexInt->getElementType(),
                               rhsComplexInt->getElementType()) >= 0)
         return lhs; // convert the rhs
       return rhs;