1 //===- ASTContext.cpp - Context to hold long-lived AST nodes --------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 //  This file implements the ASTContext interface.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "clang/AST/ASTContext.h"
15 #include "CXXABI.h"
16 #include "clang/AST/APValue.h"
17 #include "clang/AST/ASTMutationListener.h"
18 #include "clang/AST/ASTTypeTraits.h"
19 #include "clang/AST/Attr.h"
20 #include "clang/AST/AttrIterator.h"
21 #include "clang/AST/CharUnits.h"
22 #include "clang/AST/Comment.h"
23 #include "clang/AST/Decl.h"
24 #include "clang/AST/DeclBase.h"
25 #include "clang/AST/DeclCXX.h"
26 #include "clang/AST/DeclContextInternals.h"
27 #include "clang/AST/DeclObjC.h"
28 #include "clang/AST/DeclOpenMP.h"
29 #include "clang/AST/DeclTemplate.h"
30 #include "clang/AST/DeclarationName.h"
31 #include "clang/AST/Expr.h"
32 #include "clang/AST/ExprCXX.h"
33 #include "clang/AST/ExternalASTSource.h"
34 #include "clang/AST/Mangle.h"
35 #include "clang/AST/MangleNumberingContext.h"
36 #include "clang/AST/NestedNameSpecifier.h"
37 #include "clang/AST/RawCommentList.h"
38 #include "clang/AST/RecordLayout.h"
39 #include "clang/AST/RecursiveASTVisitor.h"
40 #include "clang/AST/Stmt.h"
41 #include "clang/AST/TemplateBase.h"
42 #include "clang/AST/TemplateName.h"
43 #include "clang/AST/Type.h"
44 #include "clang/AST/TypeLoc.h"
45 #include "clang/AST/UnresolvedSet.h"
46 #include "clang/AST/VTableBuilder.h"
47 #include "clang/Basic/AddressSpaces.h"
48 #include "clang/Basic/Builtins.h"
49 #include "clang/Basic/CommentOptions.h"
50 #include "clang/Basic/IdentifierTable.h"
51 #include "clang/Basic/LLVM.h"
52 #include "clang/Basic/LangOptions.h"
53 #include "clang/Basic/Linkage.h"
54 #include "clang/Basic/ObjCRuntime.h"
55 #include "clang/Basic/SanitizerBlacklist.h"
56 #include "clang/Basic/SourceLocation.h"
57 #include "clang/Basic/SourceManager.h"
58 #include "clang/Basic/Specifiers.h"
59 #include "clang/Basic/TargetCXXABI.h"
60 #include "clang/Basic/TargetInfo.h"
61 #include "clang/Basic/XRayLists.h"
62 #include "llvm/ADT/APInt.h"
63 #include "llvm/ADT/APSInt.h"
64 #include "llvm/ADT/ArrayRef.h"
65 #include "llvm/ADT/DenseMap.h"
66 #include "llvm/ADT/DenseSet.h"
67 #include "llvm/ADT/FoldingSet.h"
68 #include "llvm/ADT/None.h"
69 #include "llvm/ADT/Optional.h"
70 #include "llvm/ADT/PointerUnion.h"
71 #include "llvm/ADT/STLExtras.h"
72 #include "llvm/ADT/SmallPtrSet.h"
73 #include "llvm/ADT/SmallVector.h"
74 #include "llvm/ADT/StringExtras.h"
75 #include "llvm/ADT/StringRef.h"
76 #include "llvm/ADT/Triple.h"
77 #include "llvm/Support/Capacity.h"
78 #include "llvm/Support/Casting.h"
79 #include "llvm/Support/Compiler.h"
80 #include "llvm/Support/ErrorHandling.h"
81 #include "llvm/Support/MathExtras.h"
82 #include "llvm/Support/raw_ostream.h"
83 #include <algorithm>
84 #include <cassert>
85 #include <cstddef>
86 #include <cstdint>
87 #include <cstdlib>
88 #include <map>
89 #include <memory>
90 #include <string>
91 #include <tuple>
92 #include <utility>
93 
94 using namespace clang;
95 
96 unsigned ASTContext::NumImplicitDefaultConstructors;
97 unsigned ASTContext::NumImplicitDefaultConstructorsDeclared;
98 unsigned ASTContext::NumImplicitCopyConstructors;
99 unsigned ASTContext::NumImplicitCopyConstructorsDeclared;
100 unsigned ASTContext::NumImplicitMoveConstructors;
101 unsigned ASTContext::NumImplicitMoveConstructorsDeclared;
102 unsigned ASTContext::NumImplicitCopyAssignmentOperators;
103 unsigned ASTContext::NumImplicitCopyAssignmentOperatorsDeclared;
104 unsigned ASTContext::NumImplicitMoveAssignmentOperators;
105 unsigned ASTContext::NumImplicitMoveAssignmentOperatorsDeclared;
106 unsigned ASTContext::NumImplicitDestructors;
107 unsigned ASTContext::NumImplicitDestructorsDeclared;
108 
109 enum FloatingRank {
110   Float16Rank, HalfRank, FloatRank, DoubleRank, LongDoubleRank, Float128Rank
111 };
112 
113 RawComment *ASTContext::getRawCommentForDeclNoCache(const Decl *D) const {
114   if (!CommentsLoaded && ExternalSource) {
115     ExternalSource->ReadComments();
116 
117 #ifndef NDEBUG
118     ArrayRef<RawComment *> RawComments = Comments.getComments();
119     assert(std::is_sorted(RawComments.begin(), RawComments.end(),
120                           BeforeThanCompare<RawComment>(SourceMgr)));
121 #endif
122 
123     CommentsLoaded = true;
124   }
125 
126   assert(D);
127 
128   // User can not attach documentation to implicit declarations.
129   if (D->isImplicit())
130     return nullptr;
131 
132   // User can not attach documentation to implicit instantiations.
133   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
134     if (FD->getTemplateSpecializationKind() == TSK_ImplicitInstantiation)
135       return nullptr;
136   }
137 
138   if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
139     if (VD->isStaticDataMember() &&
140         VD->getTemplateSpecializationKind() == TSK_ImplicitInstantiation)
141       return nullptr;
142   }
143 
144   if (const CXXRecordDecl *CRD = dyn_cast<CXXRecordDecl>(D)) {
145     if (CRD->getTemplateSpecializationKind() == TSK_ImplicitInstantiation)
146       return nullptr;
147   }
148 
149   if (const ClassTemplateSpecializationDecl *CTSD =
150           dyn_cast<ClassTemplateSpecializationDecl>(D)) {
151     TemplateSpecializationKind TSK = CTSD->getSpecializationKind();
152     if (TSK == TSK_ImplicitInstantiation ||
153         TSK == TSK_Undeclared)
154       return nullptr;
155   }
156 
157   if (const EnumDecl *ED = dyn_cast<EnumDecl>(D)) {
158     if (ED->getTemplateSpecializationKind() == TSK_ImplicitInstantiation)
159       return nullptr;
160   }
161   if (const TagDecl *TD = dyn_cast<TagDecl>(D)) {
162     // When tag declaration (but not definition!) is part of the
163     // decl-specifier-seq of some other declaration, it doesn't get comment
164     if (TD->isEmbeddedInDeclarator() && !TD->isCompleteDefinition())
165       return nullptr;
166   }
167   // TODO: handle comments for function parameters properly.
168   if (isa<ParmVarDecl>(D))
169     return nullptr;
170 
171   // TODO: we could look up template parameter documentation in the template
172   // documentation.
173   if (isa<TemplateTypeParmDecl>(D) ||
174       isa<NonTypeTemplateParmDecl>(D) ||
175       isa<TemplateTemplateParmDecl>(D))
176     return nullptr;
177 
178   ArrayRef<RawComment *> RawComments = Comments.getComments();
179 
180   // If there are no comments anywhere, we won't find anything.
181   if (RawComments.empty())
182     return nullptr;
183 
184   // Find declaration location.
185   // For Objective-C declarations we generally don't expect to have multiple
186   // declarators, thus use declaration starting location as the "declaration
187   // location".
188   // For all other declarations multiple declarators are used quite frequently,
189   // so we use the location of the identifier as the "declaration location".
190   SourceLocation DeclLoc;
191   if (isa<ObjCMethodDecl>(D) || isa<ObjCContainerDecl>(D) ||
192       isa<ObjCPropertyDecl>(D) ||
193       isa<RedeclarableTemplateDecl>(D) ||
194       isa<ClassTemplateSpecializationDecl>(D))
195     DeclLoc = D->getLocStart();
196   else {
197     DeclLoc = D->getLocation();
198     if (DeclLoc.isMacroID()) {
199       if (isa<TypedefDecl>(D)) {
200         // If location of the typedef name is in a macro, it is because being
201         // declared via a macro. Try using declaration's starting location as
202         // the "declaration location".
203         DeclLoc = D->getLocStart();
204       } else if (const TagDecl *TD = dyn_cast<TagDecl>(D)) {
205         // If location of the tag decl is inside a macro, but the spelling of
206         // the tag name comes from a macro argument, it looks like a special
207         // macro like NS_ENUM is being used to define the tag decl.  In that
208         // case, adjust the source location to the expansion loc so that we can
209         // attach the comment to the tag decl.
210         if (SourceMgr.isMacroArgExpansion(DeclLoc) &&
211             TD->isCompleteDefinition())
212           DeclLoc = SourceMgr.getExpansionLoc(DeclLoc);
213       }
214     }
215   }
216 
217   // If the declaration doesn't map directly to a location in a file, we
218   // can't find the comment.
219   if (DeclLoc.isInvalid() || !DeclLoc.isFileID())
220     return nullptr;
221 
222   // Find the comment that occurs just after this declaration.
223   ArrayRef<RawComment *>::iterator Comment;
224   {
225     // When searching for comments during parsing, the comment we are looking
226     // for is usually among the last two comments we parsed -- check them
227     // first.
228     RawComment CommentAtDeclLoc(
229         SourceMgr, SourceRange(DeclLoc), false,
230         LangOpts.CommentOpts.ParseAllComments);
231     BeforeThanCompare<RawComment> Compare(SourceMgr);
232     ArrayRef<RawComment *>::iterator MaybeBeforeDecl = RawComments.end() - 1;
233     bool Found = Compare(*MaybeBeforeDecl, &CommentAtDeclLoc);
234     if (!Found && RawComments.size() >= 2) {
235       MaybeBeforeDecl--;
236       Found = Compare(*MaybeBeforeDecl, &CommentAtDeclLoc);
237     }
238 
239     if (Found) {
240       Comment = MaybeBeforeDecl + 1;
241       assert(Comment == std::lower_bound(RawComments.begin(), RawComments.end(),
242                                          &CommentAtDeclLoc, Compare));
243     } else {
244       // Slow path.
245       Comment = std::lower_bound(RawComments.begin(), RawComments.end(),
246                                  &CommentAtDeclLoc, Compare);
247     }
248   }
249 
250   // Decompose the location for the declaration and find the beginning of the
251   // file buffer.
252   std::pair<FileID, unsigned> DeclLocDecomp = SourceMgr.getDecomposedLoc(DeclLoc);
253 
254   // First check whether we have a trailing comment.
255   if (Comment != RawComments.end() &&
256       (*Comment)->isDocumentation() && (*Comment)->isTrailingComment() &&
257       (isa<FieldDecl>(D) || isa<EnumConstantDecl>(D) || isa<VarDecl>(D) ||
258        isa<ObjCMethodDecl>(D) || isa<ObjCPropertyDecl>(D))) {
259     std::pair<FileID, unsigned> CommentBeginDecomp
260       = SourceMgr.getDecomposedLoc((*Comment)->getSourceRange().getBegin());
261     // Check that Doxygen trailing comment comes after the declaration, starts
262     // on the same line and in the same file as the declaration.
263     if (DeclLocDecomp.first == CommentBeginDecomp.first &&
264         SourceMgr.getLineNumber(DeclLocDecomp.first, DeclLocDecomp.second)
265           == SourceMgr.getLineNumber(CommentBeginDecomp.first,
266                                      CommentBeginDecomp.second)) {
267       return *Comment;
268     }
269   }
270 
271   // The comment just after the declaration was not a trailing comment.
272   // Let's look at the previous comment.
273   if (Comment == RawComments.begin())
274     return nullptr;
275   --Comment;
276 
277   // Check that we actually have a non-member Doxygen comment.
278   if (!(*Comment)->isDocumentation() || (*Comment)->isTrailingComment())
279     return nullptr;
280 
281   // Decompose the end of the comment.
282   std::pair<FileID, unsigned> CommentEndDecomp
283     = SourceMgr.getDecomposedLoc((*Comment)->getSourceRange().getEnd());
284 
285   // If the comment and the declaration aren't in the same file, then they
286   // aren't related.
287   if (DeclLocDecomp.first != CommentEndDecomp.first)
288     return nullptr;
289 
290   // Get the corresponding buffer.
291   bool Invalid = false;
292   const char *Buffer = SourceMgr.getBufferData(DeclLocDecomp.first,
293                                                &Invalid).data();
294   if (Invalid)
295     return nullptr;
296 
297   // Extract text between the comment and declaration.
298   StringRef Text(Buffer + CommentEndDecomp.second,
299                  DeclLocDecomp.second - CommentEndDecomp.second);
300 
301   // There should be no other declarations or preprocessor directives between
302   // comment and declaration.
303   if (Text.find_first_of(";{}#@") != StringRef::npos)
304     return nullptr;
305 
306   return *Comment;
307 }
308 
309 /// If we have a 'templated' declaration for a template, adjust 'D' to
310 /// refer to the actual template.
311 /// If we have an implicit instantiation, adjust 'D' to refer to template.
312 static const Decl *adjustDeclToTemplate(const Decl *D) {
313   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
314     // Is this function declaration part of a function template?
315     if (const FunctionTemplateDecl *FTD = FD->getDescribedFunctionTemplate())
316       return FTD;
317 
318     // Nothing to do if function is not an implicit instantiation.
319     if (FD->getTemplateSpecializationKind() != TSK_ImplicitInstantiation)
320       return D;
321 
322     // Function is an implicit instantiation of a function template?
323     if (const FunctionTemplateDecl *FTD = FD->getPrimaryTemplate())
324       return FTD;
325 
326     // Function is instantiated from a member definition of a class template?
327     if (const FunctionDecl *MemberDecl =
328             FD->getInstantiatedFromMemberFunction())
329       return MemberDecl;
330 
331     return D;
332   }
333   if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
334     // Static data member is instantiated from a member definition of a class
335     // template?
336     if (VD->isStaticDataMember())
337       if (const VarDecl *MemberDecl = VD->getInstantiatedFromStaticDataMember())
338         return MemberDecl;
339 
340     return D;
341   }
342   if (const CXXRecordDecl *CRD = dyn_cast<CXXRecordDecl>(D)) {
343     // Is this class declaration part of a class template?
344     if (const ClassTemplateDecl *CTD = CRD->getDescribedClassTemplate())
345       return CTD;
346 
347     // Class is an implicit instantiation of a class template or partial
348     // specialization?
349     if (const ClassTemplateSpecializationDecl *CTSD =
350             dyn_cast<ClassTemplateSpecializationDecl>(CRD)) {
351       if (CTSD->getSpecializationKind() != TSK_ImplicitInstantiation)
352         return D;
353       llvm::PointerUnion<ClassTemplateDecl *,
354                          ClassTemplatePartialSpecializationDecl *>
355           PU = CTSD->getSpecializedTemplateOrPartial();
356       return PU.is<ClassTemplateDecl*>() ?
357           static_cast<const Decl*>(PU.get<ClassTemplateDecl *>()) :
358           static_cast<const Decl*>(
359               PU.get<ClassTemplatePartialSpecializationDecl *>());
360     }
361 
362     // Class is instantiated from a member definition of a class template?
363     if (const MemberSpecializationInfo *Info =
364                    CRD->getMemberSpecializationInfo())
365       return Info->getInstantiatedFrom();
366 
367     return D;
368   }
369   if (const EnumDecl *ED = dyn_cast<EnumDecl>(D)) {
370     // Enum is instantiated from a member definition of a class template?
371     if (const EnumDecl *MemberDecl = ED->getInstantiatedFromMemberEnum())
372       return MemberDecl;
373 
374     return D;
375   }
376   // FIXME: Adjust alias templates?
377   return D;
378 }
379 
380 const RawComment *ASTContext::getRawCommentForAnyRedecl(
381                                                 const Decl *D,
382                                                 const Decl **OriginalDecl) const {
383   D = adjustDeclToTemplate(D);
384 
385   // Check whether we have cached a comment for this declaration already.
386   {
387     llvm::DenseMap<const Decl *, RawCommentAndCacheFlags>::iterator Pos =
388         RedeclComments.find(D);
389     if (Pos != RedeclComments.end()) {
390       const RawCommentAndCacheFlags &Raw = Pos->second;
391       if (Raw.getKind() != RawCommentAndCacheFlags::NoCommentInDecl) {
392         if (OriginalDecl)
393           *OriginalDecl = Raw.getOriginalDecl();
394         return Raw.getRaw();
395       }
396     }
397   }
398 
399   // Search for comments attached to declarations in the redeclaration chain.
400   const RawComment *RC = nullptr;
401   const Decl *OriginalDeclForRC = nullptr;
402   for (auto I : D->redecls()) {
403     llvm::DenseMap<const Decl *, RawCommentAndCacheFlags>::iterator Pos =
404         RedeclComments.find(I);
405     if (Pos != RedeclComments.end()) {
406       const RawCommentAndCacheFlags &Raw = Pos->second;
407       if (Raw.getKind() != RawCommentAndCacheFlags::NoCommentInDecl) {
408         RC = Raw.getRaw();
409         OriginalDeclForRC = Raw.getOriginalDecl();
410         break;
411       }
412     } else {
413       RC = getRawCommentForDeclNoCache(I);
414       OriginalDeclForRC = I;
415       RawCommentAndCacheFlags Raw;
416       if (RC) {
417         // Call order swapped to work around ICE in VS2015 RTM (Release Win32)
418         // https://connect.microsoft.com/VisualStudio/feedback/details/1741530
419         Raw.setKind(RawCommentAndCacheFlags::FromDecl);
420         Raw.setRaw(RC);
421       } else
422         Raw.setKind(RawCommentAndCacheFlags::NoCommentInDecl);
423       Raw.setOriginalDecl(I);
424       RedeclComments[I] = Raw;
425       if (RC)
426         break;
427     }
428   }
429 
430   // If we found a comment, it should be a documentation comment.
431   assert(!RC || RC->isDocumentation());
432 
433   if (OriginalDecl)
434     *OriginalDecl = OriginalDeclForRC;
435 
436   // Update cache for every declaration in the redeclaration chain.
437   RawCommentAndCacheFlags Raw;
438   Raw.setRaw(RC);
439   Raw.setKind(RawCommentAndCacheFlags::FromRedecl);
440   Raw.setOriginalDecl(OriginalDeclForRC);
441 
442   for (auto I : D->redecls()) {
443     RawCommentAndCacheFlags &R = RedeclComments[I];
444     if (R.getKind() == RawCommentAndCacheFlags::NoCommentInDecl)
445       R = Raw;
446   }
447 
448   return RC;
449 }
450 
451 static void addRedeclaredMethods(const ObjCMethodDecl *ObjCMethod,
452                    SmallVectorImpl<const NamedDecl *> &Redeclared) {
453   const DeclContext *DC = ObjCMethod->getDeclContext();
454   if (const ObjCImplDecl *IMD = dyn_cast<ObjCImplDecl>(DC)) {
455     const ObjCInterfaceDecl *ID = IMD->getClassInterface();
456     if (!ID)
457       return;
458     // Add redeclared method here.
459     for (const auto *Ext : ID->known_extensions()) {
460       if (ObjCMethodDecl *RedeclaredMethod =
461             Ext->getMethod(ObjCMethod->getSelector(),
462                                   ObjCMethod->isInstanceMethod()))
463         Redeclared.push_back(RedeclaredMethod);
464     }
465   }
466 }
467 
468 comments::FullComment *ASTContext::cloneFullComment(comments::FullComment *FC,
469                                                     const Decl *D) const {
470   comments::DeclInfo *ThisDeclInfo = new (*this) comments::DeclInfo;
471   ThisDeclInfo->CommentDecl = D;
472   ThisDeclInfo->IsFilled = false;
473   ThisDeclInfo->fill();
474   ThisDeclInfo->CommentDecl = FC->getDecl();
475   if (!ThisDeclInfo->TemplateParameters)
476     ThisDeclInfo->TemplateParameters = FC->getDeclInfo()->TemplateParameters;
477   comments::FullComment *CFC =
478     new (*this) comments::FullComment(FC->getBlocks(),
479                                       ThisDeclInfo);
480   return CFC;
481 }
482 
483 comments::FullComment *ASTContext::getLocalCommentForDeclUncached(const Decl *D) const {
484   const RawComment *RC = getRawCommentForDeclNoCache(D);
485   return RC ? RC->parse(*this, nullptr, D) : nullptr;
486 }
487 
488 comments::FullComment *ASTContext::getCommentForDecl(
489                                               const Decl *D,
490                                               const Preprocessor *PP) const {
491   if (D->isInvalidDecl())
492     return nullptr;
493   D = adjustDeclToTemplate(D);
494 
495   const Decl *Canonical = D->getCanonicalDecl();
496   llvm::DenseMap<const Decl *, comments::FullComment *>::iterator Pos =
497       ParsedComments.find(Canonical);
498 
499   if (Pos != ParsedComments.end()) {
500     if (Canonical != D) {
501       comments::FullComment *FC = Pos->second;
502       comments::FullComment *CFC = cloneFullComment(FC, D);
503       return CFC;
504     }
505     return Pos->second;
506   }
507 
508   const Decl *OriginalDecl;
509 
510   const RawComment *RC = getRawCommentForAnyRedecl(D, &OriginalDecl);
511   if (!RC) {
512     if (isa<ObjCMethodDecl>(D) || isa<FunctionDecl>(D)) {
513       SmallVector<const NamedDecl*, 8> Overridden;
514       const ObjCMethodDecl *OMD = dyn_cast<ObjCMethodDecl>(D);
515       if (OMD && OMD->isPropertyAccessor())
516         if (const ObjCPropertyDecl *PDecl = OMD->findPropertyDecl())
517           if (comments::FullComment *FC = getCommentForDecl(PDecl, PP))
518             return cloneFullComment(FC, D);
519       if (OMD)
520         addRedeclaredMethods(OMD, Overridden);
521       getOverriddenMethods(dyn_cast<NamedDecl>(D), Overridden);
522       for (unsigned i = 0, e = Overridden.size(); i < e; i++)
523         if (comments::FullComment *FC = getCommentForDecl(Overridden[i], PP))
524           return cloneFullComment(FC, D);
525     }
526     else if (const TypedefNameDecl *TD = dyn_cast<TypedefNameDecl>(D)) {
527       // Attach any tag type's documentation to its typedef if latter
528       // does not have one of its own.
529       QualType QT = TD->getUnderlyingType();
530       if (const TagType *TT = QT->getAs<TagType>())
531         if (const Decl *TD = TT->getDecl())
532           if (comments::FullComment *FC = getCommentForDecl(TD, PP))
533             return cloneFullComment(FC, D);
534     }
535     else if (const ObjCInterfaceDecl *IC = dyn_cast<ObjCInterfaceDecl>(D)) {
536       while (IC->getSuperClass()) {
537         IC = IC->getSuperClass();
538         if (comments::FullComment *FC = getCommentForDecl(IC, PP))
539           return cloneFullComment(FC, D);
540       }
541     }
542     else if (const ObjCCategoryDecl *CD = dyn_cast<ObjCCategoryDecl>(D)) {
543       if (const ObjCInterfaceDecl *IC = CD->getClassInterface())
544         if (comments::FullComment *FC = getCommentForDecl(IC, PP))
545           return cloneFullComment(FC, D);
546     }
547     else if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(D)) {
548       if (!(RD = RD->getDefinition()))
549         return nullptr;
550       // Check non-virtual bases.
551       for (const auto &I : RD->bases()) {
552         if (I.isVirtual() || (I.getAccessSpecifier() != AS_public))
553           continue;
554         QualType Ty = I.getType();
555         if (Ty.isNull())
556           continue;
557         if (const CXXRecordDecl *NonVirtualBase = Ty->getAsCXXRecordDecl()) {
558           if (!(NonVirtualBase= NonVirtualBase->getDefinition()))
559             continue;
560 
561           if (comments::FullComment *FC = getCommentForDecl((NonVirtualBase), PP))
562             return cloneFullComment(FC, D);
563         }
564       }
565       // Check virtual bases.
566       for (const auto &I : RD->vbases()) {
567         if (I.getAccessSpecifier() != AS_public)
568           continue;
569         QualType Ty = I.getType();
570         if (Ty.isNull())
571           continue;
572         if (const CXXRecordDecl *VirtualBase = Ty->getAsCXXRecordDecl()) {
573           if (!(VirtualBase= VirtualBase->getDefinition()))
574             continue;
575           if (comments::FullComment *FC = getCommentForDecl((VirtualBase), PP))
576             return cloneFullComment(FC, D);
577         }
578       }
579     }
580     return nullptr;
581   }
582 
583   // If the RawComment was attached to other redeclaration of this Decl, we
584   // should parse the comment in context of that other Decl.  This is important
585   // because comments can contain references to parameter names which can be
586   // different across redeclarations.
587   if (D != OriginalDecl)
588     return getCommentForDecl(OriginalDecl, PP);
589 
590   comments::FullComment *FC = RC->parse(*this, PP, D);
591   ParsedComments[Canonical] = FC;
592   return FC;
593 }
594 
595 void
596 ASTContext::CanonicalTemplateTemplateParm::Profile(llvm::FoldingSetNodeID &ID,
597                                                TemplateTemplateParmDecl *Parm) {
598   ID.AddInteger(Parm->getDepth());
599   ID.AddInteger(Parm->getPosition());
600   ID.AddBoolean(Parm->isParameterPack());
601 
602   TemplateParameterList *Params = Parm->getTemplateParameters();
603   ID.AddInteger(Params->size());
604   for (TemplateParameterList::const_iterator P = Params->begin(),
605                                           PEnd = Params->end();
606        P != PEnd; ++P) {
607     if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(*P)) {
608       ID.AddInteger(0);
609       ID.AddBoolean(TTP->isParameterPack());
610       continue;
611     }
612 
613     if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(*P)) {
614       ID.AddInteger(1);
615       ID.AddBoolean(NTTP->isParameterPack());
616       ID.AddPointer(NTTP->getType().getCanonicalType().getAsOpaquePtr());
617       if (NTTP->isExpandedParameterPack()) {
618         ID.AddBoolean(true);
619         ID.AddInteger(NTTP->getNumExpansionTypes());
620         for (unsigned I = 0, N = NTTP->getNumExpansionTypes(); I != N; ++I) {
621           QualType T = NTTP->getExpansionType(I);
622           ID.AddPointer(T.getCanonicalType().getAsOpaquePtr());
623         }
624       } else
625         ID.AddBoolean(false);
626       continue;
627     }
628 
629     TemplateTemplateParmDecl *TTP = cast<TemplateTemplateParmDecl>(*P);
630     ID.AddInteger(2);
631     Profile(ID, TTP);
632   }
633 }
634 
635 TemplateTemplateParmDecl *
636 ASTContext::getCanonicalTemplateTemplateParmDecl(
637                                           TemplateTemplateParmDecl *TTP) const {
638   // Check if we already have a canonical template template parameter.
639   llvm::FoldingSetNodeID ID;
640   CanonicalTemplateTemplateParm::Profile(ID, TTP);
641   void *InsertPos = nullptr;
642   CanonicalTemplateTemplateParm *Canonical
643     = CanonTemplateTemplateParms.FindNodeOrInsertPos(ID, InsertPos);
644   if (Canonical)
645     return Canonical->getParam();
646 
647   // Build a canonical template parameter list.
648   TemplateParameterList *Params = TTP->getTemplateParameters();
649   SmallVector<NamedDecl *, 4> CanonParams;
650   CanonParams.reserve(Params->size());
651   for (TemplateParameterList::const_iterator P = Params->begin(),
652                                           PEnd = Params->end();
653        P != PEnd; ++P) {
654     if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(*P))
655       CanonParams.push_back(
656                   TemplateTypeParmDecl::Create(*this, getTranslationUnitDecl(),
657                                                SourceLocation(),
658                                                SourceLocation(),
659                                                TTP->getDepth(),
660                                                TTP->getIndex(), nullptr, false,
661                                                TTP->isParameterPack()));
662     else if (NonTypeTemplateParmDecl *NTTP
663              = dyn_cast<NonTypeTemplateParmDecl>(*P)) {
664       QualType T = getCanonicalType(NTTP->getType());
665       TypeSourceInfo *TInfo = getTrivialTypeSourceInfo(T);
666       NonTypeTemplateParmDecl *Param;
667       if (NTTP->isExpandedParameterPack()) {
668         SmallVector<QualType, 2> ExpandedTypes;
669         SmallVector<TypeSourceInfo *, 2> ExpandedTInfos;
670         for (unsigned I = 0, N = NTTP->getNumExpansionTypes(); I != N; ++I) {
671           ExpandedTypes.push_back(getCanonicalType(NTTP->getExpansionType(I)));
672           ExpandedTInfos.push_back(
673                                 getTrivialTypeSourceInfo(ExpandedTypes.back()));
674         }
675 
676         Param = NonTypeTemplateParmDecl::Create(*this, getTranslationUnitDecl(),
677                                                 SourceLocation(),
678                                                 SourceLocation(),
679                                                 NTTP->getDepth(),
680                                                 NTTP->getPosition(), nullptr,
681                                                 T,
682                                                 TInfo,
683                                                 ExpandedTypes,
684                                                 ExpandedTInfos);
685       } else {
686         Param = NonTypeTemplateParmDecl::Create(*this, getTranslationUnitDecl(),
687                                                 SourceLocation(),
688                                                 SourceLocation(),
689                                                 NTTP->getDepth(),
690                                                 NTTP->getPosition(), nullptr,
691                                                 T,
692                                                 NTTP->isParameterPack(),
693                                                 TInfo);
694       }
695       CanonParams.push_back(Param);
696 
697     } else
698       CanonParams.push_back(getCanonicalTemplateTemplateParmDecl(
699                                            cast<TemplateTemplateParmDecl>(*P)));
700   }
701 
702   assert(!TTP->getRequiresClause() &&
703          "Unexpected requires-clause on template template-parameter");
704   Expr *const CanonRequiresClause = nullptr;
705 
706   TemplateTemplateParmDecl *CanonTTP
707     = TemplateTemplateParmDecl::Create(*this, getTranslationUnitDecl(),
708                                        SourceLocation(), TTP->getDepth(),
709                                        TTP->getPosition(),
710                                        TTP->isParameterPack(),
711                                        nullptr,
712                          TemplateParameterList::Create(*this, SourceLocation(),
713                                                        SourceLocation(),
714                                                        CanonParams,
715                                                        SourceLocation(),
716                                                        CanonRequiresClause));
717 
718   // Get the new insert position for the node we care about.
719   Canonical = CanonTemplateTemplateParms.FindNodeOrInsertPos(ID, InsertPos);
720   assert(!Canonical && "Shouldn't be in the map!");
721   (void)Canonical;
722 
723   // Create the canonical template template parameter entry.
724   Canonical = new (*this) CanonicalTemplateTemplateParm(CanonTTP);
725   CanonTemplateTemplateParms.InsertNode(Canonical, InsertPos);
726   return CanonTTP;
727 }
728 
729 CXXABI *ASTContext::createCXXABI(const TargetInfo &T) {
730   if (!LangOpts.CPlusPlus) return nullptr;
731 
732   switch (T.getCXXABI().getKind()) {
733   case TargetCXXABI::GenericARM: // Same as Itanium at this level
734   case TargetCXXABI::iOS:
735   case TargetCXXABI::iOS64:
736   case TargetCXXABI::WatchOS:
737   case TargetCXXABI::GenericAArch64:
738   case TargetCXXABI::GenericMIPS:
739   case TargetCXXABI::GenericItanium:
740   case TargetCXXABI::WebAssembly:
741     return CreateItaniumCXXABI(*this);
742   case TargetCXXABI::Microsoft:
743     return CreateMicrosoftCXXABI(*this);
744   }
745   llvm_unreachable("Invalid CXXABI type!");
746 }
747 
748 static const LangASMap *getAddressSpaceMap(const TargetInfo &T,
749                                            const LangOptions &LOpts) {
750   if (LOpts.FakeAddressSpaceMap) {
751     // The fake address space map must have a distinct entry for each
752     // language-specific address space.
753     static const unsigned FakeAddrSpaceMap[] = {
754       0, // Default
755       1, // opencl_global
756       3, // opencl_local
757       2, // opencl_constant
758       0, // opencl_private
759       4, // opencl_generic
760       5, // cuda_device
761       6, // cuda_constant
762       7  // cuda_shared
763     };
764     return &FakeAddrSpaceMap;
765   } else {
766     return &T.getAddressSpaceMap();
767   }
768 }
769 
770 static bool isAddrSpaceMapManglingEnabled(const TargetInfo &TI,
771                                           const LangOptions &LangOpts) {
772   switch (LangOpts.getAddressSpaceMapMangling()) {
773   case LangOptions::ASMM_Target:
774     return TI.useAddressSpaceMapMangling();
775   case LangOptions::ASMM_On:
776     return true;
777   case LangOptions::ASMM_Off:
778     return false;
779   }
780   llvm_unreachable("getAddressSpaceMapMangling() doesn't cover anything.");
781 }
782 
783 ASTContext::ASTContext(LangOptions &LOpts, SourceManager &SM,
784                        IdentifierTable &idents, SelectorTable &sels,
785                        Builtin::Context &builtins)
786     : FunctionProtoTypes(this_()), TemplateSpecializationTypes(this_()),
787       DependentTemplateSpecializationTypes(this_()),
788       SubstTemplateTemplateParmPacks(this_()), SourceMgr(SM), LangOpts(LOpts),
789       SanitizerBL(new SanitizerBlacklist(LangOpts.SanitizerBlacklistFiles, SM)),
790       XRayFilter(new XRayFunctionFilter(LangOpts.XRayAlwaysInstrumentFiles,
791                                         LangOpts.XRayNeverInstrumentFiles, SM)),
792       PrintingPolicy(LOpts), Idents(idents), Selectors(sels),
793       BuiltinInfo(builtins), DeclarationNames(*this), Comments(SM),
794       CommentCommandTraits(BumpAlloc, LOpts.CommentOpts), LastSDM(nullptr, 0) {
795   TUDecl = TranslationUnitDecl::Create(*this);
796 }
797 
798 ASTContext::~ASTContext() {
799   ReleaseParentMapEntries();
800 
801   // Release the DenseMaps associated with DeclContext objects.
802   // FIXME: Is this the ideal solution?
803   ReleaseDeclContextMaps();
804 
805   // Call all of the deallocation functions on all of their targets.
806   for (auto &Pair : Deallocations)
807     (Pair.first)(Pair.second);
808 
809   // ASTRecordLayout objects in ASTRecordLayouts must always be destroyed
810   // because they can contain DenseMaps.
811   for (llvm::DenseMap<const ObjCContainerDecl*,
812        const ASTRecordLayout*>::iterator
813        I = ObjCLayouts.begin(), E = ObjCLayouts.end(); I != E; )
814     // Increment in loop to prevent using deallocated memory.
815     if (ASTRecordLayout *R = const_cast<ASTRecordLayout*>((I++)->second))
816       R->Destroy(*this);
817 
818   for (llvm::DenseMap<const RecordDecl*, const ASTRecordLayout*>::iterator
819        I = ASTRecordLayouts.begin(), E = ASTRecordLayouts.end(); I != E; ) {
820     // Increment in loop to prevent using deallocated memory.
821     if (ASTRecordLayout *R = const_cast<ASTRecordLayout*>((I++)->second))
822       R->Destroy(*this);
823   }
824 
825   for (llvm::DenseMap<const Decl*, AttrVec*>::iterator A = DeclAttrs.begin(),
826                                                     AEnd = DeclAttrs.end();
827        A != AEnd; ++A)
828     A->second->~AttrVec();
829 
830   for (std::pair<const MaterializeTemporaryExpr *, APValue *> &MTVPair :
831        MaterializedTemporaryValues)
832     MTVPair.second->~APValue();
833 
834   for (const auto &Value : ModuleInitializers)
835     Value.second->~PerModuleInitializers();
836 }
837 
838 void ASTContext::ReleaseParentMapEntries() {
839   if (!PointerParents) return;
840   for (const auto &Entry : *PointerParents) {
841     if (Entry.second.is<ast_type_traits::DynTypedNode *>()) {
842       delete Entry.second.get<ast_type_traits::DynTypedNode *>();
843     } else if (Entry.second.is<ParentVector *>()) {
844       delete Entry.second.get<ParentVector *>();
845     }
846   }
847   for (const auto &Entry : *OtherParents) {
848     if (Entry.second.is<ast_type_traits::DynTypedNode *>()) {
849       delete Entry.second.get<ast_type_traits::DynTypedNode *>();
850     } else if (Entry.second.is<ParentVector *>()) {
851       delete Entry.second.get<ParentVector *>();
852     }
853   }
854 }
855 
856 void ASTContext::AddDeallocation(void (*Callback)(void*), void *Data) {
857   Deallocations.push_back({Callback, Data});
858 }
859 
860 void
861 ASTContext::setExternalSource(IntrusiveRefCntPtr<ExternalASTSource> Source) {
862   ExternalSource = std::move(Source);
863 }
864 
865 void ASTContext::PrintStats() const {
866   llvm::errs() << "\n*** AST Context Stats:\n";
867   llvm::errs() << "  " << Types.size() << " types total.\n";
868 
869   unsigned counts[] = {
870 #define TYPE(Name, Parent) 0,
871 #define ABSTRACT_TYPE(Name, Parent)
872 #include "clang/AST/TypeNodes.def"
873     0 // Extra
874   };
875 
876   for (unsigned i = 0, e = Types.size(); i != e; ++i) {
877     Type *T = Types[i];
878     counts[(unsigned)T->getTypeClass()]++;
879   }
880 
881   unsigned Idx = 0;
882   unsigned TotalBytes = 0;
883 #define TYPE(Name, Parent)                                              \
884   if (counts[Idx])                                                      \
885     llvm::errs() << "    " << counts[Idx] << " " << #Name               \
886                  << " types\n";                                         \
887   TotalBytes += counts[Idx] * sizeof(Name##Type);                       \
888   ++Idx;
889 #define ABSTRACT_TYPE(Name, Parent)
890 #include "clang/AST/TypeNodes.def"
891 
892   llvm::errs() << "Total bytes = " << TotalBytes << "\n";
893 
894   // Implicit special member functions.
895   llvm::errs() << NumImplicitDefaultConstructorsDeclared << "/"
896                << NumImplicitDefaultConstructors
897                << " implicit default constructors created\n";
898   llvm::errs() << NumImplicitCopyConstructorsDeclared << "/"
899                << NumImplicitCopyConstructors
900                << " implicit copy constructors created\n";
901   if (getLangOpts().CPlusPlus)
902     llvm::errs() << NumImplicitMoveConstructorsDeclared << "/"
903                  << NumImplicitMoveConstructors
904                  << " implicit move constructors created\n";
905   llvm::errs() << NumImplicitCopyAssignmentOperatorsDeclared << "/"
906                << NumImplicitCopyAssignmentOperators
907                << " implicit copy assignment operators created\n";
908   if (getLangOpts().CPlusPlus)
909     llvm::errs() << NumImplicitMoveAssignmentOperatorsDeclared << "/"
910                  << NumImplicitMoveAssignmentOperators
911                  << " implicit move assignment operators created\n";
912   llvm::errs() << NumImplicitDestructorsDeclared << "/"
913                << NumImplicitDestructors
914                << " implicit destructors created\n";
915 
916   if (ExternalSource) {
917     llvm::errs() << "\n";
918     ExternalSource->PrintStats();
919   }
920 
921   BumpAlloc.PrintStats();
922 }
923 
924 void ASTContext::mergeDefinitionIntoModule(NamedDecl *ND, Module *M,
925                                            bool NotifyListeners) {
926   if (NotifyListeners)
927     if (auto *Listener = getASTMutationListener())
928       Listener->RedefinedHiddenDefinition(ND, M);
929 
930   if (getLangOpts().ModulesLocalVisibility)
931     MergedDefModules[ND].push_back(M);
932   else
933     ND->setVisibleDespiteOwningModule();
934 }
935 
936 void ASTContext::deduplicateMergedDefinitonsFor(NamedDecl *ND) {
937   auto It = MergedDefModules.find(ND);
938   if (It == MergedDefModules.end())
939     return;
940 
941   auto &Merged = It->second;
942   llvm::DenseSet<Module*> Found;
943   for (Module *&M : Merged)
944     if (!Found.insert(M).second)
945       M = nullptr;
946   Merged.erase(std::remove(Merged.begin(), Merged.end(), nullptr), Merged.end());
947 }
948 
949 void ASTContext::PerModuleInitializers::resolve(ASTContext &Ctx) {
950   if (LazyInitializers.empty())
951     return;
952 
953   auto *Source = Ctx.getExternalSource();
954   assert(Source && "lazy initializers but no external source");
955 
956   auto LazyInits = std::move(LazyInitializers);
957   LazyInitializers.clear();
958 
959   for (auto ID : LazyInits)
960     Initializers.push_back(Source->GetExternalDecl(ID));
961 
962   assert(LazyInitializers.empty() &&
963          "GetExternalDecl for lazy module initializer added more inits");
964 }
965 
966 void ASTContext::addModuleInitializer(Module *M, Decl *D) {
967   // One special case: if we add a module initializer that imports another
968   // module, and that module's only initializer is an ImportDecl, simplify.
969   if (auto *ID = dyn_cast<ImportDecl>(D)) {
970     auto It = ModuleInitializers.find(ID->getImportedModule());
971 
972     // Maybe the ImportDecl does nothing at all. (Common case.)
973     if (It == ModuleInitializers.end())
974       return;
975 
976     // Maybe the ImportDecl only imports another ImportDecl.
977     auto &Imported = *It->second;
978     if (Imported.Initializers.size() + Imported.LazyInitializers.size() == 1) {
979       Imported.resolve(*this);
980       auto *OnlyDecl = Imported.Initializers.front();
981       if (isa<ImportDecl>(OnlyDecl))
982         D = OnlyDecl;
983     }
984   }
985 
986   auto *&Inits = ModuleInitializers[M];
987   if (!Inits)
988     Inits = new (*this) PerModuleInitializers;
989   Inits->Initializers.push_back(D);
990 }
991 
992 void ASTContext::addLazyModuleInitializers(Module *M, ArrayRef<uint32_t> IDs) {
993   auto *&Inits = ModuleInitializers[M];
994   if (!Inits)
995     Inits = new (*this) PerModuleInitializers;
996   Inits->LazyInitializers.insert(Inits->LazyInitializers.end(),
997                                  IDs.begin(), IDs.end());
998 }
999 
1000 ArrayRef<Decl*> ASTContext::getModuleInitializers(Module *M) {
1001   auto It = ModuleInitializers.find(M);
1002   if (It == ModuleInitializers.end())
1003     return None;
1004 
1005   auto *Inits = It->second;
1006   Inits->resolve(*this);
1007   return Inits->Initializers;
1008 }
1009 
1010 ExternCContextDecl *ASTContext::getExternCContextDecl() const {
1011   if (!ExternCContext)
1012     ExternCContext = ExternCContextDecl::Create(*this, getTranslationUnitDecl());
1013 
1014   return ExternCContext;
1015 }
1016 
1017 BuiltinTemplateDecl *
1018 ASTContext::buildBuiltinTemplateDecl(BuiltinTemplateKind BTK,
1019                                      const IdentifierInfo *II) const {
1020   auto *BuiltinTemplate = BuiltinTemplateDecl::Create(*this, TUDecl, II, BTK);
1021   BuiltinTemplate->setImplicit();
1022   TUDecl->addDecl(BuiltinTemplate);
1023 
1024   return BuiltinTemplate;
1025 }
1026 
1027 BuiltinTemplateDecl *
1028 ASTContext::getMakeIntegerSeqDecl() const {
1029   if (!MakeIntegerSeqDecl)
1030     MakeIntegerSeqDecl = buildBuiltinTemplateDecl(BTK__make_integer_seq,
1031                                                   getMakeIntegerSeqName());
1032   return MakeIntegerSeqDecl;
1033 }
1034 
1035 BuiltinTemplateDecl *
1036 ASTContext::getTypePackElementDecl() const {
1037   if (!TypePackElementDecl)
1038     TypePackElementDecl = buildBuiltinTemplateDecl(BTK__type_pack_element,
1039                                                    getTypePackElementName());
1040   return TypePackElementDecl;
1041 }
1042 
1043 RecordDecl *ASTContext::buildImplicitRecord(StringRef Name,
1044                                             RecordDecl::TagKind TK) const {
1045   SourceLocation Loc;
1046   RecordDecl *NewDecl;
1047   if (getLangOpts().CPlusPlus)
1048     NewDecl = CXXRecordDecl::Create(*this, TK, getTranslationUnitDecl(), Loc,
1049                                     Loc, &Idents.get(Name));
1050   else
1051     NewDecl = RecordDecl::Create(*this, TK, getTranslationUnitDecl(), Loc, Loc,
1052                                  &Idents.get(Name));
1053   NewDecl->setImplicit();
1054   NewDecl->addAttr(TypeVisibilityAttr::CreateImplicit(
1055       const_cast<ASTContext &>(*this), TypeVisibilityAttr::Default));
1056   return NewDecl;
1057 }
1058 
1059 TypedefDecl *ASTContext::buildImplicitTypedef(QualType T,
1060                                               StringRef Name) const {
1061   TypeSourceInfo *TInfo = getTrivialTypeSourceInfo(T);
1062   TypedefDecl *NewDecl = TypedefDecl::Create(
1063       const_cast<ASTContext &>(*this), getTranslationUnitDecl(),
1064       SourceLocation(), SourceLocation(), &Idents.get(Name), TInfo);
1065   NewDecl->setImplicit();
1066   return NewDecl;
1067 }
1068 
1069 TypedefDecl *ASTContext::getInt128Decl() const {
1070   if (!Int128Decl)
1071     Int128Decl = buildImplicitTypedef(Int128Ty, "__int128_t");
1072   return Int128Decl;
1073 }
1074 
1075 TypedefDecl *ASTContext::getUInt128Decl() const {
1076   if (!UInt128Decl)
1077     UInt128Decl = buildImplicitTypedef(UnsignedInt128Ty, "__uint128_t");
1078   return UInt128Decl;
1079 }
1080 
1081 void ASTContext::InitBuiltinType(CanQualType &R, BuiltinType::Kind K) {
1082   BuiltinType *Ty = new (*this, TypeAlignment) BuiltinType(K);
1083   R = CanQualType::CreateUnsafe(QualType(Ty, 0));
1084   Types.push_back(Ty);
1085 }
1086 
1087 void ASTContext::InitBuiltinTypes(const TargetInfo &Target,
1088                                   const TargetInfo *AuxTarget) {
1089   assert((!this->Target || this->Target == &Target) &&
1090          "Incorrect target reinitialization");
1091   assert(VoidTy.isNull() && "Context reinitialized?");
1092 
1093   this->Target = &Target;
1094   this->AuxTarget = AuxTarget;
1095 
1096   ABI.reset(createCXXABI(Target));
1097   AddrSpaceMap = getAddressSpaceMap(Target, LangOpts);
1098   AddrSpaceMapMangling = isAddrSpaceMapManglingEnabled(Target, LangOpts);
1099 
1100   // C99 6.2.5p19.
1101   InitBuiltinType(VoidTy,              BuiltinType::Void);
1102 
1103   // C99 6.2.5p2.
1104   InitBuiltinType(BoolTy,              BuiltinType::Bool);
1105   // C99 6.2.5p3.
1106   if (LangOpts.CharIsSigned)
1107     InitBuiltinType(CharTy,            BuiltinType::Char_S);
1108   else
1109     InitBuiltinType(CharTy,            BuiltinType::Char_U);
1110   // C99 6.2.5p4.
1111   InitBuiltinType(SignedCharTy,        BuiltinType::SChar);
1112   InitBuiltinType(ShortTy,             BuiltinType::Short);
1113   InitBuiltinType(IntTy,               BuiltinType::Int);
1114   InitBuiltinType(LongTy,              BuiltinType::Long);
1115   InitBuiltinType(LongLongTy,          BuiltinType::LongLong);
1116 
1117   // C99 6.2.5p6.
1118   InitBuiltinType(UnsignedCharTy,      BuiltinType::UChar);
1119   InitBuiltinType(UnsignedShortTy,     BuiltinType::UShort);
1120   InitBuiltinType(UnsignedIntTy,       BuiltinType::UInt);
1121   InitBuiltinType(UnsignedLongTy,      BuiltinType::ULong);
1122   InitBuiltinType(UnsignedLongLongTy,  BuiltinType::ULongLong);
1123 
1124   // C99 6.2.5p10.
1125   InitBuiltinType(FloatTy,             BuiltinType::Float);
1126   InitBuiltinType(DoubleTy,            BuiltinType::Double);
1127   InitBuiltinType(LongDoubleTy,        BuiltinType::LongDouble);
1128 
1129   // GNU extension, __float128 for IEEE quadruple precision
1130   InitBuiltinType(Float128Ty,          BuiltinType::Float128);
1131 
1132   // C11 extension ISO/IEC TS 18661-3
1133   InitBuiltinType(Float16Ty,           BuiltinType::Float16);
1134 
1135   // GNU extension, 128-bit integers.
1136   InitBuiltinType(Int128Ty,            BuiltinType::Int128);
1137   InitBuiltinType(UnsignedInt128Ty,    BuiltinType::UInt128);
1138 
1139   // C++ 3.9.1p5
1140   if (TargetInfo::isTypeSigned(Target.getWCharType()))
1141     InitBuiltinType(WCharTy,           BuiltinType::WChar_S);
1142   else  // -fshort-wchar makes wchar_t be unsigned.
1143     InitBuiltinType(WCharTy,           BuiltinType::WChar_U);
1144   if (LangOpts.CPlusPlus && LangOpts.WChar)
1145     WideCharTy = WCharTy;
1146   else {
1147     // C99 (or C++ using -fno-wchar).
1148     WideCharTy = getFromTargetType(Target.getWCharType());
1149   }
1150 
1151   WIntTy = getFromTargetType(Target.getWIntType());
1152 
1153   if (LangOpts.CPlusPlus) // C++0x 3.9.1p5, extension for C++
1154     InitBuiltinType(Char16Ty,           BuiltinType::Char16);
1155   else // C99
1156     Char16Ty = getFromTargetType(Target.getChar16Type());
1157 
1158   if (LangOpts.CPlusPlus) // C++0x 3.9.1p5, extension for C++
1159     InitBuiltinType(Char32Ty,           BuiltinType::Char32);
1160   else // C99
1161     Char32Ty = getFromTargetType(Target.getChar32Type());
1162 
1163   // Placeholder type for type-dependent expressions whose type is
1164   // completely unknown. No code should ever check a type against
1165   // DependentTy and users should never see it; however, it is here to
1166   // help diagnose failures to properly check for type-dependent
1167   // expressions.
1168   InitBuiltinType(DependentTy,         BuiltinType::Dependent);
1169 
1170   // Placeholder type for functions.
1171   InitBuiltinType(OverloadTy,          BuiltinType::Overload);
1172 
1173   // Placeholder type for bound members.
1174   InitBuiltinType(BoundMemberTy,       BuiltinType::BoundMember);
1175 
1176   // Placeholder type for pseudo-objects.
1177   InitBuiltinType(PseudoObjectTy,      BuiltinType::PseudoObject);
1178 
1179   // "any" type; useful for debugger-like clients.
1180   InitBuiltinType(UnknownAnyTy,        BuiltinType::UnknownAny);
1181 
1182   // Placeholder type for unbridged ARC casts.
1183   InitBuiltinType(ARCUnbridgedCastTy,  BuiltinType::ARCUnbridgedCast);
1184 
1185   // Placeholder type for builtin functions.
1186   InitBuiltinType(BuiltinFnTy,  BuiltinType::BuiltinFn);
1187 
1188   // Placeholder type for OMP array sections.
1189   if (LangOpts.OpenMP)
1190     InitBuiltinType(OMPArraySectionTy, BuiltinType::OMPArraySection);
1191 
1192   // C99 6.2.5p11.
1193   FloatComplexTy      = getComplexType(FloatTy);
1194   DoubleComplexTy     = getComplexType(DoubleTy);
1195   LongDoubleComplexTy = getComplexType(LongDoubleTy);
1196   Float128ComplexTy   = getComplexType(Float128Ty);
1197 
1198   // Builtin types for 'id', 'Class', and 'SEL'.
1199   InitBuiltinType(ObjCBuiltinIdTy, BuiltinType::ObjCId);
1200   InitBuiltinType(ObjCBuiltinClassTy, BuiltinType::ObjCClass);
1201   InitBuiltinType(ObjCBuiltinSelTy, BuiltinType::ObjCSel);
1202 
1203   if (LangOpts.OpenCL) {
1204 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
1205     InitBuiltinType(SingletonId, BuiltinType::Id);
1206 #include "clang/Basic/OpenCLImageTypes.def"
1207 
1208     InitBuiltinType(OCLSamplerTy, BuiltinType::OCLSampler);
1209     InitBuiltinType(OCLEventTy, BuiltinType::OCLEvent);
1210     InitBuiltinType(OCLClkEventTy, BuiltinType::OCLClkEvent);
1211     InitBuiltinType(OCLQueueTy, BuiltinType::OCLQueue);
1212     InitBuiltinType(OCLReserveIDTy, BuiltinType::OCLReserveID);
1213   }
1214 
1215   // Builtin type for __objc_yes and __objc_no
1216   ObjCBuiltinBoolTy = (Target.useSignedCharForObjCBool() ?
1217                        SignedCharTy : BoolTy);
1218 
1219   ObjCConstantStringType = QualType();
1220 
1221   ObjCSuperType = QualType();
1222 
1223   // void * type
1224   if (LangOpts.OpenCLVersion >= 200) {
1225     auto Q = VoidTy.getQualifiers();
1226     Q.setAddressSpace(LangAS::opencl_generic);
1227     VoidPtrTy = getPointerType(getCanonicalType(
1228         getQualifiedType(VoidTy.getUnqualifiedType(), Q)));
1229   } else {
1230     VoidPtrTy = getPointerType(VoidTy);
1231   }
1232 
1233   // nullptr type (C++0x 2.14.7)
1234   InitBuiltinType(NullPtrTy,           BuiltinType::NullPtr);
1235 
1236   // half type (OpenCL 6.1.1.1) / ARM NEON __fp16
1237   InitBuiltinType(HalfTy, BuiltinType::Half);
1238 
1239   // Builtin type used to help define __builtin_va_list.
1240   VaListTagDecl = nullptr;
1241 }
1242 
1243 DiagnosticsEngine &ASTContext::getDiagnostics() const {
1244   return SourceMgr.getDiagnostics();
1245 }
1246 
1247 AttrVec& ASTContext::getDeclAttrs(const Decl *D) {
1248   AttrVec *&Result = DeclAttrs[D];
1249   if (!Result) {
1250     void *Mem = Allocate(sizeof(AttrVec));
1251     Result = new (Mem) AttrVec;
1252   }
1253 
1254   return *Result;
1255 }
1256 
1257 /// \brief Erase the attributes corresponding to the given declaration.
1258 void ASTContext::eraseDeclAttrs(const Decl *D) {
1259   llvm::DenseMap<const Decl*, AttrVec*>::iterator Pos = DeclAttrs.find(D);
1260   if (Pos != DeclAttrs.end()) {
1261     Pos->second->~AttrVec();
1262     DeclAttrs.erase(Pos);
1263   }
1264 }
1265 
1266 // FIXME: Remove ?
1267 MemberSpecializationInfo *
1268 ASTContext::getInstantiatedFromStaticDataMember(const VarDecl *Var) {
1269   assert(Var->isStaticDataMember() && "Not a static data member");
1270   return getTemplateOrSpecializationInfo(Var)
1271       .dyn_cast<MemberSpecializationInfo *>();
1272 }
1273 
1274 ASTContext::TemplateOrSpecializationInfo
1275 ASTContext::getTemplateOrSpecializationInfo(const VarDecl *Var) {
1276   llvm::DenseMap<const VarDecl *, TemplateOrSpecializationInfo>::iterator Pos =
1277       TemplateOrInstantiation.find(Var);
1278   if (Pos == TemplateOrInstantiation.end())
1279     return TemplateOrSpecializationInfo();
1280 
1281   return Pos->second;
1282 }
1283 
1284 void
1285 ASTContext::setInstantiatedFromStaticDataMember(VarDecl *Inst, VarDecl *Tmpl,
1286                                                 TemplateSpecializationKind TSK,
1287                                           SourceLocation PointOfInstantiation) {
1288   assert(Inst->isStaticDataMember() && "Not a static data member");
1289   assert(Tmpl->isStaticDataMember() && "Not a static data member");
1290   setTemplateOrSpecializationInfo(Inst, new (*this) MemberSpecializationInfo(
1291                                             Tmpl, TSK, PointOfInstantiation));
1292 }
1293 
1294 void
1295 ASTContext::setTemplateOrSpecializationInfo(VarDecl *Inst,
1296                                             TemplateOrSpecializationInfo TSI) {
1297   assert(!TemplateOrInstantiation[Inst] &&
1298          "Already noted what the variable was instantiated from");
1299   TemplateOrInstantiation[Inst] = TSI;
1300 }
1301 
1302 FunctionDecl *ASTContext::getClassScopeSpecializationPattern(
1303                                                      const FunctionDecl *FD){
1304   assert(FD && "Specialization is 0");
1305   llvm::DenseMap<const FunctionDecl*, FunctionDecl *>::const_iterator Pos
1306     = ClassScopeSpecializationPattern.find(FD);
1307   if (Pos == ClassScopeSpecializationPattern.end())
1308     return nullptr;
1309 
1310   return Pos->second;
1311 }
1312 
1313 void ASTContext::setClassScopeSpecializationPattern(FunctionDecl *FD,
1314                                         FunctionDecl *Pattern) {
1315   assert(FD && "Specialization is 0");
1316   assert(Pattern && "Class scope specialization pattern is 0");
1317   ClassScopeSpecializationPattern[FD] = Pattern;
1318 }
1319 
1320 NamedDecl *
1321 ASTContext::getInstantiatedFromUsingDecl(NamedDecl *UUD) {
1322   auto Pos = InstantiatedFromUsingDecl.find(UUD);
1323   if (Pos == InstantiatedFromUsingDecl.end())
1324     return nullptr;
1325 
1326   return Pos->second;
1327 }
1328 
1329 void
1330 ASTContext::setInstantiatedFromUsingDecl(NamedDecl *Inst, NamedDecl *Pattern) {
1331   assert((isa<UsingDecl>(Pattern) ||
1332           isa<UnresolvedUsingValueDecl>(Pattern) ||
1333           isa<UnresolvedUsingTypenameDecl>(Pattern)) &&
1334          "pattern decl is not a using decl");
1335   assert((isa<UsingDecl>(Inst) ||
1336           isa<UnresolvedUsingValueDecl>(Inst) ||
1337           isa<UnresolvedUsingTypenameDecl>(Inst)) &&
1338          "instantiation did not produce a using decl");
1339   assert(!InstantiatedFromUsingDecl[Inst] && "pattern already exists");
1340   InstantiatedFromUsingDecl[Inst] = Pattern;
1341 }
1342 
1343 UsingShadowDecl *
1344 ASTContext::getInstantiatedFromUsingShadowDecl(UsingShadowDecl *Inst) {
1345   llvm::DenseMap<UsingShadowDecl*, UsingShadowDecl*>::const_iterator Pos
1346     = InstantiatedFromUsingShadowDecl.find(Inst);
1347   if (Pos == InstantiatedFromUsingShadowDecl.end())
1348     return nullptr;
1349 
1350   return Pos->second;
1351 }
1352 
1353 void
1354 ASTContext::setInstantiatedFromUsingShadowDecl(UsingShadowDecl *Inst,
1355                                                UsingShadowDecl *Pattern) {
1356   assert(!InstantiatedFromUsingShadowDecl[Inst] && "pattern already exists");
1357   InstantiatedFromUsingShadowDecl[Inst] = Pattern;
1358 }
1359 
1360 FieldDecl *ASTContext::getInstantiatedFromUnnamedFieldDecl(FieldDecl *Field) {
1361   llvm::DenseMap<FieldDecl *, FieldDecl *>::iterator Pos
1362     = InstantiatedFromUnnamedFieldDecl.find(Field);
1363   if (Pos == InstantiatedFromUnnamedFieldDecl.end())
1364     return nullptr;
1365 
1366   return Pos->second;
1367 }
1368 
1369 void ASTContext::setInstantiatedFromUnnamedFieldDecl(FieldDecl *Inst,
1370                                                      FieldDecl *Tmpl) {
1371   assert(!Inst->getDeclName() && "Instantiated field decl is not unnamed");
1372   assert(!Tmpl->getDeclName() && "Template field decl is not unnamed");
1373   assert(!InstantiatedFromUnnamedFieldDecl[Inst] &&
1374          "Already noted what unnamed field was instantiated from");
1375 
1376   InstantiatedFromUnnamedFieldDecl[Inst] = Tmpl;
1377 }
1378 
1379 ASTContext::overridden_cxx_method_iterator
1380 ASTContext::overridden_methods_begin(const CXXMethodDecl *Method) const {
1381   return overridden_methods(Method).begin();
1382 }
1383 
1384 ASTContext::overridden_cxx_method_iterator
1385 ASTContext::overridden_methods_end(const CXXMethodDecl *Method) const {
1386   return overridden_methods(Method).end();
1387 }
1388 
1389 unsigned
1390 ASTContext::overridden_methods_size(const CXXMethodDecl *Method) const {
1391   auto Range = overridden_methods(Method);
1392   return Range.end() - Range.begin();
1393 }
1394 
1395 ASTContext::overridden_method_range
1396 ASTContext::overridden_methods(const CXXMethodDecl *Method) const {
1397   llvm::DenseMap<const CXXMethodDecl *, CXXMethodVector>::const_iterator Pos =
1398       OverriddenMethods.find(Method->getCanonicalDecl());
1399   if (Pos == OverriddenMethods.end())
1400     return overridden_method_range(nullptr, nullptr);
1401   return overridden_method_range(Pos->second.begin(), Pos->second.end());
1402 }
1403 
1404 void ASTContext::addOverriddenMethod(const CXXMethodDecl *Method,
1405                                      const CXXMethodDecl *Overridden) {
1406   assert(Method->isCanonicalDecl() && Overridden->isCanonicalDecl());
1407   OverriddenMethods[Method].push_back(Overridden);
1408 }
1409 
1410 void ASTContext::getOverriddenMethods(
1411                       const NamedDecl *D,
1412                       SmallVectorImpl<const NamedDecl *> &Overridden) const {
1413   assert(D);
1414 
1415   if (const CXXMethodDecl *CXXMethod = dyn_cast<CXXMethodDecl>(D)) {
1416     Overridden.append(overridden_methods_begin(CXXMethod),
1417                       overridden_methods_end(CXXMethod));
1418     return;
1419   }
1420 
1421   const ObjCMethodDecl *Method = dyn_cast<ObjCMethodDecl>(D);
1422   if (!Method)
1423     return;
1424 
1425   SmallVector<const ObjCMethodDecl *, 8> OverDecls;
1426   Method->getOverriddenMethods(OverDecls);
1427   Overridden.append(OverDecls.begin(), OverDecls.end());
1428 }
1429 
1430 void ASTContext::addedLocalImportDecl(ImportDecl *Import) {
1431   assert(!Import->NextLocalImport && "Import declaration already in the chain");
1432   assert(!Import->isFromASTFile() && "Non-local import declaration");
1433   if (!FirstLocalImport) {
1434     FirstLocalImport = Import;
1435     LastLocalImport = Import;
1436     return;
1437   }
1438 
1439   LastLocalImport->NextLocalImport = Import;
1440   LastLocalImport = Import;
1441 }
1442 
1443 //===----------------------------------------------------------------------===//
1444 //                         Type Sizing and Analysis
1445 //===----------------------------------------------------------------------===//
1446 
1447 /// getFloatTypeSemantics - Return the APFloat 'semantics' for the specified
1448 /// scalar floating point type.
1449 const llvm::fltSemantics &ASTContext::getFloatTypeSemantics(QualType T) const {
1450   const BuiltinType *BT = T->getAs<BuiltinType>();
1451   assert(BT && "Not a floating point type!");
1452   switch (BT->getKind()) {
1453   default: llvm_unreachable("Not a floating point type!");
1454   case BuiltinType::Float16:
1455   case BuiltinType::Half:
1456     return Target->getHalfFormat();
1457   case BuiltinType::Float:      return Target->getFloatFormat();
1458   case BuiltinType::Double:     return Target->getDoubleFormat();
1459   case BuiltinType::LongDouble: return Target->getLongDoubleFormat();
1460   case BuiltinType::Float128:   return Target->getFloat128Format();
1461   }
1462 }
1463 
1464 CharUnits ASTContext::getDeclAlign(const Decl *D, bool ForAlignof) const {
1465   unsigned Align = Target->getCharWidth();
1466 
1467   bool UseAlignAttrOnly = false;
1468   if (unsigned AlignFromAttr = D->getMaxAlignment()) {
1469     Align = AlignFromAttr;
1470 
1471     // __attribute__((aligned)) can increase or decrease alignment
1472     // *except* on a struct or struct member, where it only increases
1473     // alignment unless 'packed' is also specified.
1474     //
1475     // It is an error for alignas to decrease alignment, so we can
1476     // ignore that possibility;  Sema should diagnose it.
1477     if (isa<FieldDecl>(D)) {
1478       UseAlignAttrOnly = D->hasAttr<PackedAttr>() ||
1479         cast<FieldDecl>(D)->getParent()->hasAttr<PackedAttr>();
1480     } else {
1481       UseAlignAttrOnly = true;
1482     }
1483   }
1484   else if (isa<FieldDecl>(D))
1485       UseAlignAttrOnly =
1486         D->hasAttr<PackedAttr>() ||
1487         cast<FieldDecl>(D)->getParent()->hasAttr<PackedAttr>();
1488 
1489   // If we're using the align attribute only, just ignore everything
1490   // else about the declaration and its type.
1491   if (UseAlignAttrOnly) {
1492     // do nothing
1493   } else if (const ValueDecl *VD = dyn_cast<ValueDecl>(D)) {
1494     QualType T = VD->getType();
1495     if (const ReferenceType *RT = T->getAs<ReferenceType>()) {
1496       if (ForAlignof)
1497         T = RT->getPointeeType();
1498       else
1499         T = getPointerType(RT->getPointeeType());
1500     }
1501     QualType BaseT = getBaseElementType(T);
1502     if (T->isFunctionType())
1503       Align = getTypeInfoImpl(T.getTypePtr()).Align;
1504     else if (!BaseT->isIncompleteType()) {
1505       // Adjust alignments of declarations with array type by the
1506       // large-array alignment on the target.
1507       if (const ArrayType *arrayType = getAsArrayType(T)) {
1508         unsigned MinWidth = Target->getLargeArrayMinWidth();
1509         if (!ForAlignof && MinWidth) {
1510           if (isa<VariableArrayType>(arrayType))
1511             Align = std::max(Align, Target->getLargeArrayAlign());
1512           else if (isa<ConstantArrayType>(arrayType) &&
1513                    MinWidth <= getTypeSize(cast<ConstantArrayType>(arrayType)))
1514             Align = std::max(Align, Target->getLargeArrayAlign());
1515         }
1516       }
1517       Align = std::max(Align, getPreferredTypeAlign(T.getTypePtr()));
1518       if (BaseT.getQualifiers().hasUnaligned())
1519         Align = Target->getCharWidth();
1520       if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
1521         if (VD->hasGlobalStorage() && !ForAlignof)
1522           Align = std::max(Align, getTargetInfo().getMinGlobalAlign());
1523       }
1524     }
1525 
1526     // Fields can be subject to extra alignment constraints, like if
1527     // the field is packed, the struct is packed, or the struct has a
1528     // a max-field-alignment constraint (#pragma pack).  So calculate
1529     // the actual alignment of the field within the struct, and then
1530     // (as we're expected to) constrain that by the alignment of the type.
1531     if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {
1532       const RecordDecl *Parent = Field->getParent();
1533       // We can only produce a sensible answer if the record is valid.
1534       if (!Parent->isInvalidDecl()) {
1535         const ASTRecordLayout &Layout = getASTRecordLayout(Parent);
1536 
1537         // Start with the record's overall alignment.
1538         unsigned FieldAlign = toBits(Layout.getAlignment());
1539 
1540         // Use the GCD of that and the offset within the record.
1541         uint64_t Offset = Layout.getFieldOffset(Field->getFieldIndex());
1542         if (Offset > 0) {
1543           // Alignment is always a power of 2, so the GCD will be a power of 2,
1544           // which means we get to do this crazy thing instead of Euclid's.
1545           uint64_t LowBitOfOffset = Offset & (~Offset + 1);
1546           if (LowBitOfOffset < FieldAlign)
1547             FieldAlign = static_cast<unsigned>(LowBitOfOffset);
1548         }
1549 
1550         Align = std::min(Align, FieldAlign);
1551       }
1552     }
1553   }
1554 
1555   return toCharUnitsFromBits(Align);
1556 }
1557 
1558 // getTypeInfoDataSizeInChars - Return the size of a type, in
1559 // chars. If the type is a record, its data size is returned.  This is
1560 // the size of the memcpy that's performed when assigning this type
1561 // using a trivial copy/move assignment operator.
1562 std::pair<CharUnits, CharUnits>
1563 ASTContext::getTypeInfoDataSizeInChars(QualType T) const {
1564   std::pair<CharUnits, CharUnits> sizeAndAlign = getTypeInfoInChars(T);
1565 
1566   // In C++, objects can sometimes be allocated into the tail padding
1567   // of a base-class subobject.  We decide whether that's possible
1568   // during class layout, so here we can just trust the layout results.
1569   if (getLangOpts().CPlusPlus) {
1570     if (const RecordType *RT = T->getAs<RecordType>()) {
1571       const ASTRecordLayout &layout = getASTRecordLayout(RT->getDecl());
1572       sizeAndAlign.first = layout.getDataSize();
1573     }
1574   }
1575 
1576   return sizeAndAlign;
1577 }
1578 
1579 /// getConstantArrayInfoInChars - Performing the computation in CharUnits
1580 /// instead of in bits prevents overflowing the uint64_t for some large arrays.
1581 std::pair<CharUnits, CharUnits>
1582 static getConstantArrayInfoInChars(const ASTContext &Context,
1583                                    const ConstantArrayType *CAT) {
1584   std::pair<CharUnits, CharUnits> EltInfo =
1585       Context.getTypeInfoInChars(CAT->getElementType());
1586   uint64_t Size = CAT->getSize().getZExtValue();
1587   assert((Size == 0 || static_cast<uint64_t>(EltInfo.first.getQuantity()) <=
1588               (uint64_t)(-1)/Size) &&
1589          "Overflow in array type char size evaluation");
1590   uint64_t Width = EltInfo.first.getQuantity() * Size;
1591   unsigned Align = EltInfo.second.getQuantity();
1592   if (!Context.getTargetInfo().getCXXABI().isMicrosoft() ||
1593       Context.getTargetInfo().getPointerWidth(0) == 64)
1594     Width = llvm::alignTo(Width, Align);
1595   return std::make_pair(CharUnits::fromQuantity(Width),
1596                         CharUnits::fromQuantity(Align));
1597 }
1598 
1599 std::pair<CharUnits, CharUnits>
1600 ASTContext::getTypeInfoInChars(const Type *T) const {
1601   if (const ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(T))
1602     return getConstantArrayInfoInChars(*this, CAT);
1603   TypeInfo Info = getTypeInfo(T);
1604   return std::make_pair(toCharUnitsFromBits(Info.Width),
1605                         toCharUnitsFromBits(Info.Align));
1606 }
1607 
1608 std::pair<CharUnits, CharUnits>
1609 ASTContext::getTypeInfoInChars(QualType T) const {
1610   return getTypeInfoInChars(T.getTypePtr());
1611 }
1612 
1613 bool ASTContext::isAlignmentRequired(const Type *T) const {
1614   return getTypeInfo(T).AlignIsRequired;
1615 }
1616 
1617 bool ASTContext::isAlignmentRequired(QualType T) const {
1618   return isAlignmentRequired(T.getTypePtr());
1619 }
1620 
1621 unsigned ASTContext::getTypeAlignIfKnown(QualType T) const {
1622   // An alignment on a typedef overrides anything else.
1623   if (auto *TT = T->getAs<TypedefType>())
1624     if (unsigned Align = TT->getDecl()->getMaxAlignment())
1625       return Align;
1626 
1627   // If we have an (array of) complete type, we're done.
1628   T = getBaseElementType(T);
1629   if (!T->isIncompleteType())
1630     return getTypeAlign(T);
1631 
1632   // If we had an array type, its element type might be a typedef
1633   // type with an alignment attribute.
1634   if (auto *TT = T->getAs<TypedefType>())
1635     if (unsigned Align = TT->getDecl()->getMaxAlignment())
1636       return Align;
1637 
1638   // Otherwise, see if the declaration of the type had an attribute.
1639   if (auto *TT = T->getAs<TagType>())
1640     return TT->getDecl()->getMaxAlignment();
1641 
1642   return 0;
1643 }
1644 
1645 TypeInfo ASTContext::getTypeInfo(const Type *T) const {
1646   TypeInfoMap::iterator I = MemoizedTypeInfo.find(T);
1647   if (I != MemoizedTypeInfo.end())
1648     return I->second;
1649 
1650   // This call can invalidate MemoizedTypeInfo[T], so we need a second lookup.
1651   TypeInfo TI = getTypeInfoImpl(T);
1652   MemoizedTypeInfo[T] = TI;
1653   return TI;
1654 }
1655 
1656 /// getTypeInfoImpl - Return the size of the specified type, in bits.  This
1657 /// method does not work on incomplete types.
1658 ///
1659 /// FIXME: Pointers into different addr spaces could have different sizes and
1660 /// alignment requirements: getPointerInfo should take an AddrSpace, this
1661 /// should take a QualType, &c.
1662 TypeInfo ASTContext::getTypeInfoImpl(const Type *T) const {
1663   uint64_t Width = 0;
1664   unsigned Align = 8;
1665   bool AlignIsRequired = false;
1666   unsigned AS = 0;
1667   switch (T->getTypeClass()) {
1668 #define TYPE(Class, Base)
1669 #define ABSTRACT_TYPE(Class, Base)
1670 #define NON_CANONICAL_TYPE(Class, Base)
1671 #define DEPENDENT_TYPE(Class, Base) case Type::Class:
1672 #define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base)                       \
1673   case Type::Class:                                                            \
1674   assert(!T->isDependentType() && "should not see dependent types here");      \
1675   return getTypeInfo(cast<Class##Type>(T)->desugar().getTypePtr());
1676 #include "clang/AST/TypeNodes.def"
1677     llvm_unreachable("Should not see dependent types");
1678 
1679   case Type::FunctionNoProto:
1680   case Type::FunctionProto:
1681     // GCC extension: alignof(function) = 32 bits
1682     Width = 0;
1683     Align = 32;
1684     break;
1685 
1686   case Type::IncompleteArray:
1687   case Type::VariableArray:
1688     Width = 0;
1689     Align = getTypeAlign(cast<ArrayType>(T)->getElementType());
1690     break;
1691 
1692   case Type::ConstantArray: {
1693     const ConstantArrayType *CAT = cast<ConstantArrayType>(T);
1694 
1695     TypeInfo EltInfo = getTypeInfo(CAT->getElementType());
1696     uint64_t Size = CAT->getSize().getZExtValue();
1697     assert((Size == 0 || EltInfo.Width <= (uint64_t)(-1) / Size) &&
1698            "Overflow in array type bit size evaluation");
1699     Width = EltInfo.Width * Size;
1700     Align = EltInfo.Align;
1701     if (!getTargetInfo().getCXXABI().isMicrosoft() ||
1702         getTargetInfo().getPointerWidth(0) == 64)
1703       Width = llvm::alignTo(Width, Align);
1704     break;
1705   }
1706   case Type::ExtVector:
1707   case Type::Vector: {
1708     const VectorType *VT = cast<VectorType>(T);
1709     TypeInfo EltInfo = getTypeInfo(VT->getElementType());
1710     Width = EltInfo.Width * VT->getNumElements();
1711     Align = Width;
1712     // If the alignment is not a power of 2, round up to the next power of 2.
1713     // This happens for non-power-of-2 length vectors.
1714     if (Align & (Align-1)) {
1715       Align = llvm::NextPowerOf2(Align);
1716       Width = llvm::alignTo(Width, Align);
1717     }
1718     // Adjust the alignment based on the target max.
1719     uint64_t TargetVectorAlign = Target->getMaxVectorAlign();
1720     if (TargetVectorAlign && TargetVectorAlign < Align)
1721       Align = TargetVectorAlign;
1722     break;
1723   }
1724 
1725   case Type::Builtin:
1726     switch (cast<BuiltinType>(T)->getKind()) {
1727     default: llvm_unreachable("Unknown builtin type!");
1728     case BuiltinType::Void:
1729       // GCC extension: alignof(void) = 8 bits.
1730       Width = 0;
1731       Align = 8;
1732       break;
1733     case BuiltinType::Bool:
1734       Width = Target->getBoolWidth();
1735       Align = Target->getBoolAlign();
1736       break;
1737     case BuiltinType::Char_S:
1738     case BuiltinType::Char_U:
1739     case BuiltinType::UChar:
1740     case BuiltinType::SChar:
1741       Width = Target->getCharWidth();
1742       Align = Target->getCharAlign();
1743       break;
1744     case BuiltinType::WChar_S:
1745     case BuiltinType::WChar_U:
1746       Width = Target->getWCharWidth();
1747       Align = Target->getWCharAlign();
1748       break;
1749     case BuiltinType::Char16:
1750       Width = Target->getChar16Width();
1751       Align = Target->getChar16Align();
1752       break;
1753     case BuiltinType::Char32:
1754       Width = Target->getChar32Width();
1755       Align = Target->getChar32Align();
1756       break;
1757     case BuiltinType::UShort:
1758     case BuiltinType::Short:
1759       Width = Target->getShortWidth();
1760       Align = Target->getShortAlign();
1761       break;
1762     case BuiltinType::UInt:
1763     case BuiltinType::Int:
1764       Width = Target->getIntWidth();
1765       Align = Target->getIntAlign();
1766       break;
1767     case BuiltinType::ULong:
1768     case BuiltinType::Long:
1769       Width = Target->getLongWidth();
1770       Align = Target->getLongAlign();
1771       break;
1772     case BuiltinType::ULongLong:
1773     case BuiltinType::LongLong:
1774       Width = Target->getLongLongWidth();
1775       Align = Target->getLongLongAlign();
1776       break;
1777     case BuiltinType::Int128:
1778     case BuiltinType::UInt128:
1779       Width = 128;
1780       Align = 128; // int128_t is 128-bit aligned on all targets.
1781       break;
1782     case BuiltinType::Float16:
1783     case BuiltinType::Half:
1784       Width = Target->getHalfWidth();
1785       Align = Target->getHalfAlign();
1786       break;
1787     case BuiltinType::Float:
1788       Width = Target->getFloatWidth();
1789       Align = Target->getFloatAlign();
1790       break;
1791     case BuiltinType::Double:
1792       Width = Target->getDoubleWidth();
1793       Align = Target->getDoubleAlign();
1794       break;
1795     case BuiltinType::LongDouble:
1796       Width = Target->getLongDoubleWidth();
1797       Align = Target->getLongDoubleAlign();
1798       break;
1799     case BuiltinType::Float128:
1800       Width = Target->getFloat128Width();
1801       Align = Target->getFloat128Align();
1802       break;
1803     case BuiltinType::NullPtr:
1804       Width = Target->getPointerWidth(0); // C++ 3.9.1p11: sizeof(nullptr_t)
1805       Align = Target->getPointerAlign(0); //   == sizeof(void*)
1806       break;
1807     case BuiltinType::ObjCId:
1808     case BuiltinType::ObjCClass:
1809     case BuiltinType::ObjCSel:
1810       Width = Target->getPointerWidth(0);
1811       Align = Target->getPointerAlign(0);
1812       break;
1813     case BuiltinType::OCLSampler:
1814     case BuiltinType::OCLEvent:
1815     case BuiltinType::OCLClkEvent:
1816     case BuiltinType::OCLQueue:
1817     case BuiltinType::OCLReserveID:
1818 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
1819     case BuiltinType::Id:
1820 #include "clang/Basic/OpenCLImageTypes.def"
1821       AS = getTargetAddressSpace(
1822           Target->getOpenCLTypeAddrSpace(getOpenCLTypeKind(T)));
1823       Width = Target->getPointerWidth(AS);
1824       Align = Target->getPointerAlign(AS);
1825       break;
1826     }
1827     break;
1828   case Type::ObjCObjectPointer:
1829     Width = Target->getPointerWidth(0);
1830     Align = Target->getPointerAlign(0);
1831     break;
1832   case Type::BlockPointer:
1833     AS = getTargetAddressSpace(cast<BlockPointerType>(T)->getPointeeType());
1834     Width = Target->getPointerWidth(AS);
1835     Align = Target->getPointerAlign(AS);
1836     break;
1837   case Type::LValueReference:
1838   case Type::RValueReference:
1839     // alignof and sizeof should never enter this code path here, so we go
1840     // the pointer route.
1841     AS = getTargetAddressSpace(cast<ReferenceType>(T)->getPointeeType());
1842     Width = Target->getPointerWidth(AS);
1843     Align = Target->getPointerAlign(AS);
1844     break;
1845   case Type::Pointer:
1846     AS = getTargetAddressSpace(cast<PointerType>(T)->getPointeeType());
1847     Width = Target->getPointerWidth(AS);
1848     Align = Target->getPointerAlign(AS);
1849     break;
1850   case Type::MemberPointer: {
1851     const MemberPointerType *MPT = cast<MemberPointerType>(T);
1852     CXXABI::MemberPointerInfo MPI = ABI->getMemberPointerInfo(MPT);
1853     Width = MPI.Width;
1854     Align = MPI.Align;
1855     break;
1856   }
1857   case Type::Complex: {
1858     // Complex types have the same alignment as their elements, but twice the
1859     // size.
1860     TypeInfo EltInfo = getTypeInfo(cast<ComplexType>(T)->getElementType());
1861     Width = EltInfo.Width * 2;
1862     Align = EltInfo.Align;
1863     break;
1864   }
1865   case Type::ObjCObject:
1866     return getTypeInfo(cast<ObjCObjectType>(T)->getBaseType().getTypePtr());
1867   case Type::Adjusted:
1868   case Type::Decayed:
1869     return getTypeInfo(cast<AdjustedType>(T)->getAdjustedType().getTypePtr());
1870   case Type::ObjCInterface: {
1871     const ObjCInterfaceType *ObjCI = cast<ObjCInterfaceType>(T);
1872     const ASTRecordLayout &Layout = getASTObjCInterfaceLayout(ObjCI->getDecl());
1873     Width = toBits(Layout.getSize());
1874     Align = toBits(Layout.getAlignment());
1875     break;
1876   }
1877   case Type::Record:
1878   case Type::Enum: {
1879     const TagType *TT = cast<TagType>(T);
1880 
1881     if (TT->getDecl()->isInvalidDecl()) {
1882       Width = 8;
1883       Align = 8;
1884       break;
1885     }
1886 
1887     if (const EnumType *ET = dyn_cast<EnumType>(TT)) {
1888       const EnumDecl *ED = ET->getDecl();
1889       TypeInfo Info =
1890           getTypeInfo(ED->getIntegerType()->getUnqualifiedDesugaredType());
1891       if (unsigned AttrAlign = ED->getMaxAlignment()) {
1892         Info.Align = AttrAlign;
1893         Info.AlignIsRequired = true;
1894       }
1895       return Info;
1896     }
1897 
1898     const RecordType *RT = cast<RecordType>(TT);
1899     const RecordDecl *RD = RT->getDecl();
1900     const ASTRecordLayout &Layout = getASTRecordLayout(RD);
1901     Width = toBits(Layout.getSize());
1902     Align = toBits(Layout.getAlignment());
1903     AlignIsRequired = RD->hasAttr<AlignedAttr>();
1904     break;
1905   }
1906 
1907   case Type::SubstTemplateTypeParm:
1908     return getTypeInfo(cast<SubstTemplateTypeParmType>(T)->
1909                        getReplacementType().getTypePtr());
1910 
1911   case Type::Auto:
1912   case Type::DeducedTemplateSpecialization: {
1913     const DeducedType *A = cast<DeducedType>(T);
1914     assert(!A->getDeducedType().isNull() &&
1915            "cannot request the size of an undeduced or dependent auto type");
1916     return getTypeInfo(A->getDeducedType().getTypePtr());
1917   }
1918 
1919   case Type::Paren:
1920     return getTypeInfo(cast<ParenType>(T)->getInnerType().getTypePtr());
1921 
1922   case Type::ObjCTypeParam:
1923     return getTypeInfo(cast<ObjCTypeParamType>(T)->desugar().getTypePtr());
1924 
1925   case Type::Typedef: {
1926     const TypedefNameDecl *Typedef = cast<TypedefType>(T)->getDecl();
1927     TypeInfo Info = getTypeInfo(Typedef->getUnderlyingType().getTypePtr());
1928     // If the typedef has an aligned attribute on it, it overrides any computed
1929     // alignment we have.  This violates the GCC documentation (which says that
1930     // attribute(aligned) can only round up) but matches its implementation.
1931     if (unsigned AttrAlign = Typedef->getMaxAlignment()) {
1932       Align = AttrAlign;
1933       AlignIsRequired = true;
1934     } else {
1935       Align = Info.Align;
1936       AlignIsRequired = Info.AlignIsRequired;
1937     }
1938     Width = Info.Width;
1939     break;
1940   }
1941 
1942   case Type::Elaborated:
1943     return getTypeInfo(cast<ElaboratedType>(T)->getNamedType().getTypePtr());
1944 
1945   case Type::Attributed:
1946     return getTypeInfo(
1947                   cast<AttributedType>(T)->getEquivalentType().getTypePtr());
1948 
1949   case Type::Atomic: {
1950     // Start with the base type information.
1951     TypeInfo Info = getTypeInfo(cast<AtomicType>(T)->getValueType());
1952     Width = Info.Width;
1953     Align = Info.Align;
1954 
1955     // If the size of the type doesn't exceed the platform's max
1956     // atomic promotion width, make the size and alignment more
1957     // favorable to atomic operations:
1958     if (Width != 0 && Width <= Target->getMaxAtomicPromoteWidth()) {
1959       // Round the size up to a power of 2.
1960       if (!llvm::isPowerOf2_64(Width))
1961         Width = llvm::NextPowerOf2(Width);
1962 
1963       // Set the alignment equal to the size.
1964       Align = static_cast<unsigned>(Width);
1965     }
1966   }
1967   break;
1968 
1969   case Type::Pipe:
1970     Width = Target->getPointerWidth(getTargetAddressSpace(LangAS::opencl_global));
1971     Align = Target->getPointerAlign(getTargetAddressSpace(LangAS::opencl_global));
1972     break;
1973   }
1974 
1975   assert(llvm::isPowerOf2_32(Align) && "Alignment must be power of 2");
1976   return TypeInfo(Width, Align, AlignIsRequired);
1977 }
1978 
1979 unsigned ASTContext::getOpenMPDefaultSimdAlign(QualType T) const {
1980   unsigned SimdAlign = getTargetInfo().getSimdDefaultAlign();
1981   // Target ppc64 with QPX: simd default alignment for pointer to double is 32.
1982   if ((getTargetInfo().getTriple().getArch() == llvm::Triple::ppc64 ||
1983        getTargetInfo().getTriple().getArch() == llvm::Triple::ppc64le) &&
1984       getTargetInfo().getABI() == "elfv1-qpx" &&
1985       T->isSpecificBuiltinType(BuiltinType::Double))
1986     SimdAlign = 256;
1987   return SimdAlign;
1988 }
1989 
1990 /// toCharUnitsFromBits - Convert a size in bits to a size in characters.
1991 CharUnits ASTContext::toCharUnitsFromBits(int64_t BitSize) const {
1992   return CharUnits::fromQuantity(BitSize / getCharWidth());
1993 }
1994 
1995 /// toBits - Convert a size in characters to a size in characters.
1996 int64_t ASTContext::toBits(CharUnits CharSize) const {
1997   return CharSize.getQuantity() * getCharWidth();
1998 }
1999 
2000 /// getTypeSizeInChars - Return the size of the specified type, in characters.
2001 /// This method does not work on incomplete types.
2002 CharUnits ASTContext::getTypeSizeInChars(QualType T) const {
2003   return getTypeInfoInChars(T).first;
2004 }
2005 CharUnits ASTContext::getTypeSizeInChars(const Type *T) const {
2006   return getTypeInfoInChars(T).first;
2007 }
2008 
2009 /// getTypeAlignInChars - Return the ABI-specified alignment of a type, in
2010 /// characters. This method does not work on incomplete types.
2011 CharUnits ASTContext::getTypeAlignInChars(QualType T) const {
2012   return toCharUnitsFromBits(getTypeAlign(T));
2013 }
2014 CharUnits ASTContext::getTypeAlignInChars(const Type *T) const {
2015   return toCharUnitsFromBits(getTypeAlign(T));
2016 }
2017 
2018 /// getPreferredTypeAlign - Return the "preferred" alignment of the specified
2019 /// type for the current target in bits.  This can be different than the ABI
2020 /// alignment in cases where it is beneficial for performance to overalign
2021 /// a data type.
2022 unsigned ASTContext::getPreferredTypeAlign(const Type *T) const {
2023   TypeInfo TI = getTypeInfo(T);
2024   unsigned ABIAlign = TI.Align;
2025 
2026   T = T->getBaseElementTypeUnsafe();
2027 
2028   // The preferred alignment of member pointers is that of a pointer.
2029   if (T->isMemberPointerType())
2030     return getPreferredTypeAlign(getPointerDiffType().getTypePtr());
2031 
2032   if (!Target->allowsLargerPreferedTypeAlignment())
2033     return ABIAlign;
2034 
2035   // Double and long long should be naturally aligned if possible.
2036   if (const ComplexType *CT = T->getAs<ComplexType>())
2037     T = CT->getElementType().getTypePtr();
2038   if (const EnumType *ET = T->getAs<EnumType>())
2039     T = ET->getDecl()->getIntegerType().getTypePtr();
2040   if (T->isSpecificBuiltinType(BuiltinType::Double) ||
2041       T->isSpecificBuiltinType(BuiltinType::LongLong) ||
2042       T->isSpecificBuiltinType(BuiltinType::ULongLong))
2043     // Don't increase the alignment if an alignment attribute was specified on a
2044     // typedef declaration.
2045     if (!TI.AlignIsRequired)
2046       return std::max(ABIAlign, (unsigned)getTypeSize(T));
2047 
2048   return ABIAlign;
2049 }
2050 
2051 /// getTargetDefaultAlignForAttributeAligned - Return the default alignment
2052 /// for __attribute__((aligned)) on this target, to be used if no alignment
2053 /// value is specified.
2054 unsigned ASTContext::getTargetDefaultAlignForAttributeAligned() const {
2055   return getTargetInfo().getDefaultAlignForAttributeAligned();
2056 }
2057 
2058 /// getAlignOfGlobalVar - Return the alignment in bits that should be given
2059 /// to a global variable of the specified type.
2060 unsigned ASTContext::getAlignOfGlobalVar(QualType T) const {
2061   return std::max(getTypeAlign(T), getTargetInfo().getMinGlobalAlign());
2062 }
2063 
2064 /// getAlignOfGlobalVarInChars - Return the alignment in characters that
2065 /// should be given to a global variable of the specified type.
2066 CharUnits ASTContext::getAlignOfGlobalVarInChars(QualType T) const {
2067   return toCharUnitsFromBits(getAlignOfGlobalVar(T));
2068 }
2069 
2070 CharUnits ASTContext::getOffsetOfBaseWithVBPtr(const CXXRecordDecl *RD) const {
2071   CharUnits Offset = CharUnits::Zero();
2072   const ASTRecordLayout *Layout = &getASTRecordLayout(RD);
2073   while (const CXXRecordDecl *Base = Layout->getBaseSharingVBPtr()) {
2074     Offset += Layout->getBaseClassOffset(Base);
2075     Layout = &getASTRecordLayout(Base);
2076   }
2077   return Offset;
2078 }
2079 
2080 /// DeepCollectObjCIvars -
2081 /// This routine first collects all declared, but not synthesized, ivars in
2082 /// super class and then collects all ivars, including those synthesized for
2083 /// current class. This routine is used for implementation of current class
2084 /// when all ivars, declared and synthesized are known.
2085 void ASTContext::DeepCollectObjCIvars(const ObjCInterfaceDecl *OI,
2086                                       bool leafClass,
2087                             SmallVectorImpl<const ObjCIvarDecl*> &Ivars) const {
2088   if (const ObjCInterfaceDecl *SuperClass = OI->getSuperClass())
2089     DeepCollectObjCIvars(SuperClass, false, Ivars);
2090   if (!leafClass) {
2091     for (const auto *I : OI->ivars())
2092       Ivars.push_back(I);
2093   } else {
2094     ObjCInterfaceDecl *IDecl = const_cast<ObjCInterfaceDecl *>(OI);
2095     for (const ObjCIvarDecl *Iv = IDecl->all_declared_ivar_begin(); Iv;
2096          Iv= Iv->getNextIvar())
2097       Ivars.push_back(Iv);
2098   }
2099 }
2100 
2101 /// CollectInheritedProtocols - Collect all protocols in current class and
2102 /// those inherited by it.
2103 void ASTContext::CollectInheritedProtocols(const Decl *CDecl,
2104                           llvm::SmallPtrSet<ObjCProtocolDecl*, 8> &Protocols) {
2105   if (const ObjCInterfaceDecl *OI = dyn_cast<ObjCInterfaceDecl>(CDecl)) {
2106     // We can use protocol_iterator here instead of
2107     // all_referenced_protocol_iterator since we are walking all categories.
2108     for (auto *Proto : OI->all_referenced_protocols()) {
2109       CollectInheritedProtocols(Proto, Protocols);
2110     }
2111 
2112     // Categories of this Interface.
2113     for (const auto *Cat : OI->visible_categories())
2114       CollectInheritedProtocols(Cat, Protocols);
2115 
2116     if (ObjCInterfaceDecl *SD = OI->getSuperClass())
2117       while (SD) {
2118         CollectInheritedProtocols(SD, Protocols);
2119         SD = SD->getSuperClass();
2120       }
2121   } else if (const ObjCCategoryDecl *OC = dyn_cast<ObjCCategoryDecl>(CDecl)) {
2122     for (auto *Proto : OC->protocols()) {
2123       CollectInheritedProtocols(Proto, Protocols);
2124     }
2125   } else if (const ObjCProtocolDecl *OP = dyn_cast<ObjCProtocolDecl>(CDecl)) {
2126     // Insert the protocol.
2127     if (!Protocols.insert(
2128           const_cast<ObjCProtocolDecl *>(OP->getCanonicalDecl())).second)
2129       return;
2130 
2131     for (auto *Proto : OP->protocols())
2132       CollectInheritedProtocols(Proto, Protocols);
2133   }
2134 }
2135 
2136 static bool unionHasUniqueObjectRepresentations(const ASTContext &Context,
2137                                                 const RecordDecl *RD) {
2138   assert(RD->isUnion() && "Must be union type");
2139   CharUnits UnionSize = Context.getTypeSizeInChars(RD->getTypeForDecl());
2140 
2141   for (const auto *Field : RD->fields()) {
2142     if (!Context.hasUniqueObjectRepresentations(Field->getType()))
2143       return false;
2144     CharUnits FieldSize = Context.getTypeSizeInChars(Field->getType());
2145     if (FieldSize != UnionSize)
2146       return false;
2147   }
2148   return !RD->field_empty();
2149 }
2150 
2151 static bool isStructEmpty(QualType Ty) {
2152   const RecordDecl *RD = Ty->castAs<RecordType>()->getDecl();
2153 
2154   if (!RD->field_empty())
2155     return false;
2156 
2157   if (const auto *ClassDecl = dyn_cast<CXXRecordDecl>(RD))
2158     return ClassDecl->isEmpty();
2159 
2160   return true;
2161 }
2162 
2163 static llvm::Optional<int64_t>
2164 structHasUniqueObjectRepresentations(const ASTContext &Context,
2165                                      const RecordDecl *RD) {
2166   assert(!RD->isUnion() && "Must be struct/class type");
2167   const auto &Layout = Context.getASTRecordLayout(RD);
2168 
2169   int64_t CurOffsetInBits = 0;
2170   if (const auto *ClassDecl = dyn_cast<CXXRecordDecl>(RD)) {
2171     if (ClassDecl->isDynamicClass())
2172       return llvm::None;
2173 
2174     SmallVector<std::pair<QualType, int64_t>, 4> Bases;
2175     for (const auto Base : ClassDecl->bases()) {
2176       // Empty types can be inherited from, and non-empty types can potentially
2177       // have tail padding, so just make sure there isn't an error.
2178       if (!isStructEmpty(Base.getType())) {
2179         llvm::Optional<int64_t> Size = structHasUniqueObjectRepresentations(
2180             Context, Base.getType()->getAs<RecordType>()->getDecl());
2181         if (!Size)
2182           return llvm::None;
2183         Bases.emplace_back(Base.getType(), Size.getValue());
2184       }
2185     }
2186 
2187     std::sort(
2188         Bases.begin(), Bases.end(), [&](const std::pair<QualType, int64_t> &L,
2189                                         const std::pair<QualType, int64_t> &R) {
2190           return Layout.getBaseClassOffset(L.first->getAsCXXRecordDecl()) <
2191                  Layout.getBaseClassOffset(R.first->getAsCXXRecordDecl());
2192         });
2193 
2194     for (const auto Base : Bases) {
2195       int64_t BaseOffset = Context.toBits(
2196           Layout.getBaseClassOffset(Base.first->getAsCXXRecordDecl()));
2197       int64_t BaseSize = Base.second;
2198       if (BaseOffset != CurOffsetInBits)
2199         return llvm::None;
2200       CurOffsetInBits = BaseOffset + BaseSize;
2201     }
2202   }
2203 
2204   for (const auto *Field : RD->fields()) {
2205     if (!Field->getType()->isReferenceType() &&
2206         !Context.hasUniqueObjectRepresentations(Field->getType()))
2207       return llvm::None;
2208 
2209     int64_t FieldSizeInBits =
2210         Context.toBits(Context.getTypeSizeInChars(Field->getType()));
2211     if (Field->isBitField()) {
2212       int64_t BitfieldSize = Field->getBitWidthValue(Context);
2213 
2214       if (BitfieldSize > FieldSizeInBits)
2215         return llvm::None;
2216       FieldSizeInBits = BitfieldSize;
2217     }
2218 
2219     int64_t FieldOffsetInBits = Context.getFieldOffset(Field);
2220 
2221     if (FieldOffsetInBits != CurOffsetInBits)
2222       return llvm::None;
2223 
2224     CurOffsetInBits = FieldSizeInBits + FieldOffsetInBits;
2225   }
2226 
2227   return CurOffsetInBits;
2228 }
2229 
2230 bool ASTContext::hasUniqueObjectRepresentations(QualType Ty) const {
2231   // C++17 [meta.unary.prop]:
2232   //   The predicate condition for a template specialization
2233   //   has_unique_object_representations<T> shall be
2234   //   satisfied if and only if:
2235   //     (9.1) - T is trivially copyable, and
2236   //     (9.2) - any two objects of type T with the same value have the same
2237   //     object representation, where two objects
2238   //   of array or non-union class type are considered to have the same value
2239   //   if their respective sequences of
2240   //   direct subobjects have the same values, and two objects of union type
2241   //   are considered to have the same
2242   //   value if they have the same active member and the corresponding members
2243   //   have the same value.
2244   //   The set of scalar types for which this condition holds is
2245   //   implementation-defined. [ Note: If a type has padding
2246   //   bits, the condition does not hold; otherwise, the condition holds true
2247   //   for unsigned integral types. -- end note ]
2248   assert(!Ty.isNull() && "Null QualType sent to unique object rep check");
2249 
2250   // Arrays are unique only if their element type is unique.
2251   if (Ty->isArrayType())
2252     return hasUniqueObjectRepresentations(getBaseElementType(Ty));
2253 
2254   // (9.1) - T is trivially copyable...
2255   if (!Ty.isTriviallyCopyableType(*this))
2256     return false;
2257 
2258   // All integrals and enums are unique.
2259   if (Ty->isIntegralOrEnumerationType())
2260     return true;
2261 
2262   // All other pointers are unique.
2263   if (Ty->isPointerType())
2264     return true;
2265 
2266   if (Ty->isMemberPointerType()) {
2267     const MemberPointerType *MPT = Ty->getAs<MemberPointerType>();
2268     return !ABI->getMemberPointerInfo(MPT).HasPadding;
2269   }
2270 
2271   if (Ty->isRecordType()) {
2272     const RecordDecl *Record = Ty->getAs<RecordType>()->getDecl();
2273 
2274     if (Record->isInvalidDecl())
2275       return false;
2276 
2277     if (Record->isUnion())
2278       return unionHasUniqueObjectRepresentations(*this, Record);
2279 
2280     Optional<int64_t> StructSize =
2281         structHasUniqueObjectRepresentations(*this, Record);
2282 
2283     return StructSize &&
2284            StructSize.getValue() == static_cast<int64_t>(getTypeSize(Ty));
2285   }
2286 
2287   // FIXME: More cases to handle here (list by rsmith):
2288   // vectors (careful about, eg, vector of 3 foo)
2289   // _Complex int and friends
2290   // _Atomic T
2291   // Obj-C block pointers
2292   // Obj-C object pointers
2293   // and perhaps OpenCL's various builtin types (pipe, sampler_t, event_t,
2294   // clk_event_t, queue_t, reserve_id_t)
2295   // There're also Obj-C class types and the Obj-C selector type, but I think it
2296   // makes sense for those to return false here.
2297 
2298   return false;
2299 }
2300 
2301 unsigned ASTContext::CountNonClassIvars(const ObjCInterfaceDecl *OI) const {
2302   unsigned count = 0;
2303   // Count ivars declared in class extension.
2304   for (const auto *Ext : OI->known_extensions())
2305     count += Ext->ivar_size();
2306 
2307   // Count ivar defined in this class's implementation.  This
2308   // includes synthesized ivars.
2309   if (ObjCImplementationDecl *ImplDecl = OI->getImplementation())
2310     count += ImplDecl->ivar_size();
2311 
2312   return count;
2313 }
2314 
2315 bool ASTContext::isSentinelNullExpr(const Expr *E) {
2316   if (!E)
2317     return false;
2318 
2319   // nullptr_t is always treated as null.
2320   if (E->getType()->isNullPtrType()) return true;
2321 
2322   if (E->getType()->isAnyPointerType() &&
2323       E->IgnoreParenCasts()->isNullPointerConstant(*this,
2324                                                 Expr::NPC_ValueDependentIsNull))
2325     return true;
2326 
2327   // Unfortunately, __null has type 'int'.
2328   if (isa<GNUNullExpr>(E)) return true;
2329 
2330   return false;
2331 }
2332 
2333 /// \brief Get the implementation of ObjCInterfaceDecl, or nullptr if none
2334 /// exists.
2335 ObjCImplementationDecl *ASTContext::getObjCImplementation(ObjCInterfaceDecl *D) {
2336   llvm::DenseMap<ObjCContainerDecl*, ObjCImplDecl*>::iterator
2337     I = ObjCImpls.find(D);
2338   if (I != ObjCImpls.end())
2339     return cast<ObjCImplementationDecl>(I->second);
2340   return nullptr;
2341 }
2342 
2343 /// \brief Get the implementation of ObjCCategoryDecl, or nullptr if none
2344 /// exists.
2345 ObjCCategoryImplDecl *ASTContext::getObjCImplementation(ObjCCategoryDecl *D) {
2346   llvm::DenseMap<ObjCContainerDecl*, ObjCImplDecl*>::iterator
2347     I = ObjCImpls.find(D);
2348   if (I != ObjCImpls.end())
2349     return cast<ObjCCategoryImplDecl>(I->second);
2350   return nullptr;
2351 }
2352 
2353 /// \brief Set the implementation of ObjCInterfaceDecl.
2354 void ASTContext::setObjCImplementation(ObjCInterfaceDecl *IFaceD,
2355                            ObjCImplementationDecl *ImplD) {
2356   assert(IFaceD && ImplD && "Passed null params");
2357   ObjCImpls[IFaceD] = ImplD;
2358 }
2359 
2360 /// \brief Set the implementation of ObjCCategoryDecl.
2361 void ASTContext::setObjCImplementation(ObjCCategoryDecl *CatD,
2362                            ObjCCategoryImplDecl *ImplD) {
2363   assert(CatD && ImplD && "Passed null params");
2364   ObjCImpls[CatD] = ImplD;
2365 }
2366 
2367 const ObjCMethodDecl *
2368 ASTContext::getObjCMethodRedeclaration(const ObjCMethodDecl *MD) const {
2369   return ObjCMethodRedecls.lookup(MD);
2370 }
2371 
2372 void ASTContext::setObjCMethodRedeclaration(const ObjCMethodDecl *MD,
2373                                             const ObjCMethodDecl *Redecl) {
2374   assert(!getObjCMethodRedeclaration(MD) && "MD already has a redeclaration");
2375   ObjCMethodRedecls[MD] = Redecl;
2376 }
2377 
2378 const ObjCInterfaceDecl *ASTContext::getObjContainingInterface(
2379                                               const NamedDecl *ND) const {
2380   if (const ObjCInterfaceDecl *ID =
2381           dyn_cast<ObjCInterfaceDecl>(ND->getDeclContext()))
2382     return ID;
2383   if (const ObjCCategoryDecl *CD =
2384           dyn_cast<ObjCCategoryDecl>(ND->getDeclContext()))
2385     return CD->getClassInterface();
2386   if (const ObjCImplDecl *IMD =
2387           dyn_cast<ObjCImplDecl>(ND->getDeclContext()))
2388     return IMD->getClassInterface();
2389 
2390   return nullptr;
2391 }
2392 
2393 /// \brief Get the copy initialization expression of VarDecl, or nullptr if
2394 /// none exists.
2395 Expr *ASTContext::getBlockVarCopyInits(const VarDecl*VD) {
2396   assert(VD && "Passed null params");
2397   assert(VD->hasAttr<BlocksAttr>() &&
2398          "getBlockVarCopyInits - not __block var");
2399   llvm::DenseMap<const VarDecl*, Expr*>::iterator
2400     I = BlockVarCopyInits.find(VD);
2401   return (I != BlockVarCopyInits.end()) ? cast<Expr>(I->second) : nullptr;
2402 }
2403 
2404 /// \brief Set the copy inialization expression of a block var decl.
2405 void ASTContext::setBlockVarCopyInits(VarDecl*VD, Expr* Init) {
2406   assert(VD && Init && "Passed null params");
2407   assert(VD->hasAttr<BlocksAttr>() &&
2408          "setBlockVarCopyInits - not __block var");
2409   BlockVarCopyInits[VD] = Init;
2410 }
2411 
2412 TypeSourceInfo *ASTContext::CreateTypeSourceInfo(QualType T,
2413                                                  unsigned DataSize) const {
2414   if (!DataSize)
2415     DataSize = TypeLoc::getFullDataSizeForType(T);
2416   else
2417     assert(DataSize == TypeLoc::getFullDataSizeForType(T) &&
2418            "incorrect data size provided to CreateTypeSourceInfo!");
2419 
2420   TypeSourceInfo *TInfo =
2421     (TypeSourceInfo*)BumpAlloc.Allocate(sizeof(TypeSourceInfo) + DataSize, 8);
2422   new (TInfo) TypeSourceInfo(T);
2423   return TInfo;
2424 }
2425 
2426 TypeSourceInfo *ASTContext::getTrivialTypeSourceInfo(QualType T,
2427                                                      SourceLocation L) const {
2428   TypeSourceInfo *DI = CreateTypeSourceInfo(T);
2429   DI->getTypeLoc().initialize(const_cast<ASTContext &>(*this), L);
2430   return DI;
2431 }
2432 
2433 const ASTRecordLayout &
2434 ASTContext::getASTObjCInterfaceLayout(const ObjCInterfaceDecl *D) const {
2435   return getObjCLayout(D, nullptr);
2436 }
2437 
2438 const ASTRecordLayout &
2439 ASTContext::getASTObjCImplementationLayout(
2440                                         const ObjCImplementationDecl *D) const {
2441   return getObjCLayout(D->getClassInterface(), D);
2442 }
2443 
2444 //===----------------------------------------------------------------------===//
2445 //                   Type creation/memoization methods
2446 //===----------------------------------------------------------------------===//
2447 
2448 QualType
2449 ASTContext::getExtQualType(const Type *baseType, Qualifiers quals) const {
2450   unsigned fastQuals = quals.getFastQualifiers();
2451   quals.removeFastQualifiers();
2452 
2453   // Check if we've already instantiated this type.
2454   llvm::FoldingSetNodeID ID;
2455   ExtQuals::Profile(ID, baseType, quals);
2456   void *insertPos = nullptr;
2457   if (ExtQuals *eq = ExtQualNodes.FindNodeOrInsertPos(ID, insertPos)) {
2458     assert(eq->getQualifiers() == quals);
2459     return QualType(eq, fastQuals);
2460   }
2461 
2462   // If the base type is not canonical, make the appropriate canonical type.
2463   QualType canon;
2464   if (!baseType->isCanonicalUnqualified()) {
2465     SplitQualType canonSplit = baseType->getCanonicalTypeInternal().split();
2466     canonSplit.Quals.addConsistentQualifiers(quals);
2467     canon = getExtQualType(canonSplit.Ty, canonSplit.Quals);
2468 
2469     // Re-find the insert position.
2470     (void) ExtQualNodes.FindNodeOrInsertPos(ID, insertPos);
2471   }
2472 
2473   ExtQuals *eq = new (*this, TypeAlignment) ExtQuals(baseType, canon, quals);
2474   ExtQualNodes.InsertNode(eq, insertPos);
2475   return QualType(eq, fastQuals);
2476 }
2477 
2478 QualType ASTContext::getAddrSpaceQualType(QualType T,
2479                                           LangAS AddressSpace) const {
2480   QualType CanT = getCanonicalType(T);
2481   if (CanT.getAddressSpace() == AddressSpace)
2482     return T;
2483 
2484   // If we are composing extended qualifiers together, merge together
2485   // into one ExtQuals node.
2486   QualifierCollector Quals;
2487   const Type *TypeNode = Quals.strip(T);
2488 
2489   // If this type already has an address space specified, it cannot get
2490   // another one.
2491   assert(!Quals.hasAddressSpace() &&
2492          "Type cannot be in multiple addr spaces!");
2493   Quals.addAddressSpace(AddressSpace);
2494 
2495   return getExtQualType(TypeNode, Quals);
2496 }
2497 
2498 QualType ASTContext::removeAddrSpaceQualType(QualType T) const {
2499   // If we are composing extended qualifiers together, merge together
2500   // into one ExtQuals node.
2501   QualifierCollector Quals;
2502   const Type *TypeNode = Quals.strip(T);
2503 
2504   // If the qualifier doesn't have an address space just return it.
2505   if (!Quals.hasAddressSpace())
2506     return T;
2507 
2508   Quals.removeAddressSpace();
2509 
2510   // Removal of the address space can mean there are no longer any
2511   // non-fast qualifiers, so creating an ExtQualType isn't possible (asserts)
2512   // or required.
2513   if (Quals.hasNonFastQualifiers())
2514     return getExtQualType(TypeNode, Quals);
2515   else
2516     return QualType(TypeNode, Quals.getFastQualifiers());
2517 }
2518 
2519 QualType ASTContext::getObjCGCQualType(QualType T,
2520                                        Qualifiers::GC GCAttr) const {
2521   QualType CanT = getCanonicalType(T);
2522   if (CanT.getObjCGCAttr() == GCAttr)
2523     return T;
2524 
2525   if (const PointerType *ptr = T->getAs<PointerType>()) {
2526     QualType Pointee = ptr->getPointeeType();
2527     if (Pointee->isAnyPointerType()) {
2528       QualType ResultType = getObjCGCQualType(Pointee, GCAttr);
2529       return getPointerType(ResultType);
2530     }
2531   }
2532 
2533   // If we are composing extended qualifiers together, merge together
2534   // into one ExtQuals node.
2535   QualifierCollector Quals;
2536   const Type *TypeNode = Quals.strip(T);
2537 
2538   // If this type already has an ObjCGC specified, it cannot get
2539   // another one.
2540   assert(!Quals.hasObjCGCAttr() &&
2541          "Type cannot have multiple ObjCGCs!");
2542   Quals.addObjCGCAttr(GCAttr);
2543 
2544   return getExtQualType(TypeNode, Quals);
2545 }
2546 
2547 const FunctionType *ASTContext::adjustFunctionType(const FunctionType *T,
2548                                                    FunctionType::ExtInfo Info) {
2549   if (T->getExtInfo() == Info)
2550     return T;
2551 
2552   QualType Result;
2553   if (const FunctionNoProtoType *FNPT = dyn_cast<FunctionNoProtoType>(T)) {
2554     Result = getFunctionNoProtoType(FNPT->getReturnType(), Info);
2555   } else {
2556     const FunctionProtoType *FPT = cast<FunctionProtoType>(T);
2557     FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
2558     EPI.ExtInfo = Info;
2559     Result = getFunctionType(FPT->getReturnType(), FPT->getParamTypes(), EPI);
2560   }
2561 
2562   return cast<FunctionType>(Result.getTypePtr());
2563 }
2564 
2565 void ASTContext::adjustDeducedFunctionResultType(FunctionDecl *FD,
2566                                                  QualType ResultType) {
2567   FD = FD->getMostRecentDecl();
2568   while (true) {
2569     const FunctionProtoType *FPT = FD->getType()->castAs<FunctionProtoType>();
2570     FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
2571     FD->setType(getFunctionType(ResultType, FPT->getParamTypes(), EPI));
2572     if (FunctionDecl *Next = FD->getPreviousDecl())
2573       FD = Next;
2574     else
2575       break;
2576   }
2577   if (ASTMutationListener *L = getASTMutationListener())
2578     L->DeducedReturnType(FD, ResultType);
2579 }
2580 
2581 /// Get a function type and produce the equivalent function type with the
2582 /// specified exception specification. Type sugar that can be present on a
2583 /// declaration of a function with an exception specification is permitted
2584 /// and preserved. Other type sugar (for instance, typedefs) is not.
2585 QualType ASTContext::getFunctionTypeWithExceptionSpec(
2586     QualType Orig, const FunctionProtoType::ExceptionSpecInfo &ESI) {
2587   // Might have some parens.
2588   if (auto *PT = dyn_cast<ParenType>(Orig))
2589     return getParenType(
2590         getFunctionTypeWithExceptionSpec(PT->getInnerType(), ESI));
2591 
2592   // Might have a calling-convention attribute.
2593   if (auto *AT = dyn_cast<AttributedType>(Orig))
2594     return getAttributedType(
2595         AT->getAttrKind(),
2596         getFunctionTypeWithExceptionSpec(AT->getModifiedType(), ESI),
2597         getFunctionTypeWithExceptionSpec(AT->getEquivalentType(), ESI));
2598 
2599   // Anything else must be a function type. Rebuild it with the new exception
2600   // specification.
2601   const FunctionProtoType *Proto = cast<FunctionProtoType>(Orig);
2602   return getFunctionType(
2603       Proto->getReturnType(), Proto->getParamTypes(),
2604       Proto->getExtProtoInfo().withExceptionSpec(ESI));
2605 }
2606 
2607 bool ASTContext::hasSameFunctionTypeIgnoringExceptionSpec(QualType T,
2608                                                           QualType U) {
2609   return hasSameType(T, U) ||
2610          (getLangOpts().CPlusPlus17 &&
2611           hasSameType(getFunctionTypeWithExceptionSpec(T, EST_None),
2612                       getFunctionTypeWithExceptionSpec(U, EST_None)));
2613 }
2614 
2615 void ASTContext::adjustExceptionSpec(
2616     FunctionDecl *FD, const FunctionProtoType::ExceptionSpecInfo &ESI,
2617     bool AsWritten) {
2618   // Update the type.
2619   QualType Updated =
2620       getFunctionTypeWithExceptionSpec(FD->getType(), ESI);
2621   FD->setType(Updated);
2622 
2623   if (!AsWritten)
2624     return;
2625 
2626   // Update the type in the type source information too.
2627   if (TypeSourceInfo *TSInfo = FD->getTypeSourceInfo()) {
2628     // If the type and the type-as-written differ, we may need to update
2629     // the type-as-written too.
2630     if (TSInfo->getType() != FD->getType())
2631       Updated = getFunctionTypeWithExceptionSpec(TSInfo->getType(), ESI);
2632 
2633     // FIXME: When we get proper type location information for exceptions,
2634     // we'll also have to rebuild the TypeSourceInfo. For now, we just patch
2635     // up the TypeSourceInfo;
2636     assert(TypeLoc::getFullDataSizeForType(Updated) ==
2637                TypeLoc::getFullDataSizeForType(TSInfo->getType()) &&
2638            "TypeLoc size mismatch from updating exception specification");
2639     TSInfo->overrideType(Updated);
2640   }
2641 }
2642 
2643 bool ASTContext::isParamDestroyedInCallee(QualType T) const {
2644   return getTargetInfo().getCXXABI().areArgsDestroyedLeftToRightInCallee() ||
2645          T.hasTrivialABIOverride();
2646 }
2647 
2648 /// getComplexType - Return the uniqued reference to the type for a complex
2649 /// number with the specified element type.
2650 QualType ASTContext::getComplexType(QualType T) const {
2651   // Unique pointers, to guarantee there is only one pointer of a particular
2652   // structure.
2653   llvm::FoldingSetNodeID ID;
2654   ComplexType::Profile(ID, T);
2655 
2656   void *InsertPos = nullptr;
2657   if (ComplexType *CT = ComplexTypes.FindNodeOrInsertPos(ID, InsertPos))
2658     return QualType(CT, 0);
2659 
2660   // If the pointee type isn't canonical, this won't be a canonical type either,
2661   // so fill in the canonical type field.
2662   QualType Canonical;
2663   if (!T.isCanonical()) {
2664     Canonical = getComplexType(getCanonicalType(T));
2665 
2666     // Get the new insert position for the node we care about.
2667     ComplexType *NewIP = ComplexTypes.FindNodeOrInsertPos(ID, InsertPos);
2668     assert(!NewIP && "Shouldn't be in the map!"); (void)NewIP;
2669   }
2670   ComplexType *New = new (*this, TypeAlignment) ComplexType(T, Canonical);
2671   Types.push_back(New);
2672   ComplexTypes.InsertNode(New, InsertPos);
2673   return QualType(New, 0);
2674 }
2675 
2676 /// getPointerType - Return the uniqued reference to the type for a pointer to
2677 /// the specified type.
2678 QualType ASTContext::getPointerType(QualType T) const {
2679   // Unique pointers, to guarantee there is only one pointer of a particular
2680   // structure.
2681   llvm::FoldingSetNodeID ID;
2682   PointerType::Profile(ID, T);
2683 
2684   void *InsertPos = nullptr;
2685   if (PointerType *PT = PointerTypes.FindNodeOrInsertPos(ID, InsertPos))
2686     return QualType(PT, 0);
2687 
2688   // If the pointee type isn't canonical, this won't be a canonical type either,
2689   // so fill in the canonical type field.
2690   QualType Canonical;
2691   if (!T.isCanonical()) {
2692     Canonical = getPointerType(getCanonicalType(T));
2693 
2694     // Get the new insert position for the node we care about.
2695     PointerType *NewIP = PointerTypes.FindNodeOrInsertPos(ID, InsertPos);
2696     assert(!NewIP && "Shouldn't be in the map!"); (void)NewIP;
2697   }
2698   PointerType *New = new (*this, TypeAlignment) PointerType(T, Canonical);
2699   Types.push_back(New);
2700   PointerTypes.InsertNode(New, InsertPos);
2701   return QualType(New, 0);
2702 }
2703 
2704 QualType ASTContext::getAdjustedType(QualType Orig, QualType New) const {
2705   llvm::FoldingSetNodeID ID;
2706   AdjustedType::Profile(ID, Orig, New);
2707   void *InsertPos = nullptr;
2708   AdjustedType *AT = AdjustedTypes.FindNodeOrInsertPos(ID, InsertPos);
2709   if (AT)
2710     return QualType(AT, 0);
2711 
2712   QualType Canonical = getCanonicalType(New);
2713 
2714   // Get the new insert position for the node we care about.
2715   AT = AdjustedTypes.FindNodeOrInsertPos(ID, InsertPos);
2716   assert(!AT && "Shouldn't be in the map!");
2717 
2718   AT = new (*this, TypeAlignment)
2719       AdjustedType(Type::Adjusted, Orig, New, Canonical);
2720   Types.push_back(AT);
2721   AdjustedTypes.InsertNode(AT, InsertPos);
2722   return QualType(AT, 0);
2723 }
2724 
2725 QualType ASTContext::getDecayedType(QualType T) const {
2726   assert((T->isArrayType() || T->isFunctionType()) && "T does not decay");
2727 
2728   QualType Decayed;
2729 
2730   // C99 6.7.5.3p7:
2731   //   A declaration of a parameter as "array of type" shall be
2732   //   adjusted to "qualified pointer to type", where the type
2733   //   qualifiers (if any) are those specified within the [ and ] of
2734   //   the array type derivation.
2735   if (T->isArrayType())
2736     Decayed = getArrayDecayedType(T);
2737 
2738   // C99 6.7.5.3p8:
2739   //   A declaration of a parameter as "function returning type"
2740   //   shall be adjusted to "pointer to function returning type", as
2741   //   in 6.3.2.1.
2742   if (T->isFunctionType())
2743     Decayed = getPointerType(T);
2744 
2745   llvm::FoldingSetNodeID ID;
2746   AdjustedType::Profile(ID, T, Decayed);
2747   void *InsertPos = nullptr;
2748   AdjustedType *AT = AdjustedTypes.FindNodeOrInsertPos(ID, InsertPos);
2749   if (AT)
2750     return QualType(AT, 0);
2751 
2752   QualType Canonical = getCanonicalType(Decayed);
2753 
2754   // Get the new insert position for the node we care about.
2755   AT = AdjustedTypes.FindNodeOrInsertPos(ID, InsertPos);
2756   assert(!AT && "Shouldn't be in the map!");
2757 
2758   AT = new (*this, TypeAlignment) DecayedType(T, Decayed, Canonical);
2759   Types.push_back(AT);
2760   AdjustedTypes.InsertNode(AT, InsertPos);
2761   return QualType(AT, 0);
2762 }
2763 
2764 /// getBlockPointerType - Return the uniqued reference to the type for
2765 /// a pointer to the specified block.
2766 QualType ASTContext::getBlockPointerType(QualType T) const {
2767   assert(T->isFunctionType() && "block of function types only");
2768   // Unique pointers, to guarantee there is only one block of a particular
2769   // structure.
2770   llvm::FoldingSetNodeID ID;
2771   BlockPointerType::Profile(ID, T);
2772 
2773   void *InsertPos = nullptr;
2774   if (BlockPointerType *PT =
2775         BlockPointerTypes.FindNodeOrInsertPos(ID, InsertPos))
2776     return QualType(PT, 0);
2777 
2778   // If the block pointee type isn't canonical, this won't be a canonical
2779   // type either so fill in the canonical type field.
2780   QualType Canonical;
2781   if (!T.isCanonical()) {
2782     Canonical = getBlockPointerType(getCanonicalType(T));
2783 
2784     // Get the new insert position for the node we care about.
2785     BlockPointerType *NewIP =
2786       BlockPointerTypes.FindNodeOrInsertPos(ID, InsertPos);
2787     assert(!NewIP && "Shouldn't be in the map!"); (void)NewIP;
2788   }
2789   BlockPointerType *New
2790     = new (*this, TypeAlignment) BlockPointerType(T, Canonical);
2791   Types.push_back(New);
2792   BlockPointerTypes.InsertNode(New, InsertPos);
2793   return QualType(New, 0);
2794 }
2795 
2796 /// getLValueReferenceType - Return the uniqued reference to the type for an
2797 /// lvalue reference to the specified type.
2798 QualType
2799 ASTContext::getLValueReferenceType(QualType T, bool SpelledAsLValue) const {
2800   assert(getCanonicalType(T) != OverloadTy &&
2801          "Unresolved overloaded function type");
2802 
2803   // Unique pointers, to guarantee there is only one pointer of a particular
2804   // structure.
2805   llvm::FoldingSetNodeID ID;
2806   ReferenceType::Profile(ID, T, SpelledAsLValue);
2807 
2808   void *InsertPos = nullptr;
2809   if (LValueReferenceType *RT =
2810         LValueReferenceTypes.FindNodeOrInsertPos(ID, InsertPos))
2811     return QualType(RT, 0);
2812 
2813   const ReferenceType *InnerRef = T->getAs<ReferenceType>();
2814 
2815   // If the referencee type isn't canonical, this won't be a canonical type
2816   // either, so fill in the canonical type field.
2817   QualType Canonical;
2818   if (!SpelledAsLValue || InnerRef || !T.isCanonical()) {
2819     QualType PointeeType = (InnerRef ? InnerRef->getPointeeType() : T);
2820     Canonical = getLValueReferenceType(getCanonicalType(PointeeType));
2821 
2822     // Get the new insert position for the node we care about.
2823     LValueReferenceType *NewIP =
2824       LValueReferenceTypes.FindNodeOrInsertPos(ID, InsertPos);
2825     assert(!NewIP && "Shouldn't be in the map!"); (void)NewIP;
2826   }
2827 
2828   LValueReferenceType *New
2829     = new (*this, TypeAlignment) LValueReferenceType(T, Canonical,
2830                                                      SpelledAsLValue);
2831   Types.push_back(New);
2832   LValueReferenceTypes.InsertNode(New, InsertPos);
2833 
2834   return QualType(New, 0);
2835 }
2836 
2837 /// getRValueReferenceType - Return the uniqued reference to the type for an
2838 /// rvalue reference to the specified type.
2839 QualType ASTContext::getRValueReferenceType(QualType T) const {
2840   // Unique pointers, to guarantee there is only one pointer of a particular
2841   // structure.
2842   llvm::FoldingSetNodeID ID;
2843   ReferenceType::Profile(ID, T, false);
2844 
2845   void *InsertPos = nullptr;
2846   if (RValueReferenceType *RT =
2847         RValueReferenceTypes.FindNodeOrInsertPos(ID, InsertPos))
2848     return QualType(RT, 0);
2849 
2850   const ReferenceType *InnerRef = T->getAs<ReferenceType>();
2851 
2852   // If the referencee type isn't canonical, this won't be a canonical type
2853   // either, so fill in the canonical type field.
2854   QualType Canonical;
2855   if (InnerRef || !T.isCanonical()) {
2856     QualType PointeeType = (InnerRef ? InnerRef->getPointeeType() : T);
2857     Canonical = getRValueReferenceType(getCanonicalType(PointeeType));
2858 
2859     // Get the new insert position for the node we care about.
2860     RValueReferenceType *NewIP =
2861       RValueReferenceTypes.FindNodeOrInsertPos(ID, InsertPos);
2862     assert(!NewIP && "Shouldn't be in the map!"); (void)NewIP;
2863   }
2864 
2865   RValueReferenceType *New
2866     = new (*this, TypeAlignment) RValueReferenceType(T, Canonical);
2867   Types.push_back(New);
2868   RValueReferenceTypes.InsertNode(New, InsertPos);
2869   return QualType(New, 0);
2870 }
2871 
2872 /// getMemberPointerType - Return the uniqued reference to the type for a
2873 /// member pointer to the specified type, in the specified class.
2874 QualType ASTContext::getMemberPointerType(QualType T, const Type *Cls) const {
2875   // Unique pointers, to guarantee there is only one pointer of a particular
2876   // structure.
2877   llvm::FoldingSetNodeID ID;
2878   MemberPointerType::Profile(ID, T, Cls);
2879 
2880   void *InsertPos = nullptr;
2881   if (MemberPointerType *PT =
2882       MemberPointerTypes.FindNodeOrInsertPos(ID, InsertPos))
2883     return QualType(PT, 0);
2884 
2885   // If the pointee or class type isn't canonical, this won't be a canonical
2886   // type either, so fill in the canonical type field.
2887   QualType Canonical;
2888   if (!T.isCanonical() || !Cls->isCanonicalUnqualified()) {
2889     Canonical = getMemberPointerType(getCanonicalType(T),getCanonicalType(Cls));
2890 
2891     // Get the new insert position for the node we care about.
2892     MemberPointerType *NewIP =
2893       MemberPointerTypes.FindNodeOrInsertPos(ID, InsertPos);
2894     assert(!NewIP && "Shouldn't be in the map!"); (void)NewIP;
2895   }
2896   MemberPointerType *New
2897     = new (*this, TypeAlignment) MemberPointerType(T, Cls, Canonical);
2898   Types.push_back(New);
2899   MemberPointerTypes.InsertNode(New, InsertPos);
2900   return QualType(New, 0);
2901 }
2902 
2903 /// getConstantArrayType - Return the unique reference to the type for an
2904 /// array of the specified element type.
2905 QualType ASTContext::getConstantArrayType(QualType EltTy,
2906                                           const llvm::APInt &ArySizeIn,
2907                                           ArrayType::ArraySizeModifier ASM,
2908                                           unsigned IndexTypeQuals) const {
2909   assert((EltTy->isDependentType() ||
2910           EltTy->isIncompleteType() || EltTy->isConstantSizeType()) &&
2911          "Constant array of VLAs is illegal!");
2912 
2913   // Convert the array size into a canonical width matching the pointer size for
2914   // the target.
2915   llvm::APInt ArySize(ArySizeIn);
2916   ArySize = ArySize.zextOrTrunc(Target->getMaxPointerWidth());
2917 
2918   llvm::FoldingSetNodeID ID;
2919   ConstantArrayType::Profile(ID, EltTy, ArySize, ASM, IndexTypeQuals);
2920 
2921   void *InsertPos = nullptr;
2922   if (ConstantArrayType *ATP =
2923       ConstantArrayTypes.FindNodeOrInsertPos(ID, InsertPos))
2924     return QualType(ATP, 0);
2925 
2926   // If the element type isn't canonical or has qualifiers, this won't
2927   // be a canonical type either, so fill in the canonical type field.
2928   QualType Canon;
2929   if (!EltTy.isCanonical() || EltTy.hasLocalQualifiers()) {
2930     SplitQualType canonSplit = getCanonicalType(EltTy).split();
2931     Canon = getConstantArrayType(QualType(canonSplit.Ty, 0), ArySize,
2932                                  ASM, IndexTypeQuals);
2933     Canon = getQualifiedType(Canon, canonSplit.Quals);
2934 
2935     // Get the new insert position for the node we care about.
2936     ConstantArrayType *NewIP =
2937       ConstantArrayTypes.FindNodeOrInsertPos(ID, InsertPos);
2938     assert(!NewIP && "Shouldn't be in the map!"); (void)NewIP;
2939   }
2940 
2941   ConstantArrayType *New = new(*this,TypeAlignment)
2942     ConstantArrayType(EltTy, Canon, ArySize, ASM, IndexTypeQuals);
2943   ConstantArrayTypes.InsertNode(New, InsertPos);
2944   Types.push_back(New);
2945   return QualType(New, 0);
2946 }
2947 
2948 /// getVariableArrayDecayedType - Turns the given type, which may be
2949 /// variably-modified, into the corresponding type with all the known
2950 /// sizes replaced with [*].
2951 QualType ASTContext::getVariableArrayDecayedType(QualType type) const {
2952   // Vastly most common case.
2953   if (!type->isVariablyModifiedType()) return type;
2954 
2955   QualType result;
2956 
2957   SplitQualType split = type.getSplitDesugaredType();
2958   const Type *ty = split.Ty;
2959   switch (ty->getTypeClass()) {
2960 #define TYPE(Class, Base)
2961 #define ABSTRACT_TYPE(Class, Base)
2962 #define NON_CANONICAL_TYPE(Class, Base) case Type::Class:
2963 #include "clang/AST/TypeNodes.def"
2964     llvm_unreachable("didn't desugar past all non-canonical types?");
2965 
2966   // These types should never be variably-modified.
2967   case Type::Builtin:
2968   case Type::Complex:
2969   case Type::Vector:
2970   case Type::ExtVector:
2971   case Type::DependentSizedExtVector:
2972   case Type::DependentAddressSpace:
2973   case Type::ObjCObject:
2974   case Type::ObjCInterface:
2975   case Type::ObjCObjectPointer:
2976   case Type::Record:
2977   case Type::Enum:
2978   case Type::UnresolvedUsing:
2979   case Type::TypeOfExpr:
2980   case Type::TypeOf:
2981   case Type::Decltype:
2982   case Type::UnaryTransform:
2983   case Type::DependentName:
2984   case Type::InjectedClassName:
2985   case Type::TemplateSpecialization:
2986   case Type::DependentTemplateSpecialization:
2987   case Type::TemplateTypeParm:
2988   case Type::SubstTemplateTypeParmPack:
2989   case Type::Auto:
2990   case Type::DeducedTemplateSpecialization:
2991   case Type::PackExpansion:
2992     llvm_unreachable("type should never be variably-modified");
2993 
2994   // These types can be variably-modified but should never need to
2995   // further decay.
2996   case Type::FunctionNoProto:
2997   case Type::FunctionProto:
2998   case Type::BlockPointer:
2999   case Type::MemberPointer:
3000   case Type::Pipe:
3001     return type;
3002 
3003   // These types can be variably-modified.  All these modifications
3004   // preserve structure except as noted by comments.
3005   // TODO: if we ever care about optimizing VLAs, there are no-op
3006   // optimizations available here.
3007   case Type::Pointer:
3008     result = getPointerType(getVariableArrayDecayedType(
3009                               cast<PointerType>(ty)->getPointeeType()));
3010     break;
3011 
3012   case Type::LValueReference: {
3013     const LValueReferenceType *lv = cast<LValueReferenceType>(ty);
3014     result = getLValueReferenceType(
3015                  getVariableArrayDecayedType(lv->getPointeeType()),
3016                                     lv->isSpelledAsLValue());
3017     break;
3018   }
3019 
3020   case Type::RValueReference: {
3021     const RValueReferenceType *lv = cast<RValueReferenceType>(ty);
3022     result = getRValueReferenceType(
3023                  getVariableArrayDecayedType(lv->getPointeeType()));
3024     break;
3025   }
3026 
3027   case Type::Atomic: {
3028     const AtomicType *at = cast<AtomicType>(ty);
3029     result = getAtomicType(getVariableArrayDecayedType(at->getValueType()));
3030     break;
3031   }
3032 
3033   case Type::ConstantArray: {
3034     const ConstantArrayType *cat = cast<ConstantArrayType>(ty);
3035     result = getConstantArrayType(
3036                  getVariableArrayDecayedType(cat->getElementType()),
3037                                   cat->getSize(),
3038                                   cat->getSizeModifier(),
3039                                   cat->getIndexTypeCVRQualifiers());
3040     break;
3041   }
3042 
3043   case Type::DependentSizedArray: {
3044     const DependentSizedArrayType *dat = cast<DependentSizedArrayType>(ty);
3045     result = getDependentSizedArrayType(
3046                  getVariableArrayDecayedType(dat->getElementType()),
3047                                         dat->getSizeExpr(),
3048                                         dat->getSizeModifier(),
3049                                         dat->getIndexTypeCVRQualifiers(),
3050                                         dat->getBracketsRange());
3051     break;
3052   }
3053 
3054   // Turn incomplete types into [*] types.
3055   case Type::IncompleteArray: {
3056     const IncompleteArrayType *iat = cast<IncompleteArrayType>(ty);
3057     result = getVariableArrayType(
3058                  getVariableArrayDecayedType(iat->getElementType()),
3059                                   /*size*/ nullptr,
3060                                   ArrayType::Normal,
3061                                   iat->getIndexTypeCVRQualifiers(),
3062                                   SourceRange());
3063     break;
3064   }
3065 
3066   // Turn VLA types into [*] types.
3067   case Type::VariableArray: {
3068     const VariableArrayType *vat = cast<VariableArrayType>(ty);
3069     result = getVariableArrayType(
3070                  getVariableArrayDecayedType(vat->getElementType()),
3071                                   /*size*/ nullptr,
3072                                   ArrayType::Star,
3073                                   vat->getIndexTypeCVRQualifiers(),
3074                                   vat->getBracketsRange());
3075     break;
3076   }
3077   }
3078 
3079   // Apply the top-level qualifiers from the original.
3080   return getQualifiedType(result, split.Quals);
3081 }
3082 
3083 /// getVariableArrayType - Returns a non-unique reference to the type for a
3084 /// variable array of the specified element type.
3085 QualType ASTContext::getVariableArrayType(QualType EltTy,
3086                                           Expr *NumElts,
3087                                           ArrayType::ArraySizeModifier ASM,
3088                                           unsigned IndexTypeQuals,
3089                                           SourceRange Brackets) const {
3090   // Since we don't unique expressions, it isn't possible to unique VLA's
3091   // that have an expression provided for their size.
3092   QualType Canon;
3093 
3094   // Be sure to pull qualifiers off the element type.
3095   if (!EltTy.isCanonical() || EltTy.hasLocalQualifiers()) {
3096     SplitQualType canonSplit = getCanonicalType(EltTy).split();
3097     Canon = getVariableArrayType(QualType(canonSplit.Ty, 0), NumElts, ASM,
3098                                  IndexTypeQuals, Brackets);
3099     Canon = getQualifiedType(Canon, canonSplit.Quals);
3100   }
3101 
3102   VariableArrayType *New = new(*this, TypeAlignment)
3103     VariableArrayType(EltTy, Canon, NumElts, ASM, IndexTypeQuals, Brackets);
3104 
3105   VariableArrayTypes.push_back(New);
3106   Types.push_back(New);
3107   return QualType(New, 0);
3108 }
3109 
3110 /// getDependentSizedArrayType - Returns a non-unique reference to
3111 /// the type for a dependently-sized array of the specified element
3112 /// type.
3113 QualType ASTContext::getDependentSizedArrayType(QualType elementType,
3114                                                 Expr *numElements,
3115                                                 ArrayType::ArraySizeModifier ASM,
3116                                                 unsigned elementTypeQuals,
3117                                                 SourceRange brackets) const {
3118   assert((!numElements || numElements->isTypeDependent() ||
3119           numElements->isValueDependent()) &&
3120          "Size must be type- or value-dependent!");
3121 
3122   // Dependently-sized array types that do not have a specified number
3123   // of elements will have their sizes deduced from a dependent
3124   // initializer.  We do no canonicalization here at all, which is okay
3125   // because they can't be used in most locations.
3126   if (!numElements) {
3127     DependentSizedArrayType *newType
3128       = new (*this, TypeAlignment)
3129           DependentSizedArrayType(*this, elementType, QualType(),
3130                                   numElements, ASM, elementTypeQuals,
3131                                   brackets);
3132     Types.push_back(newType);
3133     return QualType(newType, 0);
3134   }
3135 
3136   // Otherwise, we actually build a new type every time, but we
3137   // also build a canonical type.
3138 
3139   SplitQualType canonElementType = getCanonicalType(elementType).split();
3140 
3141   void *insertPos = nullptr;
3142   llvm::FoldingSetNodeID ID;
3143   DependentSizedArrayType::Profile(ID, *this,
3144                                    QualType(canonElementType.Ty, 0),
3145                                    ASM, elementTypeQuals, numElements);
3146 
3147   // Look for an existing type with these properties.
3148   DependentSizedArrayType *canonTy =
3149     DependentSizedArrayTypes.FindNodeOrInsertPos(ID, insertPos);
3150 
3151   // If we don't have one, build one.
3152   if (!canonTy) {
3153     canonTy = new (*this, TypeAlignment)
3154       DependentSizedArrayType(*this, QualType(canonElementType.Ty, 0),
3155                               QualType(), numElements, ASM, elementTypeQuals,
3156                               brackets);
3157     DependentSizedArrayTypes.InsertNode(canonTy, insertPos);
3158     Types.push_back(canonTy);
3159   }
3160 
3161   // Apply qualifiers from the element type to the array.
3162   QualType canon = getQualifiedType(QualType(canonTy,0),
3163                                     canonElementType.Quals);
3164 
3165   // If we didn't need extra canonicalization for the element type or the size
3166   // expression, then just use that as our result.
3167   if (QualType(canonElementType.Ty, 0) == elementType &&
3168       canonTy->getSizeExpr() == numElements)
3169     return canon;
3170 
3171   // Otherwise, we need to build a type which follows the spelling
3172   // of the element type.
3173   DependentSizedArrayType *sugaredType
3174     = new (*this, TypeAlignment)
3175         DependentSizedArrayType(*this, elementType, canon, numElements,
3176                                 ASM, elementTypeQuals, brackets);
3177   Types.push_back(sugaredType);
3178   return QualType(sugaredType, 0);
3179 }
3180 
3181 QualType ASTContext::getIncompleteArrayType(QualType elementType,
3182                                             ArrayType::ArraySizeModifier ASM,
3183                                             unsigned elementTypeQuals) const {
3184   llvm::FoldingSetNodeID ID;
3185   IncompleteArrayType::Profile(ID, elementType, ASM, elementTypeQuals);
3186 
3187   void *insertPos = nullptr;
3188   if (IncompleteArrayType *iat =
3189        IncompleteArrayTypes.FindNodeOrInsertPos(ID, insertPos))
3190     return QualType(iat, 0);
3191 
3192   // If the element type isn't canonical, this won't be a canonical type
3193   // either, so fill in the canonical type field.  We also have to pull
3194   // qualifiers off the element type.
3195   QualType canon;
3196 
3197   if (!elementType.isCanonical() || elementType.hasLocalQualifiers()) {
3198     SplitQualType canonSplit = getCanonicalType(elementType).split();
3199     canon = getIncompleteArrayType(QualType(canonSplit.Ty, 0),
3200                                    ASM, elementTypeQuals);
3201     canon = getQualifiedType(canon, canonSplit.Quals);
3202 
3203     // Get the new insert position for the node we care about.
3204     IncompleteArrayType *existing =
3205       IncompleteArrayTypes.FindNodeOrInsertPos(ID, insertPos);
3206     assert(!existing && "Shouldn't be in the map!"); (void) existing;
3207   }
3208 
3209   IncompleteArrayType *newType = new (*this, TypeAlignment)
3210     IncompleteArrayType(elementType, canon, ASM, elementTypeQuals);
3211 
3212   IncompleteArrayTypes.InsertNode(newType, insertPos);
3213   Types.push_back(newType);
3214   return QualType(newType, 0);
3215 }
3216 
3217 /// getVectorType - Return the unique reference to a vector type of
3218 /// the specified element type and size. VectorType must be a built-in type.
3219 QualType ASTContext::getVectorType(QualType vecType, unsigned NumElts,
3220                                    VectorType::VectorKind VecKind) const {
3221   assert(vecType->isBuiltinType());
3222 
3223   // Check if we've already instantiated a vector of this type.
3224   llvm::FoldingSetNodeID ID;
3225   VectorType::Profile(ID, vecType, NumElts, Type::Vector, VecKind);
3226 
3227   void *InsertPos = nullptr;
3228   if (VectorType *VTP = VectorTypes.FindNodeOrInsertPos(ID, InsertPos))
3229     return QualType(VTP, 0);
3230 
3231   // If the element type isn't canonical, this won't be a canonical type either,
3232   // so fill in the canonical type field.
3233   QualType Canonical;
3234   if (!vecType.isCanonical()) {
3235     Canonical = getVectorType(getCanonicalType(vecType), NumElts, VecKind);
3236 
3237     // Get the new insert position for the node we care about.
3238     VectorType *NewIP = VectorTypes.FindNodeOrInsertPos(ID, InsertPos);
3239     assert(!NewIP && "Shouldn't be in the map!"); (void)NewIP;
3240   }
3241   VectorType *New = new (*this, TypeAlignment)
3242     VectorType(vecType, NumElts, Canonical, VecKind);
3243   VectorTypes.InsertNode(New, InsertPos);
3244   Types.push_back(New);
3245   return QualType(New, 0);
3246 }
3247 
3248 /// getExtVectorType - Return the unique reference to an extended vector type of
3249 /// the specified element type and size. VectorType must be a built-in type.
3250 QualType
3251 ASTContext::getExtVectorType(QualType vecType, unsigned NumElts) const {
3252   assert(vecType->isBuiltinType() || vecType->isDependentType());
3253 
3254   // Check if we've already instantiated a vector of this type.
3255   llvm::FoldingSetNodeID ID;
3256   VectorType::Profile(ID, vecType, NumElts, Type::ExtVector,
3257                       VectorType::GenericVector);
3258   void *InsertPos = nullptr;
3259   if (VectorType *VTP = VectorTypes.FindNodeOrInsertPos(ID, InsertPos))
3260     return QualType(VTP, 0);
3261 
3262   // If the element type isn't canonical, this won't be a canonical type either,
3263   // so fill in the canonical type field.
3264   QualType Canonical;
3265   if (!vecType.isCanonical()) {
3266     Canonical = getExtVectorType(getCanonicalType(vecType), NumElts);
3267 
3268     // Get the new insert position for the node we care about.
3269     VectorType *NewIP = VectorTypes.FindNodeOrInsertPos(ID, InsertPos);
3270     assert(!NewIP && "Shouldn't be in the map!"); (void)NewIP;
3271   }
3272   ExtVectorType *New = new (*this, TypeAlignment)
3273     ExtVectorType(vecType, NumElts, Canonical);
3274   VectorTypes.InsertNode(New, InsertPos);
3275   Types.push_back(New);
3276   return QualType(New, 0);
3277 }
3278 
3279 QualType
3280 ASTContext::getDependentSizedExtVectorType(QualType vecType,
3281                                            Expr *SizeExpr,
3282                                            SourceLocation AttrLoc) const {
3283   llvm::FoldingSetNodeID ID;
3284   DependentSizedExtVectorType::Profile(ID, *this, getCanonicalType(vecType),
3285                                        SizeExpr);
3286 
3287   void *InsertPos = nullptr;
3288   DependentSizedExtVectorType *Canon
3289     = DependentSizedExtVectorTypes.FindNodeOrInsertPos(ID, InsertPos);
3290   DependentSizedExtVectorType *New;
3291   if (Canon) {
3292     // We already have a canonical version of this array type; use it as
3293     // the canonical type for a newly-built type.
3294     New = new (*this, TypeAlignment)
3295       DependentSizedExtVectorType(*this, vecType, QualType(Canon, 0),
3296                                   SizeExpr, AttrLoc);
3297   } else {
3298     QualType CanonVecTy = getCanonicalType(vecType);
3299     if (CanonVecTy == vecType) {
3300       New = new (*this, TypeAlignment)
3301         DependentSizedExtVectorType(*this, vecType, QualType(), SizeExpr,
3302                                     AttrLoc);
3303 
3304       DependentSizedExtVectorType *CanonCheck
3305         = DependentSizedExtVectorTypes.FindNodeOrInsertPos(ID, InsertPos);
3306       assert(!CanonCheck && "Dependent-sized ext_vector canonical type broken");
3307       (void)CanonCheck;
3308       DependentSizedExtVectorTypes.InsertNode(New, InsertPos);
3309     } else {
3310       QualType Canon = getDependentSizedExtVectorType(CanonVecTy, SizeExpr,
3311                                                       SourceLocation());
3312       New = new (*this, TypeAlignment)
3313         DependentSizedExtVectorType(*this, vecType, Canon, SizeExpr, AttrLoc);
3314     }
3315   }
3316 
3317   Types.push_back(New);
3318   return QualType(New, 0);
3319 }
3320 
3321 QualType ASTContext::getDependentAddressSpaceType(QualType PointeeType,
3322                                                   Expr *AddrSpaceExpr,
3323                                                   SourceLocation AttrLoc) const {
3324   assert(AddrSpaceExpr->isInstantiationDependent());
3325 
3326   QualType canonPointeeType = getCanonicalType(PointeeType);
3327 
3328   void *insertPos = nullptr;
3329   llvm::FoldingSetNodeID ID;
3330   DependentAddressSpaceType::Profile(ID, *this, canonPointeeType,
3331                                      AddrSpaceExpr);
3332 
3333   DependentAddressSpaceType *canonTy =
3334     DependentAddressSpaceTypes.FindNodeOrInsertPos(ID, insertPos);
3335 
3336   if (!canonTy) {
3337     canonTy = new (*this, TypeAlignment)
3338       DependentAddressSpaceType(*this, canonPointeeType,
3339                                 QualType(), AddrSpaceExpr, AttrLoc);
3340     DependentAddressSpaceTypes.InsertNode(canonTy, insertPos);
3341     Types.push_back(canonTy);
3342   }
3343 
3344   if (canonPointeeType == PointeeType &&
3345       canonTy->getAddrSpaceExpr() == AddrSpaceExpr)
3346     return QualType(canonTy, 0);
3347 
3348   DependentAddressSpaceType *sugaredType
3349     = new (*this, TypeAlignment)
3350         DependentAddressSpaceType(*this, PointeeType, QualType(canonTy, 0),
3351                                   AddrSpaceExpr, AttrLoc);
3352   Types.push_back(sugaredType);
3353   return QualType(sugaredType, 0);
3354 }
3355 
3356 /// \brief Determine whether \p T is canonical as the result type of a function.
3357 static bool isCanonicalResultType(QualType T) {
3358   return T.isCanonical() &&
3359          (T.getObjCLifetime() == Qualifiers::OCL_None ||
3360           T.getObjCLifetime() == Qualifiers::OCL_ExplicitNone);
3361 }
3362 
3363 /// getFunctionNoProtoType - Return a K&R style C function type like 'int()'.
3364 QualType
3365 ASTContext::getFunctionNoProtoType(QualType ResultTy,
3366                                    const FunctionType::ExtInfo &Info) const {
3367   // Unique functions, to guarantee there is only one function of a particular
3368   // structure.
3369   llvm::FoldingSetNodeID ID;
3370   FunctionNoProtoType::Profile(ID, ResultTy, Info);
3371 
3372   void *InsertPos = nullptr;
3373   if (FunctionNoProtoType *FT =
3374         FunctionNoProtoTypes.FindNodeOrInsertPos(ID, InsertPos))
3375     return QualType(FT, 0);
3376 
3377   QualType Canonical;
3378   if (!isCanonicalResultType(ResultTy)) {
3379     Canonical =
3380       getFunctionNoProtoType(getCanonicalFunctionResultType(ResultTy), Info);
3381 
3382     // Get the new insert position for the node we care about.
3383     FunctionNoProtoType *NewIP =
3384       FunctionNoProtoTypes.FindNodeOrInsertPos(ID, InsertPos);
3385     assert(!NewIP && "Shouldn't be in the map!"); (void)NewIP;
3386   }
3387 
3388   FunctionNoProtoType *New = new (*this, TypeAlignment)
3389     FunctionNoProtoType(ResultTy, Canonical, Info);
3390   Types.push_back(New);
3391   FunctionNoProtoTypes.InsertNode(New, InsertPos);
3392   return QualType(New, 0);
3393 }
3394 
3395 CanQualType
3396 ASTContext::getCanonicalFunctionResultType(QualType ResultType) const {
3397   CanQualType CanResultType = getCanonicalType(ResultType);
3398 
3399   // Canonical result types do not have ARC lifetime qualifiers.
3400   if (CanResultType.getQualifiers().hasObjCLifetime()) {
3401     Qualifiers Qs = CanResultType.getQualifiers();
3402     Qs.removeObjCLifetime();
3403     return CanQualType::CreateUnsafe(
3404              getQualifiedType(CanResultType.getUnqualifiedType(), Qs));
3405   }
3406 
3407   return CanResultType;
3408 }
3409 
3410 static bool isCanonicalExceptionSpecification(
3411     const FunctionProtoType::ExceptionSpecInfo &ESI, bool NoexceptInType) {
3412   if (ESI.Type == EST_None)
3413     return true;
3414   if (!NoexceptInType)
3415     return false;
3416 
3417   // C++17 onwards: exception specification is part of the type, as a simple
3418   // boolean "can this function type throw".
3419   if (ESI.Type == EST_BasicNoexcept)
3420     return true;
3421 
3422   // A dynamic exception specification is canonical if it only contains pack
3423   // expansions (so we can't tell whether it's non-throwing) and all its
3424   // contained types are canonical.
3425   if (ESI.Type == EST_Dynamic) {
3426     bool AnyPackExpansions = false;
3427     for (QualType ET : ESI.Exceptions) {
3428       if (!ET.isCanonical())
3429         return false;
3430       if (ET->getAs<PackExpansionType>())
3431         AnyPackExpansions = true;
3432     }
3433     return AnyPackExpansions;
3434   }
3435 
3436   // A noexcept(expr) specification is (possibly) canonical if expr is
3437   // value-dependent.
3438   if (ESI.Type == EST_ComputedNoexcept)
3439     return ESI.NoexceptExpr && ESI.NoexceptExpr->isValueDependent();
3440 
3441   return false;
3442 }
3443 
3444 QualType ASTContext::getFunctionTypeInternal(
3445     QualType ResultTy, ArrayRef<QualType> ArgArray,
3446     const FunctionProtoType::ExtProtoInfo &EPI, bool OnlyWantCanonical) const {
3447   size_t NumArgs = ArgArray.size();
3448 
3449   // Unique functions, to guarantee there is only one function of a particular
3450   // structure.
3451   llvm::FoldingSetNodeID ID;
3452   FunctionProtoType::Profile(ID, ResultTy, ArgArray.begin(), NumArgs, EPI,
3453                              *this, true);
3454 
3455   QualType Canonical;
3456   bool Unique = false;
3457 
3458   void *InsertPos = nullptr;
3459   if (FunctionProtoType *FPT =
3460         FunctionProtoTypes.FindNodeOrInsertPos(ID, InsertPos)) {
3461     QualType Existing = QualType(FPT, 0);
3462 
3463     // If we find a pre-existing equivalent FunctionProtoType, we can just reuse
3464     // it so long as our exception specification doesn't contain a dependent
3465     // noexcept expression, or we're just looking for a canonical type.
3466     // Otherwise, we're going to need to create a type
3467     // sugar node to hold the concrete expression.
3468     if (OnlyWantCanonical || EPI.ExceptionSpec.Type != EST_ComputedNoexcept ||
3469         EPI.ExceptionSpec.NoexceptExpr == FPT->getNoexceptExpr())
3470       return Existing;
3471 
3472     // We need a new type sugar node for this one, to hold the new noexcept
3473     // expression. We do no canonicalization here, but that's OK since we don't
3474     // expect to see the same noexcept expression much more than once.
3475     Canonical = getCanonicalType(Existing);
3476     Unique = true;
3477   }
3478 
3479   bool NoexceptInType = getLangOpts().CPlusPlus17;
3480   bool IsCanonicalExceptionSpec =
3481       isCanonicalExceptionSpecification(EPI.ExceptionSpec, NoexceptInType);
3482 
3483   // Determine whether the type being created is already canonical or not.
3484   bool isCanonical = !Unique && IsCanonicalExceptionSpec &&
3485                      isCanonicalResultType(ResultTy) && !EPI.HasTrailingReturn;
3486   for (unsigned i = 0; i != NumArgs && isCanonical; ++i)
3487     if (!ArgArray[i].isCanonicalAsParam())
3488       isCanonical = false;
3489 
3490   if (OnlyWantCanonical)
3491     assert(isCanonical &&
3492            "given non-canonical parameters constructing canonical type");
3493 
3494   // If this type isn't canonical, get the canonical version of it if we don't
3495   // already have it. The exception spec is only partially part of the
3496   // canonical type, and only in C++17 onwards.
3497   if (!isCanonical && Canonical.isNull()) {
3498     SmallVector<QualType, 16> CanonicalArgs;
3499     CanonicalArgs.reserve(NumArgs);
3500     for (unsigned i = 0; i != NumArgs; ++i)
3501       CanonicalArgs.push_back(getCanonicalParamType(ArgArray[i]));
3502 
3503     llvm::SmallVector<QualType, 8> ExceptionTypeStorage;
3504     FunctionProtoType::ExtProtoInfo CanonicalEPI = EPI;
3505     CanonicalEPI.HasTrailingReturn = false;
3506 
3507     if (IsCanonicalExceptionSpec) {
3508       // Exception spec is already OK.
3509     } else if (NoexceptInType) {
3510       switch (EPI.ExceptionSpec.Type) {
3511       case EST_Unparsed: case EST_Unevaluated: case EST_Uninstantiated:
3512         // We don't know yet. It shouldn't matter what we pick here; no-one
3513         // should ever look at this.
3514         LLVM_FALLTHROUGH;
3515       case EST_None: case EST_MSAny:
3516         CanonicalEPI.ExceptionSpec.Type = EST_None;
3517         break;
3518 
3519         // A dynamic exception specification is almost always "not noexcept",
3520         // with the exception that a pack expansion might expand to no types.
3521       case EST_Dynamic: {
3522         bool AnyPacks = false;
3523         for (QualType ET : EPI.ExceptionSpec.Exceptions) {
3524           if (ET->getAs<PackExpansionType>())
3525             AnyPacks = true;
3526           ExceptionTypeStorage.push_back(getCanonicalType(ET));
3527         }
3528         if (!AnyPacks)
3529           CanonicalEPI.ExceptionSpec.Type = EST_None;
3530         else {
3531           CanonicalEPI.ExceptionSpec.Type = EST_Dynamic;
3532           CanonicalEPI.ExceptionSpec.Exceptions = ExceptionTypeStorage;
3533         }
3534         break;
3535       }
3536 
3537       case EST_DynamicNone: case EST_BasicNoexcept:
3538         CanonicalEPI.ExceptionSpec.Type = EST_BasicNoexcept;
3539         break;
3540 
3541       case EST_ComputedNoexcept:
3542         llvm::APSInt Value(1);
3543         auto *E = CanonicalEPI.ExceptionSpec.NoexceptExpr;
3544         if (!E || !E->isIntegerConstantExpr(Value, *this, nullptr,
3545                                             /*IsEvaluated*/false)) {
3546           // This noexcept specification is invalid.
3547           // FIXME: Should this be able to happen?
3548           CanonicalEPI.ExceptionSpec.Type = EST_None;
3549           break;
3550         }
3551 
3552         CanonicalEPI.ExceptionSpec.Type =
3553             Value.getBoolValue() ? EST_BasicNoexcept : EST_None;
3554         break;
3555       }
3556     } else {
3557       CanonicalEPI.ExceptionSpec = FunctionProtoType::ExceptionSpecInfo();
3558     }
3559 
3560     // Adjust the canonical function result type.
3561     CanQualType CanResultTy = getCanonicalFunctionResultType(ResultTy);
3562     Canonical =
3563         getFunctionTypeInternal(CanResultTy, CanonicalArgs, CanonicalEPI, true);
3564 
3565     // Get the new insert position for the node we care about.
3566     FunctionProtoType *NewIP =
3567       FunctionProtoTypes.FindNodeOrInsertPos(ID, InsertPos);
3568     assert(!NewIP && "Shouldn't be in the map!"); (void)NewIP;
3569   }
3570 
3571   // FunctionProtoType objects are allocated with extra bytes after
3572   // them for three variable size arrays at the end:
3573   //  - parameter types
3574   //  - exception types
3575   //  - extended parameter information
3576   // Instead of the exception types, there could be a noexcept
3577   // expression, or information used to resolve the exception
3578   // specification.
3579   size_t Size = sizeof(FunctionProtoType) +
3580                 NumArgs * sizeof(QualType);
3581 
3582   if (EPI.ExceptionSpec.Type == EST_Dynamic) {
3583     Size += EPI.ExceptionSpec.Exceptions.size() * sizeof(QualType);
3584   } else if (EPI.ExceptionSpec.Type == EST_ComputedNoexcept) {
3585     Size += sizeof(Expr*);
3586   } else if (EPI.ExceptionSpec.Type == EST_Uninstantiated) {
3587     Size += 2 * sizeof(FunctionDecl*);
3588   } else if (EPI.ExceptionSpec.Type == EST_Unevaluated) {
3589     Size += sizeof(FunctionDecl*);
3590   }
3591 
3592   // Put the ExtParameterInfos last.  If all were equal, it would make
3593   // more sense to put these before the exception specification, because
3594   // it's much easier to skip past them compared to the elaborate switch
3595   // required to skip the exception specification.  However, all is not
3596   // equal; ExtParameterInfos are used to model very uncommon features,
3597   // and it's better not to burden the more common paths.
3598   if (EPI.ExtParameterInfos) {
3599     Size += NumArgs * sizeof(FunctionProtoType::ExtParameterInfo);
3600   }
3601 
3602   FunctionProtoType *FTP = (FunctionProtoType*) Allocate(Size, TypeAlignment);
3603   FunctionProtoType::ExtProtoInfo newEPI = EPI;
3604   new (FTP) FunctionProtoType(ResultTy, ArgArray, Canonical, newEPI);
3605   Types.push_back(FTP);
3606   if (!Unique)
3607     FunctionProtoTypes.InsertNode(FTP, InsertPos);
3608   return QualType(FTP, 0);
3609 }
3610 
3611 QualType ASTContext::getPipeType(QualType T, bool ReadOnly) const {
3612   llvm::FoldingSetNodeID ID;
3613   PipeType::Profile(ID, T, ReadOnly);
3614 
3615   void *InsertPos = nullptr;
3616   if (PipeType *PT = PipeTypes.FindNodeOrInsertPos(ID, InsertPos))
3617     return QualType(PT, 0);
3618 
3619   // If the pipe element type isn't canonical, this won't be a canonical type
3620   // either, so fill in the canonical type field.
3621   QualType Canonical;
3622   if (!T.isCanonical()) {
3623     Canonical = getPipeType(getCanonicalType(T), ReadOnly);
3624 
3625     // Get the new insert position for the node we care about.
3626     PipeType *NewIP = PipeTypes.FindNodeOrInsertPos(ID, InsertPos);
3627     assert(!NewIP && "Shouldn't be in the map!");
3628     (void)NewIP;
3629   }
3630   PipeType *New = new (*this, TypeAlignment) PipeType(T, Canonical, ReadOnly);
3631   Types.push_back(New);
3632   PipeTypes.InsertNode(New, InsertPos);
3633   return QualType(New, 0);
3634 }
3635 
3636 QualType ASTContext::getReadPipeType(QualType T) const {
3637   return getPipeType(T, true);
3638 }
3639 
3640 QualType ASTContext::getWritePipeType(QualType T) const {
3641   return getPipeType(T, false);
3642 }
3643 
3644 #ifndef NDEBUG
3645 static bool NeedsInjectedClassNameType(const RecordDecl *D) {
3646   if (!isa<CXXRecordDecl>(D)) return false;
3647   const CXXRecordDecl *RD = cast<CXXRecordDecl>(D);
3648   if (isa<ClassTemplatePartialSpecializationDecl>(RD))
3649     return true;
3650   if (RD->getDescribedClassTemplate() &&
3651       !isa<ClassTemplateSpecializationDecl>(RD))
3652     return true;
3653   return false;
3654 }
3655 #endif
3656 
3657 /// getInjectedClassNameType - Return the unique reference to the
3658 /// injected class name type for the specified templated declaration.
3659 QualType ASTContext::getInjectedClassNameType(CXXRecordDecl *Decl,
3660                                               QualType TST) const {
3661   assert(NeedsInjectedClassNameType(Decl));
3662   if (Decl->TypeForDecl) {
3663     assert(isa<InjectedClassNameType>(Decl->TypeForDecl));
3664   } else if (CXXRecordDecl *PrevDecl = Decl->getPreviousDecl()) {
3665     assert(PrevDecl->TypeForDecl && "previous declaration has no type");
3666     Decl->TypeForDecl = PrevDecl->TypeForDecl;
3667     assert(isa<InjectedClassNameType>(Decl->TypeForDecl));
3668   } else {
3669     Type *newType =
3670       new (*this, TypeAlignment) InjectedClassNameType(Decl, TST);
3671     Decl->TypeForDecl = newType;
3672     Types.push_back(newType);
3673   }
3674   return QualType(Decl->TypeForDecl, 0);
3675 }
3676 
3677 /// getTypeDeclType - Return the unique reference to the type for the
3678 /// specified type declaration.
3679 QualType ASTContext::getTypeDeclTypeSlow(const TypeDecl *Decl) const {
3680   assert(Decl && "Passed null for Decl param");
3681   assert(!Decl->TypeForDecl && "TypeForDecl present in slow case");
3682 
3683   if (const TypedefNameDecl *Typedef = dyn_cast<TypedefNameDecl>(Decl))
3684     return getTypedefType(Typedef);
3685 
3686   assert(!isa<TemplateTypeParmDecl>(Decl) &&
3687          "Template type parameter types are always available.");
3688 
3689   if (const RecordDecl *Record = dyn_cast<RecordDecl>(Decl)) {
3690     assert(Record->isFirstDecl() && "struct/union has previous declaration");
3691     assert(!NeedsInjectedClassNameType(Record));
3692     return getRecordType(Record);
3693   } else if (const EnumDecl *Enum = dyn_cast<EnumDecl>(Decl)) {
3694     assert(Enum->isFirstDecl() && "enum has previous declaration");
3695     return getEnumType(Enum);
3696   } else if (const UnresolvedUsingTypenameDecl *Using =
3697                dyn_cast<UnresolvedUsingTypenameDecl>(Decl)) {
3698     Type *newType = new (*this, TypeAlignment) UnresolvedUsingType(Using);
3699     Decl->TypeForDecl = newType;
3700     Types.push_back(newType);
3701   } else
3702     llvm_unreachable("TypeDecl without a type?");
3703 
3704   return QualType(Decl->TypeForDecl, 0);
3705 }
3706 
3707 /// getTypedefType - Return the unique reference to the type for the
3708 /// specified typedef name decl.
3709 QualType
3710 ASTContext::getTypedefType(const TypedefNameDecl *Decl,
3711                            QualType Canonical) const {
3712   if (Decl->TypeForDecl) return QualType(Decl->TypeForDecl, 0);
3713 
3714   if (Canonical.isNull())
3715     Canonical = getCanonicalType(Decl->getUnderlyingType());
3716   TypedefType *newType = new(*this, TypeAlignment)
3717     TypedefType(Type::Typedef, Decl, Canonical);
3718   Decl->TypeForDecl = newType;
3719   Types.push_back(newType);
3720   return QualType(newType, 0);
3721 }
3722 
3723 QualType ASTContext::getRecordType(const RecordDecl *Decl) const {
3724   if (Decl->TypeForDecl) return QualType(Decl->TypeForDecl, 0);
3725 
3726   if (const RecordDecl *PrevDecl = Decl->getPreviousDecl())
3727     if (PrevDecl->TypeForDecl)
3728       return QualType(Decl->TypeForDecl = PrevDecl->TypeForDecl, 0);
3729 
3730   RecordType *newType = new (*this, TypeAlignment) RecordType(Decl);
3731   Decl->TypeForDecl = newType;
3732   Types.push_back(newType);
3733   return QualType(newType, 0);
3734 }
3735 
3736 QualType ASTContext::getEnumType(const EnumDecl *Decl) const {
3737   if (Decl->TypeForDecl) return QualType(Decl->TypeForDecl, 0);
3738 
3739   if (const EnumDecl *PrevDecl = Decl->getPreviousDecl())
3740     if (PrevDecl->TypeForDecl)
3741       return QualType(Decl->TypeForDecl = PrevDecl->TypeForDecl, 0);
3742 
3743   EnumType *newType = new (*this, TypeAlignment) EnumType(Decl);
3744   Decl->TypeForDecl = newType;
3745   Types.push_back(newType);
3746   return QualType(newType, 0);
3747 }
3748 
3749 QualType ASTContext::getAttributedType(AttributedType::Kind attrKind,
3750                                        QualType modifiedType,
3751                                        QualType equivalentType) {
3752   llvm::FoldingSetNodeID id;
3753   AttributedType::Profile(id, attrKind, modifiedType, equivalentType);
3754 
3755   void *insertPos = nullptr;
3756   AttributedType *type = AttributedTypes.FindNodeOrInsertPos(id, insertPos);
3757   if (type) return QualType(type, 0);
3758 
3759   QualType canon = getCanonicalType(equivalentType);
3760   type = new (*this, TypeAlignment)
3761            AttributedType(canon, attrKind, modifiedType, equivalentType);
3762 
3763   Types.push_back(type);
3764   AttributedTypes.InsertNode(type, insertPos);
3765 
3766   return QualType(type, 0);
3767 }
3768 
3769 /// \brief Retrieve a substitution-result type.
3770 QualType
3771 ASTContext::getSubstTemplateTypeParmType(const TemplateTypeParmType *Parm,
3772                                          QualType Replacement) const {
3773   assert(Replacement.isCanonical()
3774          && "replacement types must always be canonical");
3775 
3776   llvm::FoldingSetNodeID ID;
3777   SubstTemplateTypeParmType::Profile(ID, Parm, Replacement);
3778   void *InsertPos = nullptr;
3779   SubstTemplateTypeParmType *SubstParm
3780     = SubstTemplateTypeParmTypes.FindNodeOrInsertPos(ID, InsertPos);
3781 
3782   if (!SubstParm) {
3783     SubstParm = new (*this, TypeAlignment)
3784       SubstTemplateTypeParmType(Parm, Replacement);
3785     Types.push_back(SubstParm);
3786     SubstTemplateTypeParmTypes.InsertNode(SubstParm, InsertPos);
3787   }
3788 
3789   return QualType(SubstParm, 0);
3790 }
3791 
3792 /// \brief Retrieve a
3793 QualType ASTContext::getSubstTemplateTypeParmPackType(
3794                                           const TemplateTypeParmType *Parm,
3795                                               const TemplateArgument &ArgPack) {
3796 #ifndef NDEBUG
3797   for (const auto &P : ArgPack.pack_elements()) {
3798     assert(P.getKind() == TemplateArgument::Type &&"Pack contains a non-type");
3799     assert(P.getAsType().isCanonical() && "Pack contains non-canonical type");
3800   }
3801 #endif
3802 
3803   llvm::FoldingSetNodeID ID;
3804   SubstTemplateTypeParmPackType::Profile(ID, Parm, ArgPack);
3805   void *InsertPos = nullptr;
3806   if (SubstTemplateTypeParmPackType *SubstParm
3807         = SubstTemplateTypeParmPackTypes.FindNodeOrInsertPos(ID, InsertPos))
3808     return QualType(SubstParm, 0);
3809 
3810   QualType Canon;
3811   if (!Parm->isCanonicalUnqualified()) {
3812     Canon = getCanonicalType(QualType(Parm, 0));
3813     Canon = getSubstTemplateTypeParmPackType(cast<TemplateTypeParmType>(Canon),
3814                                              ArgPack);
3815     SubstTemplateTypeParmPackTypes.FindNodeOrInsertPos(ID, InsertPos);
3816   }
3817 
3818   SubstTemplateTypeParmPackType *SubstParm
3819     = new (*this, TypeAlignment) SubstTemplateTypeParmPackType(Parm, Canon,
3820                                                                ArgPack);
3821   Types.push_back(SubstParm);
3822   SubstTemplateTypeParmPackTypes.InsertNode(SubstParm, InsertPos);
3823   return QualType(SubstParm, 0);
3824 }
3825 
3826 /// \brief Retrieve the template type parameter type for a template
3827 /// parameter or parameter pack with the given depth, index, and (optionally)
3828 /// name.
3829 QualType ASTContext::getTemplateTypeParmType(unsigned Depth, unsigned Index,
3830                                              bool ParameterPack,
3831                                              TemplateTypeParmDecl *TTPDecl) const {
3832   llvm::FoldingSetNodeID ID;
3833   TemplateTypeParmType::Profile(ID, Depth, Index, ParameterPack, TTPDecl);
3834   void *InsertPos = nullptr;
3835   TemplateTypeParmType *TypeParm
3836     = TemplateTypeParmTypes.FindNodeOrInsertPos(ID, InsertPos);
3837 
3838   if (TypeParm)
3839     return QualType(TypeParm, 0);
3840 
3841   if (TTPDecl) {
3842     QualType Canon = getTemplateTypeParmType(Depth, Index, ParameterPack);
3843     TypeParm = new (*this, TypeAlignment) TemplateTypeParmType(TTPDecl, Canon);
3844 
3845     TemplateTypeParmType *TypeCheck
3846       = TemplateTypeParmTypes.FindNodeOrInsertPos(ID, InsertPos);
3847     assert(!TypeCheck && "Template type parameter canonical type broken");
3848     (void)TypeCheck;
3849   } else
3850     TypeParm = new (*this, TypeAlignment)
3851       TemplateTypeParmType(Depth, Index, ParameterPack);
3852 
3853   Types.push_back(TypeParm);
3854   TemplateTypeParmTypes.InsertNode(TypeParm, InsertPos);
3855 
3856   return QualType(TypeParm, 0);
3857 }
3858 
3859 TypeSourceInfo *
3860 ASTContext::getTemplateSpecializationTypeInfo(TemplateName Name,
3861                                               SourceLocation NameLoc,
3862                                         const TemplateArgumentListInfo &Args,
3863                                               QualType Underlying) const {
3864   assert(!Name.getAsDependentTemplateName() &&
3865          "No dependent template names here!");
3866   QualType TST = getTemplateSpecializationType(Name, Args, Underlying);
3867 
3868   TypeSourceInfo *DI = CreateTypeSourceInfo(TST);
3869   TemplateSpecializationTypeLoc TL =
3870       DI->getTypeLoc().castAs<TemplateSpecializationTypeLoc>();
3871   TL.setTemplateKeywordLoc(SourceLocation());
3872   TL.setTemplateNameLoc(NameLoc);
3873   TL.setLAngleLoc(Args.getLAngleLoc());
3874   TL.setRAngleLoc(Args.getRAngleLoc());
3875   for (unsigned i = 0, e = TL.getNumArgs(); i != e; ++i)
3876     TL.setArgLocInfo(i, Args[i].getLocInfo());
3877   return DI;
3878 }
3879 
3880 QualType
3881 ASTContext::getTemplateSpecializationType(TemplateName Template,
3882                                           const TemplateArgumentListInfo &Args,
3883                                           QualType Underlying) const {
3884   assert(!Template.getAsDependentTemplateName() &&
3885          "No dependent template names here!");
3886 
3887   SmallVector<TemplateArgument, 4> ArgVec;
3888   ArgVec.reserve(Args.size());
3889   for (const TemplateArgumentLoc &Arg : Args.arguments())
3890     ArgVec.push_back(Arg.getArgument());
3891 
3892   return getTemplateSpecializationType(Template, ArgVec, Underlying);
3893 }
3894 
3895 #ifndef NDEBUG
3896 static bool hasAnyPackExpansions(ArrayRef<TemplateArgument> Args) {
3897   for (const TemplateArgument &Arg : Args)
3898     if (Arg.isPackExpansion())
3899       return true;
3900 
3901   return true;
3902 }
3903 #endif
3904 
3905 QualType
3906 ASTContext::getTemplateSpecializationType(TemplateName Template,
3907                                           ArrayRef<TemplateArgument> Args,
3908                                           QualType Underlying) const {
3909   assert(!Template.getAsDependentTemplateName() &&
3910          "No dependent template names here!");
3911   // Look through qualified template names.
3912   if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName())
3913     Template = TemplateName(QTN->getTemplateDecl());
3914 
3915   bool IsTypeAlias =
3916     Template.getAsTemplateDecl() &&
3917     isa<TypeAliasTemplateDecl>(Template.getAsTemplateDecl());
3918   QualType CanonType;
3919   if (!Underlying.isNull())
3920     CanonType = getCanonicalType(Underlying);
3921   else {
3922     // We can get here with an alias template when the specialization contains
3923     // a pack expansion that does not match up with a parameter pack.
3924     assert((!IsTypeAlias || hasAnyPackExpansions(Args)) &&
3925            "Caller must compute aliased type");
3926     IsTypeAlias = false;
3927     CanonType = getCanonicalTemplateSpecializationType(Template, Args);
3928   }
3929 
3930   // Allocate the (non-canonical) template specialization type, but don't
3931   // try to unique it: these types typically have location information that
3932   // we don't unique and don't want to lose.
3933   void *Mem = Allocate(sizeof(TemplateSpecializationType) +
3934                        sizeof(TemplateArgument) * Args.size() +
3935                        (IsTypeAlias? sizeof(QualType) : 0),
3936                        TypeAlignment);
3937   TemplateSpecializationType *Spec
3938     = new (Mem) TemplateSpecializationType(Template, Args, CanonType,
3939                                          IsTypeAlias ? Underlying : QualType());
3940 
3941   Types.push_back(Spec);
3942   return QualType(Spec, 0);
3943 }
3944 
3945 QualType ASTContext::getCanonicalTemplateSpecializationType(
3946     TemplateName Template, ArrayRef<TemplateArgument> Args) const {
3947   assert(!Template.getAsDependentTemplateName() &&
3948          "No dependent template names here!");
3949 
3950   // Look through qualified template names.
3951   if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName())
3952     Template = TemplateName(QTN->getTemplateDecl());
3953 
3954   // Build the canonical template specialization type.
3955   TemplateName CanonTemplate = getCanonicalTemplateName(Template);
3956   SmallVector<TemplateArgument, 4> CanonArgs;
3957   unsigned NumArgs = Args.size();
3958   CanonArgs.reserve(NumArgs);
3959   for (const TemplateArgument &Arg : Args)
3960     CanonArgs.push_back(getCanonicalTemplateArgument(Arg));
3961 
3962   // Determine whether this canonical template specialization type already
3963   // exists.
3964   llvm::FoldingSetNodeID ID;
3965   TemplateSpecializationType::Profile(ID, CanonTemplate,
3966                                       CanonArgs, *this);
3967 
3968   void *InsertPos = nullptr;
3969   TemplateSpecializationType *Spec
3970     = TemplateSpecializationTypes.FindNodeOrInsertPos(ID, InsertPos);
3971 
3972   if (!Spec) {
3973     // Allocate a new canonical template specialization type.
3974     void *Mem = Allocate((sizeof(TemplateSpecializationType) +
3975                           sizeof(TemplateArgument) * NumArgs),
3976                          TypeAlignment);
3977     Spec = new (Mem) TemplateSpecializationType(CanonTemplate,
3978                                                 CanonArgs,
3979                                                 QualType(), QualType());
3980     Types.push_back(Spec);
3981     TemplateSpecializationTypes.InsertNode(Spec, InsertPos);
3982   }
3983 
3984   assert(Spec->isDependentType() &&
3985          "Non-dependent template-id type must have a canonical type");
3986   return QualType(Spec, 0);
3987 }
3988 
3989 QualType
3990 ASTContext::getElaboratedType(ElaboratedTypeKeyword Keyword,
3991                               NestedNameSpecifier *NNS,
3992                               QualType NamedType) const {
3993   llvm::FoldingSetNodeID ID;
3994   ElaboratedType::Profile(ID, Keyword, NNS, NamedType);
3995 
3996   void *InsertPos = nullptr;
3997   ElaboratedType *T = ElaboratedTypes.FindNodeOrInsertPos(ID, InsertPos);
3998   if (T)
3999     return QualType(T, 0);
4000 
4001   QualType Canon = NamedType;
4002   if (!Canon.isCanonical()) {
4003     Canon = getCanonicalType(NamedType);
4004     ElaboratedType *CheckT = ElaboratedTypes.FindNodeOrInsertPos(ID, InsertPos);
4005     assert(!CheckT && "Elaborated canonical type broken");
4006     (void)CheckT;
4007   }
4008 
4009   T = new (*this, TypeAlignment) ElaboratedType(Keyword, NNS, NamedType, Canon);
4010   Types.push_back(T);
4011   ElaboratedTypes.InsertNode(T, InsertPos);
4012   return QualType(T, 0);
4013 }
4014 
4015 QualType
4016 ASTContext::getParenType(QualType InnerType) const {
4017   llvm::FoldingSetNodeID ID;
4018   ParenType::Profile(ID, InnerType);
4019 
4020   void *InsertPos = nullptr;
4021   ParenType *T = ParenTypes.FindNodeOrInsertPos(ID, InsertPos);
4022   if (T)
4023     return QualType(T, 0);
4024 
4025   QualType Canon = InnerType;
4026   if (!Canon.isCanonical()) {
4027     Canon = getCanonicalType(InnerType);
4028     ParenType *CheckT = ParenTypes.FindNodeOrInsertPos(ID, InsertPos);
4029     assert(!CheckT && "Paren canonical type broken");
4030     (void)CheckT;
4031   }
4032 
4033   T = new (*this, TypeAlignment) ParenType(InnerType, Canon);
4034   Types.push_back(T);
4035   ParenTypes.InsertNode(T, InsertPos);
4036   return QualType(T, 0);
4037 }
4038 
4039 QualType ASTContext::getDependentNameType(ElaboratedTypeKeyword Keyword,
4040                                           NestedNameSpecifier *NNS,
4041                                           const IdentifierInfo *Name,
4042                                           QualType Canon) const {
4043   if (Canon.isNull()) {
4044     NestedNameSpecifier *CanonNNS = getCanonicalNestedNameSpecifier(NNS);
4045     if (CanonNNS != NNS)
4046       Canon = getDependentNameType(Keyword, CanonNNS, Name);
4047   }
4048 
4049   llvm::FoldingSetNodeID ID;
4050   DependentNameType::Profile(ID, Keyword, NNS, Name);
4051 
4052   void *InsertPos = nullptr;
4053   DependentNameType *T
4054     = DependentNameTypes.FindNodeOrInsertPos(ID, InsertPos);
4055   if (T)
4056     return QualType(T, 0);
4057 
4058   T = new (*this, TypeAlignment) DependentNameType(Keyword, NNS, Name, Canon);
4059   Types.push_back(T);
4060   DependentNameTypes.InsertNode(T, InsertPos);
4061   return QualType(T, 0);
4062 }
4063 
4064 QualType
4065 ASTContext::getDependentTemplateSpecializationType(
4066                                  ElaboratedTypeKeyword Keyword,
4067                                  NestedNameSpecifier *NNS,
4068                                  const IdentifierInfo *Name,
4069                                  const TemplateArgumentListInfo &Args) const {
4070   // TODO: avoid this copy
4071   SmallVector<TemplateArgument, 16> ArgCopy;
4072   for (unsigned I = 0, E = Args.size(); I != E; ++I)
4073     ArgCopy.push_back(Args[I].getArgument());
4074   return getDependentTemplateSpecializationType(Keyword, NNS, Name, ArgCopy);
4075 }
4076 
4077 QualType
4078 ASTContext::getDependentTemplateSpecializationType(
4079                                  ElaboratedTypeKeyword Keyword,
4080                                  NestedNameSpecifier *NNS,
4081                                  const IdentifierInfo *Name,
4082                                  ArrayRef<TemplateArgument> Args) const {
4083   assert((!NNS || NNS->isDependent()) &&
4084          "nested-name-specifier must be dependent");
4085 
4086   llvm::FoldingSetNodeID ID;
4087   DependentTemplateSpecializationType::Profile(ID, *this, Keyword, NNS,
4088                                                Name, Args);
4089 
4090   void *InsertPos = nullptr;
4091   DependentTemplateSpecializationType *T
4092     = DependentTemplateSpecializationTypes.FindNodeOrInsertPos(ID, InsertPos);
4093   if (T)
4094     return QualType(T, 0);
4095 
4096   NestedNameSpecifier *CanonNNS = getCanonicalNestedNameSpecifier(NNS);
4097 
4098   ElaboratedTypeKeyword CanonKeyword = Keyword;
4099   if (Keyword == ETK_None) CanonKeyword = ETK_Typename;
4100 
4101   bool AnyNonCanonArgs = false;
4102   unsigned NumArgs = Args.size();
4103   SmallVector<TemplateArgument, 16> CanonArgs(NumArgs);
4104   for (unsigned I = 0; I != NumArgs; ++I) {
4105     CanonArgs[I] = getCanonicalTemplateArgument(Args[I]);
4106     if (!CanonArgs[I].structurallyEquals(Args[I]))
4107       AnyNonCanonArgs = true;
4108   }
4109 
4110   QualType Canon;
4111   if (AnyNonCanonArgs || CanonNNS != NNS || CanonKeyword != Keyword) {
4112     Canon = getDependentTemplateSpecializationType(CanonKeyword, CanonNNS,
4113                                                    Name,
4114                                                    CanonArgs);
4115 
4116     // Find the insert position again.
4117     DependentTemplateSpecializationTypes.FindNodeOrInsertPos(ID, InsertPos);
4118   }
4119 
4120   void *Mem = Allocate((sizeof(DependentTemplateSpecializationType) +
4121                         sizeof(TemplateArgument) * NumArgs),
4122                        TypeAlignment);
4123   T = new (Mem) DependentTemplateSpecializationType(Keyword, NNS,
4124                                                     Name, Args, Canon);
4125   Types.push_back(T);
4126   DependentTemplateSpecializationTypes.InsertNode(T, InsertPos);
4127   return QualType(T, 0);
4128 }
4129 
4130 TemplateArgument ASTContext::getInjectedTemplateArg(NamedDecl *Param) {
4131   TemplateArgument Arg;
4132   if (auto *TTP = dyn_cast<TemplateTypeParmDecl>(Param)) {
4133     QualType ArgType = getTypeDeclType(TTP);
4134     if (TTP->isParameterPack())
4135       ArgType = getPackExpansionType(ArgType, None);
4136 
4137     Arg = TemplateArgument(ArgType);
4138   } else if (auto *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {
4139     Expr *E = new (*this) DeclRefExpr(
4140         NTTP, /*enclosing*/false,
4141         NTTP->getType().getNonLValueExprType(*this),
4142         Expr::getValueKindForType(NTTP->getType()), NTTP->getLocation());
4143 
4144     if (NTTP->isParameterPack())
4145       E = new (*this) PackExpansionExpr(DependentTy, E, NTTP->getLocation(),
4146                                         None);
4147     Arg = TemplateArgument(E);
4148   } else {
4149     auto *TTP = cast<TemplateTemplateParmDecl>(Param);
4150     if (TTP->isParameterPack())
4151       Arg = TemplateArgument(TemplateName(TTP), Optional<unsigned>());
4152     else
4153       Arg = TemplateArgument(TemplateName(TTP));
4154   }
4155 
4156   if (Param->isTemplateParameterPack())
4157     Arg = TemplateArgument::CreatePackCopy(*this, Arg);
4158 
4159   return Arg;
4160 }
4161 
4162 void
4163 ASTContext::getInjectedTemplateArgs(const TemplateParameterList *Params,
4164                                     SmallVectorImpl<TemplateArgument> &Args) {
4165   Args.reserve(Args.size() + Params->size());
4166 
4167   for (NamedDecl *Param : *Params)
4168     Args.push_back(getInjectedTemplateArg(Param));
4169 }
4170 
4171 QualType ASTContext::getPackExpansionType(QualType Pattern,
4172                                           Optional<unsigned> NumExpansions) {
4173   llvm::FoldingSetNodeID ID;
4174   PackExpansionType::Profile(ID, Pattern, NumExpansions);
4175 
4176   assert(Pattern->containsUnexpandedParameterPack() &&
4177          "Pack expansions must expand one or more parameter packs");
4178   void *InsertPos = nullptr;
4179   PackExpansionType *T
4180     = PackExpansionTypes.FindNodeOrInsertPos(ID, InsertPos);
4181   if (T)
4182     return QualType(T, 0);
4183 
4184   QualType Canon;
4185   if (!Pattern.isCanonical()) {
4186     Canon = getCanonicalType(Pattern);
4187     // The canonical type might not contain an unexpanded parameter pack, if it
4188     // contains an alias template specialization which ignores one of its
4189     // parameters.
4190     if (Canon->containsUnexpandedParameterPack()) {
4191       Canon = getPackExpansionType(Canon, NumExpansions);
4192 
4193       // Find the insert position again, in case we inserted an element into
4194       // PackExpansionTypes and invalidated our insert position.
4195       PackExpansionTypes.FindNodeOrInsertPos(ID, InsertPos);
4196     }
4197   }
4198 
4199   T = new (*this, TypeAlignment)
4200       PackExpansionType(Pattern, Canon, NumExpansions);
4201   Types.push_back(T);
4202   PackExpansionTypes.InsertNode(T, InsertPos);
4203   return QualType(T, 0);
4204 }
4205 
4206 /// CmpProtocolNames - Comparison predicate for sorting protocols
4207 /// alphabetically.
4208 static int CmpProtocolNames(ObjCProtocolDecl *const *LHS,
4209                             ObjCProtocolDecl *const *RHS) {
4210   return DeclarationName::compare((*LHS)->getDeclName(), (*RHS)->getDeclName());
4211 }
4212 
4213 static bool areSortedAndUniqued(ArrayRef<ObjCProtocolDecl *> Protocols) {
4214   if (Protocols.empty()) return true;
4215 
4216   if (Protocols[0]->getCanonicalDecl() != Protocols[0])
4217     return false;
4218 
4219   for (unsigned i = 1; i != Protocols.size(); ++i)
4220     if (CmpProtocolNames(&Protocols[i - 1], &Protocols[i]) >= 0 ||
4221         Protocols[i]->getCanonicalDecl() != Protocols[i])
4222       return false;
4223   return true;
4224 }
4225 
4226 static void
4227 SortAndUniqueProtocols(SmallVectorImpl<ObjCProtocolDecl *> &Protocols) {
4228   // Sort protocols, keyed by name.
4229   llvm::array_pod_sort(Protocols.begin(), Protocols.end(), CmpProtocolNames);
4230 
4231   // Canonicalize.
4232   for (ObjCProtocolDecl *&P : Protocols)
4233     P = P->getCanonicalDecl();
4234 
4235   // Remove duplicates.
4236   auto ProtocolsEnd = std::unique(Protocols.begin(), Protocols.end());
4237   Protocols.erase(ProtocolsEnd, Protocols.end());
4238 }
4239 
4240 QualType ASTContext::getObjCObjectType(QualType BaseType,
4241                                        ObjCProtocolDecl * const *Protocols,
4242                                        unsigned NumProtocols) const {
4243   return getObjCObjectType(BaseType, {},
4244                            llvm::makeArrayRef(Protocols, NumProtocols),
4245                            /*isKindOf=*/false);
4246 }
4247 
4248 QualType ASTContext::getObjCObjectType(
4249            QualType baseType,
4250            ArrayRef<QualType> typeArgs,
4251            ArrayRef<ObjCProtocolDecl *> protocols,
4252            bool isKindOf) const {
4253   // If the base type is an interface and there aren't any protocols or
4254   // type arguments to add, then the interface type will do just fine.
4255   if (typeArgs.empty() && protocols.empty() && !isKindOf &&
4256       isa<ObjCInterfaceType>(baseType))
4257     return baseType;
4258 
4259   // Look in the folding set for an existing type.
4260   llvm::FoldingSetNodeID ID;
4261   ObjCObjectTypeImpl::Profile(ID, baseType, typeArgs, protocols, isKindOf);
4262   void *InsertPos = nullptr;
4263   if (ObjCObjectType *QT = ObjCObjectTypes.FindNodeOrInsertPos(ID, InsertPos))
4264     return QualType(QT, 0);
4265 
4266   // Determine the type arguments to be used for canonicalization,
4267   // which may be explicitly specified here or written on the base
4268   // type.
4269   ArrayRef<QualType> effectiveTypeArgs = typeArgs;
4270   if (effectiveTypeArgs.empty()) {
4271     if (auto baseObject = baseType->getAs<ObjCObjectType>())
4272       effectiveTypeArgs = baseObject->getTypeArgs();
4273   }
4274 
4275   // Build the canonical type, which has the canonical base type and a
4276   // sorted-and-uniqued list of protocols and the type arguments
4277   // canonicalized.
4278   QualType canonical;
4279   bool typeArgsAreCanonical = std::all_of(effectiveTypeArgs.begin(),
4280                                           effectiveTypeArgs.end(),
4281                                           [&](QualType type) {
4282                                             return type.isCanonical();
4283                                           });
4284   bool protocolsSorted = areSortedAndUniqued(protocols);
4285   if (!typeArgsAreCanonical || !protocolsSorted || !baseType.isCanonical()) {
4286     // Determine the canonical type arguments.
4287     ArrayRef<QualType> canonTypeArgs;
4288     SmallVector<QualType, 4> canonTypeArgsVec;
4289     if (!typeArgsAreCanonical) {
4290       canonTypeArgsVec.reserve(effectiveTypeArgs.size());
4291       for (auto typeArg : effectiveTypeArgs)
4292         canonTypeArgsVec.push_back(getCanonicalType(typeArg));
4293       canonTypeArgs = canonTypeArgsVec;
4294     } else {
4295       canonTypeArgs = effectiveTypeArgs;
4296     }
4297 
4298     ArrayRef<ObjCProtocolDecl *> canonProtocols;
4299     SmallVector<ObjCProtocolDecl*, 8> canonProtocolsVec;
4300     if (!protocolsSorted) {
4301       canonProtocolsVec.append(protocols.begin(), protocols.end());
4302       SortAndUniqueProtocols(canonProtocolsVec);
4303       canonProtocols = canonProtocolsVec;
4304     } else {
4305       canonProtocols = protocols;
4306     }
4307 
4308     canonical = getObjCObjectType(getCanonicalType(baseType), canonTypeArgs,
4309                                   canonProtocols, isKindOf);
4310 
4311     // Regenerate InsertPos.
4312     ObjCObjectTypes.FindNodeOrInsertPos(ID, InsertPos);
4313   }
4314 
4315   unsigned size = sizeof(ObjCObjectTypeImpl);
4316   size += typeArgs.size() * sizeof(QualType);
4317   size += protocols.size() * sizeof(ObjCProtocolDecl *);
4318   void *mem = Allocate(size, TypeAlignment);
4319   ObjCObjectTypeImpl *T =
4320     new (mem) ObjCObjectTypeImpl(canonical, baseType, typeArgs, protocols,
4321                                  isKindOf);
4322 
4323   Types.push_back(T);
4324   ObjCObjectTypes.InsertNode(T, InsertPos);
4325   return QualType(T, 0);
4326 }
4327 
4328 /// Apply Objective-C protocol qualifiers to the given type.
4329 /// If this is for the canonical type of a type parameter, we can apply
4330 /// protocol qualifiers on the ObjCObjectPointerType.
4331 QualType
4332 ASTContext::applyObjCProtocolQualifiers(QualType type,
4333                   ArrayRef<ObjCProtocolDecl *> protocols, bool &hasError,
4334                   bool allowOnPointerType) const {
4335   hasError = false;
4336 
4337   if (const ObjCTypeParamType *objT =
4338       dyn_cast<ObjCTypeParamType>(type.getTypePtr())) {
4339     return getObjCTypeParamType(objT->getDecl(), protocols);
4340   }
4341 
4342   // Apply protocol qualifiers to ObjCObjectPointerType.
4343   if (allowOnPointerType) {
4344     if (const ObjCObjectPointerType *objPtr =
4345         dyn_cast<ObjCObjectPointerType>(type.getTypePtr())) {
4346       const ObjCObjectType *objT = objPtr->getObjectType();
4347       // Merge protocol lists and construct ObjCObjectType.
4348       SmallVector<ObjCProtocolDecl*, 8> protocolsVec;
4349       protocolsVec.append(objT->qual_begin(),
4350                           objT->qual_end());
4351       protocolsVec.append(protocols.begin(), protocols.end());
4352       ArrayRef<ObjCProtocolDecl *> protocols = protocolsVec;
4353       type = getObjCObjectType(
4354              objT->getBaseType(),
4355              objT->getTypeArgsAsWritten(),
4356              protocols,
4357              objT->isKindOfTypeAsWritten());
4358       return getObjCObjectPointerType(type);
4359     }
4360   }
4361 
4362   // Apply protocol qualifiers to ObjCObjectType.
4363   if (const ObjCObjectType *objT = dyn_cast<ObjCObjectType>(type.getTypePtr())){
4364     // FIXME: Check for protocols to which the class type is already
4365     // known to conform.
4366 
4367     return getObjCObjectType(objT->getBaseType(),
4368                              objT->getTypeArgsAsWritten(),
4369                              protocols,
4370                              objT->isKindOfTypeAsWritten());
4371   }
4372 
4373   // If the canonical type is ObjCObjectType, ...
4374   if (type->isObjCObjectType()) {
4375     // Silently overwrite any existing protocol qualifiers.
4376     // TODO: determine whether that's the right thing to do.
4377 
4378     // FIXME: Check for protocols to which the class type is already
4379     // known to conform.
4380     return getObjCObjectType(type, {}, protocols, false);
4381   }
4382 
4383   // id<protocol-list>
4384   if (type->isObjCIdType()) {
4385     const ObjCObjectPointerType *objPtr = type->castAs<ObjCObjectPointerType>();
4386     type = getObjCObjectType(ObjCBuiltinIdTy, {}, protocols,
4387                                  objPtr->isKindOfType());
4388     return getObjCObjectPointerType(type);
4389   }
4390 
4391   // Class<protocol-list>
4392   if (type->isObjCClassType()) {
4393     const ObjCObjectPointerType *objPtr = type->castAs<ObjCObjectPointerType>();
4394     type = getObjCObjectType(ObjCBuiltinClassTy, {}, protocols,
4395                                  objPtr->isKindOfType());
4396     return getObjCObjectPointerType(type);
4397   }
4398 
4399   hasError = true;
4400   return type;
4401 }
4402 
4403 QualType
4404 ASTContext::getObjCTypeParamType(const ObjCTypeParamDecl *Decl,
4405                            ArrayRef<ObjCProtocolDecl *> protocols,
4406                            QualType Canonical) const {
4407   // Look in the folding set for an existing type.
4408   llvm::FoldingSetNodeID ID;
4409   ObjCTypeParamType::Profile(ID, Decl, protocols);
4410   void *InsertPos = nullptr;
4411   if (ObjCTypeParamType *TypeParam =
4412       ObjCTypeParamTypes.FindNodeOrInsertPos(ID, InsertPos))
4413     return QualType(TypeParam, 0);
4414 
4415   if (Canonical.isNull()) {
4416     // We canonicalize to the underlying type.
4417     Canonical = getCanonicalType(Decl->getUnderlyingType());
4418     if (!protocols.empty()) {
4419       // Apply the protocol qualifers.
4420       bool hasError;
4421       Canonical = applyObjCProtocolQualifiers(Canonical, protocols, hasError,
4422           true/*allowOnPointerType*/);
4423       assert(!hasError && "Error when apply protocol qualifier to bound type");
4424     }
4425   }
4426 
4427   unsigned size = sizeof(ObjCTypeParamType);
4428   size += protocols.size() * sizeof(ObjCProtocolDecl *);
4429   void *mem = Allocate(size, TypeAlignment);
4430   ObjCTypeParamType *newType = new (mem)
4431     ObjCTypeParamType(Decl, Canonical, protocols);
4432 
4433   Types.push_back(newType);
4434   ObjCTypeParamTypes.InsertNode(newType, InsertPos);
4435   return QualType(newType, 0);
4436 }
4437 
4438 /// ObjCObjectAdoptsQTypeProtocols - Checks that protocols in IC's
4439 /// protocol list adopt all protocols in QT's qualified-id protocol
4440 /// list.
4441 bool ASTContext::ObjCObjectAdoptsQTypeProtocols(QualType QT,
4442                                                 ObjCInterfaceDecl *IC) {
4443   if (!QT->isObjCQualifiedIdType())
4444     return false;
4445 
4446   if (const ObjCObjectPointerType *OPT = QT->getAs<ObjCObjectPointerType>()) {
4447     // If both the right and left sides have qualifiers.
4448     for (auto *Proto : OPT->quals()) {
4449       if (!IC->ClassImplementsProtocol(Proto, false))
4450         return false;
4451     }
4452     return true;
4453   }
4454   return false;
4455 }
4456 
4457 /// QIdProtocolsAdoptObjCObjectProtocols - Checks that protocols in
4458 /// QT's qualified-id protocol list adopt all protocols in IDecl's list
4459 /// of protocols.
4460 bool ASTContext::QIdProtocolsAdoptObjCObjectProtocols(QualType QT,
4461                                                 ObjCInterfaceDecl *IDecl) {
4462   if (!QT->isObjCQualifiedIdType())
4463     return false;
4464   const ObjCObjectPointerType *OPT = QT->getAs<ObjCObjectPointerType>();
4465   if (!OPT)
4466     return false;
4467   if (!IDecl->hasDefinition())
4468     return false;
4469   llvm::SmallPtrSet<ObjCProtocolDecl *, 8> InheritedProtocols;
4470   CollectInheritedProtocols(IDecl, InheritedProtocols);
4471   if (InheritedProtocols.empty())
4472     return false;
4473   // Check that if every protocol in list of id<plist> conforms to a protcol
4474   // of IDecl's, then bridge casting is ok.
4475   bool Conforms = false;
4476   for (auto *Proto : OPT->quals()) {
4477     Conforms = false;
4478     for (auto *PI : InheritedProtocols) {
4479       if (ProtocolCompatibleWithProtocol(Proto, PI)) {
4480         Conforms = true;
4481         break;
4482       }
4483     }
4484     if (!Conforms)
4485       break;
4486   }
4487   if (Conforms)
4488     return true;
4489 
4490   for (auto *PI : InheritedProtocols) {
4491     // If both the right and left sides have qualifiers.
4492     bool Adopts = false;
4493     for (auto *Proto : OPT->quals()) {
4494       // return 'true' if 'PI' is in the inheritance hierarchy of Proto
4495       if ((Adopts = ProtocolCompatibleWithProtocol(PI, Proto)))
4496         break;
4497     }
4498     if (!Adopts)
4499       return false;
4500   }
4501   return true;
4502 }
4503 
4504 /// getObjCObjectPointerType - Return a ObjCObjectPointerType type for
4505 /// the given object type.
4506 QualType ASTContext::getObjCObjectPointerType(QualType ObjectT) const {
4507   llvm::FoldingSetNodeID ID;
4508   ObjCObjectPointerType::Profile(ID, ObjectT);
4509 
4510   void *InsertPos = nullptr;
4511   if (ObjCObjectPointerType *QT =
4512               ObjCObjectPointerTypes.FindNodeOrInsertPos(ID, InsertPos))
4513     return QualType(QT, 0);
4514 
4515   // Find the canonical object type.
4516   QualType Canonical;
4517   if (!ObjectT.isCanonical()) {
4518     Canonical = getObjCObjectPointerType(getCanonicalType(ObjectT));
4519 
4520     // Regenerate InsertPos.
4521     ObjCObjectPointerTypes.FindNodeOrInsertPos(ID, InsertPos);
4522   }
4523 
4524   // No match.
4525   void *Mem = Allocate(sizeof(ObjCObjectPointerType), TypeAlignment);
4526   ObjCObjectPointerType *QType =
4527     new (Mem) ObjCObjectPointerType(Canonical, ObjectT);
4528 
4529   Types.push_back(QType);
4530   ObjCObjectPointerTypes.InsertNode(QType, InsertPos);
4531   return QualType(QType, 0);
4532 }
4533 
4534 /// getObjCInterfaceType - Return the unique reference to the type for the
4535 /// specified ObjC interface decl. The list of protocols is optional.
4536 QualType ASTContext::getObjCInterfaceType(const ObjCInterfaceDecl *Decl,
4537                                           ObjCInterfaceDecl *PrevDecl) const {
4538   if (Decl->TypeForDecl)
4539     return QualType(Decl->TypeForDecl, 0);
4540 
4541   if (PrevDecl) {
4542     assert(PrevDecl->TypeForDecl && "previous decl has no TypeForDecl");
4543     Decl->TypeForDecl = PrevDecl->TypeForDecl;
4544     return QualType(PrevDecl->TypeForDecl, 0);
4545   }
4546 
4547   // Prefer the definition, if there is one.
4548   if (const ObjCInterfaceDecl *Def = Decl->getDefinition())
4549     Decl = Def;
4550 
4551   void *Mem = Allocate(sizeof(ObjCInterfaceType), TypeAlignment);
4552   ObjCInterfaceType *T = new (Mem) ObjCInterfaceType(Decl);
4553   Decl->TypeForDecl = T;
4554   Types.push_back(T);
4555   return QualType(T, 0);
4556 }
4557 
4558 /// getTypeOfExprType - Unlike many "get<Type>" functions, we can't unique
4559 /// TypeOfExprType AST's (since expression's are never shared). For example,
4560 /// multiple declarations that refer to "typeof(x)" all contain different
4561 /// DeclRefExpr's. This doesn't effect the type checker, since it operates
4562 /// on canonical type's (which are always unique).
4563 QualType ASTContext::getTypeOfExprType(Expr *tofExpr) const {
4564   TypeOfExprType *toe;
4565   if (tofExpr->isTypeDependent()) {
4566     llvm::FoldingSetNodeID ID;
4567     DependentTypeOfExprType::Profile(ID, *this, tofExpr);
4568 
4569     void *InsertPos = nullptr;
4570     DependentTypeOfExprType *Canon
4571       = DependentTypeOfExprTypes.FindNodeOrInsertPos(ID, InsertPos);
4572     if (Canon) {
4573       // We already have a "canonical" version of an identical, dependent
4574       // typeof(expr) type. Use that as our canonical type.
4575       toe = new (*this, TypeAlignment) TypeOfExprType(tofExpr,
4576                                           QualType((TypeOfExprType*)Canon, 0));
4577     } else {
4578       // Build a new, canonical typeof(expr) type.
4579       Canon
4580         = new (*this, TypeAlignment) DependentTypeOfExprType(*this, tofExpr);
4581       DependentTypeOfExprTypes.InsertNode(Canon, InsertPos);
4582       toe = Canon;
4583     }
4584   } else {
4585     QualType Canonical = getCanonicalType(tofExpr->getType());
4586     toe = new (*this, TypeAlignment) TypeOfExprType(tofExpr, Canonical);
4587   }
4588   Types.push_back(toe);
4589   return QualType(toe, 0);
4590 }
4591 
4592 /// getTypeOfType -  Unlike many "get<Type>" functions, we don't unique
4593 /// TypeOfType nodes. The only motivation to unique these nodes would be
4594 /// memory savings. Since typeof(t) is fairly uncommon, space shouldn't be
4595 /// an issue. This doesn't affect the type checker, since it operates
4596 /// on canonical types (which are always unique).
4597 QualType ASTContext::getTypeOfType(QualType tofType) const {
4598   QualType Canonical = getCanonicalType(tofType);
4599   TypeOfType *tot = new (*this, TypeAlignment) TypeOfType(tofType, Canonical);
4600   Types.push_back(tot);
4601   return QualType(tot, 0);
4602 }
4603 
4604 /// \brief Unlike many "get<Type>" functions, we don't unique DecltypeType
4605 /// nodes. This would never be helpful, since each such type has its own
4606 /// expression, and would not give a significant memory saving, since there
4607 /// is an Expr tree under each such type.
4608 QualType ASTContext::getDecltypeType(Expr *e, QualType UnderlyingType) const {
4609   DecltypeType *dt;
4610 
4611   // C++11 [temp.type]p2:
4612   //   If an expression e involves a template parameter, decltype(e) denotes a
4613   //   unique dependent type. Two such decltype-specifiers refer to the same
4614   //   type only if their expressions are equivalent (14.5.6.1).
4615   if (e->isInstantiationDependent()) {
4616     llvm::FoldingSetNodeID ID;
4617     DependentDecltypeType::Profile(ID, *this, e);
4618 
4619     void *InsertPos = nullptr;
4620     DependentDecltypeType *Canon
4621       = DependentDecltypeTypes.FindNodeOrInsertPos(ID, InsertPos);
4622     if (!Canon) {
4623       // Build a new, canonical decltype(expr) type.
4624       Canon = new (*this, TypeAlignment) DependentDecltypeType(*this, e);
4625       DependentDecltypeTypes.InsertNode(Canon, InsertPos);
4626     }
4627     dt = new (*this, TypeAlignment)
4628         DecltypeType(e, UnderlyingType, QualType((DecltypeType *)Canon, 0));
4629   } else {
4630     dt = new (*this, TypeAlignment)
4631         DecltypeType(e, UnderlyingType, getCanonicalType(UnderlyingType));
4632   }
4633   Types.push_back(dt);
4634   return QualType(dt, 0);
4635 }
4636 
4637 /// getUnaryTransformationType - We don't unique these, since the memory
4638 /// savings are minimal and these are rare.
4639 QualType ASTContext::getUnaryTransformType(QualType BaseType,
4640                                            QualType UnderlyingType,
4641                                            UnaryTransformType::UTTKind Kind)
4642     const {
4643   UnaryTransformType *ut = nullptr;
4644 
4645   if (BaseType->isDependentType()) {
4646     // Look in the folding set for an existing type.
4647     llvm::FoldingSetNodeID ID;
4648     DependentUnaryTransformType::Profile(ID, getCanonicalType(BaseType), Kind);
4649 
4650     void *InsertPos = nullptr;
4651     DependentUnaryTransformType *Canon
4652       = DependentUnaryTransformTypes.FindNodeOrInsertPos(ID, InsertPos);
4653 
4654     if (!Canon) {
4655       // Build a new, canonical __underlying_type(type) type.
4656       Canon = new (*this, TypeAlignment)
4657              DependentUnaryTransformType(*this, getCanonicalType(BaseType),
4658                                          Kind);
4659       DependentUnaryTransformTypes.InsertNode(Canon, InsertPos);
4660     }
4661     ut = new (*this, TypeAlignment) UnaryTransformType (BaseType,
4662                                                         QualType(), Kind,
4663                                                         QualType(Canon, 0));
4664   } else {
4665     QualType CanonType = getCanonicalType(UnderlyingType);
4666     ut = new (*this, TypeAlignment) UnaryTransformType (BaseType,
4667                                                         UnderlyingType, Kind,
4668                                                         CanonType);
4669   }
4670   Types.push_back(ut);
4671   return QualType(ut, 0);
4672 }
4673 
4674 /// getAutoType - Return the uniqued reference to the 'auto' type which has been
4675 /// deduced to the given type, or to the canonical undeduced 'auto' type, or the
4676 /// canonical deduced-but-dependent 'auto' type.
4677 QualType ASTContext::getAutoType(QualType DeducedType, AutoTypeKeyword Keyword,
4678                                  bool IsDependent) const {
4679   if (DeducedType.isNull() && Keyword == AutoTypeKeyword::Auto && !IsDependent)
4680     return getAutoDeductType();
4681 
4682   // Look in the folding set for an existing type.
4683   void *InsertPos = nullptr;
4684   llvm::FoldingSetNodeID ID;
4685   AutoType::Profile(ID, DeducedType, Keyword, IsDependent);
4686   if (AutoType *AT = AutoTypes.FindNodeOrInsertPos(ID, InsertPos))
4687     return QualType(AT, 0);
4688 
4689   AutoType *AT = new (*this, TypeAlignment) AutoType(DeducedType,
4690                                                      Keyword,
4691                                                      IsDependent);
4692   Types.push_back(AT);
4693   if (InsertPos)
4694     AutoTypes.InsertNode(AT, InsertPos);
4695   return QualType(AT, 0);
4696 }
4697 
4698 /// Return the uniqued reference to the deduced template specialization type
4699 /// which has been deduced to the given type, or to the canonical undeduced
4700 /// such type, or the canonical deduced-but-dependent such type.
4701 QualType ASTContext::getDeducedTemplateSpecializationType(
4702     TemplateName Template, QualType DeducedType, bool IsDependent) const {
4703   // Look in the folding set for an existing type.
4704   void *InsertPos = nullptr;
4705   llvm::FoldingSetNodeID ID;
4706   DeducedTemplateSpecializationType::Profile(ID, Template, DeducedType,
4707                                              IsDependent);
4708   if (DeducedTemplateSpecializationType *DTST =
4709           DeducedTemplateSpecializationTypes.FindNodeOrInsertPos(ID, InsertPos))
4710     return QualType(DTST, 0);
4711 
4712   DeducedTemplateSpecializationType *DTST = new (*this, TypeAlignment)
4713       DeducedTemplateSpecializationType(Template, DeducedType, IsDependent);
4714   Types.push_back(DTST);
4715   if (InsertPos)
4716     DeducedTemplateSpecializationTypes.InsertNode(DTST, InsertPos);
4717   return QualType(DTST, 0);
4718 }
4719 
4720 /// getAtomicType - Return the uniqued reference to the atomic type for
4721 /// the given value type.
4722 QualType ASTContext::getAtomicType(QualType T) const {
4723   // Unique pointers, to guarantee there is only one pointer of a particular
4724   // structure.
4725   llvm::FoldingSetNodeID ID;
4726   AtomicType::Profile(ID, T);
4727 
4728   void *InsertPos = nullptr;
4729   if (AtomicType *AT = AtomicTypes.FindNodeOrInsertPos(ID, InsertPos))
4730     return QualType(AT, 0);
4731 
4732   // If the atomic value type isn't canonical, this won't be a canonical type
4733   // either, so fill in the canonical type field.
4734   QualType Canonical;
4735   if (!T.isCanonical()) {
4736     Canonical = getAtomicType(getCanonicalType(T));
4737 
4738     // Get the new insert position for the node we care about.
4739     AtomicType *NewIP = AtomicTypes.FindNodeOrInsertPos(ID, InsertPos);
4740     assert(!NewIP && "Shouldn't be in the map!"); (void)NewIP;
4741   }
4742   AtomicType *New = new (*this, TypeAlignment) AtomicType(T, Canonical);
4743   Types.push_back(New);
4744   AtomicTypes.InsertNode(New, InsertPos);
4745   return QualType(New, 0);
4746 }
4747 
4748 /// getAutoDeductType - Get type pattern for deducing against 'auto'.
4749 QualType ASTContext::getAutoDeductType() const {
4750   if (AutoDeductTy.isNull())
4751     AutoDeductTy = QualType(
4752       new (*this, TypeAlignment) AutoType(QualType(), AutoTypeKeyword::Auto,
4753                                           /*dependent*/false),
4754       0);
4755   return AutoDeductTy;
4756 }
4757 
4758 /// getAutoRRefDeductType - Get type pattern for deducing against 'auto &&'.
4759 QualType ASTContext::getAutoRRefDeductType() const {
4760   if (AutoRRefDeductTy.isNull())
4761     AutoRRefDeductTy = getRValueReferenceType(getAutoDeductType());
4762   assert(!AutoRRefDeductTy.isNull() && "can't build 'auto &&' pattern");
4763   return AutoRRefDeductTy;
4764 }
4765 
4766 /// getTagDeclType - Return the unique reference to the type for the
4767 /// specified TagDecl (struct/union/class/enum) decl.
4768 QualType ASTContext::getTagDeclType(const TagDecl *Decl) const {
4769   assert(Decl);
4770   // FIXME: What is the design on getTagDeclType when it requires casting
4771   // away const?  mutable?
4772   return getTypeDeclType(const_cast<TagDecl*>(Decl));
4773 }
4774 
4775 /// getSizeType - Return the unique type for "size_t" (C99 7.17), the result
4776 /// of the sizeof operator (C99 6.5.3.4p4). The value is target dependent and
4777 /// needs to agree with the definition in <stddef.h>.
4778 CanQualType ASTContext::getSizeType() const {
4779   return getFromTargetType(Target->getSizeType());
4780 }
4781 
4782 /// Return the unique signed counterpart of the integer type
4783 /// corresponding to size_t.
4784 CanQualType ASTContext::getSignedSizeType() const {
4785   return getFromTargetType(Target->getSignedSizeType());
4786 }
4787 
4788 /// getIntMaxType - Return the unique type for "intmax_t" (C99 7.18.1.5).
4789 CanQualType ASTContext::getIntMaxType() const {
4790   return getFromTargetType(Target->getIntMaxType());
4791 }
4792 
4793 /// getUIntMaxType - Return the unique type for "uintmax_t" (C99 7.18.1.5).
4794 CanQualType ASTContext::getUIntMaxType() const {
4795   return getFromTargetType(Target->getUIntMaxType());
4796 }
4797 
4798 /// getSignedWCharType - Return the type of "signed wchar_t".
4799 /// Used when in C++, as a GCC extension.
4800 QualType ASTContext::getSignedWCharType() const {
4801   // FIXME: derive from "Target" ?
4802   return WCharTy;
4803 }
4804 
4805 /// getUnsignedWCharType - Return the type of "unsigned wchar_t".
4806 /// Used when in C++, as a GCC extension.
4807 QualType ASTContext::getUnsignedWCharType() const {
4808   // FIXME: derive from "Target" ?
4809   return UnsignedIntTy;
4810 }
4811 
4812 QualType ASTContext::getIntPtrType() const {
4813   return getFromTargetType(Target->getIntPtrType());
4814 }
4815 
4816 QualType ASTContext::getUIntPtrType() const {
4817   return getCorrespondingUnsignedType(getIntPtrType());
4818 }
4819 
4820 /// getPointerDiffType - Return the unique type for "ptrdiff_t" (C99 7.17)
4821 /// defined in <stddef.h>. Pointer - pointer requires this (C99 6.5.6p9).
4822 QualType ASTContext::getPointerDiffType() const {
4823   return getFromTargetType(Target->getPtrDiffType(0));
4824 }
4825 
4826 /// \brief Return the unique unsigned counterpart of "ptrdiff_t"
4827 /// integer type. The standard (C11 7.21.6.1p7) refers to this type
4828 /// in the definition of %tu format specifier.
4829 QualType ASTContext::getUnsignedPointerDiffType() const {
4830   return getFromTargetType(Target->getUnsignedPtrDiffType(0));
4831 }
4832 
4833 /// \brief Return the unique type for "pid_t" defined in
4834 /// <sys/types.h>. We need this to compute the correct type for vfork().
4835 QualType ASTContext::getProcessIDType() const {
4836   return getFromTargetType(Target->getProcessIDType());
4837 }
4838 
4839 //===----------------------------------------------------------------------===//
4840 //                              Type Operators
4841 //===----------------------------------------------------------------------===//
4842 
4843 CanQualType ASTContext::getCanonicalParamType(QualType T) const {
4844   // Push qualifiers into arrays, and then discard any remaining
4845   // qualifiers.
4846   T = getCanonicalType(T);
4847   T = getVariableArrayDecayedType(T);
4848   const Type *Ty = T.getTypePtr();
4849   QualType Result;
4850   if (isa<ArrayType>(Ty)) {
4851     Result = getArrayDecayedType(QualType(Ty,0));
4852   } else if (isa<FunctionType>(Ty)) {
4853     Result = getPointerType(QualType(Ty, 0));
4854   } else {
4855     Result = QualType(Ty, 0);
4856   }
4857 
4858   return CanQualType::CreateUnsafe(Result);
4859 }
4860 
4861 QualType ASTContext::getUnqualifiedArrayType(QualType type,
4862                                              Qualifiers &quals) {
4863   SplitQualType splitType = type.getSplitUnqualifiedType();
4864 
4865   // FIXME: getSplitUnqualifiedType() actually walks all the way to
4866   // the unqualified desugared type and then drops it on the floor.
4867   // We then have to strip that sugar back off with
4868   // getUnqualifiedDesugaredType(), which is silly.
4869   const ArrayType *AT =
4870     dyn_cast<ArrayType>(splitType.Ty->getUnqualifiedDesugaredType());
4871 
4872   // If we don't have an array, just use the results in splitType.
4873   if (!AT) {
4874     quals = splitType.Quals;
4875     return QualType(splitType.Ty, 0);
4876   }
4877 
4878   // Otherwise, recurse on the array's element type.
4879   QualType elementType = AT->getElementType();
4880   QualType unqualElementType = getUnqualifiedArrayType(elementType, quals);
4881 
4882   // If that didn't change the element type, AT has no qualifiers, so we
4883   // can just use the results in splitType.
4884   if (elementType == unqualElementType) {
4885     assert(quals.empty()); // from the recursive call
4886     quals = splitType.Quals;
4887     return QualType(splitType.Ty, 0);
4888   }
4889 
4890   // Otherwise, add in the qualifiers from the outermost type, then
4891   // build the type back up.
4892   quals.addConsistentQualifiers(splitType.Quals);
4893 
4894   if (const ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(AT)) {
4895     return getConstantArrayType(unqualElementType, CAT->getSize(),
4896                                 CAT->getSizeModifier(), 0);
4897   }
4898 
4899   if (const IncompleteArrayType *IAT = dyn_cast<IncompleteArrayType>(AT)) {
4900     return getIncompleteArrayType(unqualElementType, IAT->getSizeModifier(), 0);
4901   }
4902 
4903   if (const VariableArrayType *VAT = dyn_cast<VariableArrayType>(AT)) {
4904     return getVariableArrayType(unqualElementType,
4905                                 VAT->getSizeExpr(),
4906                                 VAT->getSizeModifier(),
4907                                 VAT->getIndexTypeCVRQualifiers(),
4908                                 VAT->getBracketsRange());
4909   }
4910 
4911   const DependentSizedArrayType *DSAT = cast<DependentSizedArrayType>(AT);
4912   return getDependentSizedArrayType(unqualElementType, DSAT->getSizeExpr(),
4913                                     DSAT->getSizeModifier(), 0,
4914                                     SourceRange());
4915 }
4916 
4917 /// UnwrapSimilarPointerTypes - If T1 and T2 are pointer types  that
4918 /// may be similar (C++ 4.4), replaces T1 and T2 with the type that
4919 /// they point to and return true. If T1 and T2 aren't pointer types
4920 /// or pointer-to-member types, or if they are not similar at this
4921 /// level, returns false and leaves T1 and T2 unchanged. Top-level
4922 /// qualifiers on T1 and T2 are ignored. This function will typically
4923 /// be called in a loop that successively "unwraps" pointer and
4924 /// pointer-to-member types to compare them at each level.
4925 bool ASTContext::UnwrapSimilarPointerTypes(QualType &T1, QualType &T2) {
4926   const PointerType *T1PtrType = T1->getAs<PointerType>(),
4927                     *T2PtrType = T2->getAs<PointerType>();
4928   if (T1PtrType && T2PtrType) {
4929     T1 = T1PtrType->getPointeeType();
4930     T2 = T2PtrType->getPointeeType();
4931     return true;
4932   }
4933 
4934   const MemberPointerType *T1MPType = T1->getAs<MemberPointerType>(),
4935                           *T2MPType = T2->getAs<MemberPointerType>();
4936   if (T1MPType && T2MPType &&
4937       hasSameUnqualifiedType(QualType(T1MPType->getClass(), 0),
4938                              QualType(T2MPType->getClass(), 0))) {
4939     T1 = T1MPType->getPointeeType();
4940     T2 = T2MPType->getPointeeType();
4941     return true;
4942   }
4943 
4944   if (getLangOpts().ObjC1) {
4945     const ObjCObjectPointerType *T1OPType = T1->getAs<ObjCObjectPointerType>(),
4946                                 *T2OPType = T2->getAs<ObjCObjectPointerType>();
4947     if (T1OPType && T2OPType) {
4948       T1 = T1OPType->getPointeeType();
4949       T2 = T2OPType->getPointeeType();
4950       return true;
4951     }
4952   }
4953 
4954   // FIXME: Block pointers, too?
4955 
4956   return false;
4957 }
4958 
4959 DeclarationNameInfo
4960 ASTContext::getNameForTemplate(TemplateName Name,
4961                                SourceLocation NameLoc) const {
4962   switch (Name.getKind()) {
4963   case TemplateName::QualifiedTemplate:
4964   case TemplateName::Template:
4965     // DNInfo work in progress: CHECKME: what about DNLoc?
4966     return DeclarationNameInfo(Name.getAsTemplateDecl()->getDeclName(),
4967                                NameLoc);
4968 
4969   case TemplateName::OverloadedTemplate: {
4970     OverloadedTemplateStorage *Storage = Name.getAsOverloadedTemplate();
4971     // DNInfo work in progress: CHECKME: what about DNLoc?
4972     return DeclarationNameInfo((*Storage->begin())->getDeclName(), NameLoc);
4973   }
4974 
4975   case TemplateName::DependentTemplate: {
4976     DependentTemplateName *DTN = Name.getAsDependentTemplateName();
4977     DeclarationName DName;
4978     if (DTN->isIdentifier()) {
4979       DName = DeclarationNames.getIdentifier(DTN->getIdentifier());
4980       return DeclarationNameInfo(DName, NameLoc);
4981     } else {
4982       DName = DeclarationNames.getCXXOperatorName(DTN->getOperator());
4983       // DNInfo work in progress: FIXME: source locations?
4984       DeclarationNameLoc DNLoc;
4985       DNLoc.CXXOperatorName.BeginOpNameLoc = SourceLocation().getRawEncoding();
4986       DNLoc.CXXOperatorName.EndOpNameLoc = SourceLocation().getRawEncoding();
4987       return DeclarationNameInfo(DName, NameLoc, DNLoc);
4988     }
4989   }
4990 
4991   case TemplateName::SubstTemplateTemplateParm: {
4992     SubstTemplateTemplateParmStorage *subst
4993       = Name.getAsSubstTemplateTemplateParm();
4994     return DeclarationNameInfo(subst->getParameter()->getDeclName(),
4995                                NameLoc);
4996   }
4997 
4998   case TemplateName::SubstTemplateTemplateParmPack: {
4999     SubstTemplateTemplateParmPackStorage *subst
5000       = Name.getAsSubstTemplateTemplateParmPack();
5001     return DeclarationNameInfo(subst->getParameterPack()->getDeclName(),
5002                                NameLoc);
5003   }
5004   }
5005 
5006   llvm_unreachable("bad template name kind!");
5007 }
5008 
5009 TemplateName ASTContext::getCanonicalTemplateName(TemplateName Name) const {
5010   switch (Name.getKind()) {
5011   case TemplateName::QualifiedTemplate:
5012   case TemplateName::Template: {
5013     TemplateDecl *Template = Name.getAsTemplateDecl();
5014     if (TemplateTemplateParmDecl *TTP
5015           = dyn_cast<TemplateTemplateParmDecl>(Template))
5016       Template = getCanonicalTemplateTemplateParmDecl(TTP);
5017 
5018     // The canonical template name is the canonical template declaration.
5019     return TemplateName(cast<TemplateDecl>(Template->getCanonicalDecl()));
5020   }
5021 
5022   case TemplateName::OverloadedTemplate:
5023     llvm_unreachable("cannot canonicalize overloaded template");
5024 
5025   case TemplateName::DependentTemplate: {
5026     DependentTemplateName *DTN = Name.getAsDependentTemplateName();
5027     assert(DTN && "Non-dependent template names must refer to template decls.");
5028     return DTN->CanonicalTemplateName;
5029   }
5030 
5031   case TemplateName::SubstTemplateTemplateParm: {
5032     SubstTemplateTemplateParmStorage *subst
5033       = Name.getAsSubstTemplateTemplateParm();
5034     return getCanonicalTemplateName(subst->getReplacement());
5035   }
5036 
5037   case TemplateName::SubstTemplateTemplateParmPack: {
5038     SubstTemplateTemplateParmPackStorage *subst
5039                                   = Name.getAsSubstTemplateTemplateParmPack();
5040     TemplateTemplateParmDecl *canonParameter
5041       = getCanonicalTemplateTemplateParmDecl(subst->getParameterPack());
5042     TemplateArgument canonArgPack
5043       = getCanonicalTemplateArgument(subst->getArgumentPack());
5044     return getSubstTemplateTemplateParmPack(canonParameter, canonArgPack);
5045   }
5046   }
5047 
5048   llvm_unreachable("bad template name!");
5049 }
5050 
5051 bool ASTContext::hasSameTemplateName(TemplateName X, TemplateName Y) {
5052   X = getCanonicalTemplateName(X);
5053   Y = getCanonicalTemplateName(Y);
5054   return X.getAsVoidPointer() == Y.getAsVoidPointer();
5055 }
5056 
5057 TemplateArgument
5058 ASTContext::getCanonicalTemplateArgument(const TemplateArgument &Arg) const {
5059   switch (Arg.getKind()) {
5060     case TemplateArgument::Null:
5061       return Arg;
5062 
5063     case TemplateArgument::Expression:
5064       return Arg;
5065 
5066     case TemplateArgument::Declaration: {
5067       ValueDecl *D = cast<ValueDecl>(Arg.getAsDecl()->getCanonicalDecl());
5068       return TemplateArgument(D, Arg.getParamTypeForDecl());
5069     }
5070 
5071     case TemplateArgument::NullPtr:
5072       return TemplateArgument(getCanonicalType(Arg.getNullPtrType()),
5073                               /*isNullPtr*/true);
5074 
5075     case TemplateArgument::Template:
5076       return TemplateArgument(getCanonicalTemplateName(Arg.getAsTemplate()));
5077 
5078     case TemplateArgument::TemplateExpansion:
5079       return TemplateArgument(getCanonicalTemplateName(
5080                                          Arg.getAsTemplateOrTemplatePattern()),
5081                               Arg.getNumTemplateExpansions());
5082 
5083     case TemplateArgument::Integral:
5084       return TemplateArgument(Arg, getCanonicalType(Arg.getIntegralType()));
5085 
5086     case TemplateArgument::Type:
5087       return TemplateArgument(getCanonicalType(Arg.getAsType()));
5088 
5089     case TemplateArgument::Pack: {
5090       if (Arg.pack_size() == 0)
5091         return Arg;
5092 
5093       TemplateArgument *CanonArgs
5094         = new (*this) TemplateArgument[Arg.pack_size()];
5095       unsigned Idx = 0;
5096       for (TemplateArgument::pack_iterator A = Arg.pack_begin(),
5097                                         AEnd = Arg.pack_end();
5098            A != AEnd; (void)++A, ++Idx)
5099         CanonArgs[Idx] = getCanonicalTemplateArgument(*A);
5100 
5101       return TemplateArgument(llvm::makeArrayRef(CanonArgs, Arg.pack_size()));
5102     }
5103   }
5104 
5105   // Silence GCC warning
5106   llvm_unreachable("Unhandled template argument kind");
5107 }
5108 
5109 NestedNameSpecifier *
5110 ASTContext::getCanonicalNestedNameSpecifier(NestedNameSpecifier *NNS) const {
5111   if (!NNS)
5112     return nullptr;
5113 
5114   switch (NNS->getKind()) {
5115   case NestedNameSpecifier::Identifier:
5116     // Canonicalize the prefix but keep the identifier the same.
5117     return NestedNameSpecifier::Create(*this,
5118                          getCanonicalNestedNameSpecifier(NNS->getPrefix()),
5119                                        NNS->getAsIdentifier());
5120 
5121   case NestedNameSpecifier::Namespace:
5122     // A namespace is canonical; build a nested-name-specifier with
5123     // this namespace and no prefix.
5124     return NestedNameSpecifier::Create(*this, nullptr,
5125                                  NNS->getAsNamespace()->getOriginalNamespace());
5126 
5127   case NestedNameSpecifier::NamespaceAlias:
5128     // A namespace is canonical; build a nested-name-specifier with
5129     // this namespace and no prefix.
5130     return NestedNameSpecifier::Create(*this, nullptr,
5131                                     NNS->getAsNamespaceAlias()->getNamespace()
5132                                                       ->getOriginalNamespace());
5133 
5134   case NestedNameSpecifier::TypeSpec:
5135   case NestedNameSpecifier::TypeSpecWithTemplate: {
5136     QualType T = getCanonicalType(QualType(NNS->getAsType(), 0));
5137 
5138     // If we have some kind of dependent-named type (e.g., "typename T::type"),
5139     // break it apart into its prefix and identifier, then reconsititute those
5140     // as the canonical nested-name-specifier. This is required to canonicalize
5141     // a dependent nested-name-specifier involving typedefs of dependent-name
5142     // types, e.g.,
5143     //   typedef typename T::type T1;
5144     //   typedef typename T1::type T2;
5145     if (const DependentNameType *DNT = T->getAs<DependentNameType>())
5146       return NestedNameSpecifier::Create(*this, DNT->getQualifier(),
5147                            const_cast<IdentifierInfo *>(DNT->getIdentifier()));
5148 
5149     // Otherwise, just canonicalize the type, and force it to be a TypeSpec.
5150     // FIXME: Why are TypeSpec and TypeSpecWithTemplate distinct in the
5151     // first place?
5152     return NestedNameSpecifier::Create(*this, nullptr, false,
5153                                        const_cast<Type *>(T.getTypePtr()));
5154   }
5155 
5156   case NestedNameSpecifier::Global:
5157   case NestedNameSpecifier::Super:
5158     // The global specifier and __super specifer are canonical and unique.
5159     return NNS;
5160   }
5161 
5162   llvm_unreachable("Invalid NestedNameSpecifier::Kind!");
5163 }
5164 
5165 const ArrayType *ASTContext::getAsArrayType(QualType T) const {
5166   // Handle the non-qualified case efficiently.
5167   if (!T.hasLocalQualifiers()) {
5168     // Handle the common positive case fast.
5169     if (const ArrayType *AT = dyn_cast<ArrayType>(T))
5170       return AT;
5171   }
5172 
5173   // Handle the common negative case fast.
5174   if (!isa<ArrayType>(T.getCanonicalType()))
5175     return nullptr;
5176 
5177   // Apply any qualifiers from the array type to the element type.  This
5178   // implements C99 6.7.3p8: "If the specification of an array type includes
5179   // any type qualifiers, the element type is so qualified, not the array type."
5180 
5181   // If we get here, we either have type qualifiers on the type, or we have
5182   // sugar such as a typedef in the way.  If we have type qualifiers on the type
5183   // we must propagate them down into the element type.
5184 
5185   SplitQualType split = T.getSplitDesugaredType();
5186   Qualifiers qs = split.Quals;
5187 
5188   // If we have a simple case, just return now.
5189   const ArrayType *ATy = dyn_cast<ArrayType>(split.Ty);
5190   if (!ATy || qs.empty())
5191     return ATy;
5192 
5193   // Otherwise, we have an array and we have qualifiers on it.  Push the
5194   // qualifiers into the array element type and return a new array type.
5195   QualType NewEltTy = getQualifiedType(ATy->getElementType(), qs);
5196 
5197   if (const ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(ATy))
5198     return cast<ArrayType>(getConstantArrayType(NewEltTy, CAT->getSize(),
5199                                                 CAT->getSizeModifier(),
5200                                            CAT->getIndexTypeCVRQualifiers()));
5201   if (const IncompleteArrayType *IAT = dyn_cast<IncompleteArrayType>(ATy))
5202     return cast<ArrayType>(getIncompleteArrayType(NewEltTy,
5203                                                   IAT->getSizeModifier(),
5204                                            IAT->getIndexTypeCVRQualifiers()));
5205 
5206   if (const DependentSizedArrayType *DSAT
5207         = dyn_cast<DependentSizedArrayType>(ATy))
5208     return cast<ArrayType>(
5209                      getDependentSizedArrayType(NewEltTy,
5210                                                 DSAT->getSizeExpr(),
5211                                                 DSAT->getSizeModifier(),
5212                                               DSAT->getIndexTypeCVRQualifiers(),
5213                                                 DSAT->getBracketsRange()));
5214 
5215   const VariableArrayType *VAT = cast<VariableArrayType>(ATy);
5216   return cast<ArrayType>(getVariableArrayType(NewEltTy,
5217                                               VAT->getSizeExpr(),
5218                                               VAT->getSizeModifier(),
5219                                               VAT->getIndexTypeCVRQualifiers(),
5220                                               VAT->getBracketsRange()));
5221 }
5222 
5223 QualType ASTContext::getAdjustedParameterType(QualType T) const {
5224   if (T->isArrayType() || T->isFunctionType())
5225     return getDecayedType(T);
5226   return T;
5227 }
5228 
5229 QualType ASTContext::getSignatureParameterType(QualType T) const {
5230   T = getVariableArrayDecayedType(T);
5231   T = getAdjustedParameterType(T);
5232   return T.getUnqualifiedType();
5233 }
5234 
5235 QualType ASTContext::getExceptionObjectType(QualType T) const {
5236   // C++ [except.throw]p3:
5237   //   A throw-expression initializes a temporary object, called the exception
5238   //   object, the type of which is determined by removing any top-level
5239   //   cv-qualifiers from the static type of the operand of throw and adjusting
5240   //   the type from "array of T" or "function returning T" to "pointer to T"
5241   //   or "pointer to function returning T", [...]
5242   T = getVariableArrayDecayedType(T);
5243   if (T->isArrayType() || T->isFunctionType())
5244     T = getDecayedType(T);
5245   return T.getUnqualifiedType();
5246 }
5247 
5248 /// getArrayDecayedType - Return the properly qualified result of decaying the
5249 /// specified array type to a pointer.  This operation is non-trivial when
5250 /// handling typedefs etc.  The canonical type of "T" must be an array type,
5251 /// this returns a pointer to a properly qualified element of the array.
5252 ///
5253 /// See C99 6.7.5.3p7 and C99 6.3.2.1p3.
5254 QualType ASTContext::getArrayDecayedType(QualType Ty) const {
5255   // Get the element type with 'getAsArrayType' so that we don't lose any
5256   // typedefs in the element type of the array.  This also handles propagation
5257   // of type qualifiers from the array type into the element type if present
5258   // (C99 6.7.3p8).
5259   const ArrayType *PrettyArrayType = getAsArrayType(Ty);
5260   assert(PrettyArrayType && "Not an array type!");
5261 
5262   QualType PtrTy = getPointerType(PrettyArrayType->getElementType());
5263 
5264   // int x[restrict 4] ->  int *restrict
5265   QualType Result = getQualifiedType(PtrTy,
5266                                      PrettyArrayType->getIndexTypeQualifiers());
5267 
5268   // int x[_Nullable] -> int * _Nullable
5269   if (auto Nullability = Ty->getNullability(*this)) {
5270     Result = const_cast<ASTContext *>(this)->getAttributedType(
5271         AttributedType::getNullabilityAttrKind(*Nullability), Result, Result);
5272   }
5273   return Result;
5274 }
5275 
5276 QualType ASTContext::getBaseElementType(const ArrayType *array) const {
5277   return getBaseElementType(array->getElementType());
5278 }
5279 
5280 QualType ASTContext::getBaseElementType(QualType type) const {
5281   Qualifiers qs;
5282   while (true) {
5283     SplitQualType split = type.getSplitDesugaredType();
5284     const ArrayType *array = split.Ty->getAsArrayTypeUnsafe();
5285     if (!array) break;
5286 
5287     type = array->getElementType();
5288     qs.addConsistentQualifiers(split.Quals);
5289   }
5290 
5291   return getQualifiedType(type, qs);
5292 }
5293 
5294 /// getConstantArrayElementCount - Returns number of constant array elements.
5295 uint64_t
5296 ASTContext::getConstantArrayElementCount(const ConstantArrayType *CA)  const {
5297   uint64_t ElementCount = 1;
5298   do {
5299     ElementCount *= CA->getSize().getZExtValue();
5300     CA = dyn_cast_or_null<ConstantArrayType>(
5301       CA->getElementType()->getAsArrayTypeUnsafe());
5302   } while (CA);
5303   return ElementCount;
5304 }
5305 
5306 /// getFloatingRank - Return a relative rank for floating point types.
5307 /// This routine will assert if passed a built-in type that isn't a float.
5308 static FloatingRank getFloatingRank(QualType T) {
5309   if (const ComplexType *CT = T->getAs<ComplexType>())
5310     return getFloatingRank(CT->getElementType());
5311 
5312   assert(T->getAs<BuiltinType>() && "getFloatingRank(): not a floating type");
5313   switch (T->getAs<BuiltinType>()->getKind()) {
5314   default: llvm_unreachable("getFloatingRank(): not a floating type");
5315   case BuiltinType::Float16:    return Float16Rank;
5316   case BuiltinType::Half:       return HalfRank;
5317   case BuiltinType::Float:      return FloatRank;
5318   case BuiltinType::Double:     return DoubleRank;
5319   case BuiltinType::LongDouble: return LongDoubleRank;
5320   case BuiltinType::Float128:   return Float128Rank;
5321   }
5322 }
5323 
5324 /// getFloatingTypeOfSizeWithinDomain - Returns a real floating
5325 /// point or a complex type (based on typeDomain/typeSize).
5326 /// 'typeDomain' is a real floating point or complex type.
5327 /// 'typeSize' is a real floating point or complex type.
5328 QualType ASTContext::getFloatingTypeOfSizeWithinDomain(QualType Size,
5329                                                        QualType Domain) const {
5330   FloatingRank EltRank = getFloatingRank(Size);
5331   if (Domain->isComplexType()) {
5332     switch (EltRank) {
5333     case Float16Rank:
5334     case HalfRank: llvm_unreachable("Complex half is not supported");
5335     case FloatRank:      return FloatComplexTy;
5336     case DoubleRank:     return DoubleComplexTy;
5337     case LongDoubleRank: return LongDoubleComplexTy;
5338     case Float128Rank:   return Float128ComplexTy;
5339     }
5340   }
5341 
5342   assert(Domain->isRealFloatingType() && "Unknown domain!");
5343   switch (EltRank) {
5344   case Float16Rank:    return HalfTy;
5345   case HalfRank:       return HalfTy;
5346   case FloatRank:      return FloatTy;
5347   case DoubleRank:     return DoubleTy;
5348   case LongDoubleRank: return LongDoubleTy;
5349   case Float128Rank:   return Float128Ty;
5350   }
5351   llvm_unreachable("getFloatingRank(): illegal value for rank");
5352 }
5353 
5354 /// getFloatingTypeOrder - Compare the rank of the two specified floating
5355 /// point types, ignoring the domain of the type (i.e. 'double' ==
5356 /// '_Complex double').  If LHS > RHS, return 1.  If LHS == RHS, return 0. If
5357 /// LHS < RHS, return -1.
5358 int ASTContext::getFloatingTypeOrder(QualType LHS, QualType RHS) const {
5359   FloatingRank LHSR = getFloatingRank(LHS);
5360   FloatingRank RHSR = getFloatingRank(RHS);
5361 
5362   if (LHSR == RHSR)
5363     return 0;
5364   if (LHSR > RHSR)
5365     return 1;
5366   return -1;
5367 }
5368 
5369 /// getIntegerRank - Return an integer conversion rank (C99 6.3.1.1p1). This
5370 /// routine will assert if passed a built-in type that isn't an integer or enum,
5371 /// or if it is not canonicalized.
5372 unsigned ASTContext::getIntegerRank(const Type *T) const {
5373   assert(T->isCanonicalUnqualified() && "T should be canonicalized");
5374 
5375   switch (cast<BuiltinType>(T)->getKind()) {
5376   default: llvm_unreachable("getIntegerRank(): not a built-in integer");
5377   case BuiltinType::Bool:
5378     return 1 + (getIntWidth(BoolTy) << 3);
5379   case BuiltinType::Char_S:
5380   case BuiltinType::Char_U:
5381   case BuiltinType::SChar:
5382   case BuiltinType::UChar:
5383     return 2 + (getIntWidth(CharTy) << 3);
5384   case BuiltinType::Short:
5385   case BuiltinType::UShort:
5386     return 3 + (getIntWidth(ShortTy) << 3);
5387   case BuiltinType::Int:
5388   case BuiltinType::UInt:
5389     return 4 + (getIntWidth(IntTy) << 3);
5390   case BuiltinType::Long:
5391   case BuiltinType::ULong:
5392     return 5 + (getIntWidth(LongTy) << 3);
5393   case BuiltinType::LongLong:
5394   case BuiltinType::ULongLong:
5395     return 6 + (getIntWidth(LongLongTy) << 3);
5396   case BuiltinType::Int128:
5397   case BuiltinType::UInt128:
5398     return 7 + (getIntWidth(Int128Ty) << 3);
5399   }
5400 }
5401 
5402 /// \brief Whether this is a promotable bitfield reference according
5403 /// to C99 6.3.1.1p2, bullet 2 (and GCC extensions).
5404 ///
5405 /// \returns the type this bit-field will promote to, or NULL if no
5406 /// promotion occurs.
5407 QualType ASTContext::isPromotableBitField(Expr *E) const {
5408   if (E->isTypeDependent() || E->isValueDependent())
5409     return QualType();
5410 
5411   // FIXME: We should not do this unless E->refersToBitField() is true. This
5412   // matters in C where getSourceBitField() will find bit-fields for various
5413   // cases where the source expression is not a bit-field designator.
5414 
5415   FieldDecl *Field = E->getSourceBitField(); // FIXME: conditional bit-fields?
5416   if (!Field)
5417     return QualType();
5418 
5419   QualType FT = Field->getType();
5420 
5421   uint64_t BitWidth = Field->getBitWidthValue(*this);
5422   uint64_t IntSize = getTypeSize(IntTy);
5423   // C++ [conv.prom]p5:
5424   //   A prvalue for an integral bit-field can be converted to a prvalue of type
5425   //   int if int can represent all the values of the bit-field; otherwise, it
5426   //   can be converted to unsigned int if unsigned int can represent all the
5427   //   values of the bit-field. If the bit-field is larger yet, no integral
5428   //   promotion applies to it.
5429   // C11 6.3.1.1/2:
5430   //   [For a bit-field of type _Bool, int, signed int, or unsigned int:]
5431   //   If an int can represent all values of the original type (as restricted by
5432   //   the width, for a bit-field), the value is converted to an int; otherwise,
5433   //   it is converted to an unsigned int.
5434   //
5435   // FIXME: C does not permit promotion of a 'long : 3' bitfield to int.
5436   //        We perform that promotion here to match GCC and C++.
5437   if (BitWidth < IntSize)
5438     return IntTy;
5439 
5440   if (BitWidth == IntSize)
5441     return FT->isSignedIntegerType() ? IntTy : UnsignedIntTy;
5442 
5443   // Types bigger than int are not subject to promotions, and therefore act
5444   // like the base type. GCC has some weird bugs in this area that we
5445   // deliberately do not follow (GCC follows a pre-standard resolution to
5446   // C's DR315 which treats bit-width as being part of the type, and this leaks
5447   // into their semantics in some cases).
5448   return QualType();
5449 }
5450 
5451 /// getPromotedIntegerType - Returns the type that Promotable will
5452 /// promote to: C99 6.3.1.1p2, assuming that Promotable is a promotable
5453 /// integer type.
5454 QualType ASTContext::getPromotedIntegerType(QualType Promotable) const {
5455   assert(!Promotable.isNull());
5456   assert(Promotable->isPromotableIntegerType());
5457   if (const EnumType *ET = Promotable->getAs<EnumType>())
5458     return ET->getDecl()->getPromotionType();
5459 
5460   if (const BuiltinType *BT = Promotable->getAs<BuiltinType>()) {
5461     // C++ [conv.prom]: A prvalue of type char16_t, char32_t, or wchar_t
5462     // (3.9.1) can be converted to a prvalue of the first of the following
5463     // types that can represent all the values of its underlying type:
5464     // int, unsigned int, long int, unsigned long int, long long int, or
5465     // unsigned long long int [...]
5466     // FIXME: Is there some better way to compute this?
5467     if (BT->getKind() == BuiltinType::WChar_S ||
5468         BT->getKind() == BuiltinType::WChar_U ||
5469         BT->getKind() == BuiltinType::Char16 ||
5470         BT->getKind() == BuiltinType::Char32) {
5471       bool FromIsSigned = BT->getKind() == BuiltinType::WChar_S;
5472       uint64_t FromSize = getTypeSize(BT);
5473       QualType PromoteTypes[] = { IntTy, UnsignedIntTy, LongTy, UnsignedLongTy,
5474                                   LongLongTy, UnsignedLongLongTy };
5475       for (size_t Idx = 0; Idx < llvm::array_lengthof(PromoteTypes); ++Idx) {
5476         uint64_t ToSize = getTypeSize(PromoteTypes[Idx]);
5477         if (FromSize < ToSize ||
5478             (FromSize == ToSize &&
5479              FromIsSigned == PromoteTypes[Idx]->isSignedIntegerType()))
5480           return PromoteTypes[Idx];
5481       }
5482       llvm_unreachable("char type should fit into long long");
5483     }
5484   }
5485 
5486   // At this point, we should have a signed or unsigned integer type.
5487   if (Promotable->isSignedIntegerType())
5488     return IntTy;
5489   uint64_t PromotableSize = getIntWidth(Promotable);
5490   uint64_t IntSize = getIntWidth(IntTy);
5491   assert(Promotable->isUnsignedIntegerType() && PromotableSize <= IntSize);
5492   return (PromotableSize != IntSize) ? IntTy : UnsignedIntTy;
5493 }
5494 
5495 /// \brief Recurses in pointer/array types until it finds an objc retainable
5496 /// type and returns its ownership.
5497 Qualifiers::ObjCLifetime ASTContext::getInnerObjCOwnership(QualType T) const {
5498   while (!T.isNull()) {
5499     if (T.getObjCLifetime() != Qualifiers::OCL_None)
5500       return T.getObjCLifetime();
5501     if (T->isArrayType())
5502       T = getBaseElementType(T);
5503     else if (const PointerType *PT = T->getAs<PointerType>())
5504       T = PT->getPointeeType();
5505     else if (const ReferenceType *RT = T->getAs<ReferenceType>())
5506       T = RT->getPointeeType();
5507     else
5508       break;
5509   }
5510 
5511   return Qualifiers::OCL_None;
5512 }
5513 
5514 static const Type *getIntegerTypeForEnum(const EnumType *ET) {
5515   // Incomplete enum types are not treated as integer types.
5516   // FIXME: In C++, enum types are never integer types.
5517   if (ET->getDecl()->isComplete() && !ET->getDecl()->isScoped())
5518     return ET->getDecl()->getIntegerType().getTypePtr();
5519   return nullptr;
5520 }
5521 
5522 /// getIntegerTypeOrder - Returns the highest ranked integer type:
5523 /// C99 6.3.1.8p1.  If LHS > RHS, return 1.  If LHS == RHS, return 0. If
5524 /// LHS < RHS, return -1.
5525 int ASTContext::getIntegerTypeOrder(QualType LHS, QualType RHS) const {
5526   const Type *LHSC = getCanonicalType(LHS).getTypePtr();
5527   const Type *RHSC = getCanonicalType(RHS).getTypePtr();
5528 
5529   // Unwrap enums to their underlying type.
5530   if (const EnumType *ET = dyn_cast<EnumType>(LHSC))
5531     LHSC = getIntegerTypeForEnum(ET);
5532   if (const EnumType *ET = dyn_cast<EnumType>(RHSC))
5533     RHSC = getIntegerTypeForEnum(ET);
5534 
5535   if (LHSC == RHSC) return 0;
5536 
5537   bool LHSUnsigned = LHSC->isUnsignedIntegerType();
5538   bool RHSUnsigned = RHSC->isUnsignedIntegerType();
5539 
5540   unsigned LHSRank = getIntegerRank(LHSC);
5541   unsigned RHSRank = getIntegerRank(RHSC);
5542 
5543   if (LHSUnsigned == RHSUnsigned) {  // Both signed or both unsigned.
5544     if (LHSRank == RHSRank) return 0;
5545     return LHSRank > RHSRank ? 1 : -1;
5546   }
5547 
5548   // Otherwise, the LHS is signed and the RHS is unsigned or visa versa.
5549   if (LHSUnsigned) {
5550     // If the unsigned [LHS] type is larger, return it.
5551     if (LHSRank >= RHSRank)
5552       return 1;
5553 
5554     // If the signed type can represent all values of the unsigned type, it
5555     // wins.  Because we are dealing with 2's complement and types that are
5556     // powers of two larger than each other, this is always safe.
5557     return -1;
5558   }
5559 
5560   // If the unsigned [RHS] type is larger, return it.
5561   if (RHSRank >= LHSRank)
5562     return -1;
5563 
5564   // If the signed type can represent all values of the unsigned type, it
5565   // wins.  Because we are dealing with 2's complement and types that are
5566   // powers of two larger than each other, this is always safe.
5567   return 1;
5568 }
5569 
5570 TypedefDecl *ASTContext::getCFConstantStringDecl() const {
5571   if (!CFConstantStringTypeDecl) {
5572     assert(!CFConstantStringTagDecl &&
5573            "tag and typedef should be initialized together");
5574     CFConstantStringTagDecl = buildImplicitRecord("__NSConstantString_tag");
5575     CFConstantStringTagDecl->startDefinition();
5576 
5577     QualType FieldTypes[4];
5578     const char *FieldNames[4];
5579 
5580     // const int *isa;
5581     FieldTypes[0] = getPointerType(IntTy.withConst());
5582     FieldNames[0] = "isa";
5583     // int flags;
5584     FieldTypes[1] = IntTy;
5585     FieldNames[1] = "flags";
5586     // const char *str;
5587     FieldTypes[2] = getPointerType(CharTy.withConst());
5588     FieldNames[2] = "str";
5589     // long length;
5590     FieldTypes[3] = LongTy;
5591     FieldNames[3] = "length";
5592 
5593     // Create fields
5594     for (unsigned i = 0; i < 4; ++i) {
5595       FieldDecl *Field = FieldDecl::Create(*this, CFConstantStringTagDecl,
5596                                            SourceLocation(),
5597                                            SourceLocation(),
5598                                            &Idents.get(FieldNames[i]),
5599                                            FieldTypes[i], /*TInfo=*/nullptr,
5600                                            /*BitWidth=*/nullptr,
5601                                            /*Mutable=*/false,
5602                                            ICIS_NoInit);
5603       Field->setAccess(AS_public);
5604       CFConstantStringTagDecl->addDecl(Field);
5605     }
5606 
5607     CFConstantStringTagDecl->completeDefinition();
5608     // This type is designed to be compatible with NSConstantString, but cannot
5609     // use the same name, since NSConstantString is an interface.
5610     auto tagType = getTagDeclType(CFConstantStringTagDecl);
5611     CFConstantStringTypeDecl =
5612         buildImplicitTypedef(tagType, "__NSConstantString");
5613   }
5614 
5615   return CFConstantStringTypeDecl;
5616 }
5617 
5618 RecordDecl *ASTContext::getCFConstantStringTagDecl() const {
5619   if (!CFConstantStringTagDecl)
5620     getCFConstantStringDecl(); // Build the tag and the typedef.
5621   return CFConstantStringTagDecl;
5622 }
5623 
5624 // getCFConstantStringType - Return the type used for constant CFStrings.
5625 QualType ASTContext::getCFConstantStringType() const {
5626   return getTypedefType(getCFConstantStringDecl());
5627 }
5628 
5629 QualType ASTContext::getObjCSuperType() const {
5630   if (ObjCSuperType.isNull()) {
5631     RecordDecl *ObjCSuperTypeDecl = buildImplicitRecord("objc_super");
5632     TUDecl->addDecl(ObjCSuperTypeDecl);
5633     ObjCSuperType = getTagDeclType(ObjCSuperTypeDecl);
5634   }
5635   return ObjCSuperType;
5636 }
5637 
5638 void ASTContext::setCFConstantStringType(QualType T) {
5639   const TypedefType *TD = T->getAs<TypedefType>();
5640   assert(TD && "Invalid CFConstantStringType");
5641   CFConstantStringTypeDecl = cast<TypedefDecl>(TD->getDecl());
5642   auto TagType =
5643       CFConstantStringTypeDecl->getUnderlyingType()->getAs<RecordType>();
5644   assert(TagType && "Invalid CFConstantStringType");
5645   CFConstantStringTagDecl = TagType->getDecl();
5646 }
5647 
5648 QualType ASTContext::getBlockDescriptorType() const {
5649   if (BlockDescriptorType)
5650     return getTagDeclType(BlockDescriptorType);
5651 
5652   RecordDecl *RD;
5653   // FIXME: Needs the FlagAppleBlock bit.
5654   RD = buildImplicitRecord("__block_descriptor");
5655   RD->startDefinition();
5656 
5657   QualType FieldTypes[] = {
5658     UnsignedLongTy,
5659     UnsignedLongTy,
5660   };
5661 
5662   static const char *const FieldNames[] = {
5663     "reserved",
5664     "Size"
5665   };
5666 
5667   for (size_t i = 0; i < 2; ++i) {
5668     FieldDecl *Field = FieldDecl::Create(
5669         *this, RD, SourceLocation(), SourceLocation(),
5670         &Idents.get(FieldNames[i]), FieldTypes[i], /*TInfo=*/nullptr,
5671         /*BitWidth=*/nullptr, /*Mutable=*/false, ICIS_NoInit);
5672     Field->setAccess(AS_public);
5673     RD->addDecl(Field);
5674   }
5675 
5676   RD->completeDefinition();
5677 
5678   BlockDescriptorType = RD;
5679 
5680   return getTagDeclType(BlockDescriptorType);
5681 }
5682 
5683 QualType ASTContext::getBlockDescriptorExtendedType() const {
5684   if (BlockDescriptorExtendedType)
5685     return getTagDeclType(BlockDescriptorExtendedType);
5686 
5687   RecordDecl *RD;
5688   // FIXME: Needs the FlagAppleBlock bit.
5689   RD = buildImplicitRecord("__block_descriptor_withcopydispose");
5690   RD->startDefinition();
5691 
5692   QualType FieldTypes[] = {
5693     UnsignedLongTy,
5694     UnsignedLongTy,
5695     getPointerType(VoidPtrTy),
5696     getPointerType(VoidPtrTy)
5697   };
5698 
5699   static const char *const FieldNames[] = {
5700     "reserved",
5701     "Size",
5702     "CopyFuncPtr",
5703     "DestroyFuncPtr"
5704   };
5705 
5706   for (size_t i = 0; i < 4; ++i) {
5707     FieldDecl *Field = FieldDecl::Create(
5708         *this, RD, SourceLocation(), SourceLocation(),
5709         &Idents.get(FieldNames[i]), FieldTypes[i], /*TInfo=*/nullptr,
5710         /*BitWidth=*/nullptr,
5711         /*Mutable=*/false, ICIS_NoInit);
5712     Field->setAccess(AS_public);
5713     RD->addDecl(Field);
5714   }
5715 
5716   RD->completeDefinition();
5717 
5718   BlockDescriptorExtendedType = RD;
5719   return getTagDeclType(BlockDescriptorExtendedType);
5720 }
5721 
5722 TargetInfo::OpenCLTypeKind ASTContext::getOpenCLTypeKind(const Type *T) const {
5723   auto BT = dyn_cast<BuiltinType>(T);
5724 
5725   if (!BT) {
5726     if (isa<PipeType>(T))
5727       return TargetInfo::OCLTK_Pipe;
5728 
5729     return TargetInfo::OCLTK_Default;
5730   }
5731 
5732   switch (BT->getKind()) {
5733 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix)                   \
5734   case BuiltinType::Id:                                                        \
5735     return TargetInfo::OCLTK_Image;
5736 #include "clang/Basic/OpenCLImageTypes.def"
5737 
5738   case BuiltinType::OCLClkEvent:
5739     return TargetInfo::OCLTK_ClkEvent;
5740 
5741   case BuiltinType::OCLEvent:
5742     return TargetInfo::OCLTK_Event;
5743 
5744   case BuiltinType::OCLQueue:
5745     return TargetInfo::OCLTK_Queue;
5746 
5747   case BuiltinType::OCLReserveID:
5748     return TargetInfo::OCLTK_ReserveID;
5749 
5750   case BuiltinType::OCLSampler:
5751     return TargetInfo::OCLTK_Sampler;
5752 
5753   default:
5754     return TargetInfo::OCLTK_Default;
5755   }
5756 }
5757 
5758 LangAS ASTContext::getOpenCLTypeAddrSpace(const Type *T) const {
5759   return Target->getOpenCLTypeAddrSpace(getOpenCLTypeKind(T));
5760 }
5761 
5762 /// BlockRequiresCopying - Returns true if byref variable "D" of type "Ty"
5763 /// requires copy/dispose. Note that this must match the logic
5764 /// in buildByrefHelpers.
5765 bool ASTContext::BlockRequiresCopying(QualType Ty,
5766                                       const VarDecl *D) {
5767   if (const CXXRecordDecl *record = Ty->getAsCXXRecordDecl()) {
5768     const Expr *copyExpr = getBlockVarCopyInits(D);
5769     if (!copyExpr && record->hasTrivialDestructor()) return false;
5770 
5771     return true;
5772   }
5773 
5774   if (!Ty->isObjCRetainableType()) return false;
5775 
5776   Qualifiers qs = Ty.getQualifiers();
5777 
5778   // If we have lifetime, that dominates.
5779   if (Qualifiers::ObjCLifetime lifetime = qs.getObjCLifetime()) {
5780     switch (lifetime) {
5781       case Qualifiers::OCL_None: llvm_unreachable("impossible");
5782 
5783       // These are just bits as far as the runtime is concerned.
5784       case Qualifiers::OCL_ExplicitNone:
5785       case Qualifiers::OCL_Autoreleasing:
5786         return false;
5787 
5788       // Tell the runtime that this is ARC __weak, called by the
5789       // byref routines.
5790       case Qualifiers::OCL_Weak:
5791       // ARC __strong __block variables need to be retained.
5792       case Qualifiers::OCL_Strong:
5793         return true;
5794     }
5795     llvm_unreachable("fell out of lifetime switch!");
5796   }
5797   return (Ty->isBlockPointerType() || isObjCNSObjectType(Ty) ||
5798           Ty->isObjCObjectPointerType());
5799 }
5800 
5801 bool ASTContext::getByrefLifetime(QualType Ty,
5802                               Qualifiers::ObjCLifetime &LifeTime,
5803                               bool &HasByrefExtendedLayout) const {
5804   if (!getLangOpts().ObjC1 ||
5805       getLangOpts().getGC() != LangOptions::NonGC)
5806     return false;
5807 
5808   HasByrefExtendedLayout = false;
5809   if (Ty->isRecordType()) {
5810     HasByrefExtendedLayout = true;
5811     LifeTime = Qualifiers::OCL_None;
5812   } else if ((LifeTime = Ty.getObjCLifetime())) {
5813     // Honor the ARC qualifiers.
5814   } else if (Ty->isObjCObjectPointerType() || Ty->isBlockPointerType()) {
5815     // The MRR rule.
5816     LifeTime = Qualifiers::OCL_ExplicitNone;
5817   } else {
5818     LifeTime = Qualifiers::OCL_None;
5819   }
5820   return true;
5821 }
5822 
5823 TypedefDecl *ASTContext::getObjCInstanceTypeDecl() {
5824   if (!ObjCInstanceTypeDecl)
5825     ObjCInstanceTypeDecl =
5826         buildImplicitTypedef(getObjCIdType(), "instancetype");
5827   return ObjCInstanceTypeDecl;
5828 }
5829 
5830 // This returns true if a type has been typedefed to BOOL:
5831 // typedef <type> BOOL;
5832 static bool isTypeTypedefedAsBOOL(QualType T) {
5833   if (const TypedefType *TT = dyn_cast<TypedefType>(T))
5834     if (IdentifierInfo *II = TT->getDecl()->getIdentifier())
5835       return II->isStr("BOOL");
5836 
5837   return false;
5838 }
5839 
5840 /// getObjCEncodingTypeSize returns size of type for objective-c encoding
5841 /// purpose.
5842 CharUnits ASTContext::getObjCEncodingTypeSize(QualType type) const {
5843   if (!type->isIncompleteArrayType() && type->isIncompleteType())
5844     return CharUnits::Zero();
5845 
5846   CharUnits sz = getTypeSizeInChars(type);
5847 
5848   // Make all integer and enum types at least as large as an int
5849   if (sz.isPositive() && type->isIntegralOrEnumerationType())
5850     sz = std::max(sz, getTypeSizeInChars(IntTy));
5851   // Treat arrays as pointers, since that's how they're passed in.
5852   else if (type->isArrayType())
5853     sz = getTypeSizeInChars(VoidPtrTy);
5854   return sz;
5855 }
5856 
5857 bool ASTContext::isMSStaticDataMemberInlineDefinition(const VarDecl *VD) const {
5858   return getTargetInfo().getCXXABI().isMicrosoft() &&
5859          VD->isStaticDataMember() &&
5860          VD->getType()->isIntegralOrEnumerationType() &&
5861          !VD->getFirstDecl()->isOutOfLine() && VD->getFirstDecl()->hasInit();
5862 }
5863 
5864 ASTContext::InlineVariableDefinitionKind
5865 ASTContext::getInlineVariableDefinitionKind(const VarDecl *VD) const {
5866   if (!VD->isInline())
5867     return InlineVariableDefinitionKind::None;
5868 
5869   // In almost all cases, it's a weak definition.
5870   auto *First = VD->getFirstDecl();
5871   if (First->isInlineSpecified() || !First->isStaticDataMember())
5872     return InlineVariableDefinitionKind::Weak;
5873 
5874   // If there's a file-context declaration in this translation unit, it's a
5875   // non-discardable definition.
5876   for (auto *D : VD->redecls())
5877     if (D->getLexicalDeclContext()->isFileContext() &&
5878         !D->isInlineSpecified() && (D->isConstexpr() || First->isConstexpr()))
5879       return InlineVariableDefinitionKind::Strong;
5880 
5881   // If we've not seen one yet, we don't know.
5882   return InlineVariableDefinitionKind::WeakUnknown;
5883 }
5884 
5885 static inline
5886 std::string charUnitsToString(const CharUnits &CU) {
5887   return llvm::itostr(CU.getQuantity());
5888 }
5889 
5890 /// getObjCEncodingForBlock - Return the encoded type for this block
5891 /// declaration.
5892 std::string ASTContext::getObjCEncodingForBlock(const BlockExpr *Expr) const {
5893   std::string S;
5894 
5895   const BlockDecl *Decl = Expr->getBlockDecl();
5896   QualType BlockTy =
5897       Expr->getType()->getAs<BlockPointerType>()->getPointeeType();
5898   // Encode result type.
5899   if (getLangOpts().EncodeExtendedBlockSig)
5900     getObjCEncodingForMethodParameter(
5901         Decl::OBJC_TQ_None, BlockTy->getAs<FunctionType>()->getReturnType(), S,
5902         true /*Extended*/);
5903   else
5904     getObjCEncodingForType(BlockTy->getAs<FunctionType>()->getReturnType(), S);
5905   // Compute size of all parameters.
5906   // Start with computing size of a pointer in number of bytes.
5907   // FIXME: There might(should) be a better way of doing this computation!
5908   CharUnits PtrSize = getTypeSizeInChars(VoidPtrTy);
5909   CharUnits ParmOffset = PtrSize;
5910   for (auto PI : Decl->parameters()) {
5911     QualType PType = PI->getType();
5912     CharUnits sz = getObjCEncodingTypeSize(PType);
5913     if (sz.isZero())
5914       continue;
5915     assert(sz.isPositive() && "BlockExpr - Incomplete param type");
5916     ParmOffset += sz;
5917   }
5918   // Size of the argument frame
5919   S += charUnitsToString(ParmOffset);
5920   // Block pointer and offset.
5921   S += "@?0";
5922 
5923   // Argument types.
5924   ParmOffset = PtrSize;
5925   for (auto PVDecl : Decl->parameters()) {
5926     QualType PType = PVDecl->getOriginalType();
5927     if (const ArrayType *AT =
5928           dyn_cast<ArrayType>(PType->getCanonicalTypeInternal())) {
5929       // Use array's original type only if it has known number of
5930       // elements.
5931       if (!isa<ConstantArrayType>(AT))
5932         PType = PVDecl->getType();
5933     } else if (PType->isFunctionType())
5934       PType = PVDecl->getType();
5935     if (getLangOpts().EncodeExtendedBlockSig)
5936       getObjCEncodingForMethodParameter(Decl::OBJC_TQ_None, PType,
5937                                       S, true /*Extended*/);
5938     else
5939       getObjCEncodingForType(PType, S);
5940     S += charUnitsToString(ParmOffset);
5941     ParmOffset += getObjCEncodingTypeSize(PType);
5942   }
5943 
5944   return S;
5945 }
5946 
5947 std::string
5948 ASTContext::getObjCEncodingForFunctionDecl(const FunctionDecl *Decl) const {
5949   std::string S;
5950   // Encode result type.
5951   getObjCEncodingForType(Decl->getReturnType(), S);
5952   CharUnits ParmOffset;
5953   // Compute size of all parameters.
5954   for (auto PI : Decl->parameters()) {
5955     QualType PType = PI->getType();
5956     CharUnits sz = getObjCEncodingTypeSize(PType);
5957     if (sz.isZero())
5958       continue;
5959 
5960     assert(sz.isPositive() &&
5961            "getObjCEncodingForFunctionDecl - Incomplete param type");
5962     ParmOffset += sz;
5963   }
5964   S += charUnitsToString(ParmOffset);
5965   ParmOffset = CharUnits::Zero();
5966 
5967   // Argument types.
5968   for (auto PVDecl : Decl->parameters()) {
5969     QualType PType = PVDecl->getOriginalType();
5970     if (const ArrayType *AT =
5971           dyn_cast<ArrayType>(PType->getCanonicalTypeInternal())) {
5972       // Use array's original type only if it has known number of
5973       // elements.
5974       if (!isa<ConstantArrayType>(AT))
5975         PType = PVDecl->getType();
5976     } else if (PType->isFunctionType())
5977       PType = PVDecl->getType();
5978     getObjCEncodingForType(PType, S);
5979     S += charUnitsToString(ParmOffset);
5980     ParmOffset += getObjCEncodingTypeSize(PType);
5981   }
5982 
5983   return S;
5984 }
5985 
5986 /// getObjCEncodingForMethodParameter - Return the encoded type for a single
5987 /// method parameter or return type. If Extended, include class names and
5988 /// block object types.
5989 void ASTContext::getObjCEncodingForMethodParameter(Decl::ObjCDeclQualifier QT,
5990                                                    QualType T, std::string& S,
5991                                                    bool Extended) const {
5992   // Encode type qualifer, 'in', 'inout', etc. for the parameter.
5993   getObjCEncodingForTypeQualifier(QT, S);
5994   // Encode parameter type.
5995   getObjCEncodingForTypeImpl(T, S, true, true, nullptr,
5996                              true     /*OutermostType*/,
5997                              false    /*EncodingProperty*/,
5998                              false    /*StructField*/,
5999                              Extended /*EncodeBlockParameters*/,
6000                              Extended /*EncodeClassNames*/);
6001 }
6002 
6003 /// getObjCEncodingForMethodDecl - Return the encoded type for this method
6004 /// declaration.
6005 std::string ASTContext::getObjCEncodingForMethodDecl(const ObjCMethodDecl *Decl,
6006                                                      bool Extended) const {
6007   // FIXME: This is not very efficient.
6008   // Encode return type.
6009   std::string S;
6010   getObjCEncodingForMethodParameter(Decl->getObjCDeclQualifier(),
6011                                     Decl->getReturnType(), S, Extended);
6012   // Compute size of all parameters.
6013   // Start with computing size of a pointer in number of bytes.
6014   // FIXME: There might(should) be a better way of doing this computation!
6015   CharUnits PtrSize = getTypeSizeInChars(VoidPtrTy);
6016   // The first two arguments (self and _cmd) are pointers; account for
6017   // their size.
6018   CharUnits ParmOffset = 2 * PtrSize;
6019   for (ObjCMethodDecl::param_const_iterator PI = Decl->param_begin(),
6020        E = Decl->sel_param_end(); PI != E; ++PI) {
6021     QualType PType = (*PI)->getType();
6022     CharUnits sz = getObjCEncodingTypeSize(PType);
6023     if (sz.isZero())
6024       continue;
6025 
6026     assert(sz.isPositive() &&
6027            "getObjCEncodingForMethodDecl - Incomplete param type");
6028     ParmOffset += sz;
6029   }
6030   S += charUnitsToString(ParmOffset);
6031   S += "@0:";
6032   S += charUnitsToString(PtrSize);
6033 
6034   // Argument types.
6035   ParmOffset = 2 * PtrSize;
6036   for (ObjCMethodDecl::param_const_iterator PI = Decl->param_begin(),
6037        E = Decl->sel_param_end(); PI != E; ++PI) {
6038     const ParmVarDecl *PVDecl = *PI;
6039     QualType PType = PVDecl->getOriginalType();
6040     if (const ArrayType *AT =
6041           dyn_cast<ArrayType>(PType->getCanonicalTypeInternal())) {
6042       // Use array's original type only if it has known number of
6043       // elements.
6044       if (!isa<ConstantArrayType>(AT))
6045         PType = PVDecl->getType();
6046     } else if (PType->isFunctionType())
6047       PType = PVDecl->getType();
6048     getObjCEncodingForMethodParameter(PVDecl->getObjCDeclQualifier(),
6049                                       PType, S, Extended);
6050     S += charUnitsToString(ParmOffset);
6051     ParmOffset += getObjCEncodingTypeSize(PType);
6052   }
6053 
6054   return S;
6055 }
6056 
6057 ObjCPropertyImplDecl *
6058 ASTContext::getObjCPropertyImplDeclForPropertyDecl(
6059                                       const ObjCPropertyDecl *PD,
6060                                       const Decl *Container) const {
6061   if (!Container)
6062     return nullptr;
6063   if (const ObjCCategoryImplDecl *CID =
6064       dyn_cast<ObjCCategoryImplDecl>(Container)) {
6065     for (auto *PID : CID->property_impls())
6066       if (PID->getPropertyDecl() == PD)
6067         return PID;
6068   } else {
6069     const ObjCImplementationDecl *OID=cast<ObjCImplementationDecl>(Container);
6070     for (auto *PID : OID->property_impls())
6071       if (PID->getPropertyDecl() == PD)
6072         return PID;
6073   }
6074   return nullptr;
6075 }
6076 
6077 /// getObjCEncodingForPropertyDecl - Return the encoded type for this
6078 /// property declaration. If non-NULL, Container must be either an
6079 /// ObjCCategoryImplDecl or ObjCImplementationDecl; it should only be
6080 /// NULL when getting encodings for protocol properties.
6081 /// Property attributes are stored as a comma-delimited C string. The simple
6082 /// attributes readonly and bycopy are encoded as single characters. The
6083 /// parametrized attributes, getter=name, setter=name, and ivar=name, are
6084 /// encoded as single characters, followed by an identifier. Property types
6085 /// are also encoded as a parametrized attribute. The characters used to encode
6086 /// these attributes are defined by the following enumeration:
6087 /// @code
6088 /// enum PropertyAttributes {
6089 /// kPropertyReadOnly = 'R',   // property is read-only.
6090 /// kPropertyBycopy = 'C',     // property is a copy of the value last assigned
6091 /// kPropertyByref = '&',  // property is a reference to the value last assigned
6092 /// kPropertyDynamic = 'D',    // property is dynamic
6093 /// kPropertyGetter = 'G',     // followed by getter selector name
6094 /// kPropertySetter = 'S',     // followed by setter selector name
6095 /// kPropertyInstanceVariable = 'V'  // followed by instance variable  name
6096 /// kPropertyType = 'T'              // followed by old-style type encoding.
6097 /// kPropertyWeak = 'W'              // 'weak' property
6098 /// kPropertyStrong = 'P'            // property GC'able
6099 /// kPropertyNonAtomic = 'N'         // property non-atomic
6100 /// };
6101 /// @endcode
6102 std::string
6103 ASTContext::getObjCEncodingForPropertyDecl(const ObjCPropertyDecl *PD,
6104                                            const Decl *Container) const {
6105   // Collect information from the property implementation decl(s).
6106   bool Dynamic = false;
6107   ObjCPropertyImplDecl *SynthesizePID = nullptr;
6108 
6109   if (ObjCPropertyImplDecl *PropertyImpDecl =
6110       getObjCPropertyImplDeclForPropertyDecl(PD, Container)) {
6111     if (PropertyImpDecl->getPropertyImplementation() == ObjCPropertyImplDecl::Dynamic)
6112       Dynamic = true;
6113     else
6114       SynthesizePID = PropertyImpDecl;
6115   }
6116 
6117   // FIXME: This is not very efficient.
6118   std::string S = "T";
6119 
6120   // Encode result type.
6121   // GCC has some special rules regarding encoding of properties which
6122   // closely resembles encoding of ivars.
6123   getObjCEncodingForPropertyType(PD->getType(), S);
6124 
6125   if (PD->isReadOnly()) {
6126     S += ",R";
6127     if (PD->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_copy)
6128       S += ",C";
6129     if (PD->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_retain)
6130       S += ",&";
6131     if (PD->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_weak)
6132       S += ",W";
6133   } else {
6134     switch (PD->getSetterKind()) {
6135     case ObjCPropertyDecl::Assign: break;
6136     case ObjCPropertyDecl::Copy:   S += ",C"; break;
6137     case ObjCPropertyDecl::Retain: S += ",&"; break;
6138     case ObjCPropertyDecl::Weak:   S += ",W"; break;
6139     }
6140   }
6141 
6142   // It really isn't clear at all what this means, since properties
6143   // are "dynamic by default".
6144   if (Dynamic)
6145     S += ",D";
6146 
6147   if (PD->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_nonatomic)
6148     S += ",N";
6149 
6150   if (PD->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_getter) {
6151     S += ",G";
6152     S += PD->getGetterName().getAsString();
6153   }
6154 
6155   if (PD->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_setter) {
6156     S += ",S";
6157     S += PD->getSetterName().getAsString();
6158   }
6159 
6160   if (SynthesizePID) {
6161     const ObjCIvarDecl *OID = SynthesizePID->getPropertyIvarDecl();
6162     S += ",V";
6163     S += OID->getNameAsString();
6164   }
6165 
6166   // FIXME: OBJCGC: weak & strong
6167   return S;
6168 }
6169 
6170 /// getLegacyIntegralTypeEncoding -
6171 /// Another legacy compatibility encoding: 32-bit longs are encoded as
6172 /// 'l' or 'L' , but not always.  For typedefs, we need to use
6173 /// 'i' or 'I' instead if encoding a struct field, or a pointer!
6174 void ASTContext::getLegacyIntegralTypeEncoding (QualType &PointeeTy) const {
6175   if (isa<TypedefType>(PointeeTy.getTypePtr())) {
6176     if (const BuiltinType *BT = PointeeTy->getAs<BuiltinType>()) {
6177       if (BT->getKind() == BuiltinType::ULong && getIntWidth(PointeeTy) == 32)
6178         PointeeTy = UnsignedIntTy;
6179       else
6180         if (BT->getKind() == BuiltinType::Long && getIntWidth(PointeeTy) == 32)
6181           PointeeTy = IntTy;
6182     }
6183   }
6184 }
6185 
6186 void ASTContext::getObjCEncodingForType(QualType T, std::string& S,
6187                                         const FieldDecl *Field,
6188                                         QualType *NotEncodedT) const {
6189   // We follow the behavior of gcc, expanding structures which are
6190   // directly pointed to, and expanding embedded structures. Note that
6191   // these rules are sufficient to prevent recursive encoding of the
6192   // same type.
6193   getObjCEncodingForTypeImpl(T, S, true, true, Field,
6194                              true /* outermost type */, false, false,
6195                              false, false, false, NotEncodedT);
6196 }
6197 
6198 void ASTContext::getObjCEncodingForPropertyType(QualType T,
6199                                                 std::string& S) const {
6200   // Encode result type.
6201   // GCC has some special rules regarding encoding of properties which
6202   // closely resembles encoding of ivars.
6203   getObjCEncodingForTypeImpl(T, S, true, true, nullptr,
6204                              true /* outermost type */,
6205                              true /* encoding property */);
6206 }
6207 
6208 static char getObjCEncodingForPrimitiveKind(const ASTContext *C,
6209                                             BuiltinType::Kind kind) {
6210     switch (kind) {
6211     case BuiltinType::Void:       return 'v';
6212     case BuiltinType::Bool:       return 'B';
6213     case BuiltinType::Char_U:
6214     case BuiltinType::UChar:      return 'C';
6215     case BuiltinType::Char16:
6216     case BuiltinType::UShort:     return 'S';
6217     case BuiltinType::Char32:
6218     case BuiltinType::UInt:       return 'I';
6219     case BuiltinType::ULong:
6220         return C->getTargetInfo().getLongWidth() == 32 ? 'L' : 'Q';
6221     case BuiltinType::UInt128:    return 'T';
6222     case BuiltinType::ULongLong:  return 'Q';
6223     case BuiltinType::Char_S:
6224     case BuiltinType::SChar:      return 'c';
6225     case BuiltinType::Short:      return 's';
6226     case BuiltinType::WChar_S:
6227     case BuiltinType::WChar_U:
6228     case BuiltinType::Int:        return 'i';
6229     case BuiltinType::Long:
6230       return C->getTargetInfo().getLongWidth() == 32 ? 'l' : 'q';
6231     case BuiltinType::LongLong:   return 'q';
6232     case BuiltinType::Int128:     return 't';
6233     case BuiltinType::Float:      return 'f';
6234     case BuiltinType::Double:     return 'd';
6235     case BuiltinType::LongDouble: return 'D';
6236     case BuiltinType::NullPtr:    return '*'; // like char*
6237 
6238     case BuiltinType::Float16:
6239     case BuiltinType::Float128:
6240     case BuiltinType::Half:
6241       // FIXME: potentially need @encodes for these!
6242       return ' ';
6243 
6244     case BuiltinType::ObjCId:
6245     case BuiltinType::ObjCClass:
6246     case BuiltinType::ObjCSel:
6247       llvm_unreachable("@encoding ObjC primitive type");
6248 
6249     // OpenCL and placeholder types don't need @encodings.
6250 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
6251     case BuiltinType::Id:
6252 #include "clang/Basic/OpenCLImageTypes.def"
6253     case BuiltinType::OCLEvent:
6254     case BuiltinType::OCLClkEvent:
6255     case BuiltinType::OCLQueue:
6256     case BuiltinType::OCLReserveID:
6257     case BuiltinType::OCLSampler:
6258     case BuiltinType::Dependent:
6259 #define BUILTIN_TYPE(KIND, ID)
6260 #define PLACEHOLDER_TYPE(KIND, ID) \
6261     case BuiltinType::KIND:
6262 #include "clang/AST/BuiltinTypes.def"
6263       llvm_unreachable("invalid builtin type for @encode");
6264     }
6265     llvm_unreachable("invalid BuiltinType::Kind value");
6266 }
6267 
6268 static char ObjCEncodingForEnumType(const ASTContext *C, const EnumType *ET) {
6269   EnumDecl *Enum = ET->getDecl();
6270 
6271   // The encoding of an non-fixed enum type is always 'i', regardless of size.
6272   if (!Enum->isFixed())
6273     return 'i';
6274 
6275   // The encoding of a fixed enum type matches its fixed underlying type.
6276   const BuiltinType *BT = Enum->getIntegerType()->castAs<BuiltinType>();
6277   return getObjCEncodingForPrimitiveKind(C, BT->getKind());
6278 }
6279 
6280 static void EncodeBitField(const ASTContext *Ctx, std::string& S,
6281                            QualType T, const FieldDecl *FD) {
6282   assert(FD->isBitField() && "not a bitfield - getObjCEncodingForTypeImpl");
6283   S += 'b';
6284   // The NeXT runtime encodes bit fields as b followed by the number of bits.
6285   // The GNU runtime requires more information; bitfields are encoded as b,
6286   // then the offset (in bits) of the first element, then the type of the
6287   // bitfield, then the size in bits.  For example, in this structure:
6288   //
6289   // struct
6290   // {
6291   //    int integer;
6292   //    int flags:2;
6293   // };
6294   // On a 32-bit system, the encoding for flags would be b2 for the NeXT
6295   // runtime, but b32i2 for the GNU runtime.  The reason for this extra
6296   // information is not especially sensible, but we're stuck with it for
6297   // compatibility with GCC, although providing it breaks anything that
6298   // actually uses runtime introspection and wants to work on both runtimes...
6299   if (Ctx->getLangOpts().ObjCRuntime.isGNUFamily()) {
6300     uint64_t Offset;
6301 
6302     if (const auto *IVD = dyn_cast<ObjCIvarDecl>(FD)) {
6303       Offset = Ctx->lookupFieldBitOffset(IVD->getContainingInterface(), nullptr,
6304                                          IVD);
6305     } else {
6306       const RecordDecl *RD = FD->getParent();
6307       const ASTRecordLayout &RL = Ctx->getASTRecordLayout(RD);
6308       Offset = RL.getFieldOffset(FD->getFieldIndex());
6309     }
6310 
6311     S += llvm::utostr(Offset);
6312 
6313     if (const EnumType *ET = T->getAs<EnumType>())
6314       S += ObjCEncodingForEnumType(Ctx, ET);
6315     else {
6316       const BuiltinType *BT = T->castAs<BuiltinType>();
6317       S += getObjCEncodingForPrimitiveKind(Ctx, BT->getKind());
6318     }
6319   }
6320   S += llvm::utostr(FD->getBitWidthValue(*Ctx));
6321 }
6322 
6323 // FIXME: Use SmallString for accumulating string.
6324 void ASTContext::getObjCEncodingForTypeImpl(QualType T, std::string& S,
6325                                             bool ExpandPointedToStructures,
6326                                             bool ExpandStructures,
6327                                             const FieldDecl *FD,
6328                                             bool OutermostType,
6329                                             bool EncodingProperty,
6330                                             bool StructField,
6331                                             bool EncodeBlockParameters,
6332                                             bool EncodeClassNames,
6333                                             bool EncodePointerToObjCTypedef,
6334                                             QualType *NotEncodedT) const {
6335   CanQualType CT = getCanonicalType(T);
6336   switch (CT->getTypeClass()) {
6337   case Type::Builtin:
6338   case Type::Enum:
6339     if (FD && FD->isBitField())
6340       return EncodeBitField(this, S, T, FD);
6341     if (const BuiltinType *BT = dyn_cast<BuiltinType>(CT))
6342       S += getObjCEncodingForPrimitiveKind(this, BT->getKind());
6343     else
6344       S += ObjCEncodingForEnumType(this, cast<EnumType>(CT));
6345     return;
6346 
6347   case Type::Complex: {
6348     const ComplexType *CT = T->castAs<ComplexType>();
6349     S += 'j';
6350     getObjCEncodingForTypeImpl(CT->getElementType(), S, false, false, nullptr);
6351     return;
6352   }
6353 
6354   case Type::Atomic: {
6355     const AtomicType *AT = T->castAs<AtomicType>();
6356     S += 'A';
6357     getObjCEncodingForTypeImpl(AT->getValueType(), S, false, false, nullptr);
6358     return;
6359   }
6360 
6361   // encoding for pointer or reference types.
6362   case Type::Pointer:
6363   case Type::LValueReference:
6364   case Type::RValueReference: {
6365     QualType PointeeTy;
6366     if (isa<PointerType>(CT)) {
6367       const PointerType *PT = T->castAs<PointerType>();
6368       if (PT->isObjCSelType()) {
6369         S += ':';
6370         return;
6371       }
6372       PointeeTy = PT->getPointeeType();
6373     } else {
6374       PointeeTy = T->castAs<ReferenceType>()->getPointeeType();
6375     }
6376 
6377     bool isReadOnly = false;
6378     // For historical/compatibility reasons, the read-only qualifier of the
6379     // pointee gets emitted _before_ the '^'.  The read-only qualifier of
6380     // the pointer itself gets ignored, _unless_ we are looking at a typedef!
6381     // Also, do not emit the 'r' for anything but the outermost type!
6382     if (isa<TypedefType>(T.getTypePtr())) {
6383       if (OutermostType && T.isConstQualified()) {
6384         isReadOnly = true;
6385         S += 'r';
6386       }
6387     } else if (OutermostType) {
6388       QualType P = PointeeTy;
6389       while (P->getAs<PointerType>())
6390         P = P->getAs<PointerType>()->getPointeeType();
6391       if (P.isConstQualified()) {
6392         isReadOnly = true;
6393         S += 'r';
6394       }
6395     }
6396     if (isReadOnly) {
6397       // Another legacy compatibility encoding. Some ObjC qualifier and type
6398       // combinations need to be rearranged.
6399       // Rewrite "in const" from "nr" to "rn"
6400       if (StringRef(S).endswith("nr"))
6401         S.replace(S.end()-2, S.end(), "rn");
6402     }
6403 
6404     if (PointeeTy->isCharType()) {
6405       // char pointer types should be encoded as '*' unless it is a
6406       // type that has been typedef'd to 'BOOL'.
6407       if (!isTypeTypedefedAsBOOL(PointeeTy)) {
6408         S += '*';
6409         return;
6410       }
6411     } else if (const RecordType *RTy = PointeeTy->getAs<RecordType>()) {
6412       // GCC binary compat: Need to convert "struct objc_class *" to "#".
6413       if (RTy->getDecl()->getIdentifier() == &Idents.get("objc_class")) {
6414         S += '#';
6415         return;
6416       }
6417       // GCC binary compat: Need to convert "struct objc_object *" to "@".
6418       if (RTy->getDecl()->getIdentifier() == &Idents.get("objc_object")) {
6419         S += '@';
6420         return;
6421       }
6422       // fall through...
6423     }
6424     S += '^';
6425     getLegacyIntegralTypeEncoding(PointeeTy);
6426 
6427     getObjCEncodingForTypeImpl(PointeeTy, S, false, ExpandPointedToStructures,
6428                                nullptr, false, false, false, false, false, false,
6429                                NotEncodedT);
6430     return;
6431   }
6432 
6433   case Type::ConstantArray:
6434   case Type::IncompleteArray:
6435   case Type::VariableArray: {
6436     const ArrayType *AT = cast<ArrayType>(CT);
6437 
6438     if (isa<IncompleteArrayType>(AT) && !StructField) {
6439       // Incomplete arrays are encoded as a pointer to the array element.
6440       S += '^';
6441 
6442       getObjCEncodingForTypeImpl(AT->getElementType(), S,
6443                                  false, ExpandStructures, FD);
6444     } else {
6445       S += '[';
6446 
6447       if (const ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(AT))
6448         S += llvm::utostr(CAT->getSize().getZExtValue());
6449       else {
6450         //Variable length arrays are encoded as a regular array with 0 elements.
6451         assert((isa<VariableArrayType>(AT) || isa<IncompleteArrayType>(AT)) &&
6452                "Unknown array type!");
6453         S += '0';
6454       }
6455 
6456       getObjCEncodingForTypeImpl(AT->getElementType(), S,
6457                                  false, ExpandStructures, FD,
6458                                  false, false, false, false, false, false,
6459                                  NotEncodedT);
6460       S += ']';
6461     }
6462     return;
6463   }
6464 
6465   case Type::FunctionNoProto:
6466   case Type::FunctionProto:
6467     S += '?';
6468     return;
6469 
6470   case Type::Record: {
6471     RecordDecl *RDecl = cast<RecordType>(CT)->getDecl();
6472     S += RDecl->isUnion() ? '(' : '{';
6473     // Anonymous structures print as '?'
6474     if (const IdentifierInfo *II = RDecl->getIdentifier()) {
6475       S += II->getName();
6476       if (ClassTemplateSpecializationDecl *Spec
6477           = dyn_cast<ClassTemplateSpecializationDecl>(RDecl)) {
6478         const TemplateArgumentList &TemplateArgs = Spec->getTemplateArgs();
6479         llvm::raw_string_ostream OS(S);
6480         printTemplateArgumentList(OS, TemplateArgs.asArray(),
6481                                   getPrintingPolicy());
6482       }
6483     } else {
6484       S += '?';
6485     }
6486     if (ExpandStructures) {
6487       S += '=';
6488       if (!RDecl->isUnion()) {
6489         getObjCEncodingForStructureImpl(RDecl, S, FD, true, NotEncodedT);
6490       } else {
6491         for (const auto *Field : RDecl->fields()) {
6492           if (FD) {
6493             S += '"';
6494             S += Field->getNameAsString();
6495             S += '"';
6496           }
6497 
6498           // Special case bit-fields.
6499           if (Field->isBitField()) {
6500             getObjCEncodingForTypeImpl(Field->getType(), S, false, true,
6501                                        Field);
6502           } else {
6503             QualType qt = Field->getType();
6504             getLegacyIntegralTypeEncoding(qt);
6505             getObjCEncodingForTypeImpl(qt, S, false, true,
6506                                        FD, /*OutermostType*/false,
6507                                        /*EncodingProperty*/false,
6508                                        /*StructField*/true,
6509                                        false, false, false, NotEncodedT);
6510           }
6511         }
6512       }
6513     }
6514     S += RDecl->isUnion() ? ')' : '}';
6515     return;
6516   }
6517 
6518   case Type::BlockPointer: {
6519     const BlockPointerType *BT = T->castAs<BlockPointerType>();
6520     S += "@?"; // Unlike a pointer-to-function, which is "^?".
6521     if (EncodeBlockParameters) {
6522       const FunctionType *FT = BT->getPointeeType()->castAs<FunctionType>();
6523 
6524       S += '<';
6525       // Block return type
6526       getObjCEncodingForTypeImpl(
6527           FT->getReturnType(), S, ExpandPointedToStructures, ExpandStructures,
6528           FD, false /* OutermostType */, EncodingProperty,
6529           false /* StructField */, EncodeBlockParameters, EncodeClassNames, false,
6530                                  NotEncodedT);
6531       // Block self
6532       S += "@?";
6533       // Block parameters
6534       if (const FunctionProtoType *FPT = dyn_cast<FunctionProtoType>(FT)) {
6535         for (const auto &I : FPT->param_types())
6536           getObjCEncodingForTypeImpl(
6537               I, S, ExpandPointedToStructures, ExpandStructures, FD,
6538               false /* OutermostType */, EncodingProperty,
6539               false /* StructField */, EncodeBlockParameters, EncodeClassNames,
6540                                      false, NotEncodedT);
6541       }
6542       S += '>';
6543     }
6544     return;
6545   }
6546 
6547   case Type::ObjCObject: {
6548     // hack to match legacy encoding of *id and *Class
6549     QualType Ty = getObjCObjectPointerType(CT);
6550     if (Ty->isObjCIdType()) {
6551       S += "{objc_object=}";
6552       return;
6553     }
6554     else if (Ty->isObjCClassType()) {
6555       S += "{objc_class=}";
6556       return;
6557     }
6558     // TODO: Double check to make sure this intentially falls through.
6559     LLVM_FALLTHROUGH;
6560   }
6561 
6562   case Type::ObjCInterface: {
6563     // Ignore protocol qualifiers when mangling at this level.
6564     // @encode(class_name)
6565     ObjCInterfaceDecl *OI = T->castAs<ObjCObjectType>()->getInterface();
6566     S += '{';
6567     S += OI->getObjCRuntimeNameAsString();
6568     if (ExpandStructures) {
6569       S += '=';
6570       SmallVector<const ObjCIvarDecl*, 32> Ivars;
6571       DeepCollectObjCIvars(OI, true, Ivars);
6572       for (unsigned i = 0, e = Ivars.size(); i != e; ++i) {
6573         const FieldDecl *Field = cast<FieldDecl>(Ivars[i]);
6574         if (Field->isBitField())
6575           getObjCEncodingForTypeImpl(Field->getType(), S, false, true, Field);
6576         else
6577           getObjCEncodingForTypeImpl(Field->getType(), S, false, true, FD,
6578                                      false, false, false, false, false,
6579                                      EncodePointerToObjCTypedef,
6580                                      NotEncodedT);
6581       }
6582     }
6583     S += '}';
6584     return;
6585   }
6586 
6587   case Type::ObjCObjectPointer: {
6588     const ObjCObjectPointerType *OPT = T->castAs<ObjCObjectPointerType>();
6589     if (OPT->isObjCIdType()) {
6590       S += '@';
6591       return;
6592     }
6593 
6594     if (OPT->isObjCClassType() || OPT->isObjCQualifiedClassType()) {
6595       // FIXME: Consider if we need to output qualifiers for 'Class<p>'.
6596       // Since this is a binary compatibility issue, need to consult with runtime
6597       // folks. Fortunately, this is a *very* obsure construct.
6598       S += '#';
6599       return;
6600     }
6601 
6602     if (OPT->isObjCQualifiedIdType()) {
6603       getObjCEncodingForTypeImpl(getObjCIdType(), S,
6604                                  ExpandPointedToStructures,
6605                                  ExpandStructures, FD);
6606       if (FD || EncodingProperty || EncodeClassNames) {
6607         // Note that we do extended encoding of protocol qualifer list
6608         // Only when doing ivar or property encoding.
6609         S += '"';
6610         for (const auto *I : OPT->quals()) {
6611           S += '<';
6612           S += I->getObjCRuntimeNameAsString();
6613           S += '>';
6614         }
6615         S += '"';
6616       }
6617       return;
6618     }
6619 
6620     QualType PointeeTy = OPT->getPointeeType();
6621     if (!EncodingProperty &&
6622         isa<TypedefType>(PointeeTy.getTypePtr()) &&
6623         !EncodePointerToObjCTypedef) {
6624       // Another historical/compatibility reason.
6625       // We encode the underlying type which comes out as
6626       // {...};
6627       S += '^';
6628       if (FD && OPT->getInterfaceDecl()) {
6629         // Prevent recursive encoding of fields in some rare cases.
6630         ObjCInterfaceDecl *OI = OPT->getInterfaceDecl();
6631         SmallVector<const ObjCIvarDecl*, 32> Ivars;
6632         DeepCollectObjCIvars(OI, true, Ivars);
6633         for (unsigned i = 0, e = Ivars.size(); i != e; ++i) {
6634           if (cast<FieldDecl>(Ivars[i]) == FD) {
6635             S += '{';
6636             S += OI->getObjCRuntimeNameAsString();
6637             S += '}';
6638             return;
6639           }
6640         }
6641       }
6642       getObjCEncodingForTypeImpl(PointeeTy, S,
6643                                  false, ExpandPointedToStructures,
6644                                  nullptr,
6645                                  false, false, false, false, false,
6646                                  /*EncodePointerToObjCTypedef*/true);
6647       return;
6648     }
6649 
6650     S += '@';
6651     if (OPT->getInterfaceDecl() &&
6652         (FD || EncodingProperty || EncodeClassNames)) {
6653       S += '"';
6654       S += OPT->getInterfaceDecl()->getObjCRuntimeNameAsString();
6655       for (const auto *I : OPT->quals()) {
6656         S += '<';
6657         S += I->getObjCRuntimeNameAsString();
6658         S += '>';
6659       }
6660       S += '"';
6661     }
6662     return;
6663   }
6664 
6665   // gcc just blithely ignores member pointers.
6666   // FIXME: we shoul do better than that.  'M' is available.
6667   case Type::MemberPointer:
6668   // This matches gcc's encoding, even though technically it is insufficient.
6669   //FIXME. We should do a better job than gcc.
6670   case Type::Vector:
6671   case Type::ExtVector:
6672   // Until we have a coherent encoding of these three types, issue warning.
6673     if (NotEncodedT)
6674       *NotEncodedT = T;
6675     return;
6676 
6677   // We could see an undeduced auto type here during error recovery.
6678   // Just ignore it.
6679   case Type::Auto:
6680   case Type::DeducedTemplateSpecialization:
6681     return;
6682 
6683   case Type::Pipe:
6684 #define ABSTRACT_TYPE(KIND, BASE)
6685 #define TYPE(KIND, BASE)
6686 #define DEPENDENT_TYPE(KIND, BASE) \
6687   case Type::KIND:
6688 #define NON_CANONICAL_TYPE(KIND, BASE) \
6689   case Type::KIND:
6690 #define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(KIND, BASE) \
6691   case Type::KIND:
6692 #include "clang/AST/TypeNodes.def"
6693     llvm_unreachable("@encode for dependent type!");
6694   }
6695   llvm_unreachable("bad type kind!");
6696 }
6697 
6698 void ASTContext::getObjCEncodingForStructureImpl(RecordDecl *RDecl,
6699                                                  std::string &S,
6700                                                  const FieldDecl *FD,
6701                                                  bool includeVBases,
6702                                                  QualType *NotEncodedT) const {
6703   assert(RDecl && "Expected non-null RecordDecl");
6704   assert(!RDecl->isUnion() && "Should not be called for unions");
6705   if (!RDecl->getDefinition() || RDecl->getDefinition()->isInvalidDecl())
6706     return;
6707 
6708   CXXRecordDecl *CXXRec = dyn_cast<CXXRecordDecl>(RDecl);
6709   std::multimap<uint64_t, NamedDecl *> FieldOrBaseOffsets;
6710   const ASTRecordLayout &layout = getASTRecordLayout(RDecl);
6711 
6712   if (CXXRec) {
6713     for (const auto &BI : CXXRec->bases()) {
6714       if (!BI.isVirtual()) {
6715         CXXRecordDecl *base = BI.getType()->getAsCXXRecordDecl();
6716         if (base->isEmpty())
6717           continue;
6718         uint64_t offs = toBits(layout.getBaseClassOffset(base));
6719         FieldOrBaseOffsets.insert(FieldOrBaseOffsets.upper_bound(offs),
6720                                   std::make_pair(offs, base));
6721       }
6722     }
6723   }
6724 
6725   unsigned i = 0;
6726   for (auto *Field : RDecl->fields()) {
6727     uint64_t offs = layout.getFieldOffset(i);
6728     FieldOrBaseOffsets.insert(FieldOrBaseOffsets.upper_bound(offs),
6729                               std::make_pair(offs, Field));
6730     ++i;
6731   }
6732 
6733   if (CXXRec && includeVBases) {
6734     for (const auto &BI : CXXRec->vbases()) {
6735       CXXRecordDecl *base = BI.getType()->getAsCXXRecordDecl();
6736       if (base->isEmpty())
6737         continue;
6738       uint64_t offs = toBits(layout.getVBaseClassOffset(base));
6739       if (offs >= uint64_t(toBits(layout.getNonVirtualSize())) &&
6740           FieldOrBaseOffsets.find(offs) == FieldOrBaseOffsets.end())
6741         FieldOrBaseOffsets.insert(FieldOrBaseOffsets.end(),
6742                                   std::make_pair(offs, base));
6743     }
6744   }
6745 
6746   CharUnits size;
6747   if (CXXRec) {
6748     size = includeVBases ? layout.getSize() : layout.getNonVirtualSize();
6749   } else {
6750     size = layout.getSize();
6751   }
6752 
6753 #ifndef NDEBUG
6754   uint64_t CurOffs = 0;
6755 #endif
6756   std::multimap<uint64_t, NamedDecl *>::iterator
6757     CurLayObj = FieldOrBaseOffsets.begin();
6758 
6759   if (CXXRec && CXXRec->isDynamicClass() &&
6760       (CurLayObj == FieldOrBaseOffsets.end() || CurLayObj->first != 0)) {
6761     if (FD) {
6762       S += "\"_vptr$";
6763       std::string recname = CXXRec->getNameAsString();
6764       if (recname.empty()) recname = "?";
6765       S += recname;
6766       S += '"';
6767     }
6768     S += "^^?";
6769 #ifndef NDEBUG
6770     CurOffs += getTypeSize(VoidPtrTy);
6771 #endif
6772   }
6773 
6774   if (!RDecl->hasFlexibleArrayMember()) {
6775     // Mark the end of the structure.
6776     uint64_t offs = toBits(size);
6777     FieldOrBaseOffsets.insert(FieldOrBaseOffsets.upper_bound(offs),
6778                               std::make_pair(offs, nullptr));
6779   }
6780 
6781   for (; CurLayObj != FieldOrBaseOffsets.end(); ++CurLayObj) {
6782 #ifndef NDEBUG
6783     assert(CurOffs <= CurLayObj->first);
6784     if (CurOffs < CurLayObj->first) {
6785       uint64_t padding = CurLayObj->first - CurOffs;
6786       // FIXME: There doesn't seem to be a way to indicate in the encoding that
6787       // packing/alignment of members is different that normal, in which case
6788       // the encoding will be out-of-sync with the real layout.
6789       // If the runtime switches to just consider the size of types without
6790       // taking into account alignment, we could make padding explicit in the
6791       // encoding (e.g. using arrays of chars). The encoding strings would be
6792       // longer then though.
6793       CurOffs += padding;
6794     }
6795 #endif
6796 
6797     NamedDecl *dcl = CurLayObj->second;
6798     if (!dcl)
6799       break; // reached end of structure.
6800 
6801     if (CXXRecordDecl *base = dyn_cast<CXXRecordDecl>(dcl)) {
6802       // We expand the bases without their virtual bases since those are going
6803       // in the initial structure. Note that this differs from gcc which
6804       // expands virtual bases each time one is encountered in the hierarchy,
6805       // making the encoding type bigger than it really is.
6806       getObjCEncodingForStructureImpl(base, S, FD, /*includeVBases*/false,
6807                                       NotEncodedT);
6808       assert(!base->isEmpty());
6809 #ifndef NDEBUG
6810       CurOffs += toBits(getASTRecordLayout(base).getNonVirtualSize());
6811 #endif
6812     } else {
6813       FieldDecl *field = cast<FieldDecl>(dcl);
6814       if (FD) {
6815         S += '"';
6816         S += field->getNameAsString();
6817         S += '"';
6818       }
6819 
6820       if (field->isBitField()) {
6821         EncodeBitField(this, S, field->getType(), field);
6822 #ifndef NDEBUG
6823         CurOffs += field->getBitWidthValue(*this);
6824 #endif
6825       } else {
6826         QualType qt = field->getType();
6827         getLegacyIntegralTypeEncoding(qt);
6828         getObjCEncodingForTypeImpl(qt, S, false, true, FD,
6829                                    /*OutermostType*/false,
6830                                    /*EncodingProperty*/false,
6831                                    /*StructField*/true,
6832                                    false, false, false, NotEncodedT);
6833 #ifndef NDEBUG
6834         CurOffs += getTypeSize(field->getType());
6835 #endif
6836       }
6837     }
6838   }
6839 }
6840 
6841 void ASTContext::getObjCEncodingForTypeQualifier(Decl::ObjCDeclQualifier QT,
6842                                                  std::string& S) const {
6843   if (QT & Decl::OBJC_TQ_In)
6844     S += 'n';
6845   if (QT & Decl::OBJC_TQ_Inout)
6846     S += 'N';
6847   if (QT & Decl::OBJC_TQ_Out)
6848     S += 'o';
6849   if (QT & Decl::OBJC_TQ_Bycopy)
6850     S += 'O';
6851   if (QT & Decl::OBJC_TQ_Byref)
6852     S += 'R';
6853   if (QT & Decl::OBJC_TQ_Oneway)
6854     S += 'V';
6855 }
6856 
6857 TypedefDecl *ASTContext::getObjCIdDecl() const {
6858   if (!ObjCIdDecl) {
6859     QualType T = getObjCObjectType(ObjCBuiltinIdTy, {}, {});
6860     T = getObjCObjectPointerType(T);
6861     ObjCIdDecl = buildImplicitTypedef(T, "id");
6862   }
6863   return ObjCIdDecl;
6864 }
6865 
6866 TypedefDecl *ASTContext::getObjCSelDecl() const {
6867   if (!ObjCSelDecl) {
6868     QualType T = getPointerType(ObjCBuiltinSelTy);
6869     ObjCSelDecl = buildImplicitTypedef(T, "SEL");
6870   }
6871   return ObjCSelDecl;
6872 }
6873 
6874 TypedefDecl *ASTContext::getObjCClassDecl() const {
6875   if (!ObjCClassDecl) {
6876     QualType T = getObjCObjectType(ObjCBuiltinClassTy, {}, {});
6877     T = getObjCObjectPointerType(T);
6878     ObjCClassDecl = buildImplicitTypedef(T, "Class");
6879   }
6880   return ObjCClassDecl;
6881 }
6882 
6883 ObjCInterfaceDecl *ASTContext::getObjCProtocolDecl() const {
6884   if (!ObjCProtocolClassDecl) {
6885     ObjCProtocolClassDecl
6886       = ObjCInterfaceDecl::Create(*this, getTranslationUnitDecl(),
6887                                   SourceLocation(),
6888                                   &Idents.get("Protocol"),
6889                                   /*typeParamList=*/nullptr,
6890                                   /*PrevDecl=*/nullptr,
6891                                   SourceLocation(), true);
6892   }
6893 
6894   return ObjCProtocolClassDecl;
6895 }
6896 
6897 //===----------------------------------------------------------------------===//
6898 // __builtin_va_list Construction Functions
6899 //===----------------------------------------------------------------------===//
6900 
6901 static TypedefDecl *CreateCharPtrNamedVaListDecl(const ASTContext *Context,
6902                                                  StringRef Name) {
6903   // typedef char* __builtin[_ms]_va_list;
6904   QualType T = Context->getPointerType(Context->CharTy);
6905   return Context->buildImplicitTypedef(T, Name);
6906 }
6907 
6908 static TypedefDecl *CreateMSVaListDecl(const ASTContext *Context) {
6909   return CreateCharPtrNamedVaListDecl(Context, "__builtin_ms_va_list");
6910 }
6911 
6912 static TypedefDecl *CreateCharPtrBuiltinVaListDecl(const ASTContext *Context) {
6913   return CreateCharPtrNamedVaListDecl(Context, "__builtin_va_list");
6914 }
6915 
6916 static TypedefDecl *CreateVoidPtrBuiltinVaListDecl(const ASTContext *Context) {
6917   // typedef void* __builtin_va_list;
6918   QualType T = Context->getPointerType(Context->VoidTy);
6919   return Context->buildImplicitTypedef(T, "__builtin_va_list");
6920 }
6921 
6922 static TypedefDecl *
6923 CreateAArch64ABIBuiltinVaListDecl(const ASTContext *Context) {
6924   // struct __va_list
6925   RecordDecl *VaListTagDecl = Context->buildImplicitRecord("__va_list");
6926   if (Context->getLangOpts().CPlusPlus) {
6927     // namespace std { struct __va_list {
6928     NamespaceDecl *NS;
6929     NS = NamespaceDecl::Create(const_cast<ASTContext &>(*Context),
6930                                Context->getTranslationUnitDecl(),
6931                                /*Inline*/ false, SourceLocation(),
6932                                SourceLocation(), &Context->Idents.get("std"),
6933                                /*PrevDecl*/ nullptr);
6934     NS->setImplicit();
6935     VaListTagDecl->setDeclContext(NS);
6936   }
6937 
6938   VaListTagDecl->startDefinition();
6939 
6940   const size_t NumFields = 5;
6941   QualType FieldTypes[NumFields];
6942   const char *FieldNames[NumFields];
6943 
6944   // void *__stack;
6945   FieldTypes[0] = Context->getPointerType(Context->VoidTy);
6946   FieldNames[0] = "__stack";
6947 
6948   // void *__gr_top;
6949   FieldTypes[1] = Context->getPointerType(Context->VoidTy);
6950   FieldNames[1] = "__gr_top";
6951 
6952   // void *__vr_top;
6953   FieldTypes[2] = Context->getPointerType(Context->VoidTy);
6954   FieldNames[2] = "__vr_top";
6955 
6956   // int __gr_offs;
6957   FieldTypes[3] = Context->IntTy;
6958   FieldNames[3] = "__gr_offs";
6959 
6960   // int __vr_offs;
6961   FieldTypes[4] = Context->IntTy;
6962   FieldNames[4] = "__vr_offs";
6963 
6964   // Create fields
6965   for (unsigned i = 0; i < NumFields; ++i) {
6966     FieldDecl *Field = FieldDecl::Create(const_cast<ASTContext &>(*Context),
6967                                          VaListTagDecl,
6968                                          SourceLocation(),
6969                                          SourceLocation(),
6970                                          &Context->Idents.get(FieldNames[i]),
6971                                          FieldTypes[i], /*TInfo=*/nullptr,
6972                                          /*BitWidth=*/nullptr,
6973                                          /*Mutable=*/false,
6974                                          ICIS_NoInit);
6975     Field->setAccess(AS_public);
6976     VaListTagDecl->addDecl(Field);
6977   }
6978   VaListTagDecl->completeDefinition();
6979   Context->VaListTagDecl = VaListTagDecl;
6980   QualType VaListTagType = Context->getRecordType(VaListTagDecl);
6981 
6982   // } __builtin_va_list;
6983   return Context->buildImplicitTypedef(VaListTagType, "__builtin_va_list");
6984 }
6985 
6986 static TypedefDecl *CreatePowerABIBuiltinVaListDecl(const ASTContext *Context) {
6987   // typedef struct __va_list_tag {
6988   RecordDecl *VaListTagDecl;
6989 
6990   VaListTagDecl = Context->buildImplicitRecord("__va_list_tag");
6991   VaListTagDecl->startDefinition();
6992 
6993   const size_t NumFields = 5;
6994   QualType FieldTypes[NumFields];
6995   const char *FieldNames[NumFields];
6996 
6997   //   unsigned char gpr;
6998   FieldTypes[0] = Context->UnsignedCharTy;
6999   FieldNames[0] = "gpr";
7000 
7001   //   unsigned char fpr;
7002   FieldTypes[1] = Context->UnsignedCharTy;
7003   FieldNames[1] = "fpr";
7004 
7005   //   unsigned short reserved;
7006   FieldTypes[2] = Context->UnsignedShortTy;
7007   FieldNames[2] = "reserved";
7008 
7009   //   void* overflow_arg_area;
7010   FieldTypes[3] = Context->getPointerType(Context->VoidTy);
7011   FieldNames[3] = "overflow_arg_area";
7012 
7013   //   void* reg_save_area;
7014   FieldTypes[4] = Context->getPointerType(Context->VoidTy);
7015   FieldNames[4] = "reg_save_area";
7016 
7017   // Create fields
7018   for (unsigned i = 0; i < NumFields; ++i) {
7019     FieldDecl *Field = FieldDecl::Create(*Context, VaListTagDecl,
7020                                          SourceLocation(),
7021                                          SourceLocation(),
7022                                          &Context->Idents.get(FieldNames[i]),
7023                                          FieldTypes[i], /*TInfo=*/nullptr,
7024                                          /*BitWidth=*/nullptr,
7025                                          /*Mutable=*/false,
7026                                          ICIS_NoInit);
7027     Field->setAccess(AS_public);
7028     VaListTagDecl->addDecl(Field);
7029   }
7030   VaListTagDecl->completeDefinition();
7031   Context->VaListTagDecl = VaListTagDecl;
7032   QualType VaListTagType = Context->getRecordType(VaListTagDecl);
7033 
7034   // } __va_list_tag;
7035   TypedefDecl *VaListTagTypedefDecl =
7036       Context->buildImplicitTypedef(VaListTagType, "__va_list_tag");
7037 
7038   QualType VaListTagTypedefType =
7039     Context->getTypedefType(VaListTagTypedefDecl);
7040 
7041   // typedef __va_list_tag __builtin_va_list[1];
7042   llvm::APInt Size(Context->getTypeSize(Context->getSizeType()), 1);
7043   QualType VaListTagArrayType
7044     = Context->getConstantArrayType(VaListTagTypedefType,
7045                                     Size, ArrayType::Normal, 0);
7046   return Context->buildImplicitTypedef(VaListTagArrayType, "__builtin_va_list");
7047 }
7048 
7049 static TypedefDecl *
7050 CreateX86_64ABIBuiltinVaListDecl(const ASTContext *Context) {
7051   // struct __va_list_tag {
7052   RecordDecl *VaListTagDecl;
7053   VaListTagDecl = Context->buildImplicitRecord("__va_list_tag");
7054   VaListTagDecl->startDefinition();
7055 
7056   const size_t NumFields = 4;
7057   QualType FieldTypes[NumFields];
7058   const char *FieldNames[NumFields];
7059 
7060   //   unsigned gp_offset;
7061   FieldTypes[0] = Context->UnsignedIntTy;
7062   FieldNames[0] = "gp_offset";
7063 
7064   //   unsigned fp_offset;
7065   FieldTypes[1] = Context->UnsignedIntTy;
7066   FieldNames[1] = "fp_offset";
7067 
7068   //   void* overflow_arg_area;
7069   FieldTypes[2] = Context->getPointerType(Context->VoidTy);
7070   FieldNames[2] = "overflow_arg_area";
7071 
7072   //   void* reg_save_area;
7073   FieldTypes[3] = Context->getPointerType(Context->VoidTy);
7074   FieldNames[3] = "reg_save_area";
7075 
7076   // Create fields
7077   for (unsigned i = 0; i < NumFields; ++i) {
7078     FieldDecl *Field = FieldDecl::Create(const_cast<ASTContext &>(*Context),
7079                                          VaListTagDecl,
7080                                          SourceLocation(),
7081                                          SourceLocation(),
7082                                          &Context->Idents.get(FieldNames[i]),
7083                                          FieldTypes[i], /*TInfo=*/nullptr,
7084                                          /*BitWidth=*/nullptr,
7085                                          /*Mutable=*/false,
7086                                          ICIS_NoInit);
7087     Field->setAccess(AS_public);
7088     VaListTagDecl->addDecl(Field);
7089   }
7090   VaListTagDecl->completeDefinition();
7091   Context->VaListTagDecl = VaListTagDecl;
7092   QualType VaListTagType = Context->getRecordType(VaListTagDecl);
7093 
7094   // };
7095 
7096   // typedef struct __va_list_tag __builtin_va_list[1];
7097   llvm::APInt Size(Context->getTypeSize(Context->getSizeType()), 1);
7098   QualType VaListTagArrayType =
7099       Context->getConstantArrayType(VaListTagType, Size, ArrayType::Normal, 0);
7100   return Context->buildImplicitTypedef(VaListTagArrayType, "__builtin_va_list");
7101 }
7102 
7103 static TypedefDecl *CreatePNaClABIBuiltinVaListDecl(const ASTContext *Context) {
7104   // typedef int __builtin_va_list[4];
7105   llvm::APInt Size(Context->getTypeSize(Context->getSizeType()), 4);
7106   QualType IntArrayType =
7107       Context->getConstantArrayType(Context->IntTy, Size, ArrayType::Normal, 0);
7108   return Context->buildImplicitTypedef(IntArrayType, "__builtin_va_list");
7109 }
7110 
7111 static TypedefDecl *
7112 CreateAAPCSABIBuiltinVaListDecl(const ASTContext *Context) {
7113   // struct __va_list
7114   RecordDecl *VaListDecl = Context->buildImplicitRecord("__va_list");
7115   if (Context->getLangOpts().CPlusPlus) {
7116     // namespace std { struct __va_list {
7117     NamespaceDecl *NS;
7118     NS = NamespaceDecl::Create(const_cast<ASTContext &>(*Context),
7119                                Context->getTranslationUnitDecl(),
7120                                /*Inline*/false, SourceLocation(),
7121                                SourceLocation(), &Context->Idents.get("std"),
7122                                /*PrevDecl*/ nullptr);
7123     NS->setImplicit();
7124     VaListDecl->setDeclContext(NS);
7125   }
7126 
7127   VaListDecl->startDefinition();
7128 
7129   // void * __ap;
7130   FieldDecl *Field = FieldDecl::Create(const_cast<ASTContext &>(*Context),
7131                                        VaListDecl,
7132                                        SourceLocation(),
7133                                        SourceLocation(),
7134                                        &Context->Idents.get("__ap"),
7135                                        Context->getPointerType(Context->VoidTy),
7136                                        /*TInfo=*/nullptr,
7137                                        /*BitWidth=*/nullptr,
7138                                        /*Mutable=*/false,
7139                                        ICIS_NoInit);
7140   Field->setAccess(AS_public);
7141   VaListDecl->addDecl(Field);
7142 
7143   // };
7144   VaListDecl->completeDefinition();
7145   Context->VaListTagDecl = VaListDecl;
7146 
7147   // typedef struct __va_list __builtin_va_list;
7148   QualType T = Context->getRecordType(VaListDecl);
7149   return Context->buildImplicitTypedef(T, "__builtin_va_list");
7150 }
7151 
7152 static TypedefDecl *
7153 CreateSystemZBuiltinVaListDecl(const ASTContext *Context) {
7154   // struct __va_list_tag {
7155   RecordDecl *VaListTagDecl;
7156   VaListTagDecl = Context->buildImplicitRecord("__va_list_tag");
7157   VaListTagDecl->startDefinition();
7158 
7159   const size_t NumFields = 4;
7160   QualType FieldTypes[NumFields];
7161   const char *FieldNames[NumFields];
7162 
7163   //   long __gpr;
7164   FieldTypes[0] = Context->LongTy;
7165   FieldNames[0] = "__gpr";
7166 
7167   //   long __fpr;
7168   FieldTypes[1] = Context->LongTy;
7169   FieldNames[1] = "__fpr";
7170 
7171   //   void *__overflow_arg_area;
7172   FieldTypes[2] = Context->getPointerType(Context->VoidTy);
7173   FieldNames[2] = "__overflow_arg_area";
7174 
7175   //   void *__reg_save_area;
7176   FieldTypes[3] = Context->getPointerType(Context->VoidTy);
7177   FieldNames[3] = "__reg_save_area";
7178 
7179   // Create fields
7180   for (unsigned i = 0; i < NumFields; ++i) {
7181     FieldDecl *Field = FieldDecl::Create(const_cast<ASTContext &>(*Context),
7182                                          VaListTagDecl,
7183                                          SourceLocation(),
7184                                          SourceLocation(),
7185                                          &Context->Idents.get(FieldNames[i]),
7186                                          FieldTypes[i], /*TInfo=*/nullptr,
7187                                          /*BitWidth=*/nullptr,
7188                                          /*Mutable=*/false,
7189                                          ICIS_NoInit);
7190     Field->setAccess(AS_public);
7191     VaListTagDecl->addDecl(Field);
7192   }
7193   VaListTagDecl->completeDefinition();
7194   Context->VaListTagDecl = VaListTagDecl;
7195   QualType VaListTagType = Context->getRecordType(VaListTagDecl);
7196 
7197   // };
7198 
7199   // typedef __va_list_tag __builtin_va_list[1];
7200   llvm::APInt Size(Context->getTypeSize(Context->getSizeType()), 1);
7201   QualType VaListTagArrayType =
7202       Context->getConstantArrayType(VaListTagType, Size, ArrayType::Normal, 0);
7203 
7204   return Context->buildImplicitTypedef(VaListTagArrayType, "__builtin_va_list");
7205 }
7206 
7207 static TypedefDecl *CreateVaListDecl(const ASTContext *Context,
7208                                      TargetInfo::BuiltinVaListKind Kind) {
7209   switch (Kind) {
7210   case TargetInfo::CharPtrBuiltinVaList:
7211     return CreateCharPtrBuiltinVaListDecl(Context);
7212   case TargetInfo::VoidPtrBuiltinVaList:
7213     return CreateVoidPtrBuiltinVaListDecl(Context);
7214   case TargetInfo::AArch64ABIBuiltinVaList:
7215     return CreateAArch64ABIBuiltinVaListDecl(Context);
7216   case TargetInfo::PowerABIBuiltinVaList:
7217     return CreatePowerABIBuiltinVaListDecl(Context);
7218   case TargetInfo::X86_64ABIBuiltinVaList:
7219     return CreateX86_64ABIBuiltinVaListDecl(Context);
7220   case TargetInfo::PNaClABIBuiltinVaList:
7221     return CreatePNaClABIBuiltinVaListDecl(Context);
7222   case TargetInfo::AAPCSABIBuiltinVaList:
7223     return CreateAAPCSABIBuiltinVaListDecl(Context);
7224   case TargetInfo::SystemZBuiltinVaList:
7225     return CreateSystemZBuiltinVaListDecl(Context);
7226   }
7227 
7228   llvm_unreachable("Unhandled __builtin_va_list type kind");
7229 }
7230 
7231 TypedefDecl *ASTContext::getBuiltinVaListDecl() const {
7232   if (!BuiltinVaListDecl) {
7233     BuiltinVaListDecl = CreateVaListDecl(this, Target->getBuiltinVaListKind());
7234     assert(BuiltinVaListDecl->isImplicit());
7235   }
7236 
7237   return BuiltinVaListDecl;
7238 }
7239 
7240 Decl *ASTContext::getVaListTagDecl() const {
7241   // Force the creation of VaListTagDecl by building the __builtin_va_list
7242   // declaration.
7243   if (!VaListTagDecl)
7244     (void)getBuiltinVaListDecl();
7245 
7246   return VaListTagDecl;
7247 }
7248 
7249 TypedefDecl *ASTContext::getBuiltinMSVaListDecl() const {
7250   if (!BuiltinMSVaListDecl)
7251     BuiltinMSVaListDecl = CreateMSVaListDecl(this);
7252 
7253   return BuiltinMSVaListDecl;
7254 }
7255 
7256 void ASTContext::setObjCConstantStringInterface(ObjCInterfaceDecl *Decl) {
7257   assert(ObjCConstantStringType.isNull() &&
7258          "'NSConstantString' type already set!");
7259 
7260   ObjCConstantStringType = getObjCInterfaceType(Decl);
7261 }
7262 
7263 /// \brief Retrieve the template name that corresponds to a non-empty
7264 /// lookup.
7265 TemplateName
7266 ASTContext::getOverloadedTemplateName(UnresolvedSetIterator Begin,
7267                                       UnresolvedSetIterator End) const {
7268   unsigned size = End - Begin;
7269   assert(size > 1 && "set is not overloaded!");
7270 
7271   void *memory = Allocate(sizeof(OverloadedTemplateStorage) +
7272                           size * sizeof(FunctionTemplateDecl*));
7273   OverloadedTemplateStorage *OT = new(memory) OverloadedTemplateStorage(size);
7274 
7275   NamedDecl **Storage = OT->getStorage();
7276   for (UnresolvedSetIterator I = Begin; I != End; ++I) {
7277     NamedDecl *D = *I;
7278     assert(isa<FunctionTemplateDecl>(D) ||
7279            (isa<UsingShadowDecl>(D) &&
7280             isa<FunctionTemplateDecl>(D->getUnderlyingDecl())));
7281     *Storage++ = D;
7282   }
7283 
7284   return TemplateName(OT);
7285 }
7286 
7287 /// \brief Retrieve the template name that represents a qualified
7288 /// template name such as \c std::vector.
7289 TemplateName
7290 ASTContext::getQualifiedTemplateName(NestedNameSpecifier *NNS,
7291                                      bool TemplateKeyword,
7292                                      TemplateDecl *Template) const {
7293   assert(NNS && "Missing nested-name-specifier in qualified template name");
7294 
7295   // FIXME: Canonicalization?
7296   llvm::FoldingSetNodeID ID;
7297   QualifiedTemplateName::Profile(ID, NNS, TemplateKeyword, Template);
7298 
7299   void *InsertPos = nullptr;
7300   QualifiedTemplateName *QTN =
7301     QualifiedTemplateNames.FindNodeOrInsertPos(ID, InsertPos);
7302   if (!QTN) {
7303     QTN = new (*this, alignof(QualifiedTemplateName))
7304         QualifiedTemplateName(NNS, TemplateKeyword, Template);
7305     QualifiedTemplateNames.InsertNode(QTN, InsertPos);
7306   }
7307 
7308   return TemplateName(QTN);
7309 }
7310 
7311 /// \brief Retrieve the template name that represents a dependent
7312 /// template name such as \c MetaFun::template apply.
7313 TemplateName
7314 ASTContext::getDependentTemplateName(NestedNameSpecifier *NNS,
7315                                      const IdentifierInfo *Name) const {
7316   assert((!NNS || NNS->isDependent()) &&
7317          "Nested name specifier must be dependent");
7318 
7319   llvm::FoldingSetNodeID ID;
7320   DependentTemplateName::Profile(ID, NNS, Name);
7321 
7322   void *InsertPos = nullptr;
7323   DependentTemplateName *QTN =
7324     DependentTemplateNames.FindNodeOrInsertPos(ID, InsertPos);
7325 
7326   if (QTN)
7327     return TemplateName(QTN);
7328 
7329   NestedNameSpecifier *CanonNNS = getCanonicalNestedNameSpecifier(NNS);
7330   if (CanonNNS == NNS) {
7331     QTN = new (*this, alignof(DependentTemplateName))
7332         DependentTemplateName(NNS, Name);
7333   } else {
7334     TemplateName Canon = getDependentTemplateName(CanonNNS, Name);
7335     QTN = new (*this, alignof(DependentTemplateName))
7336         DependentTemplateName(NNS, Name, Canon);
7337     DependentTemplateName *CheckQTN =
7338       DependentTemplateNames.FindNodeOrInsertPos(ID, InsertPos);
7339     assert(!CheckQTN && "Dependent type name canonicalization broken");
7340     (void)CheckQTN;
7341   }
7342 
7343   DependentTemplateNames.InsertNode(QTN, InsertPos);
7344   return TemplateName(QTN);
7345 }
7346 
7347 /// \brief Retrieve the template name that represents a dependent
7348 /// template name such as \c MetaFun::template operator+.
7349 TemplateName
7350 ASTContext::getDependentTemplateName(NestedNameSpecifier *NNS,
7351                                      OverloadedOperatorKind Operator) const {
7352   assert((!NNS || NNS->isDependent()) &&
7353          "Nested name specifier must be dependent");
7354 
7355   llvm::FoldingSetNodeID ID;
7356   DependentTemplateName::Profile(ID, NNS, Operator);
7357 
7358   void *InsertPos = nullptr;
7359   DependentTemplateName *QTN
7360     = DependentTemplateNames.FindNodeOrInsertPos(ID, InsertPos);
7361 
7362   if (QTN)
7363     return TemplateName(QTN);
7364 
7365   NestedNameSpecifier *CanonNNS = getCanonicalNestedNameSpecifier(NNS);
7366   if (CanonNNS == NNS) {
7367     QTN = new (*this, alignof(DependentTemplateName))
7368         DependentTemplateName(NNS, Operator);
7369   } else {
7370     TemplateName Canon = getDependentTemplateName(CanonNNS, Operator);
7371     QTN = new (*this, alignof(DependentTemplateName))
7372         DependentTemplateName(NNS, Operator, Canon);
7373 
7374     DependentTemplateName *CheckQTN
7375       = DependentTemplateNames.FindNodeOrInsertPos(ID, InsertPos);
7376     assert(!CheckQTN && "Dependent template name canonicalization broken");
7377     (void)CheckQTN;
7378   }
7379 
7380   DependentTemplateNames.InsertNode(QTN, InsertPos);
7381   return TemplateName(QTN);
7382 }
7383 
7384 TemplateName
7385 ASTContext::getSubstTemplateTemplateParm(TemplateTemplateParmDecl *param,
7386                                          TemplateName replacement) const {
7387   llvm::FoldingSetNodeID ID;
7388   SubstTemplateTemplateParmStorage::Profile(ID, param, replacement);
7389 
7390   void *insertPos = nullptr;
7391   SubstTemplateTemplateParmStorage *subst
7392     = SubstTemplateTemplateParms.FindNodeOrInsertPos(ID, insertPos);
7393 
7394   if (!subst) {
7395     subst = new (*this) SubstTemplateTemplateParmStorage(param, replacement);
7396     SubstTemplateTemplateParms.InsertNode(subst, insertPos);
7397   }
7398 
7399   return TemplateName(subst);
7400 }
7401 
7402 TemplateName
7403 ASTContext::getSubstTemplateTemplateParmPack(TemplateTemplateParmDecl *Param,
7404                                        const TemplateArgument &ArgPack) const {
7405   ASTContext &Self = const_cast<ASTContext &>(*this);
7406   llvm::FoldingSetNodeID ID;
7407   SubstTemplateTemplateParmPackStorage::Profile(ID, Self, Param, ArgPack);
7408 
7409   void *InsertPos = nullptr;
7410   SubstTemplateTemplateParmPackStorage *Subst
7411     = SubstTemplateTemplateParmPacks.FindNodeOrInsertPos(ID, InsertPos);
7412 
7413   if (!Subst) {
7414     Subst = new (*this) SubstTemplateTemplateParmPackStorage(Param,
7415                                                            ArgPack.pack_size(),
7416                                                          ArgPack.pack_begin());
7417     SubstTemplateTemplateParmPacks.InsertNode(Subst, InsertPos);
7418   }
7419 
7420   return TemplateName(Subst);
7421 }
7422 
7423 /// getFromTargetType - Given one of the integer types provided by
7424 /// TargetInfo, produce the corresponding type. The unsigned @p Type
7425 /// is actually a value of type @c TargetInfo::IntType.
7426 CanQualType ASTContext::getFromTargetType(unsigned Type) const {
7427   switch (Type) {
7428   case TargetInfo::NoInt: return CanQualType();
7429   case TargetInfo::SignedChar: return SignedCharTy;
7430   case TargetInfo::UnsignedChar: return UnsignedCharTy;
7431   case TargetInfo::SignedShort: return ShortTy;
7432   case TargetInfo::UnsignedShort: return UnsignedShortTy;
7433   case TargetInfo::SignedInt: return IntTy;
7434   case TargetInfo::UnsignedInt: return UnsignedIntTy;
7435   case TargetInfo::SignedLong: return LongTy;
7436   case TargetInfo::UnsignedLong: return UnsignedLongTy;
7437   case TargetInfo::SignedLongLong: return LongLongTy;
7438   case TargetInfo::UnsignedLongLong: return UnsignedLongLongTy;
7439   }
7440 
7441   llvm_unreachable("Unhandled TargetInfo::IntType value");
7442 }
7443 
7444 //===----------------------------------------------------------------------===//
7445 //                        Type Predicates.
7446 //===----------------------------------------------------------------------===//
7447 
7448 /// getObjCGCAttr - Returns one of GCNone, Weak or Strong objc's
7449 /// garbage collection attribute.
7450 ///
7451 Qualifiers::GC ASTContext::getObjCGCAttrKind(QualType Ty) const {
7452   if (getLangOpts().getGC() == LangOptions::NonGC)
7453     return Qualifiers::GCNone;
7454 
7455   assert(getLangOpts().ObjC1);
7456   Qualifiers::GC GCAttrs = Ty.getObjCGCAttr();
7457 
7458   // Default behaviour under objective-C's gc is for ObjC pointers
7459   // (or pointers to them) be treated as though they were declared
7460   // as __strong.
7461   if (GCAttrs == Qualifiers::GCNone) {
7462     if (Ty->isObjCObjectPointerType() || Ty->isBlockPointerType())
7463       return Qualifiers::Strong;
7464     else if (Ty->isPointerType())
7465       return getObjCGCAttrKind(Ty->getAs<PointerType>()->getPointeeType());
7466   } else {
7467     // It's not valid to set GC attributes on anything that isn't a
7468     // pointer.
7469 #ifndef NDEBUG
7470     QualType CT = Ty->getCanonicalTypeInternal();
7471     while (const ArrayType *AT = dyn_cast<ArrayType>(CT))
7472       CT = AT->getElementType();
7473     assert(CT->isAnyPointerType() || CT->isBlockPointerType());
7474 #endif
7475   }
7476   return GCAttrs;
7477 }
7478 
7479 //===----------------------------------------------------------------------===//
7480 //                        Type Compatibility Testing
7481 //===----------------------------------------------------------------------===//
7482 
7483 /// areCompatVectorTypes - Return true if the two specified vector types are
7484 /// compatible.
7485 static bool areCompatVectorTypes(const VectorType *LHS,
7486                                  const VectorType *RHS) {
7487   assert(LHS->isCanonicalUnqualified() && RHS->isCanonicalUnqualified());
7488   return LHS->getElementType() == RHS->getElementType() &&
7489          LHS->getNumElements() == RHS->getNumElements();
7490 }
7491 
7492 bool ASTContext::areCompatibleVectorTypes(QualType FirstVec,
7493                                           QualType SecondVec) {
7494   assert(FirstVec->isVectorType() && "FirstVec should be a vector type");
7495   assert(SecondVec->isVectorType() && "SecondVec should be a vector type");
7496 
7497   if (hasSameUnqualifiedType(FirstVec, SecondVec))
7498     return true;
7499 
7500   // Treat Neon vector types and most AltiVec vector types as if they are the
7501   // equivalent GCC vector types.
7502   const VectorType *First = FirstVec->getAs<VectorType>();
7503   const VectorType *Second = SecondVec->getAs<VectorType>();
7504   if (First->getNumElements() == Second->getNumElements() &&
7505       hasSameType(First->getElementType(), Second->getElementType()) &&
7506       First->getVectorKind() != VectorType::AltiVecPixel &&
7507       First->getVectorKind() != VectorType::AltiVecBool &&
7508       Second->getVectorKind() != VectorType::AltiVecPixel &&
7509       Second->getVectorKind() != VectorType::AltiVecBool)
7510     return true;
7511 
7512   return false;
7513 }
7514 
7515 //===----------------------------------------------------------------------===//
7516 // ObjCQualifiedIdTypesAreCompatible - Compatibility testing for qualified id's.
7517 //===----------------------------------------------------------------------===//
7518 
7519 /// ProtocolCompatibleWithProtocol - return 'true' if 'lProto' is in the
7520 /// inheritance hierarchy of 'rProto'.
7521 bool
7522 ASTContext::ProtocolCompatibleWithProtocol(ObjCProtocolDecl *lProto,
7523                                            ObjCProtocolDecl *rProto) const {
7524   if (declaresSameEntity(lProto, rProto))
7525     return true;
7526   for (auto *PI : rProto->protocols())
7527     if (ProtocolCompatibleWithProtocol(lProto, PI))
7528       return true;
7529   return false;
7530 }
7531 
7532 /// ObjCQualifiedClassTypesAreCompatible - compare  Class<pr,...> and
7533 /// Class<pr1, ...>.
7534 bool ASTContext::ObjCQualifiedClassTypesAreCompatible(QualType lhs,
7535                                                       QualType rhs) {
7536   const ObjCObjectPointerType *lhsQID = lhs->getAs<ObjCObjectPointerType>();
7537   const ObjCObjectPointerType *rhsOPT = rhs->getAs<ObjCObjectPointerType>();
7538   assert((lhsQID && rhsOPT) && "ObjCQualifiedClassTypesAreCompatible");
7539 
7540   for (auto *lhsProto : lhsQID->quals()) {
7541     bool match = false;
7542     for (auto *rhsProto : rhsOPT->quals()) {
7543       if (ProtocolCompatibleWithProtocol(lhsProto, rhsProto)) {
7544         match = true;
7545         break;
7546       }
7547     }
7548     if (!match)
7549       return false;
7550   }
7551   return true;
7552 }
7553 
7554 /// ObjCQualifiedIdTypesAreCompatible - We know that one of lhs/rhs is an
7555 /// ObjCQualifiedIDType.
7556 bool ASTContext::ObjCQualifiedIdTypesAreCompatible(QualType lhs, QualType rhs,
7557                                                    bool compare) {
7558   // Allow id<P..> and an 'id' or void* type in all cases.
7559   if (lhs->isVoidPointerType() ||
7560       lhs->isObjCIdType() || lhs->isObjCClassType())
7561     return true;
7562   else if (rhs->isVoidPointerType() ||
7563            rhs->isObjCIdType() || rhs->isObjCClassType())
7564     return true;
7565 
7566   if (const ObjCObjectPointerType *lhsQID = lhs->getAsObjCQualifiedIdType()) {
7567     const ObjCObjectPointerType *rhsOPT = rhs->getAs<ObjCObjectPointerType>();
7568 
7569     if (!rhsOPT) return false;
7570 
7571     if (rhsOPT->qual_empty()) {
7572       // If the RHS is a unqualified interface pointer "NSString*",
7573       // make sure we check the class hierarchy.
7574       if (ObjCInterfaceDecl *rhsID = rhsOPT->getInterfaceDecl()) {
7575         for (auto *I : lhsQID->quals()) {
7576           // when comparing an id<P> on lhs with a static type on rhs,
7577           // see if static class implements all of id's protocols, directly or
7578           // through its super class and categories.
7579           if (!rhsID->ClassImplementsProtocol(I, true))
7580             return false;
7581         }
7582       }
7583       // If there are no qualifiers and no interface, we have an 'id'.
7584       return true;
7585     }
7586     // Both the right and left sides have qualifiers.
7587     for (auto *lhsProto : lhsQID->quals()) {
7588       bool match = false;
7589 
7590       // when comparing an id<P> on lhs with a static type on rhs,
7591       // see if static class implements all of id's protocols, directly or
7592       // through its super class and categories.
7593       for (auto *rhsProto : rhsOPT->quals()) {
7594         if (ProtocolCompatibleWithProtocol(lhsProto, rhsProto) ||
7595             (compare && ProtocolCompatibleWithProtocol(rhsProto, lhsProto))) {
7596           match = true;
7597           break;
7598         }
7599       }
7600       // If the RHS is a qualified interface pointer "NSString<P>*",
7601       // make sure we check the class hierarchy.
7602       if (ObjCInterfaceDecl *rhsID = rhsOPT->getInterfaceDecl()) {
7603         for (auto *I : lhsQID->quals()) {
7604           // when comparing an id<P> on lhs with a static type on rhs,
7605           // see if static class implements all of id's protocols, directly or
7606           // through its super class and categories.
7607           if (rhsID->ClassImplementsProtocol(I, true)) {
7608             match = true;
7609             break;
7610           }
7611         }
7612       }
7613       if (!match)
7614         return false;
7615     }
7616 
7617     return true;
7618   }
7619 
7620   const ObjCObjectPointerType *rhsQID = rhs->getAsObjCQualifiedIdType();
7621   assert(rhsQID && "One of the LHS/RHS should be id<x>");
7622 
7623   if (const ObjCObjectPointerType *lhsOPT =
7624         lhs->getAsObjCInterfacePointerType()) {
7625     // If both the right and left sides have qualifiers.
7626     for (auto *lhsProto : lhsOPT->quals()) {
7627       bool match = false;
7628 
7629       // when comparing an id<P> on rhs with a static type on lhs,
7630       // see if static class implements all of id's protocols, directly or
7631       // through its super class and categories.
7632       // First, lhs protocols in the qualifier list must be found, direct
7633       // or indirect in rhs's qualifier list or it is a mismatch.
7634       for (auto *rhsProto : rhsQID->quals()) {
7635         if (ProtocolCompatibleWithProtocol(lhsProto, rhsProto) ||
7636             (compare && ProtocolCompatibleWithProtocol(rhsProto, lhsProto))) {
7637           match = true;
7638           break;
7639         }
7640       }
7641       if (!match)
7642         return false;
7643     }
7644 
7645     // Static class's protocols, or its super class or category protocols
7646     // must be found, direct or indirect in rhs's qualifier list or it is a mismatch.
7647     if (ObjCInterfaceDecl *lhsID = lhsOPT->getInterfaceDecl()) {
7648       llvm::SmallPtrSet<ObjCProtocolDecl *, 8> LHSInheritedProtocols;
7649       CollectInheritedProtocols(lhsID, LHSInheritedProtocols);
7650       // This is rather dubious but matches gcc's behavior. If lhs has
7651       // no type qualifier and its class has no static protocol(s)
7652       // assume that it is mismatch.
7653       if (LHSInheritedProtocols.empty() && lhsOPT->qual_empty())
7654         return false;
7655       for (auto *lhsProto : LHSInheritedProtocols) {
7656         bool match = false;
7657         for (auto *rhsProto : rhsQID->quals()) {
7658           if (ProtocolCompatibleWithProtocol(lhsProto, rhsProto) ||
7659               (compare && ProtocolCompatibleWithProtocol(rhsProto, lhsProto))) {
7660             match = true;
7661             break;
7662           }
7663         }
7664         if (!match)
7665           return false;
7666       }
7667     }
7668     return true;
7669   }
7670   return false;
7671 }
7672 
7673 /// canAssignObjCInterfaces - Return true if the two interface types are
7674 /// compatible for assignment from RHS to LHS.  This handles validation of any
7675 /// protocol qualifiers on the LHS or RHS.
7676 bool ASTContext::canAssignObjCInterfaces(const ObjCObjectPointerType *LHSOPT,
7677                                          const ObjCObjectPointerType *RHSOPT) {
7678   const ObjCObjectType* LHS = LHSOPT->getObjectType();
7679   const ObjCObjectType* RHS = RHSOPT->getObjectType();
7680 
7681   // If either type represents the built-in 'id' or 'Class' types, return true.
7682   if (LHS->isObjCUnqualifiedIdOrClass() ||
7683       RHS->isObjCUnqualifiedIdOrClass())
7684     return true;
7685 
7686   // Function object that propagates a successful result or handles
7687   // __kindof types.
7688   auto finish = [&](bool succeeded) -> bool {
7689     if (succeeded)
7690       return true;
7691 
7692     if (!RHS->isKindOfType())
7693       return false;
7694 
7695     // Strip off __kindof and protocol qualifiers, then check whether
7696     // we can assign the other way.
7697     return canAssignObjCInterfaces(RHSOPT->stripObjCKindOfTypeAndQuals(*this),
7698                                    LHSOPT->stripObjCKindOfTypeAndQuals(*this));
7699   };
7700 
7701   if (LHS->isObjCQualifiedId() || RHS->isObjCQualifiedId()) {
7702     return finish(ObjCQualifiedIdTypesAreCompatible(QualType(LHSOPT,0),
7703                                                     QualType(RHSOPT,0),
7704                                                     false));
7705   }
7706 
7707   if (LHS->isObjCQualifiedClass() && RHS->isObjCQualifiedClass()) {
7708     return finish(ObjCQualifiedClassTypesAreCompatible(QualType(LHSOPT,0),
7709                                                        QualType(RHSOPT,0)));
7710   }
7711 
7712   // If we have 2 user-defined types, fall into that path.
7713   if (LHS->getInterface() && RHS->getInterface()) {
7714     return finish(canAssignObjCInterfaces(LHS, RHS));
7715   }
7716 
7717   return false;
7718 }
7719 
7720 /// canAssignObjCInterfacesInBlockPointer - This routine is specifically written
7721 /// for providing type-safety for objective-c pointers used to pass/return
7722 /// arguments in block literals. When passed as arguments, passing 'A*' where
7723 /// 'id' is expected is not OK. Passing 'Sub *" where 'Super *" is expected is
7724 /// not OK. For the return type, the opposite is not OK.
7725 bool ASTContext::canAssignObjCInterfacesInBlockPointer(
7726                                          const ObjCObjectPointerType *LHSOPT,
7727                                          const ObjCObjectPointerType *RHSOPT,
7728                                          bool BlockReturnType) {
7729 
7730   // Function object that propagates a successful result or handles
7731   // __kindof types.
7732   auto finish = [&](bool succeeded) -> bool {
7733     if (succeeded)
7734       return true;
7735 
7736     const ObjCObjectPointerType *Expected = BlockReturnType ? RHSOPT : LHSOPT;
7737     if (!Expected->isKindOfType())
7738       return false;
7739 
7740     // Strip off __kindof and protocol qualifiers, then check whether
7741     // we can assign the other way.
7742     return canAssignObjCInterfacesInBlockPointer(
7743              RHSOPT->stripObjCKindOfTypeAndQuals(*this),
7744              LHSOPT->stripObjCKindOfTypeAndQuals(*this),
7745              BlockReturnType);
7746   };
7747 
7748   if (RHSOPT->isObjCBuiltinType() || LHSOPT->isObjCIdType())
7749     return true;
7750 
7751   if (LHSOPT->isObjCBuiltinType()) {
7752     return finish(RHSOPT->isObjCBuiltinType() ||
7753                   RHSOPT->isObjCQualifiedIdType());
7754   }
7755 
7756   if (LHSOPT->isObjCQualifiedIdType() || RHSOPT->isObjCQualifiedIdType())
7757     return finish(ObjCQualifiedIdTypesAreCompatible(QualType(LHSOPT,0),
7758                                                     QualType(RHSOPT,0),
7759                                                     false));
7760 
7761   const ObjCInterfaceType* LHS = LHSOPT->getInterfaceType();
7762   const ObjCInterfaceType* RHS = RHSOPT->getInterfaceType();
7763   if (LHS && RHS)  { // We have 2 user-defined types.
7764     if (LHS != RHS) {
7765       if (LHS->getDecl()->isSuperClassOf(RHS->getDecl()))
7766         return finish(BlockReturnType);
7767       if (RHS->getDecl()->isSuperClassOf(LHS->getDecl()))
7768         return finish(!BlockReturnType);
7769     }
7770     else
7771       return true;
7772   }
7773   return false;
7774 }
7775 
7776 /// Comparison routine for Objective-C protocols to be used with
7777 /// llvm::array_pod_sort.
7778 static int compareObjCProtocolsByName(ObjCProtocolDecl * const *lhs,
7779                                       ObjCProtocolDecl * const *rhs) {
7780   return (*lhs)->getName().compare((*rhs)->getName());
7781 }
7782 
7783 /// getIntersectionOfProtocols - This routine finds the intersection of set
7784 /// of protocols inherited from two distinct objective-c pointer objects with
7785 /// the given common base.
7786 /// It is used to build composite qualifier list of the composite type of
7787 /// the conditional expression involving two objective-c pointer objects.
7788 static
7789 void getIntersectionOfProtocols(ASTContext &Context,
7790                                 const ObjCInterfaceDecl *CommonBase,
7791                                 const ObjCObjectPointerType *LHSOPT,
7792                                 const ObjCObjectPointerType *RHSOPT,
7793       SmallVectorImpl<ObjCProtocolDecl *> &IntersectionSet) {
7794 
7795   const ObjCObjectType* LHS = LHSOPT->getObjectType();
7796   const ObjCObjectType* RHS = RHSOPT->getObjectType();
7797   assert(LHS->getInterface() && "LHS must have an interface base");
7798   assert(RHS->getInterface() && "RHS must have an interface base");
7799 
7800   // Add all of the protocols for the LHS.
7801   llvm::SmallPtrSet<ObjCProtocolDecl *, 8> LHSProtocolSet;
7802 
7803   // Start with the protocol qualifiers.
7804   for (auto proto : LHS->quals()) {
7805     Context.CollectInheritedProtocols(proto, LHSProtocolSet);
7806   }
7807 
7808   // Also add the protocols associated with the LHS interface.
7809   Context.CollectInheritedProtocols(LHS->getInterface(), LHSProtocolSet);
7810 
7811   // Add all of the protocls for the RHS.
7812   llvm::SmallPtrSet<ObjCProtocolDecl *, 8> RHSProtocolSet;
7813 
7814   // Start with the protocol qualifiers.
7815   for (auto proto : RHS->quals()) {
7816     Context.CollectInheritedProtocols(proto, RHSProtocolSet);
7817   }
7818 
7819   // Also add the protocols associated with the RHS interface.
7820   Context.CollectInheritedProtocols(RHS->getInterface(), RHSProtocolSet);
7821 
7822   // Compute the intersection of the collected protocol sets.
7823   for (auto proto : LHSProtocolSet) {
7824     if (RHSProtocolSet.count(proto))
7825       IntersectionSet.push_back(proto);
7826   }
7827 
7828   // Compute the set of protocols that is implied by either the common type or
7829   // the protocols within the intersection.
7830   llvm::SmallPtrSet<ObjCProtocolDecl *, 8> ImpliedProtocols;
7831   Context.CollectInheritedProtocols(CommonBase, ImpliedProtocols);
7832 
7833   // Remove any implied protocols from the list of inherited protocols.
7834   if (!ImpliedProtocols.empty()) {
7835     IntersectionSet.erase(
7836       std::remove_if(IntersectionSet.begin(),
7837                      IntersectionSet.end(),
7838                      [&](ObjCProtocolDecl *proto) -> bool {
7839                        return ImpliedProtocols.count(proto) > 0;
7840                      }),
7841       IntersectionSet.end());
7842   }
7843 
7844   // Sort the remaining protocols by name.
7845   llvm::array_pod_sort(IntersectionSet.begin(), IntersectionSet.end(),
7846                        compareObjCProtocolsByName);
7847 }
7848 
7849 /// Determine whether the first type is a subtype of the second.
7850 static bool canAssignObjCObjectTypes(ASTContext &ctx, QualType lhs,
7851                                      QualType rhs) {
7852   // Common case: two object pointers.
7853   const ObjCObjectPointerType *lhsOPT = lhs->getAs<ObjCObjectPointerType>();
7854   const ObjCObjectPointerType *rhsOPT = rhs->getAs<ObjCObjectPointerType>();
7855   if (lhsOPT && rhsOPT)
7856     return ctx.canAssignObjCInterfaces(lhsOPT, rhsOPT);
7857 
7858   // Two block pointers.
7859   const BlockPointerType *lhsBlock = lhs->getAs<BlockPointerType>();
7860   const BlockPointerType *rhsBlock = rhs->getAs<BlockPointerType>();
7861   if (lhsBlock && rhsBlock)
7862     return ctx.typesAreBlockPointerCompatible(lhs, rhs);
7863 
7864   // If either is an unqualified 'id' and the other is a block, it's
7865   // acceptable.
7866   if ((lhsOPT && lhsOPT->isObjCIdType() && rhsBlock) ||
7867       (rhsOPT && rhsOPT->isObjCIdType() && lhsBlock))
7868     return true;
7869 
7870   return false;
7871 }
7872 
7873 // Check that the given Objective-C type argument lists are equivalent.
7874 static bool sameObjCTypeArgs(ASTContext &ctx,
7875                              const ObjCInterfaceDecl *iface,
7876                              ArrayRef<QualType> lhsArgs,
7877                              ArrayRef<QualType> rhsArgs,
7878                              bool stripKindOf) {
7879   if (lhsArgs.size() != rhsArgs.size())
7880     return false;
7881 
7882   ObjCTypeParamList *typeParams = iface->getTypeParamList();
7883   for (unsigned i = 0, n = lhsArgs.size(); i != n; ++i) {
7884     if (ctx.hasSameType(lhsArgs[i], rhsArgs[i]))
7885       continue;
7886 
7887     switch (typeParams->begin()[i]->getVariance()) {
7888     case ObjCTypeParamVariance::Invariant:
7889       if (!stripKindOf ||
7890           !ctx.hasSameType(lhsArgs[i].stripObjCKindOfType(ctx),
7891                            rhsArgs[i].stripObjCKindOfType(ctx))) {
7892         return false;
7893       }
7894       break;
7895 
7896     case ObjCTypeParamVariance::Covariant:
7897       if (!canAssignObjCObjectTypes(ctx, lhsArgs[i], rhsArgs[i]))
7898         return false;
7899       break;
7900 
7901     case ObjCTypeParamVariance::Contravariant:
7902       if (!canAssignObjCObjectTypes(ctx, rhsArgs[i], lhsArgs[i]))
7903         return false;
7904       break;
7905     }
7906   }
7907 
7908   return true;
7909 }
7910 
7911 QualType ASTContext::areCommonBaseCompatible(
7912            const ObjCObjectPointerType *Lptr,
7913            const ObjCObjectPointerType *Rptr) {
7914   const ObjCObjectType *LHS = Lptr->getObjectType();
7915   const ObjCObjectType *RHS = Rptr->getObjectType();
7916   const ObjCInterfaceDecl* LDecl = LHS->getInterface();
7917   const ObjCInterfaceDecl* RDecl = RHS->getInterface();
7918 
7919   if (!LDecl || !RDecl)
7920     return QualType();
7921 
7922   // When either LHS or RHS is a kindof type, we should return a kindof type.
7923   // For example, for common base of kindof(ASub1) and kindof(ASub2), we return
7924   // kindof(A).
7925   bool anyKindOf = LHS->isKindOfType() || RHS->isKindOfType();
7926 
7927   // Follow the left-hand side up the class hierarchy until we either hit a
7928   // root or find the RHS. Record the ancestors in case we don't find it.
7929   llvm::SmallDenseMap<const ObjCInterfaceDecl *, const ObjCObjectType *, 4>
7930     LHSAncestors;
7931   while (true) {
7932     // Record this ancestor. We'll need this if the common type isn't in the
7933     // path from the LHS to the root.
7934     LHSAncestors[LHS->getInterface()->getCanonicalDecl()] = LHS;
7935 
7936     if (declaresSameEntity(LHS->getInterface(), RDecl)) {
7937       // Get the type arguments.
7938       ArrayRef<QualType> LHSTypeArgs = LHS->getTypeArgsAsWritten();
7939       bool anyChanges = false;
7940       if (LHS->isSpecialized() && RHS->isSpecialized()) {
7941         // Both have type arguments, compare them.
7942         if (!sameObjCTypeArgs(*this, LHS->getInterface(),
7943                               LHS->getTypeArgs(), RHS->getTypeArgs(),
7944                               /*stripKindOf=*/true))
7945           return QualType();
7946       } else if (LHS->isSpecialized() != RHS->isSpecialized()) {
7947         // If only one has type arguments, the result will not have type
7948         // arguments.
7949         LHSTypeArgs = {};
7950         anyChanges = true;
7951       }
7952 
7953       // Compute the intersection of protocols.
7954       SmallVector<ObjCProtocolDecl *, 8> Protocols;
7955       getIntersectionOfProtocols(*this, LHS->getInterface(), Lptr, Rptr,
7956                                  Protocols);
7957       if (!Protocols.empty())
7958         anyChanges = true;
7959 
7960       // If anything in the LHS will have changed, build a new result type.
7961       // If we need to return a kindof type but LHS is not a kindof type, we
7962       // build a new result type.
7963       if (anyChanges || LHS->isKindOfType() != anyKindOf) {
7964         QualType Result = getObjCInterfaceType(LHS->getInterface());
7965         Result = getObjCObjectType(Result, LHSTypeArgs, Protocols,
7966                                    anyKindOf || LHS->isKindOfType());
7967         return getObjCObjectPointerType(Result);
7968       }
7969 
7970       return getObjCObjectPointerType(QualType(LHS, 0));
7971     }
7972 
7973     // Find the superclass.
7974     QualType LHSSuperType = LHS->getSuperClassType();
7975     if (LHSSuperType.isNull())
7976       break;
7977 
7978     LHS = LHSSuperType->castAs<ObjCObjectType>();
7979   }
7980 
7981   // We didn't find anything by following the LHS to its root; now check
7982   // the RHS against the cached set of ancestors.
7983   while (true) {
7984     auto KnownLHS = LHSAncestors.find(RHS->getInterface()->getCanonicalDecl());
7985     if (KnownLHS != LHSAncestors.end()) {
7986       LHS = KnownLHS->second;
7987 
7988       // Get the type arguments.
7989       ArrayRef<QualType> RHSTypeArgs = RHS->getTypeArgsAsWritten();
7990       bool anyChanges = false;
7991       if (LHS->isSpecialized() && RHS->isSpecialized()) {
7992         // Both have type arguments, compare them.
7993         if (!sameObjCTypeArgs(*this, LHS->getInterface(),
7994                               LHS->getTypeArgs(), RHS->getTypeArgs(),
7995                               /*stripKindOf=*/true))
7996           return QualType();
7997       } else if (LHS->isSpecialized() != RHS->isSpecialized()) {
7998         // If only one has type arguments, the result will not have type
7999         // arguments.
8000         RHSTypeArgs = {};
8001         anyChanges = true;
8002       }
8003 
8004       // Compute the intersection of protocols.
8005       SmallVector<ObjCProtocolDecl *, 8> Protocols;
8006       getIntersectionOfProtocols(*this, RHS->getInterface(), Lptr, Rptr,
8007                                  Protocols);
8008       if (!Protocols.empty())
8009         anyChanges = true;
8010 
8011       // If we need to return a kindof type but RHS is not a kindof type, we
8012       // build a new result type.
8013       if (anyChanges || RHS->isKindOfType() != anyKindOf) {
8014         QualType Result = getObjCInterfaceType(RHS->getInterface());
8015         Result = getObjCObjectType(Result, RHSTypeArgs, Protocols,
8016                                    anyKindOf || RHS->isKindOfType());
8017         return getObjCObjectPointerType(Result);
8018       }
8019 
8020       return getObjCObjectPointerType(QualType(RHS, 0));
8021     }
8022 
8023     // Find the superclass of the RHS.
8024     QualType RHSSuperType = RHS->getSuperClassType();
8025     if (RHSSuperType.isNull())
8026       break;
8027 
8028     RHS = RHSSuperType->castAs<ObjCObjectType>();
8029   }
8030 
8031   return QualType();
8032 }
8033 
8034 bool ASTContext::canAssignObjCInterfaces(const ObjCObjectType *LHS,
8035                                          const ObjCObjectType *RHS) {
8036   assert(LHS->getInterface() && "LHS is not an interface type");
8037   assert(RHS->getInterface() && "RHS is not an interface type");
8038 
8039   // Verify that the base decls are compatible: the RHS must be a subclass of
8040   // the LHS.
8041   ObjCInterfaceDecl *LHSInterface = LHS->getInterface();
8042   bool IsSuperClass = LHSInterface->isSuperClassOf(RHS->getInterface());
8043   if (!IsSuperClass)
8044     return false;
8045 
8046   // If the LHS has protocol qualifiers, determine whether all of them are
8047   // satisfied by the RHS (i.e., the RHS has a superset of the protocols in the
8048   // LHS).
8049   if (LHS->getNumProtocols() > 0) {
8050     // OK if conversion of LHS to SuperClass results in narrowing of types
8051     // ; i.e., SuperClass may implement at least one of the protocols
8052     // in LHS's protocol list. Example, SuperObj<P1> = lhs<P1,P2> is ok.
8053     // But not SuperObj<P1,P2,P3> = lhs<P1,P2>.
8054     llvm::SmallPtrSet<ObjCProtocolDecl *, 8> SuperClassInheritedProtocols;
8055     CollectInheritedProtocols(RHS->getInterface(), SuperClassInheritedProtocols);
8056     // Also, if RHS has explicit quelifiers, include them for comparing with LHS's
8057     // qualifiers.
8058     for (auto *RHSPI : RHS->quals())
8059       CollectInheritedProtocols(RHSPI, SuperClassInheritedProtocols);
8060     // If there is no protocols associated with RHS, it is not a match.
8061     if (SuperClassInheritedProtocols.empty())
8062       return false;
8063 
8064     for (const auto *LHSProto : LHS->quals()) {
8065       bool SuperImplementsProtocol = false;
8066       for (auto *SuperClassProto : SuperClassInheritedProtocols)
8067         if (SuperClassProto->lookupProtocolNamed(LHSProto->getIdentifier())) {
8068           SuperImplementsProtocol = true;
8069           break;
8070         }
8071       if (!SuperImplementsProtocol)
8072         return false;
8073     }
8074   }
8075 
8076   // If the LHS is specialized, we may need to check type arguments.
8077   if (LHS->isSpecialized()) {
8078     // Follow the superclass chain until we've matched the LHS class in the
8079     // hierarchy. This substitutes type arguments through.
8080     const ObjCObjectType *RHSSuper = RHS;
8081     while (!declaresSameEntity(RHSSuper->getInterface(), LHSInterface))
8082       RHSSuper = RHSSuper->getSuperClassType()->castAs<ObjCObjectType>();
8083 
8084     // If the RHS is specializd, compare type arguments.
8085     if (RHSSuper->isSpecialized() &&
8086         !sameObjCTypeArgs(*this, LHS->getInterface(),
8087                           LHS->getTypeArgs(), RHSSuper->getTypeArgs(),
8088                           /*stripKindOf=*/true)) {
8089       return false;
8090     }
8091   }
8092 
8093   return true;
8094 }
8095 
8096 bool ASTContext::areComparableObjCPointerTypes(QualType LHS, QualType RHS) {
8097   // get the "pointed to" types
8098   const ObjCObjectPointerType *LHSOPT = LHS->getAs<ObjCObjectPointerType>();
8099   const ObjCObjectPointerType *RHSOPT = RHS->getAs<ObjCObjectPointerType>();
8100 
8101   if (!LHSOPT || !RHSOPT)
8102     return false;
8103 
8104   return canAssignObjCInterfaces(LHSOPT, RHSOPT) ||
8105          canAssignObjCInterfaces(RHSOPT, LHSOPT);
8106 }
8107 
8108 bool ASTContext::canBindObjCObjectType(QualType To, QualType From) {
8109   return canAssignObjCInterfaces(
8110                 getObjCObjectPointerType(To)->getAs<ObjCObjectPointerType>(),
8111                 getObjCObjectPointerType(From)->getAs<ObjCObjectPointerType>());
8112 }
8113 
8114 /// typesAreCompatible - C99 6.7.3p9: For two qualified types to be compatible,
8115 /// both shall have the identically qualified version of a compatible type.
8116 /// C99 6.2.7p1: Two types have compatible types if their types are the
8117 /// same. See 6.7.[2,3,5] for additional rules.
8118 bool ASTContext::typesAreCompatible(QualType LHS, QualType RHS,
8119                                     bool CompareUnqualified) {
8120   if (getLangOpts().CPlusPlus)
8121     return hasSameType(LHS, RHS);
8122 
8123   return !mergeTypes(LHS, RHS, false, CompareUnqualified).isNull();
8124 }
8125 
8126 bool ASTContext::propertyTypesAreCompatible(QualType LHS, QualType RHS) {
8127   return typesAreCompatible(LHS, RHS);
8128 }
8129 
8130 bool ASTContext::typesAreBlockPointerCompatible(QualType LHS, QualType RHS) {
8131   return !mergeTypes(LHS, RHS, true).isNull();
8132 }
8133 
8134 /// mergeTransparentUnionType - if T is a transparent union type and a member
8135 /// of T is compatible with SubType, return the merged type, else return
8136 /// QualType()
8137 QualType ASTContext::mergeTransparentUnionType(QualType T, QualType SubType,
8138                                                bool OfBlockPointer,
8139                                                bool Unqualified) {
8140   if (const RecordType *UT = T->getAsUnionType()) {
8141     RecordDecl *UD = UT->getDecl();
8142     if (UD->hasAttr<TransparentUnionAttr>()) {
8143       for (const auto *I : UD->fields()) {
8144         QualType ET = I->getType().getUnqualifiedType();
8145         QualType MT = mergeTypes(ET, SubType, OfBlockPointer, Unqualified);
8146         if (!MT.isNull())
8147           return MT;
8148       }
8149     }
8150   }
8151 
8152   return QualType();
8153 }
8154 
8155 /// mergeFunctionParameterTypes - merge two types which appear as function
8156 /// parameter types
8157 QualType ASTContext::mergeFunctionParameterTypes(QualType lhs, QualType rhs,
8158                                                  bool OfBlockPointer,
8159                                                  bool Unqualified) {
8160   // GNU extension: two types are compatible if they appear as a function
8161   // argument, one of the types is a transparent union type and the other
8162   // type is compatible with a union member
8163   QualType lmerge = mergeTransparentUnionType(lhs, rhs, OfBlockPointer,
8164                                               Unqualified);
8165   if (!lmerge.isNull())
8166     return lmerge;
8167 
8168   QualType rmerge = mergeTransparentUnionType(rhs, lhs, OfBlockPointer,
8169                                               Unqualified);
8170   if (!rmerge.isNull())
8171     return rmerge;
8172 
8173   return mergeTypes(lhs, rhs, OfBlockPointer, Unqualified);
8174 }
8175 
8176 QualType ASTContext::mergeFunctionTypes(QualType lhs, QualType rhs,
8177                                         bool OfBlockPointer,
8178                                         bool Unqualified) {
8179   const FunctionType *lbase = lhs->getAs<FunctionType>();
8180   const FunctionType *rbase = rhs->getAs<FunctionType>();
8181   const FunctionProtoType *lproto = dyn_cast<FunctionProtoType>(lbase);
8182   const FunctionProtoType *rproto = dyn_cast<FunctionProtoType>(rbase);
8183   bool allLTypes = true;
8184   bool allRTypes = true;
8185 
8186   // Check return type
8187   QualType retType;
8188   if (OfBlockPointer) {
8189     QualType RHS = rbase->getReturnType();
8190     QualType LHS = lbase->getReturnType();
8191     bool UnqualifiedResult = Unqualified;
8192     if (!UnqualifiedResult)
8193       UnqualifiedResult = (!RHS.hasQualifiers() && LHS.hasQualifiers());
8194     retType = mergeTypes(LHS, RHS, true, UnqualifiedResult, true);
8195   }
8196   else
8197     retType = mergeTypes(lbase->getReturnType(), rbase->getReturnType(), false,
8198                          Unqualified);
8199   if (retType.isNull()) return QualType();
8200 
8201   if (Unqualified)
8202     retType = retType.getUnqualifiedType();
8203 
8204   CanQualType LRetType = getCanonicalType(lbase->getReturnType());
8205   CanQualType RRetType = getCanonicalType(rbase->getReturnType());
8206   if (Unqualified) {
8207     LRetType = LRetType.getUnqualifiedType();
8208     RRetType = RRetType.getUnqualifiedType();
8209   }
8210 
8211   if (getCanonicalType(retType) != LRetType)
8212     allLTypes = false;
8213   if (getCanonicalType(retType) != RRetType)
8214     allRTypes = false;
8215 
8216   // FIXME: double check this
8217   // FIXME: should we error if lbase->getRegParmAttr() != 0 &&
8218   //                           rbase->getRegParmAttr() != 0 &&
8219   //                           lbase->getRegParmAttr() != rbase->getRegParmAttr()?
8220   FunctionType::ExtInfo lbaseInfo = lbase->getExtInfo();
8221   FunctionType::ExtInfo rbaseInfo = rbase->getExtInfo();
8222 
8223   // Compatible functions must have compatible calling conventions
8224   if (lbaseInfo.getCC() != rbaseInfo.getCC())
8225     return QualType();
8226 
8227   // Regparm is part of the calling convention.
8228   if (lbaseInfo.getHasRegParm() != rbaseInfo.getHasRegParm())
8229     return QualType();
8230   if (lbaseInfo.getRegParm() != rbaseInfo.getRegParm())
8231     return QualType();
8232 
8233   if (lbaseInfo.getProducesResult() != rbaseInfo.getProducesResult())
8234     return QualType();
8235   if (lbaseInfo.getNoCallerSavedRegs() != rbaseInfo.getNoCallerSavedRegs())
8236     return QualType();
8237 
8238   // FIXME: some uses, e.g. conditional exprs, really want this to be 'both'.
8239   bool NoReturn = lbaseInfo.getNoReturn() || rbaseInfo.getNoReturn();
8240 
8241   if (lbaseInfo.getNoReturn() != NoReturn)
8242     allLTypes = false;
8243   if (rbaseInfo.getNoReturn() != NoReturn)
8244     allRTypes = false;
8245 
8246   FunctionType::ExtInfo einfo = lbaseInfo.withNoReturn(NoReturn);
8247 
8248   if (lproto && rproto) { // two C99 style function prototypes
8249     assert(!lproto->hasExceptionSpec() && !rproto->hasExceptionSpec() &&
8250            "C++ shouldn't be here");
8251     // Compatible functions must have the same number of parameters
8252     if (lproto->getNumParams() != rproto->getNumParams())
8253       return QualType();
8254 
8255     // Variadic and non-variadic functions aren't compatible
8256     if (lproto->isVariadic() != rproto->isVariadic())
8257       return QualType();
8258 
8259     if (lproto->getTypeQuals() != rproto->getTypeQuals())
8260       return QualType();
8261 
8262     SmallVector<FunctionProtoType::ExtParameterInfo, 4> newParamInfos;
8263     bool canUseLeft, canUseRight;
8264     if (!mergeExtParameterInfo(lproto, rproto, canUseLeft, canUseRight,
8265                                newParamInfos))
8266       return QualType();
8267 
8268     if (!canUseLeft)
8269       allLTypes = false;
8270     if (!canUseRight)
8271       allRTypes = false;
8272 
8273     // Check parameter type compatibility
8274     SmallVector<QualType, 10> types;
8275     for (unsigned i = 0, n = lproto->getNumParams(); i < n; i++) {
8276       QualType lParamType = lproto->getParamType(i).getUnqualifiedType();
8277       QualType rParamType = rproto->getParamType(i).getUnqualifiedType();
8278       QualType paramType = mergeFunctionParameterTypes(
8279           lParamType, rParamType, OfBlockPointer, Unqualified);
8280       if (paramType.isNull())
8281         return QualType();
8282 
8283       if (Unqualified)
8284         paramType = paramType.getUnqualifiedType();
8285 
8286       types.push_back(paramType);
8287       if (Unqualified) {
8288         lParamType = lParamType.getUnqualifiedType();
8289         rParamType = rParamType.getUnqualifiedType();
8290       }
8291 
8292       if (getCanonicalType(paramType) != getCanonicalType(lParamType))
8293         allLTypes = false;
8294       if (getCanonicalType(paramType) != getCanonicalType(rParamType))
8295         allRTypes = false;
8296     }
8297 
8298     if (allLTypes) return lhs;
8299     if (allRTypes) return rhs;
8300 
8301     FunctionProtoType::ExtProtoInfo EPI = lproto->getExtProtoInfo();
8302     EPI.ExtInfo = einfo;
8303     EPI.ExtParameterInfos =
8304         newParamInfos.empty() ? nullptr : newParamInfos.data();
8305     return getFunctionType(retType, types, EPI);
8306   }
8307 
8308   if (lproto) allRTypes = false;
8309   if (rproto) allLTypes = false;
8310 
8311   const FunctionProtoType *proto = lproto ? lproto : rproto;
8312   if (proto) {
8313     assert(!proto->hasExceptionSpec() && "C++ shouldn't be here");
8314     if (proto->isVariadic()) return QualType();
8315     // Check that the types are compatible with the types that
8316     // would result from default argument promotions (C99 6.7.5.3p15).
8317     // The only types actually affected are promotable integer
8318     // types and floats, which would be passed as a different
8319     // type depending on whether the prototype is visible.
8320     for (unsigned i = 0, n = proto->getNumParams(); i < n; ++i) {
8321       QualType paramTy = proto->getParamType(i);
8322 
8323       // Look at the converted type of enum types, since that is the type used
8324       // to pass enum values.
8325       if (const EnumType *Enum = paramTy->getAs<EnumType>()) {
8326         paramTy = Enum->getDecl()->getIntegerType();
8327         if (paramTy.isNull())
8328           return QualType();
8329       }
8330 
8331       if (paramTy->isPromotableIntegerType() ||
8332           getCanonicalType(paramTy).getUnqualifiedType() == FloatTy)
8333         return QualType();
8334     }
8335 
8336     if (allLTypes) return lhs;
8337     if (allRTypes) return rhs;
8338 
8339     FunctionProtoType::ExtProtoInfo EPI = proto->getExtProtoInfo();
8340     EPI.ExtInfo = einfo;
8341     return getFunctionType(retType, proto->getParamTypes(), EPI);
8342   }
8343 
8344   if (allLTypes) return lhs;
8345   if (allRTypes) return rhs;
8346   return getFunctionNoProtoType(retType, einfo);
8347 }
8348 
8349 /// Given that we have an enum type and a non-enum type, try to merge them.
8350 static QualType mergeEnumWithInteger(ASTContext &Context, const EnumType *ET,
8351                                      QualType other, bool isBlockReturnType) {
8352   // C99 6.7.2.2p4: Each enumerated type shall be compatible with char,
8353   // a signed integer type, or an unsigned integer type.
8354   // Compatibility is based on the underlying type, not the promotion
8355   // type.
8356   QualType underlyingType = ET->getDecl()->getIntegerType();
8357   if (underlyingType.isNull()) return QualType();
8358   if (Context.hasSameType(underlyingType, other))
8359     return other;
8360 
8361   // In block return types, we're more permissive and accept any
8362   // integral type of the same size.
8363   if (isBlockReturnType && other->isIntegerType() &&
8364       Context.getTypeSize(underlyingType) == Context.getTypeSize(other))
8365     return other;
8366 
8367   return QualType();
8368 }
8369 
8370 QualType ASTContext::mergeTypes(QualType LHS, QualType RHS,
8371                                 bool OfBlockPointer,
8372                                 bool Unqualified, bool BlockReturnType) {
8373   // C++ [expr]: If an expression initially has the type "reference to T", the
8374   // type is adjusted to "T" prior to any further analysis, the expression
8375   // designates the object or function denoted by the reference, and the
8376   // expression is an lvalue unless the reference is an rvalue reference and
8377   // the expression is a function call (possibly inside parentheses).
8378   assert(!LHS->getAs<ReferenceType>() && "LHS is a reference type?");
8379   assert(!RHS->getAs<ReferenceType>() && "RHS is a reference type?");
8380 
8381   if (Unqualified) {
8382     LHS = LHS.getUnqualifiedType();
8383     RHS = RHS.getUnqualifiedType();
8384   }
8385 
8386   QualType LHSCan = getCanonicalType(LHS),
8387            RHSCan = getCanonicalType(RHS);
8388 
8389   // If two types are identical, they are compatible.
8390   if (LHSCan == RHSCan)
8391     return LHS;
8392 
8393   // If the qualifiers are different, the types aren't compatible... mostly.
8394   Qualifiers LQuals = LHSCan.getLocalQualifiers();
8395   Qualifiers RQuals = RHSCan.getLocalQualifiers();
8396   if (LQuals != RQuals) {
8397     // If any of these qualifiers are different, we have a type
8398     // mismatch.
8399     if (LQuals.getCVRQualifiers() != RQuals.getCVRQualifiers() ||
8400         LQuals.getAddressSpace() != RQuals.getAddressSpace() ||
8401         LQuals.getObjCLifetime() != RQuals.getObjCLifetime() ||
8402         LQuals.hasUnaligned() != RQuals.hasUnaligned())
8403       return QualType();
8404 
8405     // Exactly one GC qualifier difference is allowed: __strong is
8406     // okay if the other type has no GC qualifier but is an Objective
8407     // C object pointer (i.e. implicitly strong by default).  We fix
8408     // this by pretending that the unqualified type was actually
8409     // qualified __strong.
8410     Qualifiers::GC GC_L = LQuals.getObjCGCAttr();
8411     Qualifiers::GC GC_R = RQuals.getObjCGCAttr();
8412     assert((GC_L != GC_R) && "unequal qualifier sets had only equal elements");
8413 
8414     if (GC_L == Qualifiers::Weak || GC_R == Qualifiers::Weak)
8415       return QualType();
8416 
8417     if (GC_L == Qualifiers::Strong && RHSCan->isObjCObjectPointerType()) {
8418       return mergeTypes(LHS, getObjCGCQualType(RHS, Qualifiers::Strong));
8419     }
8420     if (GC_R == Qualifiers::Strong && LHSCan->isObjCObjectPointerType()) {
8421       return mergeTypes(getObjCGCQualType(LHS, Qualifiers::Strong), RHS);
8422     }
8423     return QualType();
8424   }
8425 
8426   // Okay, qualifiers are equal.
8427 
8428   Type::TypeClass LHSClass = LHSCan->getTypeClass();
8429   Type::TypeClass RHSClass = RHSCan->getTypeClass();
8430 
8431   // We want to consider the two function types to be the same for these
8432   // comparisons, just force one to the other.
8433   if (LHSClass == Type::FunctionProto) LHSClass = Type::FunctionNoProto;
8434   if (RHSClass == Type::FunctionProto) RHSClass = Type::FunctionNoProto;
8435 
8436   // Same as above for arrays
8437   if (LHSClass == Type::VariableArray || LHSClass == Type::IncompleteArray)
8438     LHSClass = Type::ConstantArray;
8439   if (RHSClass == Type::VariableArray || RHSClass == Type::IncompleteArray)
8440     RHSClass = Type::ConstantArray;
8441 
8442   // ObjCInterfaces are just specialized ObjCObjects.
8443   if (LHSClass == Type::ObjCInterface) LHSClass = Type::ObjCObject;
8444   if (RHSClass == Type::ObjCInterface) RHSClass = Type::ObjCObject;
8445 
8446   // Canonicalize ExtVector -> Vector.
8447   if (LHSClass == Type::ExtVector) LHSClass = Type::Vector;
8448   if (RHSClass == Type::ExtVector) RHSClass = Type::Vector;
8449 
8450   // If the canonical type classes don't match.
8451   if (LHSClass != RHSClass) {
8452     // Note that we only have special rules for turning block enum
8453     // returns into block int returns, not vice-versa.
8454     if (const EnumType* ETy = LHS->getAs<EnumType>()) {
8455       return mergeEnumWithInteger(*this, ETy, RHS, false);
8456     }
8457     if (const EnumType* ETy = RHS->getAs<EnumType>()) {
8458       return mergeEnumWithInteger(*this, ETy, LHS, BlockReturnType);
8459     }
8460     // allow block pointer type to match an 'id' type.
8461     if (OfBlockPointer && !BlockReturnType) {
8462        if (LHS->isObjCIdType() && RHS->isBlockPointerType())
8463          return LHS;
8464       if (RHS->isObjCIdType() && LHS->isBlockPointerType())
8465         return RHS;
8466     }
8467 
8468     return QualType();
8469   }
8470 
8471   // The canonical type classes match.
8472   switch (LHSClass) {
8473 #define TYPE(Class, Base)
8474 #define ABSTRACT_TYPE(Class, Base)
8475 #define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base) case Type::Class:
8476 #define NON_CANONICAL_TYPE(Class, Base) case Type::Class:
8477 #define DEPENDENT_TYPE(Class, Base) case Type::Class:
8478 #include "clang/AST/TypeNodes.def"
8479     llvm_unreachable("Non-canonical and dependent types shouldn't get here");
8480 
8481   case Type::Auto:
8482   case Type::DeducedTemplateSpecialization:
8483   case Type::LValueReference:
8484   case Type::RValueReference:
8485   case Type::MemberPointer:
8486     llvm_unreachable("C++ should never be in mergeTypes");
8487 
8488   case Type::ObjCInterface:
8489   case Type::IncompleteArray:
8490   case Type::VariableArray:
8491   case Type::FunctionProto:
8492   case Type::ExtVector:
8493     llvm_unreachable("Types are eliminated above");
8494 
8495   case Type::Pointer:
8496   {
8497     // Merge two pointer types, while trying to preserve typedef info
8498     QualType LHSPointee = LHS->getAs<PointerType>()->getPointeeType();
8499     QualType RHSPointee = RHS->getAs<PointerType>()->getPointeeType();
8500     if (Unqualified) {
8501       LHSPointee = LHSPointee.getUnqualifiedType();
8502       RHSPointee = RHSPointee.getUnqualifiedType();
8503     }
8504     QualType ResultType = mergeTypes(LHSPointee, RHSPointee, false,
8505                                      Unqualified);
8506     if (ResultType.isNull()) return QualType();
8507     if (getCanonicalType(LHSPointee) == getCanonicalType(ResultType))
8508       return LHS;
8509     if (getCanonicalType(RHSPointee) == getCanonicalType(ResultType))
8510       return RHS;
8511     return getPointerType(ResultType);
8512   }
8513   case Type::BlockPointer:
8514   {
8515     // Merge two block pointer types, while trying to preserve typedef info
8516     QualType LHSPointee = LHS->getAs<BlockPointerType>()->getPointeeType();
8517     QualType RHSPointee = RHS->getAs<BlockPointerType>()->getPointeeType();
8518     if (Unqualified) {
8519       LHSPointee = LHSPointee.getUnqualifiedType();
8520       RHSPointee = RHSPointee.getUnqualifiedType();
8521     }
8522     if (getLangOpts().OpenCL) {
8523       Qualifiers LHSPteeQual = LHSPointee.getQualifiers();
8524       Qualifiers RHSPteeQual = RHSPointee.getQualifiers();
8525       // Blocks can't be an expression in a ternary operator (OpenCL v2.0
8526       // 6.12.5) thus the following check is asymmetric.
8527       if (!LHSPteeQual.isAddressSpaceSupersetOf(RHSPteeQual))
8528         return QualType();
8529       LHSPteeQual.removeAddressSpace();
8530       RHSPteeQual.removeAddressSpace();
8531       LHSPointee =
8532           QualType(LHSPointee.getTypePtr(), LHSPteeQual.getAsOpaqueValue());
8533       RHSPointee =
8534           QualType(RHSPointee.getTypePtr(), RHSPteeQual.getAsOpaqueValue());
8535     }
8536     QualType ResultType = mergeTypes(LHSPointee, RHSPointee, OfBlockPointer,
8537                                      Unqualified);
8538     if (ResultType.isNull()) return QualType();
8539     if (getCanonicalType(LHSPointee) == getCanonicalType(ResultType))
8540       return LHS;
8541     if (getCanonicalType(RHSPointee) == getCanonicalType(ResultType))
8542       return RHS;
8543     return getBlockPointerType(ResultType);
8544   }
8545   case Type::Atomic:
8546   {
8547     // Merge two pointer types, while trying to preserve typedef info
8548     QualType LHSValue = LHS->getAs<AtomicType>()->getValueType();
8549     QualType RHSValue = RHS->getAs<AtomicType>()->getValueType();
8550     if (Unqualified) {
8551       LHSValue = LHSValue.getUnqualifiedType();
8552       RHSValue = RHSValue.getUnqualifiedType();
8553     }
8554     QualType ResultType = mergeTypes(LHSValue, RHSValue, false,
8555                                      Unqualified);
8556     if (ResultType.isNull()) return QualType();
8557     if (getCanonicalType(LHSValue) == getCanonicalType(ResultType))
8558       return LHS;
8559     if (getCanonicalType(RHSValue) == getCanonicalType(ResultType))
8560       return RHS;
8561     return getAtomicType(ResultType);
8562   }
8563   case Type::ConstantArray:
8564   {
8565     const ConstantArrayType* LCAT = getAsConstantArrayType(LHS);
8566     const ConstantArrayType* RCAT = getAsConstantArrayType(RHS);
8567     if (LCAT && RCAT && RCAT->getSize() != LCAT->getSize())
8568       return QualType();
8569 
8570     QualType LHSElem = getAsArrayType(LHS)->getElementType();
8571     QualType RHSElem = getAsArrayType(RHS)->getElementType();
8572     if (Unqualified) {
8573       LHSElem = LHSElem.getUnqualifiedType();
8574       RHSElem = RHSElem.getUnqualifiedType();
8575     }
8576 
8577     QualType ResultType = mergeTypes(LHSElem, RHSElem, false, Unqualified);
8578     if (ResultType.isNull()) return QualType();
8579     if (LCAT && getCanonicalType(LHSElem) == getCanonicalType(ResultType))
8580       return LHS;
8581     if (RCAT && getCanonicalType(RHSElem) == getCanonicalType(ResultType))
8582       return RHS;
8583     if (LCAT) return getConstantArrayType(ResultType, LCAT->getSize(),
8584                                           ArrayType::ArraySizeModifier(), 0);
8585     if (RCAT) return getConstantArrayType(ResultType, RCAT->getSize(),
8586                                           ArrayType::ArraySizeModifier(), 0);
8587     const VariableArrayType* LVAT = getAsVariableArrayType(LHS);
8588     const VariableArrayType* RVAT = getAsVariableArrayType(RHS);
8589     if (LVAT && getCanonicalType(LHSElem) == getCanonicalType(ResultType))
8590       return LHS;
8591     if (RVAT && getCanonicalType(RHSElem) == getCanonicalType(ResultType))
8592       return RHS;
8593     if (LVAT) {
8594       // FIXME: This isn't correct! But tricky to implement because
8595       // the array's size has to be the size of LHS, but the type
8596       // has to be different.
8597       return LHS;
8598     }
8599     if (RVAT) {
8600       // FIXME: This isn't correct! But tricky to implement because
8601       // the array's size has to be the size of RHS, but the type
8602       // has to be different.
8603       return RHS;
8604     }
8605     if (getCanonicalType(LHSElem) == getCanonicalType(ResultType)) return LHS;
8606     if (getCanonicalType(RHSElem) == getCanonicalType(ResultType)) return RHS;
8607     return getIncompleteArrayType(ResultType,
8608                                   ArrayType::ArraySizeModifier(), 0);
8609   }
8610   case Type::FunctionNoProto:
8611     return mergeFunctionTypes(LHS, RHS, OfBlockPointer, Unqualified);
8612   case Type::Record:
8613   case Type::Enum:
8614     return QualType();
8615   case Type::Builtin:
8616     // Only exactly equal builtin types are compatible, which is tested above.
8617     return QualType();
8618   case Type::Complex:
8619     // Distinct complex types are incompatible.
8620     return QualType();
8621   case Type::Vector:
8622     // FIXME: The merged type should be an ExtVector!
8623     if (areCompatVectorTypes(LHSCan->getAs<VectorType>(),
8624                              RHSCan->getAs<VectorType>()))
8625       return LHS;
8626     return QualType();
8627   case Type::ObjCObject: {
8628     // Check if the types are assignment compatible.
8629     // FIXME: This should be type compatibility, e.g. whether
8630     // "LHS x; RHS x;" at global scope is legal.
8631     const ObjCObjectType* LHSIface = LHS->getAs<ObjCObjectType>();
8632     const ObjCObjectType* RHSIface = RHS->getAs<ObjCObjectType>();
8633     if (canAssignObjCInterfaces(LHSIface, RHSIface))
8634       return LHS;
8635 
8636     return QualType();
8637   }
8638   case Type::ObjCObjectPointer:
8639     if (OfBlockPointer) {
8640       if (canAssignObjCInterfacesInBlockPointer(
8641                                           LHS->getAs<ObjCObjectPointerType>(),
8642                                           RHS->getAs<ObjCObjectPointerType>(),
8643                                           BlockReturnType))
8644         return LHS;
8645       return QualType();
8646     }
8647     if (canAssignObjCInterfaces(LHS->getAs<ObjCObjectPointerType>(),
8648                                 RHS->getAs<ObjCObjectPointerType>()))
8649       return LHS;
8650 
8651     return QualType();
8652   case Type::Pipe:
8653     assert(LHS != RHS &&
8654            "Equivalent pipe types should have already been handled!");
8655     return QualType();
8656   }
8657 
8658   llvm_unreachable("Invalid Type::Class!");
8659 }
8660 
8661 bool ASTContext::mergeExtParameterInfo(
8662     const FunctionProtoType *FirstFnType, const FunctionProtoType *SecondFnType,
8663     bool &CanUseFirst, bool &CanUseSecond,
8664     SmallVectorImpl<FunctionProtoType::ExtParameterInfo> &NewParamInfos) {
8665   assert(NewParamInfos.empty() && "param info list not empty");
8666   CanUseFirst = CanUseSecond = true;
8667   bool FirstHasInfo = FirstFnType->hasExtParameterInfos();
8668   bool SecondHasInfo = SecondFnType->hasExtParameterInfos();
8669 
8670   // Fast path: if the first type doesn't have ext parameter infos,
8671   // we match if and only if the second type also doesn't have them.
8672   if (!FirstHasInfo && !SecondHasInfo)
8673     return true;
8674 
8675   bool NeedParamInfo = false;
8676   size_t E = FirstHasInfo ? FirstFnType->getExtParameterInfos().size()
8677                           : SecondFnType->getExtParameterInfos().size();
8678 
8679   for (size_t I = 0; I < E; ++I) {
8680     FunctionProtoType::ExtParameterInfo FirstParam, SecondParam;
8681     if (FirstHasInfo)
8682       FirstParam = FirstFnType->getExtParameterInfo(I);
8683     if (SecondHasInfo)
8684       SecondParam = SecondFnType->getExtParameterInfo(I);
8685 
8686     // Cannot merge unless everything except the noescape flag matches.
8687     if (FirstParam.withIsNoEscape(false) != SecondParam.withIsNoEscape(false))
8688       return false;
8689 
8690     bool FirstNoEscape = FirstParam.isNoEscape();
8691     bool SecondNoEscape = SecondParam.isNoEscape();
8692     bool IsNoEscape = FirstNoEscape && SecondNoEscape;
8693     NewParamInfos.push_back(FirstParam.withIsNoEscape(IsNoEscape));
8694     if (NewParamInfos.back().getOpaqueValue())
8695       NeedParamInfo = true;
8696     if (FirstNoEscape != IsNoEscape)
8697       CanUseFirst = false;
8698     if (SecondNoEscape != IsNoEscape)
8699       CanUseSecond = false;
8700   }
8701 
8702   if (!NeedParamInfo)
8703     NewParamInfos.clear();
8704 
8705   return true;
8706 }
8707 
8708 void ASTContext::ResetObjCLayout(const ObjCContainerDecl *CD) {
8709   ObjCLayouts[CD] = nullptr;
8710 }
8711 
8712 /// mergeObjCGCQualifiers - This routine merges ObjC's GC attribute of 'LHS' and
8713 /// 'RHS' attributes and returns the merged version; including for function
8714 /// return types.
8715 QualType ASTContext::mergeObjCGCQualifiers(QualType LHS, QualType RHS) {
8716   QualType LHSCan = getCanonicalType(LHS),
8717   RHSCan = getCanonicalType(RHS);
8718   // If two types are identical, they are compatible.
8719   if (LHSCan == RHSCan)
8720     return LHS;
8721   if (RHSCan->isFunctionType()) {
8722     if (!LHSCan->isFunctionType())
8723       return QualType();
8724     QualType OldReturnType =
8725         cast<FunctionType>(RHSCan.getTypePtr())->getReturnType();
8726     QualType NewReturnType =
8727         cast<FunctionType>(LHSCan.getTypePtr())->getReturnType();
8728     QualType ResReturnType =
8729       mergeObjCGCQualifiers(NewReturnType, OldReturnType);
8730     if (ResReturnType.isNull())
8731       return QualType();
8732     if (ResReturnType == NewReturnType || ResReturnType == OldReturnType) {
8733       // id foo(); ... __strong id foo(); or: __strong id foo(); ... id foo();
8734       // In either case, use OldReturnType to build the new function type.
8735       const FunctionType *F = LHS->getAs<FunctionType>();
8736       if (const FunctionProtoType *FPT = cast<FunctionProtoType>(F)) {
8737         FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();
8738         EPI.ExtInfo = getFunctionExtInfo(LHS);
8739         QualType ResultType =
8740             getFunctionType(OldReturnType, FPT->getParamTypes(), EPI);
8741         return ResultType;
8742       }
8743     }
8744     return QualType();
8745   }
8746 
8747   // If the qualifiers are different, the types can still be merged.
8748   Qualifiers LQuals = LHSCan.getLocalQualifiers();
8749   Qualifiers RQuals = RHSCan.getLocalQualifiers();
8750   if (LQuals != RQuals) {
8751     // If any of these qualifiers are different, we have a type mismatch.
8752     if (LQuals.getCVRQualifiers() != RQuals.getCVRQualifiers() ||
8753         LQuals.getAddressSpace() != RQuals.getAddressSpace())
8754       return QualType();
8755 
8756     // Exactly one GC qualifier difference is allowed: __strong is
8757     // okay if the other type has no GC qualifier but is an Objective
8758     // C object pointer (i.e. implicitly strong by default).  We fix
8759     // this by pretending that the unqualified type was actually
8760     // qualified __strong.
8761     Qualifiers::GC GC_L = LQuals.getObjCGCAttr();
8762     Qualifiers::GC GC_R = RQuals.getObjCGCAttr();
8763     assert((GC_L != GC_R) && "unequal qualifier sets had only equal elements");
8764 
8765     if (GC_L == Qualifiers::Weak || GC_R == Qualifiers::Weak)
8766       return QualType();
8767 
8768     if (GC_L == Qualifiers::Strong)
8769       return LHS;
8770     if (GC_R == Qualifiers::Strong)
8771       return RHS;
8772     return QualType();
8773   }
8774 
8775   if (LHSCan->isObjCObjectPointerType() && RHSCan->isObjCObjectPointerType()) {
8776     QualType LHSBaseQT = LHS->getAs<ObjCObjectPointerType>()->getPointeeType();
8777     QualType RHSBaseQT = RHS->getAs<ObjCObjectPointerType>()->getPointeeType();
8778     QualType ResQT = mergeObjCGCQualifiers(LHSBaseQT, RHSBaseQT);
8779     if (ResQT == LHSBaseQT)
8780       return LHS;
8781     if (ResQT == RHSBaseQT)
8782       return RHS;
8783   }
8784   return QualType();
8785 }
8786 
8787 //===----------------------------------------------------------------------===//
8788 //                         Integer Predicates
8789 //===----------------------------------------------------------------------===//
8790 
8791 unsigned ASTContext::getIntWidth(QualType T) const {
8792   if (const EnumType *ET = T->getAs<EnumType>())
8793     T = ET->getDecl()->getIntegerType();
8794   if (T->isBooleanType())
8795     return 1;
8796   // For builtin types, just use the standard type sizing method
8797   return (unsigned)getTypeSize(T);
8798 }
8799 
8800 QualType ASTContext::getCorrespondingUnsignedType(QualType T) const {
8801   assert(T->hasSignedIntegerRepresentation() && "Unexpected type");
8802 
8803   // Turn <4 x signed int> -> <4 x unsigned int>
8804   if (const VectorType *VTy = T->getAs<VectorType>())
8805     return getVectorType(getCorrespondingUnsignedType(VTy->getElementType()),
8806                          VTy->getNumElements(), VTy->getVectorKind());
8807 
8808   // For enums, we return the unsigned version of the base type.
8809   if (const EnumType *ETy = T->getAs<EnumType>())
8810     T = ETy->getDecl()->getIntegerType();
8811 
8812   const BuiltinType *BTy = T->getAs<BuiltinType>();
8813   assert(BTy && "Unexpected signed integer type");
8814   switch (BTy->getKind()) {
8815   case BuiltinType::Char_S:
8816   case BuiltinType::SChar:
8817     return UnsignedCharTy;
8818   case BuiltinType::Short:
8819     return UnsignedShortTy;
8820   case BuiltinType::Int:
8821     return UnsignedIntTy;
8822   case BuiltinType::Long:
8823     return UnsignedLongTy;
8824   case BuiltinType::LongLong:
8825     return UnsignedLongLongTy;
8826   case BuiltinType::Int128:
8827     return UnsignedInt128Ty;
8828   default:
8829     llvm_unreachable("Unexpected signed integer type");
8830   }
8831 }
8832 
8833 ASTMutationListener::~ASTMutationListener() = default;
8834 
8835 void ASTMutationListener::DeducedReturnType(const FunctionDecl *FD,
8836                                             QualType ReturnType) {}
8837 
8838 //===----------------------------------------------------------------------===//
8839 //                          Builtin Type Computation
8840 //===----------------------------------------------------------------------===//
8841 
8842 /// DecodeTypeFromStr - This decodes one type descriptor from Str, advancing the
8843 /// pointer over the consumed characters.  This returns the resultant type.  If
8844 /// AllowTypeModifiers is false then modifier like * are not parsed, just basic
8845 /// types.  This allows "v2i*" to be parsed as a pointer to a v2i instead of
8846 /// a vector of "i*".
8847 ///
8848 /// RequiresICE is filled in on return to indicate whether the value is required
8849 /// to be an Integer Constant Expression.
8850 static QualType DecodeTypeFromStr(const char *&Str, const ASTContext &Context,
8851                                   ASTContext::GetBuiltinTypeError &Error,
8852                                   bool &RequiresICE,
8853                                   bool AllowTypeModifiers) {
8854   // Modifiers.
8855   int HowLong = 0;
8856   bool Signed = false, Unsigned = false;
8857   RequiresICE = false;
8858 
8859   // Read the prefixed modifiers first.
8860   bool Done = false;
8861   #ifndef NDEBUG
8862   bool IsSpecialLong = false;
8863   #endif
8864   while (!Done) {
8865     switch (*Str++) {
8866     default: Done = true; --Str; break;
8867     case 'I':
8868       RequiresICE = true;
8869       break;
8870     case 'S':
8871       assert(!Unsigned && "Can't use both 'S' and 'U' modifiers!");
8872       assert(!Signed && "Can't use 'S' modifier multiple times!");
8873       Signed = true;
8874       break;
8875     case 'U':
8876       assert(!Signed && "Can't use both 'S' and 'U' modifiers!");
8877       assert(!Unsigned && "Can't use 'U' modifier multiple times!");
8878       Unsigned = true;
8879       break;
8880     case 'L':
8881       assert(!IsSpecialLong && "Can't use 'L' with 'W' or 'N' modifiers");
8882       assert(HowLong <= 2 && "Can't have LLLL modifier");
8883       ++HowLong;
8884       break;
8885     case 'N':
8886       // 'N' behaves like 'L' for all non LP64 targets and 'int' otherwise.
8887       assert(!IsSpecialLong && "Can't use two 'N' or 'W' modifiers!");
8888       assert(HowLong == 0 && "Can't use both 'L' and 'N' modifiers!");
8889       #ifndef NDEBUG
8890       IsSpecialLong = true;
8891       #endif
8892       if (Context.getTargetInfo().getLongWidth() == 32)
8893         ++HowLong;
8894       break;
8895     case 'W':
8896       // This modifier represents int64 type.
8897       assert(!IsSpecialLong && "Can't use two 'N' or 'W' modifiers!");
8898       assert(HowLong == 0 && "Can't use both 'L' and 'W' modifiers!");
8899       #ifndef NDEBUG
8900       IsSpecialLong = true;
8901       #endif
8902       switch (Context.getTargetInfo().getInt64Type()) {
8903       default:
8904         llvm_unreachable("Unexpected integer type");
8905       case TargetInfo::SignedLong:
8906         HowLong = 1;
8907         break;
8908       case TargetInfo::SignedLongLong:
8909         HowLong = 2;
8910         break;
8911       }
8912       break;
8913     }
8914   }
8915 
8916   QualType Type;
8917 
8918   // Read the base type.
8919   switch (*Str++) {
8920   default: llvm_unreachable("Unknown builtin type letter!");
8921   case 'v':
8922     assert(HowLong == 0 && !Signed && !Unsigned &&
8923            "Bad modifiers used with 'v'!");
8924     Type = Context.VoidTy;
8925     break;
8926   case 'h':
8927     assert(HowLong == 0 && !Signed && !Unsigned &&
8928            "Bad modifiers used with 'h'!");
8929     Type = Context.HalfTy;
8930     break;
8931   case 'f':
8932     assert(HowLong == 0 && !Signed && !Unsigned &&
8933            "Bad modifiers used with 'f'!");
8934     Type = Context.FloatTy;
8935     break;
8936   case 'd':
8937     assert(HowLong < 3 && !Signed && !Unsigned &&
8938            "Bad modifiers used with 'd'!");
8939     if (HowLong == 1)
8940       Type = Context.LongDoubleTy;
8941     else if (HowLong == 2)
8942       Type = Context.Float128Ty;
8943     else
8944       Type = Context.DoubleTy;
8945     break;
8946   case 's':
8947     assert(HowLong == 0 && "Bad modifiers used with 's'!");
8948     if (Unsigned)
8949       Type = Context.UnsignedShortTy;
8950     else
8951       Type = Context.ShortTy;
8952     break;
8953   case 'i':
8954     if (HowLong == 3)
8955       Type = Unsigned ? Context.UnsignedInt128Ty : Context.Int128Ty;
8956     else if (HowLong == 2)
8957       Type = Unsigned ? Context.UnsignedLongLongTy : Context.LongLongTy;
8958     else if (HowLong == 1)
8959       Type = Unsigned ? Context.UnsignedLongTy : Context.LongTy;
8960     else
8961       Type = Unsigned ? Context.UnsignedIntTy : Context.IntTy;
8962     break;
8963   case 'c':
8964     assert(HowLong == 0 && "Bad modifiers used with 'c'!");
8965     if (Signed)
8966       Type = Context.SignedCharTy;
8967     else if (Unsigned)
8968       Type = Context.UnsignedCharTy;
8969     else
8970       Type = Context.CharTy;
8971     break;
8972   case 'b': // boolean
8973     assert(HowLong == 0 && !Signed && !Unsigned && "Bad modifiers for 'b'!");
8974     Type = Context.BoolTy;
8975     break;
8976   case 'z':  // size_t.
8977     assert(HowLong == 0 && !Signed && !Unsigned && "Bad modifiers for 'z'!");
8978     Type = Context.getSizeType();
8979     break;
8980   case 'w':  // wchar_t.
8981     assert(HowLong == 0 && !Signed && !Unsigned && "Bad modifiers for 'w'!");
8982     Type = Context.getWideCharType();
8983     break;
8984   case 'F':
8985     Type = Context.getCFConstantStringType();
8986     break;
8987   case 'G':
8988     Type = Context.getObjCIdType();
8989     break;
8990   case 'H':
8991     Type = Context.getObjCSelType();
8992     break;
8993   case 'M':
8994     Type = Context.getObjCSuperType();
8995     break;
8996   case 'a':
8997     Type = Context.getBuiltinVaListType();
8998     assert(!Type.isNull() && "builtin va list type not initialized!");
8999     break;
9000   case 'A':
9001     // This is a "reference" to a va_list; however, what exactly
9002     // this means depends on how va_list is defined. There are two
9003     // different kinds of va_list: ones passed by value, and ones
9004     // passed by reference.  An example of a by-value va_list is
9005     // x86, where va_list is a char*. An example of by-ref va_list
9006     // is x86-64, where va_list is a __va_list_tag[1]. For x86,
9007     // we want this argument to be a char*&; for x86-64, we want
9008     // it to be a __va_list_tag*.
9009     Type = Context.getBuiltinVaListType();
9010     assert(!Type.isNull() && "builtin va list type not initialized!");
9011     if (Type->isArrayType())
9012       Type = Context.getArrayDecayedType(Type);
9013     else
9014       Type = Context.getLValueReferenceType(Type);
9015     break;
9016   case 'V': {
9017     char *End;
9018     unsigned NumElements = strtoul(Str, &End, 10);
9019     assert(End != Str && "Missing vector size");
9020     Str = End;
9021 
9022     QualType ElementType = DecodeTypeFromStr(Str, Context, Error,
9023                                              RequiresICE, false);
9024     assert(!RequiresICE && "Can't require vector ICE");
9025 
9026     // TODO: No way to make AltiVec vectors in builtins yet.
9027     Type = Context.getVectorType(ElementType, NumElements,
9028                                  VectorType::GenericVector);
9029     break;
9030   }
9031   case 'E': {
9032     char *End;
9033 
9034     unsigned NumElements = strtoul(Str, &End, 10);
9035     assert(End != Str && "Missing vector size");
9036 
9037     Str = End;
9038 
9039     QualType ElementType = DecodeTypeFromStr(Str, Context, Error, RequiresICE,
9040                                              false);
9041     Type = Context.getExtVectorType(ElementType, NumElements);
9042     break;
9043   }
9044   case 'X': {
9045     QualType ElementType = DecodeTypeFromStr(Str, Context, Error, RequiresICE,
9046                                              false);
9047     assert(!RequiresICE && "Can't require complex ICE");
9048     Type = Context.getComplexType(ElementType);
9049     break;
9050   }
9051   case 'Y':
9052     Type = Context.getPointerDiffType();
9053     break;
9054   case 'P':
9055     Type = Context.getFILEType();
9056     if (Type.isNull()) {
9057       Error = ASTContext::GE_Missing_stdio;
9058       return QualType();
9059     }
9060     break;
9061   case 'J':
9062     if (Signed)
9063       Type = Context.getsigjmp_bufType();
9064     else
9065       Type = Context.getjmp_bufType();
9066 
9067     if (Type.isNull()) {
9068       Error = ASTContext::GE_Missing_setjmp;
9069       return QualType();
9070     }
9071     break;
9072   case 'K':
9073     assert(HowLong == 0 && !Signed && !Unsigned && "Bad modifiers for 'K'!");
9074     Type = Context.getucontext_tType();
9075 
9076     if (Type.isNull()) {
9077       Error = ASTContext::GE_Missing_ucontext;
9078       return QualType();
9079     }
9080     break;
9081   case 'p':
9082     Type = Context.getProcessIDType();
9083     break;
9084   }
9085 
9086   // If there are modifiers and if we're allowed to parse them, go for it.
9087   Done = !AllowTypeModifiers;
9088   while (!Done) {
9089     switch (char c = *Str++) {
9090     default: Done = true; --Str; break;
9091     case '*':
9092     case '&': {
9093       // Both pointers and references can have their pointee types
9094       // qualified with an address space.
9095       char *End;
9096       unsigned AddrSpace = strtoul(Str, &End, 10);
9097       if (End != Str && AddrSpace != 0) {
9098         Type = Context.getAddrSpaceQualType(Type,
9099                                             getLangASFromTargetAS(AddrSpace));
9100         Str = End;
9101       }
9102       if (c == '*')
9103         Type = Context.getPointerType(Type);
9104       else
9105         Type = Context.getLValueReferenceType(Type);
9106       break;
9107     }
9108     // FIXME: There's no way to have a built-in with an rvalue ref arg.
9109     case 'C':
9110       Type = Type.withConst();
9111       break;
9112     case 'D':
9113       Type = Context.getVolatileType(Type);
9114       break;
9115     case 'R':
9116       Type = Type.withRestrict();
9117       break;
9118     }
9119   }
9120 
9121   assert((!RequiresICE || Type->isIntegralOrEnumerationType()) &&
9122          "Integer constant 'I' type must be an integer");
9123 
9124   return Type;
9125 }
9126 
9127 /// GetBuiltinType - Return the type for the specified builtin.
9128 QualType ASTContext::GetBuiltinType(unsigned Id,
9129                                     GetBuiltinTypeError &Error,
9130                                     unsigned *IntegerConstantArgs) const {
9131   const char *TypeStr = BuiltinInfo.getTypeString(Id);
9132 
9133   SmallVector<QualType, 8> ArgTypes;
9134 
9135   bool RequiresICE = false;
9136   Error = GE_None;
9137   QualType ResType = DecodeTypeFromStr(TypeStr, *this, Error,
9138                                        RequiresICE, true);
9139   if (Error != GE_None)
9140     return QualType();
9141 
9142   assert(!RequiresICE && "Result of intrinsic cannot be required to be an ICE");
9143 
9144   while (TypeStr[0] && TypeStr[0] != '.') {
9145     QualType Ty = DecodeTypeFromStr(TypeStr, *this, Error, RequiresICE, true);
9146     if (Error != GE_None)
9147       return QualType();
9148 
9149     // If this argument is required to be an IntegerConstantExpression and the
9150     // caller cares, fill in the bitmask we return.
9151     if (RequiresICE && IntegerConstantArgs)
9152       *IntegerConstantArgs |= 1 << ArgTypes.size();
9153 
9154     // Do array -> pointer decay.  The builtin should use the decayed type.
9155     if (Ty->isArrayType())
9156       Ty = getArrayDecayedType(Ty);
9157 
9158     ArgTypes.push_back(Ty);
9159   }
9160 
9161   if (Id == Builtin::BI__GetExceptionInfo)
9162     return QualType();
9163 
9164   assert((TypeStr[0] != '.' || TypeStr[1] == 0) &&
9165          "'.' should only occur at end of builtin type list!");
9166 
9167   FunctionType::ExtInfo EI(CC_C);
9168   if (BuiltinInfo.isNoReturn(Id)) EI = EI.withNoReturn(true);
9169 
9170   bool Variadic = (TypeStr[0] == '.');
9171 
9172   // We really shouldn't be making a no-proto type here.
9173   if (ArgTypes.empty() && Variadic && !getLangOpts().CPlusPlus)
9174     return getFunctionNoProtoType(ResType, EI);
9175 
9176   FunctionProtoType::ExtProtoInfo EPI;
9177   EPI.ExtInfo = EI;
9178   EPI.Variadic = Variadic;
9179   if (getLangOpts().CPlusPlus && BuiltinInfo.isNoThrow(Id))
9180     EPI.ExceptionSpec.Type =
9181         getLangOpts().CPlusPlus11 ? EST_BasicNoexcept : EST_DynamicNone;
9182 
9183   return getFunctionType(ResType, ArgTypes, EPI);
9184 }
9185 
9186 static GVALinkage basicGVALinkageForFunction(const ASTContext &Context,
9187                                              const FunctionDecl *FD) {
9188   if (!FD->isExternallyVisible())
9189     return GVA_Internal;
9190 
9191   // Non-user-provided functions get emitted as weak definitions with every
9192   // use, no matter whether they've been explicitly instantiated etc.
9193   if (auto *MD = dyn_cast<CXXMethodDecl>(FD))
9194     if (!MD->isUserProvided())
9195       return GVA_DiscardableODR;
9196 
9197   GVALinkage External;
9198   switch (FD->getTemplateSpecializationKind()) {
9199   case TSK_Undeclared:
9200   case TSK_ExplicitSpecialization:
9201     External = GVA_StrongExternal;
9202     break;
9203 
9204   case TSK_ExplicitInstantiationDefinition:
9205     return GVA_StrongODR;
9206 
9207   // C++11 [temp.explicit]p10:
9208   //   [ Note: The intent is that an inline function that is the subject of
9209   //   an explicit instantiation declaration will still be implicitly
9210   //   instantiated when used so that the body can be considered for
9211   //   inlining, but that no out-of-line copy of the inline function would be
9212   //   generated in the translation unit. -- end note ]
9213   case TSK_ExplicitInstantiationDeclaration:
9214     return GVA_AvailableExternally;
9215 
9216   case TSK_ImplicitInstantiation:
9217     External = GVA_DiscardableODR;
9218     break;
9219   }
9220 
9221   if (!FD->isInlined())
9222     return External;
9223 
9224   if ((!Context.getLangOpts().CPlusPlus &&
9225        !Context.getTargetInfo().getCXXABI().isMicrosoft() &&
9226        !FD->hasAttr<DLLExportAttr>()) ||
9227       FD->hasAttr<GNUInlineAttr>()) {
9228     // FIXME: This doesn't match gcc's behavior for dllexport inline functions.
9229 
9230     // GNU or C99 inline semantics. Determine whether this symbol should be
9231     // externally visible.
9232     if (FD->isInlineDefinitionExternallyVisible())
9233       return External;
9234 
9235     // C99 inline semantics, where the symbol is not externally visible.
9236     return GVA_AvailableExternally;
9237   }
9238 
9239   // Functions specified with extern and inline in -fms-compatibility mode
9240   // forcibly get emitted.  While the body of the function cannot be later
9241   // replaced, the function definition cannot be discarded.
9242   if (FD->isMSExternInline())
9243     return GVA_StrongODR;
9244 
9245   return GVA_DiscardableODR;
9246 }
9247 
9248 static GVALinkage adjustGVALinkageForAttributes(const ASTContext &Context,
9249                                                 const Decl *D, GVALinkage L) {
9250   // See http://msdn.microsoft.com/en-us/library/xa0d9ste.aspx
9251   // dllexport/dllimport on inline functions.
9252   if (D->hasAttr<DLLImportAttr>()) {
9253     if (L == GVA_DiscardableODR || L == GVA_StrongODR)
9254       return GVA_AvailableExternally;
9255   } else if (D->hasAttr<DLLExportAttr>()) {
9256     if (L == GVA_DiscardableODR)
9257       return GVA_StrongODR;
9258   } else if (Context.getLangOpts().CUDA && Context.getLangOpts().CUDAIsDevice &&
9259              D->hasAttr<CUDAGlobalAttr>()) {
9260     // Device-side functions with __global__ attribute must always be
9261     // visible externally so they can be launched from host.
9262     if (L == GVA_DiscardableODR || L == GVA_Internal)
9263       return GVA_StrongODR;
9264   }
9265   return L;
9266 }
9267 
9268 /// Adjust the GVALinkage for a declaration based on what an external AST source
9269 /// knows about whether there can be other definitions of this declaration.
9270 static GVALinkage
9271 adjustGVALinkageForExternalDefinitionKind(const ASTContext &Ctx, const Decl *D,
9272                                           GVALinkage L) {
9273   ExternalASTSource *Source = Ctx.getExternalSource();
9274   if (!Source)
9275     return L;
9276 
9277   switch (Source->hasExternalDefinitions(D)) {
9278   case ExternalASTSource::EK_Never:
9279     // Other translation units rely on us to provide the definition.
9280     if (L == GVA_DiscardableODR)
9281       return GVA_StrongODR;
9282     break;
9283 
9284   case ExternalASTSource::EK_Always:
9285     return GVA_AvailableExternally;
9286 
9287   case ExternalASTSource::EK_ReplyHazy:
9288     break;
9289   }
9290   return L;
9291 }
9292 
9293 GVALinkage ASTContext::GetGVALinkageForFunction(const FunctionDecl *FD) const {
9294   return adjustGVALinkageForExternalDefinitionKind(*this, FD,
9295            adjustGVALinkageForAttributes(*this, FD,
9296              basicGVALinkageForFunction(*this, FD)));
9297 }
9298 
9299 static GVALinkage basicGVALinkageForVariable(const ASTContext &Context,
9300                                              const VarDecl *VD) {
9301   if (!VD->isExternallyVisible())
9302     return GVA_Internal;
9303 
9304   if (VD->isStaticLocal()) {
9305     const DeclContext *LexicalContext = VD->getParentFunctionOrMethod();
9306     while (LexicalContext && !isa<FunctionDecl>(LexicalContext))
9307       LexicalContext = LexicalContext->getLexicalParent();
9308 
9309     // ObjC Blocks can create local variables that don't have a FunctionDecl
9310     // LexicalContext.
9311     if (!LexicalContext)
9312       return GVA_DiscardableODR;
9313 
9314     // Otherwise, let the static local variable inherit its linkage from the
9315     // nearest enclosing function.
9316     auto StaticLocalLinkage =
9317         Context.GetGVALinkageForFunction(cast<FunctionDecl>(LexicalContext));
9318 
9319     // Itanium ABI 5.2.2: "Each COMDAT group [for a static local variable] must
9320     // be emitted in any object with references to the symbol for the object it
9321     // contains, whether inline or out-of-line."
9322     // Similar behavior is observed with MSVC. An alternative ABI could use
9323     // StrongODR/AvailableExternally to match the function, but none are
9324     // known/supported currently.
9325     if (StaticLocalLinkage == GVA_StrongODR ||
9326         StaticLocalLinkage == GVA_AvailableExternally)
9327       return GVA_DiscardableODR;
9328     return StaticLocalLinkage;
9329   }
9330 
9331   // MSVC treats in-class initialized static data members as definitions.
9332   // By giving them non-strong linkage, out-of-line definitions won't
9333   // cause link errors.
9334   if (Context.isMSStaticDataMemberInlineDefinition(VD))
9335     return GVA_DiscardableODR;
9336 
9337   // Most non-template variables have strong linkage; inline variables are
9338   // linkonce_odr or (occasionally, for compatibility) weak_odr.
9339   GVALinkage StrongLinkage;
9340   switch (Context.getInlineVariableDefinitionKind(VD)) {
9341   case ASTContext::InlineVariableDefinitionKind::None:
9342     StrongLinkage = GVA_StrongExternal;
9343     break;
9344   case ASTContext::InlineVariableDefinitionKind::Weak:
9345   case ASTContext::InlineVariableDefinitionKind::WeakUnknown:
9346     StrongLinkage = GVA_DiscardableODR;
9347     break;
9348   case ASTContext::InlineVariableDefinitionKind::Strong:
9349     StrongLinkage = GVA_StrongODR;
9350     break;
9351   }
9352 
9353   switch (VD->getTemplateSpecializationKind()) {
9354   case TSK_Undeclared:
9355     return StrongLinkage;
9356 
9357   case TSK_ExplicitSpecialization:
9358     return Context.getTargetInfo().getCXXABI().isMicrosoft() &&
9359                    VD->isStaticDataMember()
9360                ? GVA_StrongODR
9361                : StrongLinkage;
9362 
9363   case TSK_ExplicitInstantiationDefinition:
9364     return GVA_StrongODR;
9365 
9366   case TSK_ExplicitInstantiationDeclaration:
9367     return GVA_AvailableExternally;
9368 
9369   case TSK_ImplicitInstantiation:
9370     return GVA_DiscardableODR;
9371   }
9372 
9373   llvm_unreachable("Invalid Linkage!");
9374 }
9375 
9376 GVALinkage ASTContext::GetGVALinkageForVariable(const VarDecl *VD) {
9377   return adjustGVALinkageForExternalDefinitionKind(*this, VD,
9378            adjustGVALinkageForAttributes(*this, VD,
9379              basicGVALinkageForVariable(*this, VD)));
9380 }
9381 
9382 bool ASTContext::DeclMustBeEmitted(const Decl *D) {
9383   if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
9384     if (!VD->isFileVarDecl())
9385       return false;
9386     // Global named register variables (GNU extension) are never emitted.
9387     if (VD->getStorageClass() == SC_Register)
9388       return false;
9389     if (VD->getDescribedVarTemplate() ||
9390         isa<VarTemplatePartialSpecializationDecl>(VD))
9391       return false;
9392   } else if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
9393     // We never need to emit an uninstantiated function template.
9394     if (FD->getTemplatedKind() == FunctionDecl::TK_FunctionTemplate)
9395       return false;
9396   } else if (isa<PragmaCommentDecl>(D))
9397     return true;
9398   else if (isa<OMPThreadPrivateDecl>(D) ||
9399            D->hasAttr<OMPDeclareTargetDeclAttr>())
9400     return true;
9401   else if (isa<PragmaDetectMismatchDecl>(D))
9402     return true;
9403   else if (isa<OMPThreadPrivateDecl>(D))
9404     return !D->getDeclContext()->isDependentContext();
9405   else if (isa<OMPDeclareReductionDecl>(D))
9406     return !D->getDeclContext()->isDependentContext();
9407   else if (isa<ImportDecl>(D))
9408     return true;
9409   else
9410     return false;
9411 
9412   // If this is a member of a class template, we do not need to emit it.
9413   if (D->getDeclContext()->isDependentContext())
9414     return false;
9415 
9416   // Weak references don't produce any output by themselves.
9417   if (D->hasAttr<WeakRefAttr>())
9418     return false;
9419 
9420   // Aliases and used decls are required.
9421   if (D->hasAttr<AliasAttr>() || D->hasAttr<UsedAttr>())
9422     return true;
9423 
9424   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
9425     // Forward declarations aren't required.
9426     if (!FD->doesThisDeclarationHaveABody())
9427       return FD->doesDeclarationForceExternallyVisibleDefinition();
9428 
9429     // Constructors and destructors are required.
9430     if (FD->hasAttr<ConstructorAttr>() || FD->hasAttr<DestructorAttr>())
9431       return true;
9432 
9433     // The key function for a class is required.  This rule only comes
9434     // into play when inline functions can be key functions, though.
9435     if (getTargetInfo().getCXXABI().canKeyFunctionBeInline()) {
9436       if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD)) {
9437         const CXXRecordDecl *RD = MD->getParent();
9438         if (MD->isOutOfLine() && RD->isDynamicClass()) {
9439           const CXXMethodDecl *KeyFunc = getCurrentKeyFunction(RD);
9440           if (KeyFunc && KeyFunc->getCanonicalDecl() == MD->getCanonicalDecl())
9441             return true;
9442         }
9443       }
9444     }
9445 
9446     GVALinkage Linkage = GetGVALinkageForFunction(FD);
9447 
9448     // static, static inline, always_inline, and extern inline functions can
9449     // always be deferred.  Normal inline functions can be deferred in C99/C++.
9450     // Implicit template instantiations can also be deferred in C++.
9451     return !isDiscardableGVALinkage(Linkage);
9452   }
9453 
9454   const VarDecl *VD = cast<VarDecl>(D);
9455   assert(VD->isFileVarDecl() && "Expected file scoped var");
9456 
9457   if (VD->isThisDeclarationADefinition() == VarDecl::DeclarationOnly &&
9458       !isMSStaticDataMemberInlineDefinition(VD))
9459     return false;
9460 
9461   // Variables that can be needed in other TUs are required.
9462   auto Linkage = GetGVALinkageForVariable(VD);
9463   if (!isDiscardableGVALinkage(Linkage))
9464     return true;
9465 
9466   // We never need to emit a variable that is available in another TU.
9467   if (Linkage == GVA_AvailableExternally)
9468     return false;
9469 
9470   // Variables that have destruction with side-effects are required.
9471   if (VD->getType().isDestructedType())
9472     return true;
9473 
9474   // Variables that have initialization with side-effects are required.
9475   if (VD->getInit() && VD->getInit()->HasSideEffects(*this) &&
9476       // We can get a value-dependent initializer during error recovery.
9477       (VD->getInit()->isValueDependent() || !VD->evaluateValue()))
9478     return true;
9479 
9480   // Likewise, variables with tuple-like bindings are required if their
9481   // bindings have side-effects.
9482   if (auto *DD = dyn_cast<DecompositionDecl>(VD))
9483     for (auto *BD : DD->bindings())
9484       if (auto *BindingVD = BD->getHoldingVar())
9485         if (DeclMustBeEmitted(BindingVD))
9486           return true;
9487 
9488   return false;
9489 }
9490 
9491 void ASTContext::forEachMultiversionedFunctionVersion(
9492     const FunctionDecl *FD,
9493     llvm::function_ref<void(const FunctionDecl *)> Pred) const {
9494   assert(FD->isMultiVersion() && "Only valid for multiversioned functions");
9495   llvm::SmallDenseSet<const FunctionDecl*, 4> SeenDecls;
9496   FD = FD->getCanonicalDecl();
9497   for (auto *CurDecl :
9498        FD->getDeclContext()->getRedeclContext()->lookup(FD->getDeclName())) {
9499     FunctionDecl *CurFD = CurDecl->getAsFunction()->getCanonicalDecl();
9500     if (CurFD && hasSameType(CurFD->getType(), FD->getType()) &&
9501         std::end(SeenDecls) == llvm::find(SeenDecls, CurFD)) {
9502       SeenDecls.insert(CurFD);
9503       Pred(CurFD);
9504     }
9505   }
9506 }
9507 
9508 CallingConv ASTContext::getDefaultCallingConvention(bool IsVariadic,
9509                                                     bool IsCXXMethod) const {
9510   // Pass through to the C++ ABI object
9511   if (IsCXXMethod)
9512     return ABI->getDefaultMethodCallConv(IsVariadic);
9513 
9514   switch (LangOpts.getDefaultCallingConv()) {
9515   case LangOptions::DCC_None:
9516     break;
9517   case LangOptions::DCC_CDecl:
9518     return CC_C;
9519   case LangOptions::DCC_FastCall:
9520     if (getTargetInfo().hasFeature("sse2") && !IsVariadic)
9521       return CC_X86FastCall;
9522     break;
9523   case LangOptions::DCC_StdCall:
9524     if (!IsVariadic)
9525       return CC_X86StdCall;
9526     break;
9527   case LangOptions::DCC_VectorCall:
9528     // __vectorcall cannot be applied to variadic functions.
9529     if (!IsVariadic)
9530       return CC_X86VectorCall;
9531     break;
9532   case LangOptions::DCC_RegCall:
9533     // __regcall cannot be applied to variadic functions.
9534     if (!IsVariadic)
9535       return CC_X86RegCall;
9536     break;
9537   }
9538   return Target->getDefaultCallingConv(TargetInfo::CCMT_Unknown);
9539 }
9540 
9541 bool ASTContext::isNearlyEmpty(const CXXRecordDecl *RD) const {
9542   // Pass through to the C++ ABI object
9543   return ABI->isNearlyEmpty(RD);
9544 }
9545 
9546 VTableContextBase *ASTContext::getVTableContext() {
9547   if (!VTContext.get()) {
9548     if (Target->getCXXABI().isMicrosoft())
9549       VTContext.reset(new MicrosoftVTableContext(*this));
9550     else
9551       VTContext.reset(new ItaniumVTableContext(*this));
9552   }
9553   return VTContext.get();
9554 }
9555 
9556 MangleContext *ASTContext::createMangleContext() {
9557   switch (Target->getCXXABI().getKind()) {
9558   case TargetCXXABI::GenericAArch64:
9559   case TargetCXXABI::GenericItanium:
9560   case TargetCXXABI::GenericARM:
9561   case TargetCXXABI::GenericMIPS:
9562   case TargetCXXABI::iOS:
9563   case TargetCXXABI::iOS64:
9564   case TargetCXXABI::WebAssembly:
9565   case TargetCXXABI::WatchOS:
9566     return ItaniumMangleContext::create(*this, getDiagnostics());
9567   case TargetCXXABI::Microsoft:
9568     return MicrosoftMangleContext::create(*this, getDiagnostics());
9569   }
9570   llvm_unreachable("Unsupported ABI");
9571 }
9572 
9573 CXXABI::~CXXABI() = default;
9574 
9575 size_t ASTContext::getSideTableAllocatedMemory() const {
9576   return ASTRecordLayouts.getMemorySize() +
9577          llvm::capacity_in_bytes(ObjCLayouts) +
9578          llvm::capacity_in_bytes(KeyFunctions) +
9579          llvm::capacity_in_bytes(ObjCImpls) +
9580          llvm::capacity_in_bytes(BlockVarCopyInits) +
9581          llvm::capacity_in_bytes(DeclAttrs) +
9582          llvm::capacity_in_bytes(TemplateOrInstantiation) +
9583          llvm::capacity_in_bytes(InstantiatedFromUsingDecl) +
9584          llvm::capacity_in_bytes(InstantiatedFromUsingShadowDecl) +
9585          llvm::capacity_in_bytes(InstantiatedFromUnnamedFieldDecl) +
9586          llvm::capacity_in_bytes(OverriddenMethods) +
9587          llvm::capacity_in_bytes(Types) +
9588          llvm::capacity_in_bytes(VariableArrayTypes) +
9589          llvm::capacity_in_bytes(ClassScopeSpecializationPattern);
9590 }
9591 
9592 /// getIntTypeForBitwidth -
9593 /// sets integer QualTy according to specified details:
9594 /// bitwidth, signed/unsigned.
9595 /// Returns empty type if there is no appropriate target types.
9596 QualType ASTContext::getIntTypeForBitwidth(unsigned DestWidth,
9597                                            unsigned Signed) const {
9598   TargetInfo::IntType Ty = getTargetInfo().getIntTypeByWidth(DestWidth, Signed);
9599   CanQualType QualTy = getFromTargetType(Ty);
9600   if (!QualTy && DestWidth == 128)
9601     return Signed ? Int128Ty : UnsignedInt128Ty;
9602   return QualTy;
9603 }
9604 
9605 /// getRealTypeForBitwidth -
9606 /// sets floating point QualTy according to specified bitwidth.
9607 /// Returns empty type if there is no appropriate target types.
9608 QualType ASTContext::getRealTypeForBitwidth(unsigned DestWidth) const {
9609   TargetInfo::RealType Ty = getTargetInfo().getRealTypeByWidth(DestWidth);
9610   switch (Ty) {
9611   case TargetInfo::Float:
9612     return FloatTy;
9613   case TargetInfo::Double:
9614     return DoubleTy;
9615   case TargetInfo::LongDouble:
9616     return LongDoubleTy;
9617   case TargetInfo::Float128:
9618     return Float128Ty;
9619   case TargetInfo::NoFloat:
9620     return QualType();
9621   }
9622 
9623   llvm_unreachable("Unhandled TargetInfo::RealType value");
9624 }
9625 
9626 void ASTContext::setManglingNumber(const NamedDecl *ND, unsigned Number) {
9627   if (Number > 1)
9628     MangleNumbers[ND] = Number;
9629 }
9630 
9631 unsigned ASTContext::getManglingNumber(const NamedDecl *ND) const {
9632   auto I = MangleNumbers.find(ND);
9633   return I != MangleNumbers.end() ? I->second : 1;
9634 }
9635 
9636 void ASTContext::setStaticLocalNumber(const VarDecl *VD, unsigned Number) {
9637   if (Number > 1)
9638     StaticLocalNumbers[VD] = Number;
9639 }
9640 
9641 unsigned ASTContext::getStaticLocalNumber(const VarDecl *VD) const {
9642   auto I = StaticLocalNumbers.find(VD);
9643   return I != StaticLocalNumbers.end() ? I->second : 1;
9644 }
9645 
9646 MangleNumberingContext &
9647 ASTContext::getManglingNumberContext(const DeclContext *DC) {
9648   assert(LangOpts.CPlusPlus);  // We don't need mangling numbers for plain C.
9649   std::unique_ptr<MangleNumberingContext> &MCtx = MangleNumberingContexts[DC];
9650   if (!MCtx)
9651     MCtx = createMangleNumberingContext();
9652   return *MCtx;
9653 }
9654 
9655 std::unique_ptr<MangleNumberingContext>
9656 ASTContext::createMangleNumberingContext() const {
9657   return ABI->createMangleNumberingContext();
9658 }
9659 
9660 const CXXConstructorDecl *
9661 ASTContext::getCopyConstructorForExceptionObject(CXXRecordDecl *RD) {
9662   return ABI->getCopyConstructorForExceptionObject(
9663       cast<CXXRecordDecl>(RD->getFirstDecl()));
9664 }
9665 
9666 void ASTContext::addCopyConstructorForExceptionObject(CXXRecordDecl *RD,
9667                                                       CXXConstructorDecl *CD) {
9668   return ABI->addCopyConstructorForExceptionObject(
9669       cast<CXXRecordDecl>(RD->getFirstDecl()),
9670       cast<CXXConstructorDecl>(CD->getFirstDecl()));
9671 }
9672 
9673 void ASTContext::addTypedefNameForUnnamedTagDecl(TagDecl *TD,
9674                                                  TypedefNameDecl *DD) {
9675   return ABI->addTypedefNameForUnnamedTagDecl(TD, DD);
9676 }
9677 
9678 TypedefNameDecl *
9679 ASTContext::getTypedefNameForUnnamedTagDecl(const TagDecl *TD) {
9680   return ABI->getTypedefNameForUnnamedTagDecl(TD);
9681 }
9682 
9683 void ASTContext::addDeclaratorForUnnamedTagDecl(TagDecl *TD,
9684                                                 DeclaratorDecl *DD) {
9685   return ABI->addDeclaratorForUnnamedTagDecl(TD, DD);
9686 }
9687 
9688 DeclaratorDecl *ASTContext::getDeclaratorForUnnamedTagDecl(const TagDecl *TD) {
9689   return ABI->getDeclaratorForUnnamedTagDecl(TD);
9690 }
9691 
9692 void ASTContext::setParameterIndex(const ParmVarDecl *D, unsigned int index) {
9693   ParamIndices[D] = index;
9694 }
9695 
9696 unsigned ASTContext::getParameterIndex(const ParmVarDecl *D) const {
9697   ParameterIndexTable::const_iterator I = ParamIndices.find(D);
9698   assert(I != ParamIndices.end() &&
9699          "ParmIndices lacks entry set by ParmVarDecl");
9700   return I->second;
9701 }
9702 
9703 APValue *
9704 ASTContext::getMaterializedTemporaryValue(const MaterializeTemporaryExpr *E,
9705                                           bool MayCreate) {
9706   assert(E && E->getStorageDuration() == SD_Static &&
9707          "don't need to cache the computed value for this temporary");
9708   if (MayCreate) {
9709     APValue *&MTVI = MaterializedTemporaryValues[E];
9710     if (!MTVI)
9711       MTVI = new (*this) APValue;
9712     return MTVI;
9713   }
9714 
9715   return MaterializedTemporaryValues.lookup(E);
9716 }
9717 
9718 bool ASTContext::AtomicUsesUnsupportedLibcall(const AtomicExpr *E) const {
9719   const llvm::Triple &T = getTargetInfo().getTriple();
9720   if (!T.isOSDarwin())
9721     return false;
9722 
9723   if (!(T.isiOS() && T.isOSVersionLT(7)) &&
9724       !(T.isMacOSX() && T.isOSVersionLT(10, 9)))
9725     return false;
9726 
9727   QualType AtomicTy = E->getPtr()->getType()->getPointeeType();
9728   CharUnits sizeChars = getTypeSizeInChars(AtomicTy);
9729   uint64_t Size = sizeChars.getQuantity();
9730   CharUnits alignChars = getTypeAlignInChars(AtomicTy);
9731   unsigned Align = alignChars.getQuantity();
9732   unsigned MaxInlineWidthInBits = getTargetInfo().getMaxAtomicInlineWidth();
9733   return (Size != Align || toBits(sizeChars) > MaxInlineWidthInBits);
9734 }
9735 
9736 static ast_type_traits::DynTypedNode getSingleDynTypedNodeFromParentMap(
9737     ASTContext::ParentMapPointers::mapped_type U) {
9738   if (const auto *D = U.dyn_cast<const Decl *>())
9739     return ast_type_traits::DynTypedNode::create(*D);
9740   if (const auto *S = U.dyn_cast<const Stmt *>())
9741     return ast_type_traits::DynTypedNode::create(*S);
9742   return *U.get<ast_type_traits::DynTypedNode *>();
9743 }
9744 
9745 namespace {
9746 
9747 /// Template specializations to abstract away from pointers and TypeLocs.
9748 /// @{
9749 template <typename T>
9750 ast_type_traits::DynTypedNode createDynTypedNode(const T &Node) {
9751   return ast_type_traits::DynTypedNode::create(*Node);
9752 }
9753 template <>
9754 ast_type_traits::DynTypedNode createDynTypedNode(const TypeLoc &Node) {
9755   return ast_type_traits::DynTypedNode::create(Node);
9756 }
9757 template <>
9758 ast_type_traits::DynTypedNode
9759 createDynTypedNode(const NestedNameSpecifierLoc &Node) {
9760   return ast_type_traits::DynTypedNode::create(Node);
9761 }
9762 /// @}
9763 
9764   /// \brief A \c RecursiveASTVisitor that builds a map from nodes to their
9765   /// parents as defined by the \c RecursiveASTVisitor.
9766   ///
9767   /// Note that the relationship described here is purely in terms of AST
9768   /// traversal - there are other relationships (for example declaration context)
9769   /// in the AST that are better modeled by special matchers.
9770   ///
9771   /// FIXME: Currently only builds up the map using \c Stmt and \c Decl nodes.
9772   class ParentMapASTVisitor : public RecursiveASTVisitor<ParentMapASTVisitor> {
9773   public:
9774     /// \brief Builds and returns the translation unit's parent map.
9775     ///
9776     ///  The caller takes ownership of the returned \c ParentMap.
9777     static std::pair<ASTContext::ParentMapPointers *,
9778                      ASTContext::ParentMapOtherNodes *>
9779     buildMap(TranslationUnitDecl &TU) {
9780       ParentMapASTVisitor Visitor(new ASTContext::ParentMapPointers,
9781                                   new ASTContext::ParentMapOtherNodes);
9782       Visitor.TraverseDecl(&TU);
9783       return std::make_pair(Visitor.Parents, Visitor.OtherParents);
9784     }
9785 
9786   private:
9787     friend class RecursiveASTVisitor<ParentMapASTVisitor>;
9788 
9789     using VisitorBase = RecursiveASTVisitor<ParentMapASTVisitor>;
9790 
9791     ParentMapASTVisitor(ASTContext::ParentMapPointers *Parents,
9792                         ASTContext::ParentMapOtherNodes *OtherParents)
9793         : Parents(Parents), OtherParents(OtherParents) {}
9794 
9795     bool shouldVisitTemplateInstantiations() const {
9796       return true;
9797     }
9798 
9799     bool shouldVisitImplicitCode() const {
9800       return true;
9801     }
9802 
9803     template <typename T, typename MapNodeTy, typename BaseTraverseFn,
9804               typename MapTy>
9805     bool TraverseNode(T Node, MapNodeTy MapNode,
9806                       BaseTraverseFn BaseTraverse, MapTy *Parents) {
9807       if (!Node)
9808         return true;
9809       if (ParentStack.size() > 0) {
9810         // FIXME: Currently we add the same parent multiple times, but only
9811         // when no memoization data is available for the type.
9812         // For example when we visit all subexpressions of template
9813         // instantiations; this is suboptimal, but benign: the only way to
9814         // visit those is with hasAncestor / hasParent, and those do not create
9815         // new matches.
9816         // The plan is to enable DynTypedNode to be storable in a map or hash
9817         // map. The main problem there is to implement hash functions /
9818         // comparison operators for all types that DynTypedNode supports that
9819         // do not have pointer identity.
9820         auto &NodeOrVector = (*Parents)[MapNode];
9821         if (NodeOrVector.isNull()) {
9822           if (const auto *D = ParentStack.back().get<Decl>())
9823             NodeOrVector = D;
9824           else if (const auto *S = ParentStack.back().get<Stmt>())
9825             NodeOrVector = S;
9826           else
9827             NodeOrVector =
9828                 new ast_type_traits::DynTypedNode(ParentStack.back());
9829         } else {
9830           if (!NodeOrVector.template is<ASTContext::ParentVector *>()) {
9831             auto *Vector = new ASTContext::ParentVector(
9832                 1, getSingleDynTypedNodeFromParentMap(NodeOrVector));
9833             delete NodeOrVector
9834                     .template dyn_cast<ast_type_traits::DynTypedNode *>();
9835             NodeOrVector = Vector;
9836           }
9837 
9838           auto *Vector =
9839               NodeOrVector.template get<ASTContext::ParentVector *>();
9840           // Skip duplicates for types that have memoization data.
9841           // We must check that the type has memoization data before calling
9842           // std::find() because DynTypedNode::operator== can't compare all
9843           // types.
9844           bool Found = ParentStack.back().getMemoizationData() &&
9845                        std::find(Vector->begin(), Vector->end(),
9846                                  ParentStack.back()) != Vector->end();
9847           if (!Found)
9848             Vector->push_back(ParentStack.back());
9849         }
9850       }
9851       ParentStack.push_back(createDynTypedNode(Node));
9852       bool Result = BaseTraverse();
9853       ParentStack.pop_back();
9854       return Result;
9855     }
9856 
9857     bool TraverseDecl(Decl *DeclNode) {
9858       return TraverseNode(DeclNode, DeclNode,
9859                           [&] { return VisitorBase::TraverseDecl(DeclNode); },
9860                           Parents);
9861     }
9862 
9863     bool TraverseStmt(Stmt *StmtNode) {
9864       return TraverseNode(StmtNode, StmtNode,
9865                           [&] { return VisitorBase::TraverseStmt(StmtNode); },
9866                           Parents);
9867     }
9868 
9869     bool TraverseTypeLoc(TypeLoc TypeLocNode) {
9870       return TraverseNode(
9871           TypeLocNode, ast_type_traits::DynTypedNode::create(TypeLocNode),
9872           [&] { return VisitorBase::TraverseTypeLoc(TypeLocNode); },
9873           OtherParents);
9874     }
9875 
9876     bool TraverseNestedNameSpecifierLoc(NestedNameSpecifierLoc NNSLocNode) {
9877       return TraverseNode(
9878           NNSLocNode, ast_type_traits::DynTypedNode::create(NNSLocNode),
9879           [&] {
9880             return VisitorBase::TraverseNestedNameSpecifierLoc(NNSLocNode);
9881           },
9882           OtherParents);
9883     }
9884 
9885     ASTContext::ParentMapPointers *Parents;
9886     ASTContext::ParentMapOtherNodes *OtherParents;
9887     llvm::SmallVector<ast_type_traits::DynTypedNode, 16> ParentStack;
9888   };
9889 
9890 } // namespace
9891 
9892 template <typename NodeTy, typename MapTy>
9893 static ASTContext::DynTypedNodeList getDynNodeFromMap(const NodeTy &Node,
9894                                                       const MapTy &Map) {
9895   auto I = Map.find(Node);
9896   if (I == Map.end()) {
9897     return llvm::ArrayRef<ast_type_traits::DynTypedNode>();
9898   }
9899   if (auto *V = I->second.template dyn_cast<ASTContext::ParentVector *>()) {
9900     return llvm::makeArrayRef(*V);
9901   }
9902   return getSingleDynTypedNodeFromParentMap(I->second);
9903 }
9904 
9905 ASTContext::DynTypedNodeList
9906 ASTContext::getParents(const ast_type_traits::DynTypedNode &Node) {
9907   if (!PointerParents) {
9908     // We always need to run over the whole translation unit, as
9909     // hasAncestor can escape any subtree.
9910     auto Maps = ParentMapASTVisitor::buildMap(*getTranslationUnitDecl());
9911     PointerParents.reset(Maps.first);
9912     OtherParents.reset(Maps.second);
9913   }
9914   if (Node.getNodeKind().hasPointerIdentity())
9915     return getDynNodeFromMap(Node.getMemoizationData(), *PointerParents);
9916   return getDynNodeFromMap(Node, *OtherParents);
9917 }
9918 
9919 bool
9920 ASTContext::ObjCMethodsAreEqual(const ObjCMethodDecl *MethodDecl,
9921                                 const ObjCMethodDecl *MethodImpl) {
9922   // No point trying to match an unavailable/deprecated mothod.
9923   if (MethodDecl->hasAttr<UnavailableAttr>()
9924       || MethodDecl->hasAttr<DeprecatedAttr>())
9925     return false;
9926   if (MethodDecl->getObjCDeclQualifier() !=
9927       MethodImpl->getObjCDeclQualifier())
9928     return false;
9929   if (!hasSameType(MethodDecl->getReturnType(), MethodImpl->getReturnType()))
9930     return false;
9931 
9932   if (MethodDecl->param_size() != MethodImpl->param_size())
9933     return false;
9934 
9935   for (ObjCMethodDecl::param_const_iterator IM = MethodImpl->param_begin(),
9936        IF = MethodDecl->param_begin(), EM = MethodImpl->param_end(),
9937        EF = MethodDecl->param_end();
9938        IM != EM && IF != EF; ++IM, ++IF) {
9939     const ParmVarDecl *DeclVar = (*IF);
9940     const ParmVarDecl *ImplVar = (*IM);
9941     if (ImplVar->getObjCDeclQualifier() != DeclVar->getObjCDeclQualifier())
9942       return false;
9943     if (!hasSameType(DeclVar->getType(), ImplVar->getType()))
9944       return false;
9945   }
9946 
9947   return (MethodDecl->isVariadic() == MethodImpl->isVariadic());
9948 }
9949 
9950 uint64_t ASTContext::getTargetNullPointerValue(QualType QT) const {
9951   LangAS AS;
9952   if (QT->getUnqualifiedDesugaredType()->isNullPtrType())
9953     AS = LangAS::Default;
9954   else
9955     AS = QT->getPointeeType().getAddressSpace();
9956 
9957   return getTargetInfo().getNullPointerValue(AS);
9958 }
9959 
9960 unsigned ASTContext::getTargetAddressSpace(LangAS AS) const {
9961   if (isTargetAddressSpace(AS))
9962     return toTargetAddressSpace(AS);
9963   else
9964     return (*AddrSpaceMap)[(unsigned)AS];
9965 }
9966 
9967 // Explicitly instantiate this in case a Redeclarable<T> is used from a TU that
9968 // doesn't include ASTContext.h
9969 template
9970 clang::LazyGenerationalUpdatePtr<
9971     const Decl *, Decl *, &ExternalASTSource::CompleteRedeclChain>::ValueType
9972 clang::LazyGenerationalUpdatePtr<
9973     const Decl *, Decl *, &ExternalASTSource::CompleteRedeclChain>::makeValue(
9974         const clang::ASTContext &Ctx, Decl *Value);
9975