Home | History | Annotate | Line # | Download | only in libclang
      1 //===- CIndex.cpp - Clang-C Source Indexing Library -----------------------===//
      2 //
      3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
      4 // See https://llvm.org/LICENSE.txt for license information.
      5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
      6 //
      7 //===----------------------------------------------------------------------===//
      8 //
      9 // This file implements the main API hooks in the Clang-C Source Indexing
     10 // library.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #include "CIndexDiagnostic.h"
     15 #include "CIndexer.h"
     16 #include "CLog.h"
     17 #include "CXCursor.h"
     18 #include "CXSourceLocation.h"
     19 #include "CXString.h"
     20 #include "CXTranslationUnit.h"
     21 #include "CXType.h"
     22 #include "CursorVisitor.h"
     23 #include "clang-c/FatalErrorHandler.h"
     24 #include "clang/AST/Attr.h"
     25 #include "clang/AST/DeclObjCCommon.h"
     26 #include "clang/AST/Mangle.h"
     27 #include "clang/AST/OpenMPClause.h"
     28 #include "clang/AST/StmtVisitor.h"
     29 #include "clang/Basic/Diagnostic.h"
     30 #include "clang/Basic/DiagnosticCategories.h"
     31 #include "clang/Basic/DiagnosticIDs.h"
     32 #include "clang/Basic/Stack.h"
     33 #include "clang/Basic/TargetInfo.h"
     34 #include "clang/Basic/Version.h"
     35 #include "clang/Frontend/ASTUnit.h"
     36 #include "clang/Frontend/CompilerInstance.h"
     37 #include "clang/Index/CommentToXML.h"
     38 #include "clang/Lex/HeaderSearch.h"
     39 #include "clang/Lex/Lexer.h"
     40 #include "clang/Lex/PreprocessingRecord.h"
     41 #include "clang/Lex/Preprocessor.h"
     42 #include "llvm/ADT/Optional.h"
     43 #include "llvm/ADT/STLExtras.h"
     44 #include "llvm/ADT/StringSwitch.h"
     45 #include "llvm/Config/llvm-config.h"
     46 #include "llvm/Support/Compiler.h"
     47 #include "llvm/Support/CrashRecoveryContext.h"
     48 #include "llvm/Support/Format.h"
     49 #include "llvm/Support/ManagedStatic.h"
     50 #include "llvm/Support/MemoryBuffer.h"
     51 #include "llvm/Support/Program.h"
     52 #include "llvm/Support/SaveAndRestore.h"
     53 #include "llvm/Support/Signals.h"
     54 #include "llvm/Support/TargetSelect.h"
     55 #include "llvm/Support/Threading.h"
     56 #include "llvm/Support/Timer.h"
     57 #include "llvm/Support/raw_ostream.h"
     58 #include <mutex>
     59 
     60 #if LLVM_ENABLE_THREADS != 0 && defined(__APPLE__)
     61 #define USE_DARWIN_THREADS
     62 #endif
     63 
     64 #ifdef USE_DARWIN_THREADS
     65 #include <pthread.h>
     66 #endif
     67 
     68 using namespace clang;
     69 using namespace clang::cxcursor;
     70 using namespace clang::cxtu;
     71 using namespace clang::cxindex;
     72 
     73 CXTranslationUnit cxtu::MakeCXTranslationUnit(CIndexer *CIdx,
     74                                               std::unique_ptr<ASTUnit> AU) {
     75   if (!AU)
     76     return nullptr;
     77   assert(CIdx);
     78   CXTranslationUnit D = new CXTranslationUnitImpl();
     79   D->CIdx = CIdx;
     80   D->TheASTUnit = AU.release();
     81   D->StringPool = new cxstring::CXStringPool();
     82   D->Diagnostics = nullptr;
     83   D->OverridenCursorsPool = createOverridenCXCursorsPool();
     84   D->CommentToXML = nullptr;
     85   D->ParsingOptions = 0;
     86   D->Arguments = {};
     87   return D;
     88 }
     89 
     90 bool cxtu::isASTReadError(ASTUnit *AU) {
     91   for (ASTUnit::stored_diag_iterator D = AU->stored_diag_begin(),
     92                                      DEnd = AU->stored_diag_end();
     93        D != DEnd; ++D) {
     94     if (D->getLevel() >= DiagnosticsEngine::Error &&
     95         DiagnosticIDs::getCategoryNumberForDiag(D->getID()) ==
     96             diag::DiagCat_AST_Deserialization_Issue)
     97       return true;
     98   }
     99   return false;
    100 }
    101 
    102 cxtu::CXTUOwner::~CXTUOwner() {
    103   if (TU)
    104     clang_disposeTranslationUnit(TU);
    105 }
    106 
    107 /// Compare two source ranges to determine their relative position in
    108 /// the translation unit.
    109 static RangeComparisonResult RangeCompare(SourceManager &SM, SourceRange R1,
    110                                           SourceRange R2) {
    111   assert(R1.isValid() && "First range is invalid?");
    112   assert(R2.isValid() && "Second range is invalid?");
    113   if (R1.getEnd() != R2.getBegin() &&
    114       SM.isBeforeInTranslationUnit(R1.getEnd(), R2.getBegin()))
    115     return RangeBefore;
    116   if (R2.getEnd() != R1.getBegin() &&
    117       SM.isBeforeInTranslationUnit(R2.getEnd(), R1.getBegin()))
    118     return RangeAfter;
    119   return RangeOverlap;
    120 }
    121 
    122 /// Determine if a source location falls within, before, or after a
    123 ///   a given source range.
    124 static RangeComparisonResult LocationCompare(SourceManager &SM,
    125                                              SourceLocation L, SourceRange R) {
    126   assert(R.isValid() && "First range is invalid?");
    127   assert(L.isValid() && "Second range is invalid?");
    128   if (L == R.getBegin() || L == R.getEnd())
    129     return RangeOverlap;
    130   if (SM.isBeforeInTranslationUnit(L, R.getBegin()))
    131     return RangeBefore;
    132   if (SM.isBeforeInTranslationUnit(R.getEnd(), L))
    133     return RangeAfter;
    134   return RangeOverlap;
    135 }
    136 
    137 /// Translate a Clang source range into a CIndex source range.
    138 ///
    139 /// Clang internally represents ranges where the end location points to the
    140 /// start of the token at the end. However, for external clients it is more
    141 /// useful to have a CXSourceRange be a proper half-open interval. This routine
    142 /// does the appropriate translation.
    143 CXSourceRange cxloc::translateSourceRange(const SourceManager &SM,
    144                                           const LangOptions &LangOpts,
    145                                           const CharSourceRange &R) {
    146   // We want the last character in this location, so we will adjust the
    147   // location accordingly.
    148   SourceLocation EndLoc = R.getEnd();
    149   bool IsTokenRange = R.isTokenRange();
    150   if (EndLoc.isValid() && EndLoc.isMacroID() &&
    151       !SM.isMacroArgExpansion(EndLoc)) {
    152     CharSourceRange Expansion = SM.getExpansionRange(EndLoc);
    153     EndLoc = Expansion.getEnd();
    154     IsTokenRange = Expansion.isTokenRange();
    155   }
    156   if (IsTokenRange && EndLoc.isValid()) {
    157     unsigned Length =
    158         Lexer::MeasureTokenLength(SM.getSpellingLoc(EndLoc), SM, LangOpts);
    159     EndLoc = EndLoc.getLocWithOffset(Length);
    160   }
    161 
    162   CXSourceRange Result = {
    163       {&SM, &LangOpts}, R.getBegin().getRawEncoding(), EndLoc.getRawEncoding()};
    164   return Result;
    165 }
    166 
    167 CharSourceRange cxloc::translateCXRangeToCharRange(CXSourceRange R) {
    168   return CharSourceRange::getCharRange(
    169       SourceLocation::getFromRawEncoding(R.begin_int_data),
    170       SourceLocation::getFromRawEncoding(R.end_int_data));
    171 }
    172 
    173 //===----------------------------------------------------------------------===//
    174 // Cursor visitor.
    175 //===----------------------------------------------------------------------===//
    176 
    177 static SourceRange getRawCursorExtent(CXCursor C);
    178 static SourceRange getFullCursorExtent(CXCursor C, SourceManager &SrcMgr);
    179 
    180 RangeComparisonResult CursorVisitor::CompareRegionOfInterest(SourceRange R) {
    181   return RangeCompare(AU->getSourceManager(), R, RegionOfInterest);
    182 }
    183 
    184 /// Visit the given cursor and, if requested by the visitor,
    185 /// its children.
    186 ///
    187 /// \param Cursor the cursor to visit.
    188 ///
    189 /// \param CheckedRegionOfInterest if true, then the caller already checked
    190 /// that this cursor is within the region of interest.
    191 ///
    192 /// \returns true if the visitation should be aborted, false if it
    193 /// should continue.
    194 bool CursorVisitor::Visit(CXCursor Cursor, bool CheckedRegionOfInterest) {
    195   if (clang_isInvalid(Cursor.kind))
    196     return false;
    197 
    198   if (clang_isDeclaration(Cursor.kind)) {
    199     const Decl *D = getCursorDecl(Cursor);
    200     if (!D) {
    201       assert(0 && "Invalid declaration cursor");
    202       return true; // abort.
    203     }
    204 
    205     // Ignore implicit declarations, unless it's an objc method because
    206     // currently we should report implicit methods for properties when indexing.
    207     if (D->isImplicit() && !isa<ObjCMethodDecl>(D))
    208       return false;
    209   }
    210 
    211   // If we have a range of interest, and this cursor doesn't intersect with it,
    212   // we're done.
    213   if (RegionOfInterest.isValid() && !CheckedRegionOfInterest) {
    214     SourceRange Range = getRawCursorExtent(Cursor);
    215     if (Range.isInvalid() || CompareRegionOfInterest(Range))
    216       return false;
    217   }
    218 
    219   switch (Visitor(Cursor, Parent, ClientData)) {
    220   case CXChildVisit_Break:
    221     return true;
    222 
    223   case CXChildVisit_Continue:
    224     return false;
    225 
    226   case CXChildVisit_Recurse: {
    227     bool ret = VisitChildren(Cursor);
    228     if (PostChildrenVisitor)
    229       if (PostChildrenVisitor(Cursor, ClientData))
    230         return true;
    231     return ret;
    232   }
    233   }
    234 
    235   llvm_unreachable("Invalid CXChildVisitResult!");
    236 }
    237 
    238 static bool visitPreprocessedEntitiesInRange(SourceRange R,
    239                                              PreprocessingRecord &PPRec,
    240                                              CursorVisitor &Visitor) {
    241   SourceManager &SM = Visitor.getASTUnit()->getSourceManager();
    242   FileID FID;
    243 
    244   if (!Visitor.shouldVisitIncludedEntities()) {
    245     // If the begin/end of the range lie in the same FileID, do the optimization
    246     // where we skip preprocessed entities that do not come from the same
    247     // FileID.
    248     FID = SM.getFileID(SM.getFileLoc(R.getBegin()));
    249     if (FID != SM.getFileID(SM.getFileLoc(R.getEnd())))
    250       FID = FileID();
    251   }
    252 
    253   const auto &Entities = PPRec.getPreprocessedEntitiesInRange(R);
    254   return Visitor.visitPreprocessedEntities(Entities.begin(), Entities.end(),
    255                                            PPRec, FID);
    256 }
    257 
    258 bool CursorVisitor::visitFileRegion() {
    259   if (RegionOfInterest.isInvalid())
    260     return false;
    261 
    262   ASTUnit *Unit = cxtu::getASTUnit(TU);
    263   SourceManager &SM = Unit->getSourceManager();
    264 
    265   std::pair<FileID, unsigned> Begin = SM.getDecomposedLoc(
    266                                   SM.getFileLoc(RegionOfInterest.getBegin())),
    267                               End = SM.getDecomposedLoc(
    268                                   SM.getFileLoc(RegionOfInterest.getEnd()));
    269 
    270   if (End.first != Begin.first) {
    271     // If the end does not reside in the same file, try to recover by
    272     // picking the end of the file of begin location.
    273     End.first = Begin.first;
    274     End.second = SM.getFileIDSize(Begin.first);
    275   }
    276 
    277   assert(Begin.first == End.first);
    278   if (Begin.second > End.second)
    279     return false;
    280 
    281   FileID File = Begin.first;
    282   unsigned Offset = Begin.second;
    283   unsigned Length = End.second - Begin.second;
    284 
    285   if (!VisitDeclsOnly && !VisitPreprocessorLast)
    286     if (visitPreprocessedEntitiesInRegion())
    287       return true; // visitation break.
    288 
    289   if (visitDeclsFromFileRegion(File, Offset, Length))
    290     return true; // visitation break.
    291 
    292   if (!VisitDeclsOnly && VisitPreprocessorLast)
    293     return visitPreprocessedEntitiesInRegion();
    294 
    295   return false;
    296 }
    297 
    298 static bool isInLexicalContext(Decl *D, DeclContext *DC) {
    299   if (!DC)
    300     return false;
    301 
    302   for (DeclContext *DeclDC = D->getLexicalDeclContext(); DeclDC;
    303        DeclDC = DeclDC->getLexicalParent()) {
    304     if (DeclDC == DC)
    305       return true;
    306   }
    307   return false;
    308 }
    309 
    310 bool CursorVisitor::visitDeclsFromFileRegion(FileID File, unsigned Offset,
    311                                              unsigned Length) {
    312   ASTUnit *Unit = cxtu::getASTUnit(TU);
    313   SourceManager &SM = Unit->getSourceManager();
    314   SourceRange Range = RegionOfInterest;
    315 
    316   SmallVector<Decl *, 16> Decls;
    317   Unit->findFileRegionDecls(File, Offset, Length, Decls);
    318 
    319   // If we didn't find any file level decls for the file, try looking at the
    320   // file that it was included from.
    321   while (Decls.empty() || Decls.front()->isTopLevelDeclInObjCContainer()) {
    322     bool Invalid = false;
    323     const SrcMgr::SLocEntry &SLEntry = SM.getSLocEntry(File, &Invalid);
    324     if (Invalid)
    325       return false;
    326 
    327     SourceLocation Outer;
    328     if (SLEntry.isFile())
    329       Outer = SLEntry.getFile().getIncludeLoc();
    330     else
    331       Outer = SLEntry.getExpansion().getExpansionLocStart();
    332     if (Outer.isInvalid())
    333       return false;
    334 
    335     std::tie(File, Offset) = SM.getDecomposedExpansionLoc(Outer);
    336     Length = 0;
    337     Unit->findFileRegionDecls(File, Offset, Length, Decls);
    338   }
    339 
    340   assert(!Decls.empty());
    341 
    342   bool VisitedAtLeastOnce = false;
    343   DeclContext *CurDC = nullptr;
    344   SmallVectorImpl<Decl *>::iterator DIt = Decls.begin();
    345   for (SmallVectorImpl<Decl *>::iterator DE = Decls.end(); DIt != DE; ++DIt) {
    346     Decl *D = *DIt;
    347     if (D->getSourceRange().isInvalid())
    348       continue;
    349 
    350     if (isInLexicalContext(D, CurDC))
    351       continue;
    352 
    353     CurDC = dyn_cast<DeclContext>(D);
    354 
    355     if (TagDecl *TD = dyn_cast<TagDecl>(D))
    356       if (!TD->isFreeStanding())
    357         continue;
    358 
    359     RangeComparisonResult CompRes =
    360         RangeCompare(SM, D->getSourceRange(), Range);
    361     if (CompRes == RangeBefore)
    362       continue;
    363     if (CompRes == RangeAfter)
    364       break;
    365 
    366     assert(CompRes == RangeOverlap);
    367     VisitedAtLeastOnce = true;
    368 
    369     if (isa<ObjCContainerDecl>(D)) {
    370       FileDI_current = &DIt;
    371       FileDE_current = DE;
    372     } else {
    373       FileDI_current = nullptr;
    374     }
    375 
    376     if (Visit(MakeCXCursor(D, TU, Range), /*CheckedRegionOfInterest=*/true))
    377       return true; // visitation break.
    378   }
    379 
    380   if (VisitedAtLeastOnce)
    381     return false;
    382 
    383   // No Decls overlapped with the range. Move up the lexical context until there
    384   // is a context that contains the range or we reach the translation unit
    385   // level.
    386   DeclContext *DC = DIt == Decls.begin()
    387                         ? (*DIt)->getLexicalDeclContext()
    388                         : (*(DIt - 1))->getLexicalDeclContext();
    389 
    390   while (DC && !DC->isTranslationUnit()) {
    391     Decl *D = cast<Decl>(DC);
    392     SourceRange CurDeclRange = D->getSourceRange();
    393     if (CurDeclRange.isInvalid())
    394       break;
    395 
    396     if (RangeCompare(SM, CurDeclRange, Range) == RangeOverlap) {
    397       if (Visit(MakeCXCursor(D, TU, Range), /*CheckedRegionOfInterest=*/true))
    398         return true; // visitation break.
    399     }
    400 
    401     DC = D->getLexicalDeclContext();
    402   }
    403 
    404   return false;
    405 }
    406 
    407 bool CursorVisitor::visitPreprocessedEntitiesInRegion() {
    408   if (!AU->getPreprocessor().getPreprocessingRecord())
    409     return false;
    410 
    411   PreprocessingRecord &PPRec = *AU->getPreprocessor().getPreprocessingRecord();
    412   SourceManager &SM = AU->getSourceManager();
    413 
    414   if (RegionOfInterest.isValid()) {
    415     SourceRange MappedRange = AU->mapRangeToPreamble(RegionOfInterest);
    416     SourceLocation B = MappedRange.getBegin();
    417     SourceLocation E = MappedRange.getEnd();
    418 
    419     if (AU->isInPreambleFileID(B)) {
    420       if (SM.isLoadedSourceLocation(E))
    421         return visitPreprocessedEntitiesInRange(SourceRange(B, E), PPRec,
    422                                                 *this);
    423 
    424       // Beginning of range lies in the preamble but it also extends beyond
    425       // it into the main file. Split the range into 2 parts, one covering
    426       // the preamble and another covering the main file. This allows subsequent
    427       // calls to visitPreprocessedEntitiesInRange to accept a source range that
    428       // lies in the same FileID, allowing it to skip preprocessed entities that
    429       // do not come from the same FileID.
    430       bool breaked = visitPreprocessedEntitiesInRange(
    431           SourceRange(B, AU->getEndOfPreambleFileID()), PPRec, *this);
    432       if (breaked)
    433         return true;
    434       return visitPreprocessedEntitiesInRange(
    435           SourceRange(AU->getStartOfMainFileID(), E), PPRec, *this);
    436     }
    437 
    438     return visitPreprocessedEntitiesInRange(SourceRange(B, E), PPRec, *this);
    439   }
    440 
    441   bool OnlyLocalDecls = !AU->isMainFileAST() && AU->getOnlyLocalDecls();
    442 
    443   if (OnlyLocalDecls)
    444     return visitPreprocessedEntities(PPRec.local_begin(), PPRec.local_end(),
    445                                      PPRec);
    446 
    447   return visitPreprocessedEntities(PPRec.begin(), PPRec.end(), PPRec);
    448 }
    449 
    450 template <typename InputIterator>
    451 bool CursorVisitor::visitPreprocessedEntities(InputIterator First,
    452                                               InputIterator Last,
    453                                               PreprocessingRecord &PPRec,
    454                                               FileID FID) {
    455   for (; First != Last; ++First) {
    456     if (!FID.isInvalid() && !PPRec.isEntityInFileID(First, FID))
    457       continue;
    458 
    459     PreprocessedEntity *PPE = *First;
    460     if (!PPE)
    461       continue;
    462 
    463     if (MacroExpansion *ME = dyn_cast<MacroExpansion>(PPE)) {
    464       if (Visit(MakeMacroExpansionCursor(ME, TU)))
    465         return true;
    466 
    467       continue;
    468     }
    469 
    470     if (MacroDefinitionRecord *MD = dyn_cast<MacroDefinitionRecord>(PPE)) {
    471       if (Visit(MakeMacroDefinitionCursor(MD, TU)))
    472         return true;
    473 
    474       continue;
    475     }
    476 
    477     if (InclusionDirective *ID = dyn_cast<InclusionDirective>(PPE)) {
    478       if (Visit(MakeInclusionDirectiveCursor(ID, TU)))
    479         return true;
    480 
    481       continue;
    482     }
    483   }
    484 
    485   return false;
    486 }
    487 
    488 /// Visit the children of the given cursor.
    489 ///
    490 /// \returns true if the visitation should be aborted, false if it
    491 /// should continue.
    492 bool CursorVisitor::VisitChildren(CXCursor Cursor) {
    493   if (clang_isReference(Cursor.kind) &&
    494       Cursor.kind != CXCursor_CXXBaseSpecifier) {
    495     // By definition, references have no children.
    496     return false;
    497   }
    498 
    499   // Set the Parent field to Cursor, then back to its old value once we're
    500   // done.
    501   SetParentRAII SetParent(Parent, StmtParent, Cursor);
    502 
    503   if (clang_isDeclaration(Cursor.kind)) {
    504     Decl *D = const_cast<Decl *>(getCursorDecl(Cursor));
    505     if (!D)
    506       return false;
    507 
    508     return VisitAttributes(D) || Visit(D);
    509   }
    510 
    511   if (clang_isStatement(Cursor.kind)) {
    512     if (const Stmt *S = getCursorStmt(Cursor))
    513       return Visit(S);
    514 
    515     return false;
    516   }
    517 
    518   if (clang_isExpression(Cursor.kind)) {
    519     if (const Expr *E = getCursorExpr(Cursor))
    520       return Visit(E);
    521 
    522     return false;
    523   }
    524 
    525   if (clang_isTranslationUnit(Cursor.kind)) {
    526     CXTranslationUnit TU = getCursorTU(Cursor);
    527     ASTUnit *CXXUnit = cxtu::getASTUnit(TU);
    528 
    529     int VisitOrder[2] = {VisitPreprocessorLast, !VisitPreprocessorLast};
    530     for (unsigned I = 0; I != 2; ++I) {
    531       if (VisitOrder[I]) {
    532         if (!CXXUnit->isMainFileAST() && CXXUnit->getOnlyLocalDecls() &&
    533             RegionOfInterest.isInvalid()) {
    534           for (ASTUnit::top_level_iterator TL = CXXUnit->top_level_begin(),
    535                                            TLEnd = CXXUnit->top_level_end();
    536                TL != TLEnd; ++TL) {
    537             const Optional<bool> V = handleDeclForVisitation(*TL);
    538             if (!V.hasValue())
    539               continue;
    540             return V.getValue();
    541           }
    542         } else if (VisitDeclContext(
    543                        CXXUnit->getASTContext().getTranslationUnitDecl()))
    544           return true;
    545         continue;
    546       }
    547 
    548       // Walk the preprocessing record.
    549       if (CXXUnit->getPreprocessor().getPreprocessingRecord())
    550         visitPreprocessedEntitiesInRegion();
    551     }
    552 
    553     return false;
    554   }
    555 
    556   if (Cursor.kind == CXCursor_CXXBaseSpecifier) {
    557     if (const CXXBaseSpecifier *Base = getCursorCXXBaseSpecifier(Cursor)) {
    558       if (TypeSourceInfo *BaseTSInfo = Base->getTypeSourceInfo()) {
    559         return Visit(BaseTSInfo->getTypeLoc());
    560       }
    561     }
    562   }
    563 
    564   if (Cursor.kind == CXCursor_IBOutletCollectionAttr) {
    565     const IBOutletCollectionAttr *A =
    566         cast<IBOutletCollectionAttr>(cxcursor::getCursorAttr(Cursor));
    567     if (const ObjCObjectType *ObjT = A->getInterface()->getAs<ObjCObjectType>())
    568       return Visit(cxcursor::MakeCursorObjCClassRef(
    569           ObjT->getInterface(),
    570           A->getInterfaceLoc()->getTypeLoc().getBeginLoc(), TU));
    571   }
    572 
    573   // If pointing inside a macro definition, check if the token is an identifier
    574   // that was ever defined as a macro. In such a case, create a "pseudo" macro
    575   // expansion cursor for that token.
    576   SourceLocation BeginLoc = RegionOfInterest.getBegin();
    577   if (Cursor.kind == CXCursor_MacroDefinition &&
    578       BeginLoc == RegionOfInterest.getEnd()) {
    579     SourceLocation Loc = AU->mapLocationToPreamble(BeginLoc);
    580     const MacroInfo *MI =
    581         getMacroInfo(cxcursor::getCursorMacroDefinition(Cursor), TU);
    582     if (MacroDefinitionRecord *MacroDef =
    583             checkForMacroInMacroDefinition(MI, Loc, TU))
    584       return Visit(cxcursor::MakeMacroExpansionCursor(MacroDef, BeginLoc, TU));
    585   }
    586 
    587   // Nothing to visit at the moment.
    588   return false;
    589 }
    590 
    591 bool CursorVisitor::VisitBlockDecl(BlockDecl *B) {
    592   if (TypeSourceInfo *TSInfo = B->getSignatureAsWritten())
    593     if (Visit(TSInfo->getTypeLoc()))
    594       return true;
    595 
    596   if (Stmt *Body = B->getBody())
    597     return Visit(MakeCXCursor(Body, StmtParent, TU, RegionOfInterest));
    598 
    599   return false;
    600 }
    601 
    602 Optional<bool> CursorVisitor::shouldVisitCursor(CXCursor Cursor) {
    603   if (RegionOfInterest.isValid()) {
    604     SourceRange Range = getFullCursorExtent(Cursor, AU->getSourceManager());
    605     if (Range.isInvalid())
    606       return None;
    607 
    608     switch (CompareRegionOfInterest(Range)) {
    609     case RangeBefore:
    610       // This declaration comes before the region of interest; skip it.
    611       return None;
    612 
    613     case RangeAfter:
    614       // This declaration comes after the region of interest; we're done.
    615       return false;
    616 
    617     case RangeOverlap:
    618       // This declaration overlaps the region of interest; visit it.
    619       break;
    620     }
    621   }
    622   return true;
    623 }
    624 
    625 bool CursorVisitor::VisitDeclContext(DeclContext *DC) {
    626   DeclContext::decl_iterator I = DC->decls_begin(), E = DC->decls_end();
    627 
    628   // FIXME: Eventually remove.  This part of a hack to support proper
    629   // iteration over all Decls contained lexically within an ObjC container.
    630   SaveAndRestore<DeclContext::decl_iterator *> DI_saved(DI_current, &I);
    631   SaveAndRestore<DeclContext::decl_iterator> DE_saved(DE_current, E);
    632 
    633   for (; I != E; ++I) {
    634     Decl *D = *I;
    635     if (D->getLexicalDeclContext() != DC)
    636       continue;
    637     // Filter out synthesized property accessor redeclarations.
    638     if (isa<ObjCImplDecl>(DC))
    639       if (auto *OMD = dyn_cast<ObjCMethodDecl>(D))
    640         if (OMD->isSynthesizedAccessorStub())
    641           continue;
    642     const Optional<bool> V = handleDeclForVisitation(D);
    643     if (!V.hasValue())
    644       continue;
    645     return V.getValue();
    646   }
    647   return false;
    648 }
    649 
    650 Optional<bool> CursorVisitor::handleDeclForVisitation(const Decl *D) {
    651   CXCursor Cursor = MakeCXCursor(D, TU, RegionOfInterest);
    652 
    653   // Ignore synthesized ivars here, otherwise if we have something like:
    654   //   @synthesize prop = _prop;
    655   // and '_prop' is not declared, we will encounter a '_prop' ivar before
    656   // encountering the 'prop' synthesize declaration and we will think that
    657   // we passed the region-of-interest.
    658   if (auto *ivarD = dyn_cast<ObjCIvarDecl>(D)) {
    659     if (ivarD->getSynthesize())
    660       return None;
    661   }
    662 
    663   // FIXME: ObjCClassRef/ObjCProtocolRef for forward class/protocol
    664   // declarations is a mismatch with the compiler semantics.
    665   if (Cursor.kind == CXCursor_ObjCInterfaceDecl) {
    666     auto *ID = cast<ObjCInterfaceDecl>(D);
    667     if (!ID->isThisDeclarationADefinition())
    668       Cursor = MakeCursorObjCClassRef(ID, ID->getLocation(), TU);
    669 
    670   } else if (Cursor.kind == CXCursor_ObjCProtocolDecl) {
    671     auto *PD = cast<ObjCProtocolDecl>(D);
    672     if (!PD->isThisDeclarationADefinition())
    673       Cursor = MakeCursorObjCProtocolRef(PD, PD->getLocation(), TU);
    674   }
    675 
    676   const Optional<bool> V = shouldVisitCursor(Cursor);
    677   if (!V.hasValue())
    678     return None;
    679   if (!V.getValue())
    680     return false;
    681   if (Visit(Cursor, true))
    682     return true;
    683   return None;
    684 }
    685 
    686 bool CursorVisitor::VisitTranslationUnitDecl(TranslationUnitDecl *D) {
    687   llvm_unreachable("Translation units are visited directly by Visit()");
    688 }
    689 
    690 bool CursorVisitor::VisitTypeAliasTemplateDecl(TypeAliasTemplateDecl *D) {
    691   if (VisitTemplateParameters(D->getTemplateParameters()))
    692     return true;
    693 
    694   return Visit(MakeCXCursor(D->getTemplatedDecl(), TU, RegionOfInterest));
    695 }
    696 
    697 bool CursorVisitor::VisitTypeAliasDecl(TypeAliasDecl *D) {
    698   if (TypeSourceInfo *TSInfo = D->getTypeSourceInfo())
    699     return Visit(TSInfo->getTypeLoc());
    700 
    701   return false;
    702 }
    703 
    704 bool CursorVisitor::VisitTypedefDecl(TypedefDecl *D) {
    705   if (TypeSourceInfo *TSInfo = D->getTypeSourceInfo())
    706     return Visit(TSInfo->getTypeLoc());
    707 
    708   return false;
    709 }
    710 
    711 bool CursorVisitor::VisitTagDecl(TagDecl *D) { return VisitDeclContext(D); }
    712 
    713 bool CursorVisitor::VisitClassTemplateSpecializationDecl(
    714     ClassTemplateSpecializationDecl *D) {
    715   bool ShouldVisitBody = false;
    716   switch (D->getSpecializationKind()) {
    717   case TSK_Undeclared:
    718   case TSK_ImplicitInstantiation:
    719     // Nothing to visit
    720     return false;
    721 
    722   case TSK_ExplicitInstantiationDeclaration:
    723   case TSK_ExplicitInstantiationDefinition:
    724     break;
    725 
    726   case TSK_ExplicitSpecialization:
    727     ShouldVisitBody = true;
    728     break;
    729   }
    730 
    731   // Visit the template arguments used in the specialization.
    732   if (TypeSourceInfo *SpecType = D->getTypeAsWritten()) {
    733     TypeLoc TL = SpecType->getTypeLoc();
    734     if (TemplateSpecializationTypeLoc TSTLoc =
    735             TL.getAs<TemplateSpecializationTypeLoc>()) {
    736       for (unsigned I = 0, N = TSTLoc.getNumArgs(); I != N; ++I)
    737         if (VisitTemplateArgumentLoc(TSTLoc.getArgLoc(I)))
    738           return true;
    739     }
    740   }
    741 
    742   return ShouldVisitBody && VisitCXXRecordDecl(D);
    743 }
    744 
    745 bool CursorVisitor::VisitClassTemplatePartialSpecializationDecl(
    746     ClassTemplatePartialSpecializationDecl *D) {
    747   // FIXME: Visit the "outer" template parameter lists on the TagDecl
    748   // before visiting these template parameters.
    749   if (VisitTemplateParameters(D->getTemplateParameters()))
    750     return true;
    751 
    752   // Visit the partial specialization arguments.
    753   const ASTTemplateArgumentListInfo *Info = D->getTemplateArgsAsWritten();
    754   const TemplateArgumentLoc *TemplateArgs = Info->getTemplateArgs();
    755   for (unsigned I = 0, N = Info->NumTemplateArgs; I != N; ++I)
    756     if (VisitTemplateArgumentLoc(TemplateArgs[I]))
    757       return true;
    758 
    759   return VisitCXXRecordDecl(D);
    760 }
    761 
    762 bool CursorVisitor::VisitTemplateTypeParmDecl(TemplateTypeParmDecl *D) {
    763   if (const auto *TC = D->getTypeConstraint())
    764     if (Visit(MakeCXCursor(TC->getImmediatelyDeclaredConstraint(), StmtParent,
    765                            TU, RegionOfInterest)))
    766       return true;
    767 
    768   // Visit the default argument.
    769   if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited())
    770     if (TypeSourceInfo *DefArg = D->getDefaultArgumentInfo())
    771       if (Visit(DefArg->getTypeLoc()))
    772         return true;
    773 
    774   return false;
    775 }
    776 
    777 bool CursorVisitor::VisitEnumConstantDecl(EnumConstantDecl *D) {
    778   if (Expr *Init = D->getInitExpr())
    779     return Visit(MakeCXCursor(Init, StmtParent, TU, RegionOfInterest));
    780   return false;
    781 }
    782 
    783 bool CursorVisitor::VisitDeclaratorDecl(DeclaratorDecl *DD) {
    784   unsigned NumParamList = DD->getNumTemplateParameterLists();
    785   for (unsigned i = 0; i < NumParamList; i++) {
    786     TemplateParameterList *Params = DD->getTemplateParameterList(i);
    787     if (VisitTemplateParameters(Params))
    788       return true;
    789   }
    790 
    791   if (TypeSourceInfo *TSInfo = DD->getTypeSourceInfo())
    792     if (Visit(TSInfo->getTypeLoc()))
    793       return true;
    794 
    795   // Visit the nested-name-specifier, if present.
    796   if (NestedNameSpecifierLoc QualifierLoc = DD->getQualifierLoc())
    797     if (VisitNestedNameSpecifierLoc(QualifierLoc))
    798       return true;
    799 
    800   return false;
    801 }
    802 
    803 static bool HasTrailingReturnType(FunctionDecl *ND) {
    804   const QualType Ty = ND->getType();
    805   if (const FunctionType *AFT = Ty->getAs<FunctionType>()) {
    806     if (const FunctionProtoType *FT = dyn_cast<FunctionProtoType>(AFT))
    807       return FT->hasTrailingReturn();
    808   }
    809 
    810   return false;
    811 }
    812 
    813 /// Compare two base or member initializers based on their source order.
    814 static int CompareCXXCtorInitializers(CXXCtorInitializer *const *X,
    815                                       CXXCtorInitializer *const *Y) {
    816   return (*X)->getSourceOrder() - (*Y)->getSourceOrder();
    817 }
    818 
    819 bool CursorVisitor::VisitFunctionDecl(FunctionDecl *ND) {
    820   unsigned NumParamList = ND->getNumTemplateParameterLists();
    821   for (unsigned i = 0; i < NumParamList; i++) {
    822     TemplateParameterList *Params = ND->getTemplateParameterList(i);
    823     if (VisitTemplateParameters(Params))
    824       return true;
    825   }
    826 
    827   if (TypeSourceInfo *TSInfo = ND->getTypeSourceInfo()) {
    828     // Visit the function declaration's syntactic components in the order
    829     // written. This requires a bit of work.
    830     TypeLoc TL = TSInfo->getTypeLoc().IgnoreParens();
    831     FunctionTypeLoc FTL = TL.getAs<FunctionTypeLoc>();
    832     const bool HasTrailingRT = HasTrailingReturnType(ND);
    833 
    834     // If we have a function declared directly (without the use of a typedef),
    835     // visit just the return type. Otherwise, just visit the function's type
    836     // now.
    837     if ((FTL && !isa<CXXConversionDecl>(ND) && !HasTrailingRT &&
    838          Visit(FTL.getReturnLoc())) ||
    839         (!FTL && Visit(TL)))
    840       return true;
    841 
    842     // Visit the nested-name-specifier, if present.
    843     if (NestedNameSpecifierLoc QualifierLoc = ND->getQualifierLoc())
    844       if (VisitNestedNameSpecifierLoc(QualifierLoc))
    845         return true;
    846 
    847     // Visit the declaration name.
    848     if (!isa<CXXDestructorDecl>(ND))
    849       if (VisitDeclarationNameInfo(ND->getNameInfo()))
    850         return true;
    851 
    852     // FIXME: Visit explicitly-specified template arguments!
    853 
    854     // Visit the function parameters, if we have a function type.
    855     if (FTL && VisitFunctionTypeLoc(FTL, true))
    856       return true;
    857 
    858     // Visit the function's trailing return type.
    859     if (FTL && HasTrailingRT && Visit(FTL.getReturnLoc()))
    860       return true;
    861 
    862     // FIXME: Attributes?
    863   }
    864 
    865   if (ND->doesThisDeclarationHaveABody() && !ND->isLateTemplateParsed()) {
    866     if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(ND)) {
    867       // Find the initializers that were written in the source.
    868       SmallVector<CXXCtorInitializer *, 4> WrittenInits;
    869       for (auto *I : Constructor->inits()) {
    870         if (!I->isWritten())
    871           continue;
    872 
    873         WrittenInits.push_back(I);
    874       }
    875 
    876       // Sort the initializers in source order
    877       llvm::array_pod_sort(WrittenInits.begin(), WrittenInits.end(),
    878                            &CompareCXXCtorInitializers);
    879 
    880       // Visit the initializers in source order
    881       for (unsigned I = 0, N = WrittenInits.size(); I != N; ++I) {
    882         CXXCtorInitializer *Init = WrittenInits[I];
    883         if (Init->isAnyMemberInitializer()) {
    884           if (Visit(MakeCursorMemberRef(Init->getAnyMember(),
    885                                         Init->getMemberLocation(), TU)))
    886             return true;
    887         } else if (TypeSourceInfo *TInfo = Init->getTypeSourceInfo()) {
    888           if (Visit(TInfo->getTypeLoc()))
    889             return true;
    890         }
    891 
    892         // Visit the initializer value.
    893         if (Expr *Initializer = Init->getInit())
    894           if (Visit(MakeCXCursor(Initializer, ND, TU, RegionOfInterest)))
    895             return true;
    896       }
    897     }
    898 
    899     if (Visit(MakeCXCursor(ND->getBody(), StmtParent, TU, RegionOfInterest)))
    900       return true;
    901   }
    902 
    903   return false;
    904 }
    905 
    906 bool CursorVisitor::VisitFieldDecl(FieldDecl *D) {
    907   if (VisitDeclaratorDecl(D))
    908     return true;
    909 
    910   if (Expr *BitWidth = D->getBitWidth())
    911     return Visit(MakeCXCursor(BitWidth, StmtParent, TU, RegionOfInterest));
    912 
    913   if (Expr *Init = D->getInClassInitializer())
    914     return Visit(MakeCXCursor(Init, StmtParent, TU, RegionOfInterest));
    915 
    916   return false;
    917 }
    918 
    919 bool CursorVisitor::VisitVarDecl(VarDecl *D) {
    920   if (VisitDeclaratorDecl(D))
    921     return true;
    922 
    923   if (Expr *Init = D->getInit())
    924     return Visit(MakeCXCursor(Init, StmtParent, TU, RegionOfInterest));
    925 
    926   return false;
    927 }
    928 
    929 bool CursorVisitor::VisitNonTypeTemplateParmDecl(NonTypeTemplateParmDecl *D) {
    930   if (VisitDeclaratorDecl(D))
    931     return true;
    932 
    933   if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited())
    934     if (Expr *DefArg = D->getDefaultArgument())
    935       return Visit(MakeCXCursor(DefArg, StmtParent, TU, RegionOfInterest));
    936 
    937   return false;
    938 }
    939 
    940 bool CursorVisitor::VisitFunctionTemplateDecl(FunctionTemplateDecl *D) {
    941   // FIXME: Visit the "outer" template parameter lists on the FunctionDecl
    942   // before visiting these template parameters.
    943   if (VisitTemplateParameters(D->getTemplateParameters()))
    944     return true;
    945 
    946   auto *FD = D->getTemplatedDecl();
    947   return VisitAttributes(FD) || VisitFunctionDecl(FD);
    948 }
    949 
    950 bool CursorVisitor::VisitClassTemplateDecl(ClassTemplateDecl *D) {
    951   // FIXME: Visit the "outer" template parameter lists on the TagDecl
    952   // before visiting these template parameters.
    953   if (VisitTemplateParameters(D->getTemplateParameters()))
    954     return true;
    955 
    956   auto *CD = D->getTemplatedDecl();
    957   return VisitAttributes(CD) || VisitCXXRecordDecl(CD);
    958 }
    959 
    960 bool CursorVisitor::VisitTemplateTemplateParmDecl(TemplateTemplateParmDecl *D) {
    961   if (VisitTemplateParameters(D->getTemplateParameters()))
    962     return true;
    963 
    964   if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited() &&
    965       VisitTemplateArgumentLoc(D->getDefaultArgument()))
    966     return true;
    967 
    968   return false;
    969 }
    970 
    971 bool CursorVisitor::VisitObjCTypeParamDecl(ObjCTypeParamDecl *D) {
    972   // Visit the bound, if it's explicit.
    973   if (D->hasExplicitBound()) {
    974     if (auto TInfo = D->getTypeSourceInfo()) {
    975       if (Visit(TInfo->getTypeLoc()))
    976         return true;
    977     }
    978   }
    979 
    980   return false;
    981 }
    982 
    983 bool CursorVisitor::VisitObjCMethodDecl(ObjCMethodDecl *ND) {
    984   if (TypeSourceInfo *TSInfo = ND->getReturnTypeSourceInfo())
    985     if (Visit(TSInfo->getTypeLoc()))
    986       return true;
    987 
    988   for (const auto *P : ND->parameters()) {
    989     if (Visit(MakeCXCursor(P, TU, RegionOfInterest)))
    990       return true;
    991   }
    992 
    993   return ND->isThisDeclarationADefinition() &&
    994          Visit(MakeCXCursor(ND->getBody(), StmtParent, TU, RegionOfInterest));
    995 }
    996 
    997 template <typename DeclIt>
    998 static void addRangedDeclsInContainer(DeclIt *DI_current, DeclIt DE_current,
    999                                       SourceManager &SM, SourceLocation EndLoc,
   1000                                       SmallVectorImpl<Decl *> &Decls) {
   1001   DeclIt next = *DI_current;
   1002   while (++next != DE_current) {
   1003     Decl *D_next = *next;
   1004     if (!D_next)
   1005       break;
   1006     SourceLocation L = D_next->getBeginLoc();
   1007     if (!L.isValid())
   1008       break;
   1009     if (SM.isBeforeInTranslationUnit(L, EndLoc)) {
   1010       *DI_current = next;
   1011       Decls.push_back(D_next);
   1012       continue;
   1013     }
   1014     break;
   1015   }
   1016 }
   1017 
   1018 bool CursorVisitor::VisitObjCContainerDecl(ObjCContainerDecl *D) {
   1019   // FIXME: Eventually convert back to just 'VisitDeclContext()'.  Essentially
   1020   // an @implementation can lexically contain Decls that are not properly
   1021   // nested in the AST.  When we identify such cases, we need to retrofit
   1022   // this nesting here.
   1023   if (!DI_current && !FileDI_current)
   1024     return VisitDeclContext(D);
   1025 
   1026   // Scan the Decls that immediately come after the container
   1027   // in the current DeclContext.  If any fall within the
   1028   // container's lexical region, stash them into a vector
   1029   // for later processing.
   1030   SmallVector<Decl *, 24> DeclsInContainer;
   1031   SourceLocation EndLoc = D->getSourceRange().getEnd();
   1032   SourceManager &SM = AU->getSourceManager();
   1033   if (EndLoc.isValid()) {
   1034     if (DI_current) {
   1035       addRangedDeclsInContainer(DI_current, DE_current, SM, EndLoc,
   1036                                 DeclsInContainer);
   1037     } else {
   1038       addRangedDeclsInContainer(FileDI_current, FileDE_current, SM, EndLoc,
   1039                                 DeclsInContainer);
   1040     }
   1041   }
   1042 
   1043   // The common case.
   1044   if (DeclsInContainer.empty())
   1045     return VisitDeclContext(D);
   1046 
   1047   // Get all the Decls in the DeclContext, and sort them with the
   1048   // additional ones we've collected.  Then visit them.
   1049   for (auto *SubDecl : D->decls()) {
   1050     if (!SubDecl || SubDecl->getLexicalDeclContext() != D ||
   1051         SubDecl->getBeginLoc().isInvalid())
   1052       continue;
   1053     DeclsInContainer.push_back(SubDecl);
   1054   }
   1055 
   1056   // Now sort the Decls so that they appear in lexical order.
   1057   llvm::sort(DeclsInContainer, [&SM](Decl *A, Decl *B) {
   1058     SourceLocation L_A = A->getBeginLoc();
   1059     SourceLocation L_B = B->getBeginLoc();
   1060     return L_A != L_B
   1061                ? SM.isBeforeInTranslationUnit(L_A, L_B)
   1062                : SM.isBeforeInTranslationUnit(A->getEndLoc(), B->getEndLoc());
   1063   });
   1064 
   1065   // Now visit the decls.
   1066   for (SmallVectorImpl<Decl *>::iterator I = DeclsInContainer.begin(),
   1067                                          E = DeclsInContainer.end();
   1068        I != E; ++I) {
   1069     CXCursor Cursor = MakeCXCursor(*I, TU, RegionOfInterest);
   1070     const Optional<bool> &V = shouldVisitCursor(Cursor);
   1071     if (!V.hasValue())
   1072       continue;
   1073     if (!V.getValue())
   1074       return false;
   1075     if (Visit(Cursor, true))
   1076       return true;
   1077   }
   1078   return false;
   1079 }
   1080 
   1081 bool CursorVisitor::VisitObjCCategoryDecl(ObjCCategoryDecl *ND) {
   1082   if (Visit(MakeCursorObjCClassRef(ND->getClassInterface(), ND->getLocation(),
   1083                                    TU)))
   1084     return true;
   1085 
   1086   if (VisitObjCTypeParamList(ND->getTypeParamList()))
   1087     return true;
   1088 
   1089   ObjCCategoryDecl::protocol_loc_iterator PL = ND->protocol_loc_begin();
   1090   for (ObjCCategoryDecl::protocol_iterator I = ND->protocol_begin(),
   1091                                            E = ND->protocol_end();
   1092        I != E; ++I, ++PL)
   1093     if (Visit(MakeCursorObjCProtocolRef(*I, *PL, TU)))
   1094       return true;
   1095 
   1096   return VisitObjCContainerDecl(ND);
   1097 }
   1098 
   1099 bool CursorVisitor::VisitObjCProtocolDecl(ObjCProtocolDecl *PID) {
   1100   if (!PID->isThisDeclarationADefinition())
   1101     return Visit(MakeCursorObjCProtocolRef(PID, PID->getLocation(), TU));
   1102 
   1103   ObjCProtocolDecl::protocol_loc_iterator PL = PID->protocol_loc_begin();
   1104   for (ObjCProtocolDecl::protocol_iterator I = PID->protocol_begin(),
   1105                                            E = PID->protocol_end();
   1106        I != E; ++I, ++PL)
   1107     if (Visit(MakeCursorObjCProtocolRef(*I, *PL, TU)))
   1108       return true;
   1109 
   1110   return VisitObjCContainerDecl(PID);
   1111 }
   1112 
   1113 bool CursorVisitor::VisitObjCPropertyDecl(ObjCPropertyDecl *PD) {
   1114   if (PD->getTypeSourceInfo() && Visit(PD->getTypeSourceInfo()->getTypeLoc()))
   1115     return true;
   1116 
   1117   // FIXME: This implements a workaround with @property declarations also being
   1118   // installed in the DeclContext for the @interface.  Eventually this code
   1119   // should be removed.
   1120   ObjCCategoryDecl *CDecl = dyn_cast<ObjCCategoryDecl>(PD->getDeclContext());
   1121   if (!CDecl || !CDecl->IsClassExtension())
   1122     return false;
   1123 
   1124   ObjCInterfaceDecl *ID = CDecl->getClassInterface();
   1125   if (!ID)
   1126     return false;
   1127 
   1128   IdentifierInfo *PropertyId = PD->getIdentifier();
   1129   ObjCPropertyDecl *prevDecl = ObjCPropertyDecl::findPropertyDecl(
   1130       cast<DeclContext>(ID), PropertyId, PD->getQueryKind());
   1131 
   1132   if (!prevDecl)
   1133     return false;
   1134 
   1135   // Visit synthesized methods since they will be skipped when visiting
   1136   // the @interface.
   1137   if (ObjCMethodDecl *MD = prevDecl->getGetterMethodDecl())
   1138     if (MD->isPropertyAccessor() && MD->getLexicalDeclContext() == CDecl)
   1139       if (Visit(MakeCXCursor(MD, TU, RegionOfInterest)))
   1140         return true;
   1141 
   1142   if (ObjCMethodDecl *MD = prevDecl->getSetterMethodDecl())
   1143     if (MD->isPropertyAccessor() && MD->getLexicalDeclContext() == CDecl)
   1144       if (Visit(MakeCXCursor(MD, TU, RegionOfInterest)))
   1145         return true;
   1146 
   1147   return false;
   1148 }
   1149 
   1150 bool CursorVisitor::VisitObjCTypeParamList(ObjCTypeParamList *typeParamList) {
   1151   if (!typeParamList)
   1152     return false;
   1153 
   1154   for (auto *typeParam : *typeParamList) {
   1155     // Visit the type parameter.
   1156     if (Visit(MakeCXCursor(typeParam, TU, RegionOfInterest)))
   1157       return true;
   1158   }
   1159 
   1160   return false;
   1161 }
   1162 
   1163 bool CursorVisitor::VisitObjCInterfaceDecl(ObjCInterfaceDecl *D) {
   1164   if (!D->isThisDeclarationADefinition()) {
   1165     // Forward declaration is treated like a reference.
   1166     return Visit(MakeCursorObjCClassRef(D, D->getLocation(), TU));
   1167   }
   1168 
   1169   // Objective-C type parameters.
   1170   if (VisitObjCTypeParamList(D->getTypeParamListAsWritten()))
   1171     return true;
   1172 
   1173   // Issue callbacks for super class.
   1174   if (D->getSuperClass() && Visit(MakeCursorObjCSuperClassRef(
   1175                                 D->getSuperClass(), D->getSuperClassLoc(), TU)))
   1176     return true;
   1177 
   1178   if (TypeSourceInfo *SuperClassTInfo = D->getSuperClassTInfo())
   1179     if (Visit(SuperClassTInfo->getTypeLoc()))
   1180       return true;
   1181 
   1182   ObjCInterfaceDecl::protocol_loc_iterator PL = D->protocol_loc_begin();
   1183   for (ObjCInterfaceDecl::protocol_iterator I = D->protocol_begin(),
   1184                                             E = D->protocol_end();
   1185        I != E; ++I, ++PL)
   1186     if (Visit(MakeCursorObjCProtocolRef(*I, *PL, TU)))
   1187       return true;
   1188 
   1189   return VisitObjCContainerDecl(D);
   1190 }
   1191 
   1192 bool CursorVisitor::VisitObjCImplDecl(ObjCImplDecl *D) {
   1193   return VisitObjCContainerDecl(D);
   1194 }
   1195 
   1196 bool CursorVisitor::VisitObjCCategoryImplDecl(ObjCCategoryImplDecl *D) {
   1197   // 'ID' could be null when dealing with invalid code.
   1198   if (ObjCInterfaceDecl *ID = D->getClassInterface())
   1199     if (Visit(MakeCursorObjCClassRef(ID, D->getLocation(), TU)))
   1200       return true;
   1201 
   1202   return VisitObjCImplDecl(D);
   1203 }
   1204 
   1205 bool CursorVisitor::VisitObjCImplementationDecl(ObjCImplementationDecl *D) {
   1206 #if 0
   1207   // Issue callbacks for super class.
   1208   // FIXME: No source location information!
   1209   if (D->getSuperClass() &&
   1210       Visit(MakeCursorObjCSuperClassRef(D->getSuperClass(),
   1211                                         D->getSuperClassLoc(),
   1212                                         TU)))
   1213     return true;
   1214 #endif
   1215 
   1216   return VisitObjCImplDecl(D);
   1217 }
   1218 
   1219 bool CursorVisitor::VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *PD) {
   1220   if (ObjCIvarDecl *Ivar = PD->getPropertyIvarDecl())
   1221     if (PD->isIvarNameSpecified())
   1222       return Visit(MakeCursorMemberRef(Ivar, PD->getPropertyIvarDeclLoc(), TU));
   1223 
   1224   return false;
   1225 }
   1226 
   1227 bool CursorVisitor::VisitNamespaceDecl(NamespaceDecl *D) {
   1228   return VisitDeclContext(D);
   1229 }
   1230 
   1231 bool CursorVisitor::VisitNamespaceAliasDecl(NamespaceAliasDecl *D) {
   1232   // Visit nested-name-specifier.
   1233   if (NestedNameSpecifierLoc QualifierLoc = D->getQualifierLoc())
   1234     if (VisitNestedNameSpecifierLoc(QualifierLoc))
   1235       return true;
   1236 
   1237   return Visit(MakeCursorNamespaceRef(D->getAliasedNamespace(),
   1238                                       D->getTargetNameLoc(), TU));
   1239 }
   1240 
   1241 bool CursorVisitor::VisitUsingDecl(UsingDecl *D) {
   1242   // Visit nested-name-specifier.
   1243   if (NestedNameSpecifierLoc QualifierLoc = D->getQualifierLoc()) {
   1244     if (VisitNestedNameSpecifierLoc(QualifierLoc))
   1245       return true;
   1246   }
   1247 
   1248   if (Visit(MakeCursorOverloadedDeclRef(D, D->getLocation(), TU)))
   1249     return true;
   1250 
   1251   return VisitDeclarationNameInfo(D->getNameInfo());
   1252 }
   1253 
   1254 bool CursorVisitor::VisitUsingDirectiveDecl(UsingDirectiveDecl *D) {
   1255   // Visit nested-name-specifier.
   1256   if (NestedNameSpecifierLoc QualifierLoc = D->getQualifierLoc())
   1257     if (VisitNestedNameSpecifierLoc(QualifierLoc))
   1258       return true;
   1259 
   1260   return Visit(MakeCursorNamespaceRef(D->getNominatedNamespaceAsWritten(),
   1261                                       D->getIdentLocation(), TU));
   1262 }
   1263 
   1264 bool CursorVisitor::VisitUnresolvedUsingValueDecl(UnresolvedUsingValueDecl *D) {
   1265   // Visit nested-name-specifier.
   1266   if (NestedNameSpecifierLoc QualifierLoc = D->getQualifierLoc()) {
   1267     if (VisitNestedNameSpecifierLoc(QualifierLoc))
   1268       return true;
   1269   }
   1270 
   1271   return VisitDeclarationNameInfo(D->getNameInfo());
   1272 }
   1273 
   1274 bool CursorVisitor::VisitUnresolvedUsingTypenameDecl(
   1275     UnresolvedUsingTypenameDecl *D) {
   1276   // Visit nested-name-specifier.
   1277   if (NestedNameSpecifierLoc QualifierLoc = D->getQualifierLoc())
   1278     if (VisitNestedNameSpecifierLoc(QualifierLoc))
   1279       return true;
   1280 
   1281   return false;
   1282 }
   1283 
   1284 bool CursorVisitor::VisitStaticAssertDecl(StaticAssertDecl *D) {
   1285   if (Visit(MakeCXCursor(D->getAssertExpr(), StmtParent, TU, RegionOfInterest)))
   1286     return true;
   1287   if (StringLiteral *Message = D->getMessage())
   1288     if (Visit(MakeCXCursor(Message, StmtParent, TU, RegionOfInterest)))
   1289       return true;
   1290   return false;
   1291 }
   1292 
   1293 bool CursorVisitor::VisitFriendDecl(FriendDecl *D) {
   1294   if (NamedDecl *FriendD = D->getFriendDecl()) {
   1295     if (Visit(MakeCXCursor(FriendD, TU, RegionOfInterest)))
   1296       return true;
   1297   } else if (TypeSourceInfo *TI = D->getFriendType()) {
   1298     if (Visit(TI->getTypeLoc()))
   1299       return true;
   1300   }
   1301   return false;
   1302 }
   1303 
   1304 bool CursorVisitor::VisitDecompositionDecl(DecompositionDecl *D) {
   1305   for (auto *B : D->bindings()) {
   1306     if (Visit(MakeCXCursor(B, TU, RegionOfInterest)))
   1307       return true;
   1308   }
   1309   return VisitVarDecl(D);
   1310 }
   1311 
   1312 bool CursorVisitor::VisitDeclarationNameInfo(DeclarationNameInfo Name) {
   1313   switch (Name.getName().getNameKind()) {
   1314   case clang::DeclarationName::Identifier:
   1315   case clang::DeclarationName::CXXLiteralOperatorName:
   1316   case clang::DeclarationName::CXXDeductionGuideName:
   1317   case clang::DeclarationName::CXXOperatorName:
   1318   case clang::DeclarationName::CXXUsingDirective:
   1319     return false;
   1320 
   1321   case clang::DeclarationName::CXXConstructorName:
   1322   case clang::DeclarationName::CXXDestructorName:
   1323   case clang::DeclarationName::CXXConversionFunctionName:
   1324     if (TypeSourceInfo *TSInfo = Name.getNamedTypeInfo())
   1325       return Visit(TSInfo->getTypeLoc());
   1326     return false;
   1327 
   1328   case clang::DeclarationName::ObjCZeroArgSelector:
   1329   case clang::DeclarationName::ObjCOneArgSelector:
   1330   case clang::DeclarationName::ObjCMultiArgSelector:
   1331     // FIXME: Per-identifier location info?
   1332     return false;
   1333   }
   1334 
   1335   llvm_unreachable("Invalid DeclarationName::Kind!");
   1336 }
   1337 
   1338 bool CursorVisitor::VisitNestedNameSpecifier(NestedNameSpecifier *NNS,
   1339                                              SourceRange Range) {
   1340   // FIXME: This whole routine is a hack to work around the lack of proper
   1341   // source information in nested-name-specifiers (PR5791). Since we do have
   1342   // a beginning source location, we can visit the first component of the
   1343   // nested-name-specifier, if it's a single-token component.
   1344   if (!NNS)
   1345     return false;
   1346 
   1347   // Get the first component in the nested-name-specifier.
   1348   while (NestedNameSpecifier *Prefix = NNS->getPrefix())
   1349     NNS = Prefix;
   1350 
   1351   switch (NNS->getKind()) {
   1352   case NestedNameSpecifier::Namespace:
   1353     return Visit(
   1354         MakeCursorNamespaceRef(NNS->getAsNamespace(), Range.getBegin(), TU));
   1355 
   1356   case NestedNameSpecifier::NamespaceAlias:
   1357     return Visit(MakeCursorNamespaceRef(NNS->getAsNamespaceAlias(),
   1358                                         Range.getBegin(), TU));
   1359 
   1360   case NestedNameSpecifier::TypeSpec: {
   1361     // If the type has a form where we know that the beginning of the source
   1362     // range matches up with a reference cursor. Visit the appropriate reference
   1363     // cursor.
   1364     const Type *T = NNS->getAsType();
   1365     if (const TypedefType *Typedef = dyn_cast<TypedefType>(T))
   1366       return Visit(MakeCursorTypeRef(Typedef->getDecl(), Range.getBegin(), TU));
   1367     if (const TagType *Tag = dyn_cast<TagType>(T))
   1368       return Visit(MakeCursorTypeRef(Tag->getDecl(), Range.getBegin(), TU));
   1369     if (const TemplateSpecializationType *TST =
   1370             dyn_cast<TemplateSpecializationType>(T))
   1371       return VisitTemplateName(TST->getTemplateName(), Range.getBegin());
   1372     break;
   1373   }
   1374 
   1375   case NestedNameSpecifier::TypeSpecWithTemplate:
   1376   case NestedNameSpecifier::Global:
   1377   case NestedNameSpecifier::Identifier:
   1378   case NestedNameSpecifier::Super:
   1379     break;
   1380   }
   1381 
   1382   return false;
   1383 }
   1384 
   1385 bool CursorVisitor::VisitNestedNameSpecifierLoc(
   1386     NestedNameSpecifierLoc Qualifier) {
   1387   SmallVector<NestedNameSpecifierLoc, 4> Qualifiers;
   1388   for (; Qualifier; Qualifier = Qualifier.getPrefix())
   1389     Qualifiers.push_back(Qualifier);
   1390 
   1391   while (!Qualifiers.empty()) {
   1392     NestedNameSpecifierLoc Q = Qualifiers.pop_back_val();
   1393     NestedNameSpecifier *NNS = Q.getNestedNameSpecifier();
   1394     switch (NNS->getKind()) {
   1395     case NestedNameSpecifier::Namespace:
   1396       if (Visit(MakeCursorNamespaceRef(NNS->getAsNamespace(),
   1397                                        Q.getLocalBeginLoc(), TU)))
   1398         return true;
   1399 
   1400       break;
   1401 
   1402     case NestedNameSpecifier::NamespaceAlias:
   1403       if (Visit(MakeCursorNamespaceRef(NNS->getAsNamespaceAlias(),
   1404                                        Q.getLocalBeginLoc(), TU)))
   1405         return true;
   1406 
   1407       break;
   1408 
   1409     case NestedNameSpecifier::TypeSpec:
   1410     case NestedNameSpecifier::TypeSpecWithTemplate:
   1411       if (Visit(Q.getTypeLoc()))
   1412         return true;
   1413 
   1414       break;
   1415 
   1416     case NestedNameSpecifier::Global:
   1417     case NestedNameSpecifier::Identifier:
   1418     case NestedNameSpecifier::Super:
   1419       break;
   1420     }
   1421   }
   1422 
   1423   return false;
   1424 }
   1425 
   1426 bool CursorVisitor::VisitTemplateParameters(
   1427     const TemplateParameterList *Params) {
   1428   if (!Params)
   1429     return false;
   1430 
   1431   for (TemplateParameterList::const_iterator P = Params->begin(),
   1432                                              PEnd = Params->end();
   1433        P != PEnd; ++P) {
   1434     if (Visit(MakeCXCursor(*P, TU, RegionOfInterest)))
   1435       return true;
   1436   }
   1437 
   1438   return false;
   1439 }
   1440 
   1441 bool CursorVisitor::VisitTemplateName(TemplateName Name, SourceLocation Loc) {
   1442   switch (Name.getKind()) {
   1443   case TemplateName::Template:
   1444     return Visit(MakeCursorTemplateRef(Name.getAsTemplateDecl(), Loc, TU));
   1445 
   1446   case TemplateName::OverloadedTemplate:
   1447     // Visit the overloaded template set.
   1448     if (Visit(MakeCursorOverloadedDeclRef(Name, Loc, TU)))
   1449       return true;
   1450 
   1451     return false;
   1452 
   1453   case TemplateName::AssumedTemplate:
   1454     // FIXME: Visit DeclarationName?
   1455     return false;
   1456 
   1457   case TemplateName::DependentTemplate:
   1458     // FIXME: Visit nested-name-specifier.
   1459     return false;
   1460 
   1461   case TemplateName::QualifiedTemplate:
   1462     // FIXME: Visit nested-name-specifier.
   1463     return Visit(MakeCursorTemplateRef(
   1464         Name.getAsQualifiedTemplateName()->getDecl(), Loc, TU));
   1465 
   1466   case TemplateName::SubstTemplateTemplateParm:
   1467     return Visit(MakeCursorTemplateRef(
   1468         Name.getAsSubstTemplateTemplateParm()->getParameter(), Loc, TU));
   1469 
   1470   case TemplateName::SubstTemplateTemplateParmPack:
   1471     return Visit(MakeCursorTemplateRef(
   1472         Name.getAsSubstTemplateTemplateParmPack()->getParameterPack(), Loc,
   1473         TU));
   1474   }
   1475 
   1476   llvm_unreachable("Invalid TemplateName::Kind!");
   1477 }
   1478 
   1479 bool CursorVisitor::VisitTemplateArgumentLoc(const TemplateArgumentLoc &TAL) {
   1480   switch (TAL.getArgument().getKind()) {
   1481   case TemplateArgument::Null:
   1482   case TemplateArgument::Integral:
   1483   case TemplateArgument::Pack:
   1484     return false;
   1485 
   1486   case TemplateArgument::Type:
   1487     if (TypeSourceInfo *TSInfo = TAL.getTypeSourceInfo())
   1488       return Visit(TSInfo->getTypeLoc());
   1489     return false;
   1490 
   1491   case TemplateArgument::Declaration:
   1492     if (Expr *E = TAL.getSourceDeclExpression())
   1493       return Visit(MakeCXCursor(E, StmtParent, TU, RegionOfInterest));
   1494     return false;
   1495 
   1496   case TemplateArgument::NullPtr:
   1497     if (Expr *E = TAL.getSourceNullPtrExpression())
   1498       return Visit(MakeCXCursor(E, StmtParent, TU, RegionOfInterest));
   1499     return false;
   1500 
   1501   case TemplateArgument::Expression:
   1502     if (Expr *E = TAL.getSourceExpression())
   1503       return Visit(MakeCXCursor(E, StmtParent, TU, RegionOfInterest));
   1504     return false;
   1505 
   1506   case TemplateArgument::Template:
   1507   case TemplateArgument::TemplateExpansion:
   1508     if (VisitNestedNameSpecifierLoc(TAL.getTemplateQualifierLoc()))
   1509       return true;
   1510 
   1511     return VisitTemplateName(TAL.getArgument().getAsTemplateOrTemplatePattern(),
   1512                              TAL.getTemplateNameLoc());
   1513   }
   1514 
   1515   llvm_unreachable("Invalid TemplateArgument::Kind!");
   1516 }
   1517 
   1518 bool CursorVisitor::VisitLinkageSpecDecl(LinkageSpecDecl *D) {
   1519   return VisitDeclContext(D);
   1520 }
   1521 
   1522 bool CursorVisitor::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) {
   1523   return Visit(TL.getUnqualifiedLoc());
   1524 }
   1525 
   1526 bool CursorVisitor::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) {
   1527   ASTContext &Context = AU->getASTContext();
   1528 
   1529   // Some builtin types (such as Objective-C's "id", "sel", and
   1530   // "Class") have associated declarations. Create cursors for those.
   1531   QualType VisitType;
   1532   switch (TL.getTypePtr()->getKind()) {
   1533 
   1534   case BuiltinType::Void:
   1535   case BuiltinType::NullPtr:
   1536   case BuiltinType::Dependent:
   1537 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix)                   \
   1538   case BuiltinType::Id:
   1539 #include "clang/Basic/OpenCLImageTypes.def"
   1540 #define EXT_OPAQUE_TYPE(ExtTYpe, Id, Ext) case BuiltinType::Id:
   1541 #include "clang/Basic/OpenCLExtensionTypes.def"
   1542   case BuiltinType::OCLSampler:
   1543   case BuiltinType::OCLEvent:
   1544   case BuiltinType::OCLClkEvent:
   1545   case BuiltinType::OCLQueue:
   1546   case BuiltinType::OCLReserveID:
   1547 #define SVE_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
   1548 #include "clang/Basic/AArch64SVEACLETypes.def"
   1549 #define PPC_VECTOR_TYPE(Name, Id, Size) case BuiltinType::Id:
   1550 #include "clang/Basic/PPCTypes.def"
   1551 #define RVV_TYPE(Name, Id, SingletonId) case BuiltinType::Id:
   1552 #include "clang/Basic/RISCVVTypes.def"
   1553 #define BUILTIN_TYPE(Id, SingletonId)
   1554 #define SIGNED_TYPE(Id, SingletonId) case BuiltinType::Id:
   1555 #define UNSIGNED_TYPE(Id, SingletonId) case BuiltinType::Id:
   1556 #define FLOATING_TYPE(Id, SingletonId) case BuiltinType::Id:
   1557 #define PLACEHOLDER_TYPE(Id, SingletonId) case BuiltinType::Id:
   1558 #include "clang/AST/BuiltinTypes.def"
   1559     break;
   1560 
   1561   case BuiltinType::ObjCId:
   1562     VisitType = Context.getObjCIdType();
   1563     break;
   1564 
   1565   case BuiltinType::ObjCClass:
   1566     VisitType = Context.getObjCClassType();
   1567     break;
   1568 
   1569   case BuiltinType::ObjCSel:
   1570     VisitType = Context.getObjCSelType();
   1571     break;
   1572   }
   1573 
   1574   if (!VisitType.isNull()) {
   1575     if (const TypedefType *Typedef = VisitType->getAs<TypedefType>())
   1576       return Visit(
   1577           MakeCursorTypeRef(Typedef->getDecl(), TL.getBuiltinLoc(), TU));
   1578   }
   1579 
   1580   return false;
   1581 }
   1582 
   1583 bool CursorVisitor::VisitTypedefTypeLoc(TypedefTypeLoc TL) {
   1584   return Visit(MakeCursorTypeRef(TL.getTypedefNameDecl(), TL.getNameLoc(), TU));
   1585 }
   1586 
   1587 bool CursorVisitor::VisitUnresolvedUsingTypeLoc(UnresolvedUsingTypeLoc TL) {
   1588   return Visit(MakeCursorTypeRef(TL.getDecl(), TL.getNameLoc(), TU));
   1589 }
   1590 
   1591 bool CursorVisitor::VisitTagTypeLoc(TagTypeLoc TL) {
   1592   if (TL.isDefinition())
   1593     return Visit(MakeCXCursor(TL.getDecl(), TU, RegionOfInterest));
   1594 
   1595   return Visit(MakeCursorTypeRef(TL.getDecl(), TL.getNameLoc(), TU));
   1596 }
   1597 
   1598 bool CursorVisitor::VisitTemplateTypeParmTypeLoc(TemplateTypeParmTypeLoc TL) {
   1599   return Visit(MakeCursorTypeRef(TL.getDecl(), TL.getNameLoc(), TU));
   1600 }
   1601 
   1602 bool CursorVisitor::VisitObjCInterfaceTypeLoc(ObjCInterfaceTypeLoc TL) {
   1603   return Visit(MakeCursorObjCClassRef(TL.getIFaceDecl(), TL.getNameLoc(), TU));
   1604 }
   1605 
   1606 bool CursorVisitor::VisitObjCTypeParamTypeLoc(ObjCTypeParamTypeLoc TL) {
   1607   if (Visit(MakeCursorTypeRef(TL.getDecl(), TL.getBeginLoc(), TU)))
   1608     return true;
   1609   for (unsigned I = 0, N = TL.getNumProtocols(); I != N; ++I) {
   1610     if (Visit(MakeCursorObjCProtocolRef(TL.getProtocol(I), TL.getProtocolLoc(I),
   1611                                         TU)))
   1612       return true;
   1613   }
   1614 
   1615   return false;
   1616 }
   1617 
   1618 bool CursorVisitor::VisitObjCObjectTypeLoc(ObjCObjectTypeLoc TL) {
   1619   if (TL.hasBaseTypeAsWritten() && Visit(TL.getBaseLoc()))
   1620     return true;
   1621 
   1622   for (unsigned I = 0, N = TL.getNumTypeArgs(); I != N; ++I) {
   1623     if (Visit(TL.getTypeArgTInfo(I)->getTypeLoc()))
   1624       return true;
   1625   }
   1626 
   1627   for (unsigned I = 0, N = TL.getNumProtocols(); I != N; ++I) {
   1628     if (Visit(MakeCursorObjCProtocolRef(TL.getProtocol(I), TL.getProtocolLoc(I),
   1629                                         TU)))
   1630       return true;
   1631   }
   1632 
   1633   return false;
   1634 }
   1635 
   1636 bool CursorVisitor::VisitObjCObjectPointerTypeLoc(ObjCObjectPointerTypeLoc TL) {
   1637   return Visit(TL.getPointeeLoc());
   1638 }
   1639 
   1640 bool CursorVisitor::VisitParenTypeLoc(ParenTypeLoc TL) {
   1641   return Visit(TL.getInnerLoc());
   1642 }
   1643 
   1644 bool CursorVisitor::VisitMacroQualifiedTypeLoc(MacroQualifiedTypeLoc TL) {
   1645   return Visit(TL.getInnerLoc());
   1646 }
   1647 
   1648 bool CursorVisitor::VisitPointerTypeLoc(PointerTypeLoc TL) {
   1649   return Visit(TL.getPointeeLoc());
   1650 }
   1651 
   1652 bool CursorVisitor::VisitBlockPointerTypeLoc(BlockPointerTypeLoc TL) {
   1653   return Visit(TL.getPointeeLoc());
   1654 }
   1655 
   1656 bool CursorVisitor::VisitMemberPointerTypeLoc(MemberPointerTypeLoc TL) {
   1657   return Visit(TL.getPointeeLoc());
   1658 }
   1659 
   1660 bool CursorVisitor::VisitLValueReferenceTypeLoc(LValueReferenceTypeLoc TL) {
   1661   return Visit(TL.getPointeeLoc());
   1662 }
   1663 
   1664 bool CursorVisitor::VisitRValueReferenceTypeLoc(RValueReferenceTypeLoc TL) {
   1665   return Visit(TL.getPointeeLoc());
   1666 }
   1667 
   1668 bool CursorVisitor::VisitAttributedTypeLoc(AttributedTypeLoc TL) {
   1669   return Visit(TL.getModifiedLoc());
   1670 }
   1671 
   1672 bool CursorVisitor::VisitFunctionTypeLoc(FunctionTypeLoc TL,
   1673                                          bool SkipResultType) {
   1674   if (!SkipResultType && Visit(TL.getReturnLoc()))
   1675     return true;
   1676 
   1677   for (unsigned I = 0, N = TL.getNumParams(); I != N; ++I)
   1678     if (Decl *D = TL.getParam(I))
   1679       if (Visit(MakeCXCursor(D, TU, RegionOfInterest)))
   1680         return true;
   1681 
   1682   return false;
   1683 }
   1684 
   1685 bool CursorVisitor::VisitArrayTypeLoc(ArrayTypeLoc TL) {
   1686   if (Visit(TL.getElementLoc()))
   1687     return true;
   1688 
   1689   if (Expr *Size = TL.getSizeExpr())
   1690     return Visit(MakeCXCursor(Size, StmtParent, TU, RegionOfInterest));
   1691 
   1692   return false;
   1693 }
   1694 
   1695 bool CursorVisitor::VisitDecayedTypeLoc(DecayedTypeLoc TL) {
   1696   return Visit(TL.getOriginalLoc());
   1697 }
   1698 
   1699 bool CursorVisitor::VisitAdjustedTypeLoc(AdjustedTypeLoc TL) {
   1700   return Visit(TL.getOriginalLoc());
   1701 }
   1702 
   1703 bool CursorVisitor::VisitDeducedTemplateSpecializationTypeLoc(
   1704     DeducedTemplateSpecializationTypeLoc TL) {
   1705   if (VisitTemplateName(TL.getTypePtr()->getTemplateName(),
   1706                         TL.getTemplateNameLoc()))
   1707     return true;
   1708 
   1709   return false;
   1710 }
   1711 
   1712 bool CursorVisitor::VisitTemplateSpecializationTypeLoc(
   1713     TemplateSpecializationTypeLoc TL) {
   1714   // Visit the template name.
   1715   if (VisitTemplateName(TL.getTypePtr()->getTemplateName(),
   1716                         TL.getTemplateNameLoc()))
   1717     return true;
   1718 
   1719   // Visit the template arguments.
   1720   for (unsigned I = 0, N = TL.getNumArgs(); I != N; ++I)
   1721     if (VisitTemplateArgumentLoc(TL.getArgLoc(I)))
   1722       return true;
   1723 
   1724   return false;
   1725 }
   1726 
   1727 bool CursorVisitor::VisitTypeOfExprTypeLoc(TypeOfExprTypeLoc TL) {
   1728   return Visit(MakeCXCursor(TL.getUnderlyingExpr(), StmtParent, TU));
   1729 }
   1730 
   1731 bool CursorVisitor::VisitTypeOfTypeLoc(TypeOfTypeLoc TL) {
   1732   if (TypeSourceInfo *TSInfo = TL.getUnderlyingTInfo())
   1733     return Visit(TSInfo->getTypeLoc());
   1734 
   1735   return false;
   1736 }
   1737 
   1738 bool CursorVisitor::VisitUnaryTransformTypeLoc(UnaryTransformTypeLoc TL) {
   1739   if (TypeSourceInfo *TSInfo = TL.getUnderlyingTInfo())
   1740     return Visit(TSInfo->getTypeLoc());
   1741 
   1742   return false;
   1743 }
   1744 
   1745 bool CursorVisitor::VisitDependentNameTypeLoc(DependentNameTypeLoc TL) {
   1746   return VisitNestedNameSpecifierLoc(TL.getQualifierLoc());
   1747 }
   1748 
   1749 bool CursorVisitor::VisitDependentTemplateSpecializationTypeLoc(
   1750     DependentTemplateSpecializationTypeLoc TL) {
   1751   // Visit the nested-name-specifier, if there is one.
   1752   if (TL.getQualifierLoc() && VisitNestedNameSpecifierLoc(TL.getQualifierLoc()))
   1753     return true;
   1754 
   1755   // Visit the template arguments.
   1756   for (unsigned I = 0, N = TL.getNumArgs(); I != N; ++I)
   1757     if (VisitTemplateArgumentLoc(TL.getArgLoc(I)))
   1758       return true;
   1759 
   1760   return false;
   1761 }
   1762 
   1763 bool CursorVisitor::VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) {
   1764   if (VisitNestedNameSpecifierLoc(TL.getQualifierLoc()))
   1765     return true;
   1766 
   1767   return Visit(TL.getNamedTypeLoc());
   1768 }
   1769 
   1770 bool CursorVisitor::VisitPackExpansionTypeLoc(PackExpansionTypeLoc TL) {
   1771   return Visit(TL.getPatternLoc());
   1772 }
   1773 
   1774 bool CursorVisitor::VisitDecltypeTypeLoc(DecltypeTypeLoc TL) {
   1775   if (Expr *E = TL.getUnderlyingExpr())
   1776     return Visit(MakeCXCursor(E, StmtParent, TU));
   1777 
   1778   return false;
   1779 }
   1780 
   1781 bool CursorVisitor::VisitInjectedClassNameTypeLoc(InjectedClassNameTypeLoc TL) {
   1782   return Visit(MakeCursorTypeRef(TL.getDecl(), TL.getNameLoc(), TU));
   1783 }
   1784 
   1785 bool CursorVisitor::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
   1786   return Visit(TL.getValueLoc());
   1787 }
   1788 
   1789 bool CursorVisitor::VisitPipeTypeLoc(PipeTypeLoc TL) {
   1790   return Visit(TL.getValueLoc());
   1791 }
   1792 
   1793 #define DEFAULT_TYPELOC_IMPL(CLASS, PARENT)                                    \
   1794   bool CursorVisitor::Visit##CLASS##TypeLoc(CLASS##TypeLoc TL) {               \
   1795     return Visit##PARENT##Loc(TL);                                             \
   1796   }
   1797 
   1798 DEFAULT_TYPELOC_IMPL(Complex, Type)
   1799 DEFAULT_TYPELOC_IMPL(ConstantArray, ArrayType)
   1800 DEFAULT_TYPELOC_IMPL(IncompleteArray, ArrayType)
   1801 DEFAULT_TYPELOC_IMPL(VariableArray, ArrayType)
   1802 DEFAULT_TYPELOC_IMPL(DependentSizedArray, ArrayType)
   1803 DEFAULT_TYPELOC_IMPL(DependentAddressSpace, Type)
   1804 DEFAULT_TYPELOC_IMPL(DependentVector, Type)
   1805 DEFAULT_TYPELOC_IMPL(DependentSizedExtVector, Type)
   1806 DEFAULT_TYPELOC_IMPL(Vector, Type)
   1807 DEFAULT_TYPELOC_IMPL(ExtVector, VectorType)
   1808 DEFAULT_TYPELOC_IMPL(ConstantMatrix, MatrixType)
   1809 DEFAULT_TYPELOC_IMPL(DependentSizedMatrix, MatrixType)
   1810 DEFAULT_TYPELOC_IMPL(FunctionProto, FunctionType)
   1811 DEFAULT_TYPELOC_IMPL(FunctionNoProto, FunctionType)
   1812 DEFAULT_TYPELOC_IMPL(Record, TagType)
   1813 DEFAULT_TYPELOC_IMPL(Enum, TagType)
   1814 DEFAULT_TYPELOC_IMPL(SubstTemplateTypeParm, Type)
   1815 DEFAULT_TYPELOC_IMPL(SubstTemplateTypeParmPack, Type)
   1816 DEFAULT_TYPELOC_IMPL(Auto, Type)
   1817 DEFAULT_TYPELOC_IMPL(ExtInt, Type)
   1818 DEFAULT_TYPELOC_IMPL(DependentExtInt, Type)
   1819 
   1820 bool CursorVisitor::VisitCXXRecordDecl(CXXRecordDecl *D) {
   1821   // Visit the nested-name-specifier, if present.
   1822   if (NestedNameSpecifierLoc QualifierLoc = D->getQualifierLoc())
   1823     if (VisitNestedNameSpecifierLoc(QualifierLoc))
   1824       return true;
   1825 
   1826   if (D->isCompleteDefinition()) {
   1827     for (const auto &I : D->bases()) {
   1828       if (Visit(cxcursor::MakeCursorCXXBaseSpecifier(&I, TU)))
   1829         return true;
   1830     }
   1831   }
   1832 
   1833   return VisitTagDecl(D);
   1834 }
   1835 
   1836 bool CursorVisitor::VisitAttributes(Decl *D) {
   1837   for (const auto *I : D->attrs())
   1838     if ((TU->ParsingOptions & CXTranslationUnit_VisitImplicitAttributes ||
   1839          !I->isImplicit()) &&
   1840         Visit(MakeCXCursor(I, D, TU)))
   1841       return true;
   1842 
   1843   return false;
   1844 }
   1845 
   1846 //===----------------------------------------------------------------------===//
   1847 // Data-recursive visitor methods.
   1848 //===----------------------------------------------------------------------===//
   1849 
   1850 namespace {
   1851 #define DEF_JOB(NAME, DATA, KIND)                                              \
   1852   class NAME : public VisitorJob {                                             \
   1853   public:                                                                      \
   1854     NAME(const DATA *d, CXCursor parent)                                       \
   1855         : VisitorJob(parent, VisitorJob::KIND, d) {}                           \
   1856     static bool classof(const VisitorJob *VJ) {                                \
   1857       return VJ->getKind() == KIND;                                            \
   1858     }                                                                          \
   1859     const DATA *get() const { return static_cast<const DATA *>(data[0]); }     \
   1860   };
   1861 
   1862 DEF_JOB(StmtVisit, Stmt, StmtVisitKind)
   1863 DEF_JOB(MemberExprParts, MemberExpr, MemberExprPartsKind)
   1864 DEF_JOB(DeclRefExprParts, DeclRefExpr, DeclRefExprPartsKind)
   1865 DEF_JOB(OverloadExprParts, OverloadExpr, OverloadExprPartsKind)
   1866 DEF_JOB(SizeOfPackExprParts, SizeOfPackExpr, SizeOfPackExprPartsKind)
   1867 DEF_JOB(LambdaExprParts, LambdaExpr, LambdaExprPartsKind)
   1868 DEF_JOB(PostChildrenVisit, void, PostChildrenVisitKind)
   1869 #undef DEF_JOB
   1870 
   1871 class ExplicitTemplateArgsVisit : public VisitorJob {
   1872 public:
   1873   ExplicitTemplateArgsVisit(const TemplateArgumentLoc *Begin,
   1874                             const TemplateArgumentLoc *End, CXCursor parent)
   1875       : VisitorJob(parent, VisitorJob::ExplicitTemplateArgsVisitKind, Begin,
   1876                    End) {}
   1877   static bool classof(const VisitorJob *VJ) {
   1878     return VJ->getKind() == ExplicitTemplateArgsVisitKind;
   1879   }
   1880   const TemplateArgumentLoc *begin() const {
   1881     return static_cast<const TemplateArgumentLoc *>(data[0]);
   1882   }
   1883   const TemplateArgumentLoc *end() {
   1884     return static_cast<const TemplateArgumentLoc *>(data[1]);
   1885   }
   1886 };
   1887 class DeclVisit : public VisitorJob {
   1888 public:
   1889   DeclVisit(const Decl *D, CXCursor parent, bool isFirst)
   1890       : VisitorJob(parent, VisitorJob::DeclVisitKind, D,
   1891                    isFirst ? (void *)1 : (void *)nullptr) {}
   1892   static bool classof(const VisitorJob *VJ) {
   1893     return VJ->getKind() == DeclVisitKind;
   1894   }
   1895   const Decl *get() const { return static_cast<const Decl *>(data[0]); }
   1896   bool isFirst() const { return data[1] != nullptr; }
   1897 };
   1898 class TypeLocVisit : public VisitorJob {
   1899 public:
   1900   TypeLocVisit(TypeLoc tl, CXCursor parent)
   1901       : VisitorJob(parent, VisitorJob::TypeLocVisitKind,
   1902                    tl.getType().getAsOpaquePtr(), tl.getOpaqueData()) {}
   1903 
   1904   static bool classof(const VisitorJob *VJ) {
   1905     return VJ->getKind() == TypeLocVisitKind;
   1906   }
   1907 
   1908   TypeLoc get() const {
   1909     QualType T = QualType::getFromOpaquePtr(data[0]);
   1910     return TypeLoc(T, const_cast<void *>(data[1]));
   1911   }
   1912 };
   1913 
   1914 class LabelRefVisit : public VisitorJob {
   1915 public:
   1916   LabelRefVisit(LabelDecl *LD, SourceLocation labelLoc, CXCursor parent)
   1917       : VisitorJob(parent, VisitorJob::LabelRefVisitKind, LD,
   1918                    labelLoc.getPtrEncoding()) {}
   1919 
   1920   static bool classof(const VisitorJob *VJ) {
   1921     return VJ->getKind() == VisitorJob::LabelRefVisitKind;
   1922   }
   1923   const LabelDecl *get() const {
   1924     return static_cast<const LabelDecl *>(data[0]);
   1925   }
   1926   SourceLocation getLoc() const {
   1927     return SourceLocation::getFromPtrEncoding(data[1]);
   1928   }
   1929 };
   1930 
   1931 class NestedNameSpecifierLocVisit : public VisitorJob {
   1932 public:
   1933   NestedNameSpecifierLocVisit(NestedNameSpecifierLoc Qualifier, CXCursor parent)
   1934       : VisitorJob(parent, VisitorJob::NestedNameSpecifierLocVisitKind,
   1935                    Qualifier.getNestedNameSpecifier(),
   1936                    Qualifier.getOpaqueData()) {}
   1937 
   1938   static bool classof(const VisitorJob *VJ) {
   1939     return VJ->getKind() == VisitorJob::NestedNameSpecifierLocVisitKind;
   1940   }
   1941 
   1942   NestedNameSpecifierLoc get() const {
   1943     return NestedNameSpecifierLoc(
   1944         const_cast<NestedNameSpecifier *>(
   1945             static_cast<const NestedNameSpecifier *>(data[0])),
   1946         const_cast<void *>(data[1]));
   1947   }
   1948 };
   1949 
   1950 class DeclarationNameInfoVisit : public VisitorJob {
   1951 public:
   1952   DeclarationNameInfoVisit(const Stmt *S, CXCursor parent)
   1953       : VisitorJob(parent, VisitorJob::DeclarationNameInfoVisitKind, S) {}
   1954   static bool classof(const VisitorJob *VJ) {
   1955     return VJ->getKind() == VisitorJob::DeclarationNameInfoVisitKind;
   1956   }
   1957   DeclarationNameInfo get() const {
   1958     const Stmt *S = static_cast<const Stmt *>(data[0]);
   1959     switch (S->getStmtClass()) {
   1960     default:
   1961       llvm_unreachable("Unhandled Stmt");
   1962     case clang::Stmt::MSDependentExistsStmtClass:
   1963       return cast<MSDependentExistsStmt>(S)->getNameInfo();
   1964     case Stmt::CXXDependentScopeMemberExprClass:
   1965       return cast<CXXDependentScopeMemberExpr>(S)->getMemberNameInfo();
   1966     case Stmt::DependentScopeDeclRefExprClass:
   1967       return cast<DependentScopeDeclRefExpr>(S)->getNameInfo();
   1968     case Stmt::OMPCriticalDirectiveClass:
   1969       return cast<OMPCriticalDirective>(S)->getDirectiveName();
   1970     }
   1971   }
   1972 };
   1973 class MemberRefVisit : public VisitorJob {
   1974 public:
   1975   MemberRefVisit(const FieldDecl *D, SourceLocation L, CXCursor parent)
   1976       : VisitorJob(parent, VisitorJob::MemberRefVisitKind, D,
   1977                    L.getPtrEncoding()) {}
   1978   static bool classof(const VisitorJob *VJ) {
   1979     return VJ->getKind() == VisitorJob::MemberRefVisitKind;
   1980   }
   1981   const FieldDecl *get() const {
   1982     return static_cast<const FieldDecl *>(data[0]);
   1983   }
   1984   SourceLocation getLoc() const {
   1985     return SourceLocation::getFromRawEncoding((unsigned)(uintptr_t)data[1]);
   1986   }
   1987 };
   1988 class EnqueueVisitor : public ConstStmtVisitor<EnqueueVisitor, void> {
   1989   friend class OMPClauseEnqueue;
   1990   VisitorWorkList &WL;
   1991   CXCursor Parent;
   1992 
   1993 public:
   1994   EnqueueVisitor(VisitorWorkList &wl, CXCursor parent)
   1995       : WL(wl), Parent(parent) {}
   1996 
   1997   void VisitAddrLabelExpr(const AddrLabelExpr *E);
   1998   void VisitBlockExpr(const BlockExpr *B);
   1999   void VisitCompoundLiteralExpr(const CompoundLiteralExpr *E);
   2000   void VisitCompoundStmt(const CompoundStmt *S);
   2001   void VisitCXXDefaultArgExpr(const CXXDefaultArgExpr *E) { /* Do nothing. */
   2002   }
   2003   void VisitMSDependentExistsStmt(const MSDependentExistsStmt *S);
   2004   void VisitCXXDependentScopeMemberExpr(const CXXDependentScopeMemberExpr *E);
   2005   void VisitCXXNewExpr(const CXXNewExpr *E);
   2006   void VisitCXXScalarValueInitExpr(const CXXScalarValueInitExpr *E);
   2007   void VisitCXXOperatorCallExpr(const CXXOperatorCallExpr *E);
   2008   void VisitCXXPseudoDestructorExpr(const CXXPseudoDestructorExpr *E);
   2009   void VisitCXXTemporaryObjectExpr(const CXXTemporaryObjectExpr *E);
   2010   void VisitCXXTypeidExpr(const CXXTypeidExpr *E);
   2011   void VisitCXXUnresolvedConstructExpr(const CXXUnresolvedConstructExpr *E);
   2012   void VisitCXXUuidofExpr(const CXXUuidofExpr *E);
   2013   void VisitCXXCatchStmt(const CXXCatchStmt *S);
   2014   void VisitCXXForRangeStmt(const CXXForRangeStmt *S);
   2015   void VisitDeclRefExpr(const DeclRefExpr *D);
   2016   void VisitDeclStmt(const DeclStmt *S);
   2017   void VisitDependentScopeDeclRefExpr(const DependentScopeDeclRefExpr *E);
   2018   void VisitDesignatedInitExpr(const DesignatedInitExpr *E);
   2019   void VisitExplicitCastExpr(const ExplicitCastExpr *E);
   2020   void VisitForStmt(const ForStmt *FS);
   2021   void VisitGotoStmt(const GotoStmt *GS);
   2022   void VisitIfStmt(const IfStmt *If);
   2023   void VisitInitListExpr(const InitListExpr *IE);
   2024   void VisitMemberExpr(const MemberExpr *M);
   2025   void VisitOffsetOfExpr(const OffsetOfExpr *E);
   2026   void VisitObjCEncodeExpr(const ObjCEncodeExpr *E);
   2027   void VisitObjCMessageExpr(const ObjCMessageExpr *M);
   2028   void VisitOverloadExpr(const OverloadExpr *E);
   2029   void VisitUnaryExprOrTypeTraitExpr(const UnaryExprOrTypeTraitExpr *E);
   2030   void VisitStmt(const Stmt *S);
   2031   void VisitSwitchStmt(const SwitchStmt *S);
   2032   void VisitWhileStmt(const WhileStmt *W);
   2033   void VisitTypeTraitExpr(const TypeTraitExpr *E);
   2034   void VisitArrayTypeTraitExpr(const ArrayTypeTraitExpr *E);
   2035   void VisitExpressionTraitExpr(const ExpressionTraitExpr *E);
   2036   void VisitUnresolvedMemberExpr(const UnresolvedMemberExpr *U);
   2037   void VisitVAArgExpr(const VAArgExpr *E);
   2038   void VisitSizeOfPackExpr(const SizeOfPackExpr *E);
   2039   void VisitPseudoObjectExpr(const PseudoObjectExpr *E);
   2040   void VisitOpaqueValueExpr(const OpaqueValueExpr *E);
   2041   void VisitLambdaExpr(const LambdaExpr *E);
   2042   void VisitOMPExecutableDirective(const OMPExecutableDirective *D);
   2043   void VisitOMPLoopBasedDirective(const OMPLoopBasedDirective *D);
   2044   void VisitOMPLoopDirective(const OMPLoopDirective *D);
   2045   void VisitOMPParallelDirective(const OMPParallelDirective *D);
   2046   void VisitOMPSimdDirective(const OMPSimdDirective *D);
   2047   void VisitOMPTileDirective(const OMPTileDirective *D);
   2048   void VisitOMPForDirective(const OMPForDirective *D);
   2049   void VisitOMPForSimdDirective(const OMPForSimdDirective *D);
   2050   void VisitOMPSectionsDirective(const OMPSectionsDirective *D);
   2051   void VisitOMPSectionDirective(const OMPSectionDirective *D);
   2052   void VisitOMPSingleDirective(const OMPSingleDirective *D);
   2053   void VisitOMPMasterDirective(const OMPMasterDirective *D);
   2054   void VisitOMPCriticalDirective(const OMPCriticalDirective *D);
   2055   void VisitOMPParallelForDirective(const OMPParallelForDirective *D);
   2056   void VisitOMPParallelForSimdDirective(const OMPParallelForSimdDirective *D);
   2057   void VisitOMPParallelMasterDirective(const OMPParallelMasterDirective *D);
   2058   void VisitOMPParallelSectionsDirective(const OMPParallelSectionsDirective *D);
   2059   void VisitOMPTaskDirective(const OMPTaskDirective *D);
   2060   void VisitOMPTaskyieldDirective(const OMPTaskyieldDirective *D);
   2061   void VisitOMPBarrierDirective(const OMPBarrierDirective *D);
   2062   void VisitOMPTaskwaitDirective(const OMPTaskwaitDirective *D);
   2063   void VisitOMPTaskgroupDirective(const OMPTaskgroupDirective *D);
   2064   void
   2065   VisitOMPCancellationPointDirective(const OMPCancellationPointDirective *D);
   2066   void VisitOMPCancelDirective(const OMPCancelDirective *D);
   2067   void VisitOMPFlushDirective(const OMPFlushDirective *D);
   2068   void VisitOMPDepobjDirective(const OMPDepobjDirective *D);
   2069   void VisitOMPScanDirective(const OMPScanDirective *D);
   2070   void VisitOMPOrderedDirective(const OMPOrderedDirective *D);
   2071   void VisitOMPAtomicDirective(const OMPAtomicDirective *D);
   2072   void VisitOMPTargetDirective(const OMPTargetDirective *D);
   2073   void VisitOMPTargetDataDirective(const OMPTargetDataDirective *D);
   2074   void VisitOMPTargetEnterDataDirective(const OMPTargetEnterDataDirective *D);
   2075   void VisitOMPTargetExitDataDirective(const OMPTargetExitDataDirective *D);
   2076   void VisitOMPTargetParallelDirective(const OMPTargetParallelDirective *D);
   2077   void
   2078   VisitOMPTargetParallelForDirective(const OMPTargetParallelForDirective *D);
   2079   void VisitOMPTeamsDirective(const OMPTeamsDirective *D);
   2080   void VisitOMPTaskLoopDirective(const OMPTaskLoopDirective *D);
   2081   void VisitOMPTaskLoopSimdDirective(const OMPTaskLoopSimdDirective *D);
   2082   void VisitOMPMasterTaskLoopDirective(const OMPMasterTaskLoopDirective *D);
   2083   void
   2084   VisitOMPMasterTaskLoopSimdDirective(const OMPMasterTaskLoopSimdDirective *D);
   2085   void VisitOMPParallelMasterTaskLoopDirective(
   2086       const OMPParallelMasterTaskLoopDirective *D);
   2087   void VisitOMPParallelMasterTaskLoopSimdDirective(
   2088       const OMPParallelMasterTaskLoopSimdDirective *D);
   2089   void VisitOMPDistributeDirective(const OMPDistributeDirective *D);
   2090   void VisitOMPDistributeParallelForDirective(
   2091       const OMPDistributeParallelForDirective *D);
   2092   void VisitOMPDistributeParallelForSimdDirective(
   2093       const OMPDistributeParallelForSimdDirective *D);
   2094   void VisitOMPDistributeSimdDirective(const OMPDistributeSimdDirective *D);
   2095   void VisitOMPTargetParallelForSimdDirective(
   2096       const OMPTargetParallelForSimdDirective *D);
   2097   void VisitOMPTargetSimdDirective(const OMPTargetSimdDirective *D);
   2098   void VisitOMPTeamsDistributeDirective(const OMPTeamsDistributeDirective *D);
   2099   void VisitOMPTeamsDistributeSimdDirective(
   2100       const OMPTeamsDistributeSimdDirective *D);
   2101   void VisitOMPTeamsDistributeParallelForSimdDirective(
   2102       const OMPTeamsDistributeParallelForSimdDirective *D);
   2103   void VisitOMPTeamsDistributeParallelForDirective(
   2104       const OMPTeamsDistributeParallelForDirective *D);
   2105   void VisitOMPTargetTeamsDirective(const OMPTargetTeamsDirective *D);
   2106   void VisitOMPTargetTeamsDistributeDirective(
   2107       const OMPTargetTeamsDistributeDirective *D);
   2108   void VisitOMPTargetTeamsDistributeParallelForDirective(
   2109       const OMPTargetTeamsDistributeParallelForDirective *D);
   2110   void VisitOMPTargetTeamsDistributeParallelForSimdDirective(
   2111       const OMPTargetTeamsDistributeParallelForSimdDirective *D);
   2112   void VisitOMPTargetTeamsDistributeSimdDirective(
   2113       const OMPTargetTeamsDistributeSimdDirective *D);
   2114 
   2115 private:
   2116   void AddDeclarationNameInfo(const Stmt *S);
   2117   void AddNestedNameSpecifierLoc(NestedNameSpecifierLoc Qualifier);
   2118   void AddExplicitTemplateArgs(const TemplateArgumentLoc *A,
   2119                                unsigned NumTemplateArgs);
   2120   void AddMemberRef(const FieldDecl *D, SourceLocation L);
   2121   void AddStmt(const Stmt *S);
   2122   void AddDecl(const Decl *D, bool isFirst = true);
   2123   void AddTypeLoc(TypeSourceInfo *TI);
   2124   void EnqueueChildren(const Stmt *S);
   2125   void EnqueueChildren(const OMPClause *S);
   2126 };
   2127 } // namespace
   2128 
   2129 void EnqueueVisitor::AddDeclarationNameInfo(const Stmt *S) {
   2130   // 'S' should always be non-null, since it comes from the
   2131   // statement we are visiting.
   2132   WL.push_back(DeclarationNameInfoVisit(S, Parent));
   2133 }
   2134 
   2135 void EnqueueVisitor::AddNestedNameSpecifierLoc(
   2136     NestedNameSpecifierLoc Qualifier) {
   2137   if (Qualifier)
   2138     WL.push_back(NestedNameSpecifierLocVisit(Qualifier, Parent));
   2139 }
   2140 
   2141 void EnqueueVisitor::AddStmt(const Stmt *S) {
   2142   if (S)
   2143     WL.push_back(StmtVisit(S, Parent));
   2144 }
   2145 void EnqueueVisitor::AddDecl(const Decl *D, bool isFirst) {
   2146   if (D)
   2147     WL.push_back(DeclVisit(D, Parent, isFirst));
   2148 }
   2149 void EnqueueVisitor::AddExplicitTemplateArgs(const TemplateArgumentLoc *A,
   2150                                              unsigned NumTemplateArgs) {
   2151   WL.push_back(ExplicitTemplateArgsVisit(A, A + NumTemplateArgs, Parent));
   2152 }
   2153 void EnqueueVisitor::AddMemberRef(const FieldDecl *D, SourceLocation L) {
   2154   if (D)
   2155     WL.push_back(MemberRefVisit(D, L, Parent));
   2156 }
   2157 void EnqueueVisitor::AddTypeLoc(TypeSourceInfo *TI) {
   2158   if (TI)
   2159     WL.push_back(TypeLocVisit(TI->getTypeLoc(), Parent));
   2160 }
   2161 void EnqueueVisitor::EnqueueChildren(const Stmt *S) {
   2162   unsigned size = WL.size();
   2163   for (const Stmt *SubStmt : S->children()) {
   2164     AddStmt(SubStmt);
   2165   }
   2166   if (size == WL.size())
   2167     return;
   2168   // Now reverse the entries we just added.  This will match the DFS
   2169   // ordering performed by the worklist.
   2170   VisitorWorkList::iterator I = WL.begin() + size, E = WL.end();
   2171   std::reverse(I, E);
   2172 }
   2173 namespace {
   2174 class OMPClauseEnqueue : public ConstOMPClauseVisitor<OMPClauseEnqueue> {
   2175   EnqueueVisitor *Visitor;
   2176   /// Process clauses with list of variables.
   2177   template <typename T> void VisitOMPClauseList(T *Node);
   2178 
   2179 public:
   2180   OMPClauseEnqueue(EnqueueVisitor *Visitor) : Visitor(Visitor) {}
   2181 #define GEN_CLANG_CLAUSE_CLASS
   2182 #define CLAUSE_CLASS(Enum, Str, Class) void Visit##Class(const Class *C);
   2183 #include "llvm/Frontend/OpenMP/OMP.inc"
   2184   void VisitOMPClauseWithPreInit(const OMPClauseWithPreInit *C);
   2185   void VisitOMPClauseWithPostUpdate(const OMPClauseWithPostUpdate *C);
   2186 };
   2187 
   2188 void OMPClauseEnqueue::VisitOMPClauseWithPreInit(
   2189     const OMPClauseWithPreInit *C) {
   2190   Visitor->AddStmt(C->getPreInitStmt());
   2191 }
   2192 
   2193 void OMPClauseEnqueue::VisitOMPClauseWithPostUpdate(
   2194     const OMPClauseWithPostUpdate *C) {
   2195   VisitOMPClauseWithPreInit(C);
   2196   Visitor->AddStmt(C->getPostUpdateExpr());
   2197 }
   2198 
   2199 void OMPClauseEnqueue::VisitOMPIfClause(const OMPIfClause *C) {
   2200   VisitOMPClauseWithPreInit(C);
   2201   Visitor->AddStmt(C->getCondition());
   2202 }
   2203 
   2204 void OMPClauseEnqueue::VisitOMPFinalClause(const OMPFinalClause *C) {
   2205   Visitor->AddStmt(C->getCondition());
   2206 }
   2207 
   2208 void OMPClauseEnqueue::VisitOMPNumThreadsClause(const OMPNumThreadsClause *C) {
   2209   VisitOMPClauseWithPreInit(C);
   2210   Visitor->AddStmt(C->getNumThreads());
   2211 }
   2212 
   2213 void OMPClauseEnqueue::VisitOMPSafelenClause(const OMPSafelenClause *C) {
   2214   Visitor->AddStmt(C->getSafelen());
   2215 }
   2216 
   2217 void OMPClauseEnqueue::VisitOMPSimdlenClause(const OMPSimdlenClause *C) {
   2218   Visitor->AddStmt(C->getSimdlen());
   2219 }
   2220 
   2221 void OMPClauseEnqueue::VisitOMPSizesClause(const OMPSizesClause *C) {
   2222   for (auto E : C->getSizesRefs())
   2223     Visitor->AddStmt(E);
   2224 }
   2225 
   2226 void OMPClauseEnqueue::VisitOMPAllocatorClause(const OMPAllocatorClause *C) {
   2227   Visitor->AddStmt(C->getAllocator());
   2228 }
   2229 
   2230 void OMPClauseEnqueue::VisitOMPCollapseClause(const OMPCollapseClause *C) {
   2231   Visitor->AddStmt(C->getNumForLoops());
   2232 }
   2233 
   2234 void OMPClauseEnqueue::VisitOMPDefaultClause(const OMPDefaultClause *C) {}
   2235 
   2236 void OMPClauseEnqueue::VisitOMPProcBindClause(const OMPProcBindClause *C) {}
   2237 
   2238 void OMPClauseEnqueue::VisitOMPScheduleClause(const OMPScheduleClause *C) {
   2239   VisitOMPClauseWithPreInit(C);
   2240   Visitor->AddStmt(C->getChunkSize());
   2241 }
   2242 
   2243 void OMPClauseEnqueue::VisitOMPOrderedClause(const OMPOrderedClause *C) {
   2244   Visitor->AddStmt(C->getNumForLoops());
   2245 }
   2246 
   2247 void OMPClauseEnqueue::VisitOMPDetachClause(const OMPDetachClause *C) {
   2248   Visitor->AddStmt(C->getEventHandler());
   2249 }
   2250 
   2251 void OMPClauseEnqueue::VisitOMPNowaitClause(const OMPNowaitClause *) {}
   2252 
   2253 void OMPClauseEnqueue::VisitOMPUntiedClause(const OMPUntiedClause *) {}
   2254 
   2255 void OMPClauseEnqueue::VisitOMPMergeableClause(const OMPMergeableClause *) {}
   2256 
   2257 void OMPClauseEnqueue::VisitOMPReadClause(const OMPReadClause *) {}
   2258 
   2259 void OMPClauseEnqueue::VisitOMPWriteClause(const OMPWriteClause *) {}
   2260 
   2261 void OMPClauseEnqueue::VisitOMPUpdateClause(const OMPUpdateClause *) {}
   2262 
   2263 void OMPClauseEnqueue::VisitOMPCaptureClause(const OMPCaptureClause *) {}
   2264 
   2265 void OMPClauseEnqueue::VisitOMPSeqCstClause(const OMPSeqCstClause *) {}
   2266 
   2267 void OMPClauseEnqueue::VisitOMPAcqRelClause(const OMPAcqRelClause *) {}
   2268 
   2269 void OMPClauseEnqueue::VisitOMPAcquireClause(const OMPAcquireClause *) {}
   2270 
   2271 void OMPClauseEnqueue::VisitOMPReleaseClause(const OMPReleaseClause *) {}
   2272 
   2273 void OMPClauseEnqueue::VisitOMPRelaxedClause(const OMPRelaxedClause *) {}
   2274 
   2275 void OMPClauseEnqueue::VisitOMPThreadsClause(const OMPThreadsClause *) {}
   2276 
   2277 void OMPClauseEnqueue::VisitOMPSIMDClause(const OMPSIMDClause *) {}
   2278 
   2279 void OMPClauseEnqueue::VisitOMPNogroupClause(const OMPNogroupClause *) {}
   2280 
   2281 void OMPClauseEnqueue::VisitOMPInitClause(const OMPInitClause *C) {
   2282   VisitOMPClauseList(C);
   2283 }
   2284 
   2285 void OMPClauseEnqueue::VisitOMPUseClause(const OMPUseClause *C) {
   2286   Visitor->AddStmt(C->getInteropVar());
   2287 }
   2288 
   2289 void OMPClauseEnqueue::VisitOMPDestroyClause(const OMPDestroyClause *C) {
   2290   if (C->getInteropVar())
   2291     Visitor->AddStmt(C->getInteropVar());
   2292 }
   2293 
   2294 void OMPClauseEnqueue::VisitOMPNovariantsClause(const OMPNovariantsClause *C) {
   2295   Visitor->AddStmt(C->getCondition());
   2296 }
   2297 
   2298 void OMPClauseEnqueue::VisitOMPNocontextClause(const OMPNocontextClause *C) {
   2299   Visitor->AddStmt(C->getCondition());
   2300 }
   2301 
   2302 void OMPClauseEnqueue::VisitOMPFilterClause(const OMPFilterClause *C) {
   2303   VisitOMPClauseWithPreInit(C);
   2304   Visitor->AddStmt(C->getThreadID());
   2305 }
   2306 
   2307 void OMPClauseEnqueue::VisitOMPUnifiedAddressClause(
   2308     const OMPUnifiedAddressClause *) {}
   2309 
   2310 void OMPClauseEnqueue::VisitOMPUnifiedSharedMemoryClause(
   2311     const OMPUnifiedSharedMemoryClause *) {}
   2312 
   2313 void OMPClauseEnqueue::VisitOMPReverseOffloadClause(
   2314     const OMPReverseOffloadClause *) {}
   2315 
   2316 void OMPClauseEnqueue::VisitOMPDynamicAllocatorsClause(
   2317     const OMPDynamicAllocatorsClause *) {}
   2318 
   2319 void OMPClauseEnqueue::VisitOMPAtomicDefaultMemOrderClause(
   2320     const OMPAtomicDefaultMemOrderClause *) {}
   2321 
   2322 void OMPClauseEnqueue::VisitOMPDeviceClause(const OMPDeviceClause *C) {
   2323   Visitor->AddStmt(C->getDevice());
   2324 }
   2325 
   2326 void OMPClauseEnqueue::VisitOMPNumTeamsClause(const OMPNumTeamsClause *C) {
   2327   VisitOMPClauseWithPreInit(C);
   2328   Visitor->AddStmt(C->getNumTeams());
   2329 }
   2330 
   2331 void OMPClauseEnqueue::VisitOMPThreadLimitClause(
   2332     const OMPThreadLimitClause *C) {
   2333   VisitOMPClauseWithPreInit(C);
   2334   Visitor->AddStmt(C->getThreadLimit());
   2335 }
   2336 
   2337 void OMPClauseEnqueue::VisitOMPPriorityClause(const OMPPriorityClause *C) {
   2338   Visitor->AddStmt(C->getPriority());
   2339 }
   2340 
   2341 void OMPClauseEnqueue::VisitOMPGrainsizeClause(const OMPGrainsizeClause *C) {
   2342   Visitor->AddStmt(C->getGrainsize());
   2343 }
   2344 
   2345 void OMPClauseEnqueue::VisitOMPNumTasksClause(const OMPNumTasksClause *C) {
   2346   Visitor->AddStmt(C->getNumTasks());
   2347 }
   2348 
   2349 void OMPClauseEnqueue::VisitOMPHintClause(const OMPHintClause *C) {
   2350   Visitor->AddStmt(C->getHint());
   2351 }
   2352 
   2353 template <typename T> void OMPClauseEnqueue::VisitOMPClauseList(T *Node) {
   2354   for (const auto *I : Node->varlists()) {
   2355     Visitor->AddStmt(I);
   2356   }
   2357 }
   2358 
   2359 void OMPClauseEnqueue::VisitOMPInclusiveClause(const OMPInclusiveClause *C) {
   2360   VisitOMPClauseList(C);
   2361 }
   2362 void OMPClauseEnqueue::VisitOMPExclusiveClause(const OMPExclusiveClause *C) {
   2363   VisitOMPClauseList(C);
   2364 }
   2365 void OMPClauseEnqueue::VisitOMPAllocateClause(const OMPAllocateClause *C) {
   2366   VisitOMPClauseList(C);
   2367   Visitor->AddStmt(C->getAllocator());
   2368 }
   2369 void OMPClauseEnqueue::VisitOMPPrivateClause(const OMPPrivateClause *C) {
   2370   VisitOMPClauseList(C);
   2371   for (const auto *E : C->private_copies()) {
   2372     Visitor->AddStmt(E);
   2373   }
   2374 }
   2375 void OMPClauseEnqueue::VisitOMPFirstprivateClause(
   2376     const OMPFirstprivateClause *C) {
   2377   VisitOMPClauseList(C);
   2378   VisitOMPClauseWithPreInit(C);
   2379   for (const auto *E : C->private_copies()) {
   2380     Visitor->AddStmt(E);
   2381   }
   2382   for (const auto *E : C->inits()) {
   2383     Visitor->AddStmt(E);
   2384   }
   2385 }
   2386 void OMPClauseEnqueue::VisitOMPLastprivateClause(
   2387     const OMPLastprivateClause *C) {
   2388   VisitOMPClauseList(C);
   2389   VisitOMPClauseWithPostUpdate(C);
   2390   for (auto *E : C->private_copies()) {
   2391     Visitor->AddStmt(E);
   2392   }
   2393   for (auto *E : C->source_exprs()) {
   2394     Visitor->AddStmt(E);
   2395   }
   2396   for (auto *E : C->destination_exprs()) {
   2397     Visitor->AddStmt(E);
   2398   }
   2399   for (auto *E : C->assignment_ops()) {
   2400     Visitor->AddStmt(E);
   2401   }
   2402 }
   2403 void OMPClauseEnqueue::VisitOMPSharedClause(const OMPSharedClause *C) {
   2404   VisitOMPClauseList(C);
   2405 }
   2406 void OMPClauseEnqueue::VisitOMPReductionClause(const OMPReductionClause *C) {
   2407   VisitOMPClauseList(C);
   2408   VisitOMPClauseWithPostUpdate(C);
   2409   for (auto *E : C->privates()) {
   2410     Visitor->AddStmt(E);
   2411   }
   2412   for (auto *E : C->lhs_exprs()) {
   2413     Visitor->AddStmt(E);
   2414   }
   2415   for (auto *E : C->rhs_exprs()) {
   2416     Visitor->AddStmt(E);
   2417   }
   2418   for (auto *E : C->reduction_ops()) {
   2419     Visitor->AddStmt(E);
   2420   }
   2421   if (C->getModifier() == clang::OMPC_REDUCTION_inscan) {
   2422     for (auto *E : C->copy_ops()) {
   2423       Visitor->AddStmt(E);
   2424     }
   2425     for (auto *E : C->copy_array_temps()) {
   2426       Visitor->AddStmt(E);
   2427     }
   2428     for (auto *E : C->copy_array_elems()) {
   2429       Visitor->AddStmt(E);
   2430     }
   2431   }
   2432 }
   2433 void OMPClauseEnqueue::VisitOMPTaskReductionClause(
   2434     const OMPTaskReductionClause *C) {
   2435   VisitOMPClauseList(C);
   2436   VisitOMPClauseWithPostUpdate(C);
   2437   for (auto *E : C->privates()) {
   2438     Visitor->AddStmt(E);
   2439   }
   2440   for (auto *E : C->lhs_exprs()) {
   2441     Visitor->AddStmt(E);
   2442   }
   2443   for (auto *E : C->rhs_exprs()) {
   2444     Visitor->AddStmt(E);
   2445   }
   2446   for (auto *E : C->reduction_ops()) {
   2447     Visitor->AddStmt(E);
   2448   }
   2449 }
   2450 void OMPClauseEnqueue::VisitOMPInReductionClause(
   2451     const OMPInReductionClause *C) {
   2452   VisitOMPClauseList(C);
   2453   VisitOMPClauseWithPostUpdate(C);
   2454   for (auto *E : C->privates()) {
   2455     Visitor->AddStmt(E);
   2456   }
   2457   for (auto *E : C->lhs_exprs()) {
   2458     Visitor->AddStmt(E);
   2459   }
   2460   for (auto *E : C->rhs_exprs()) {
   2461     Visitor->AddStmt(E);
   2462   }
   2463   for (auto *E : C->reduction_ops()) {
   2464     Visitor->AddStmt(E);
   2465   }
   2466   for (auto *E : C->taskgroup_descriptors())
   2467     Visitor->AddStmt(E);
   2468 }
   2469 void OMPClauseEnqueue::VisitOMPLinearClause(const OMPLinearClause *C) {
   2470   VisitOMPClauseList(C);
   2471   VisitOMPClauseWithPostUpdate(C);
   2472   for (const auto *E : C->privates()) {
   2473     Visitor->AddStmt(E);
   2474   }
   2475   for (const auto *E : C->inits()) {
   2476     Visitor->AddStmt(E);
   2477   }
   2478   for (const auto *E : C->updates()) {
   2479     Visitor->AddStmt(E);
   2480   }
   2481   for (const auto *E : C->finals()) {
   2482     Visitor->AddStmt(E);
   2483   }
   2484   Visitor->AddStmt(C->getStep());
   2485   Visitor->AddStmt(C->getCalcStep());
   2486 }
   2487 void OMPClauseEnqueue::VisitOMPAlignedClause(const OMPAlignedClause *C) {
   2488   VisitOMPClauseList(C);
   2489   Visitor->AddStmt(C->getAlignment());
   2490 }
   2491 void OMPClauseEnqueue::VisitOMPCopyinClause(const OMPCopyinClause *C) {
   2492   VisitOMPClauseList(C);
   2493   for (auto *E : C->source_exprs()) {
   2494     Visitor->AddStmt(E);
   2495   }
   2496   for (auto *E : C->destination_exprs()) {
   2497     Visitor->AddStmt(E);
   2498   }
   2499   for (auto *E : C->assignment_ops()) {
   2500     Visitor->AddStmt(E);
   2501   }
   2502 }
   2503 void OMPClauseEnqueue::VisitOMPCopyprivateClause(
   2504     const OMPCopyprivateClause *C) {
   2505   VisitOMPClauseList(C);
   2506   for (auto *E : C->source_exprs()) {
   2507     Visitor->AddStmt(E);
   2508   }
   2509   for (auto *E : C->destination_exprs()) {
   2510     Visitor->AddStmt(E);
   2511   }
   2512   for (auto *E : C->assignment_ops()) {
   2513     Visitor->AddStmt(E);
   2514   }
   2515 }
   2516 void OMPClauseEnqueue::VisitOMPFlushClause(const OMPFlushClause *C) {
   2517   VisitOMPClauseList(C);
   2518 }
   2519 void OMPClauseEnqueue::VisitOMPDepobjClause(const OMPDepobjClause *C) {
   2520   Visitor->AddStmt(C->getDepobj());
   2521 }
   2522 void OMPClauseEnqueue::VisitOMPDependClause(const OMPDependClause *C) {
   2523   VisitOMPClauseList(C);
   2524 }
   2525 void OMPClauseEnqueue::VisitOMPMapClause(const OMPMapClause *C) {
   2526   VisitOMPClauseList(C);
   2527 }
   2528 void OMPClauseEnqueue::VisitOMPDistScheduleClause(
   2529     const OMPDistScheduleClause *C) {
   2530   VisitOMPClauseWithPreInit(C);
   2531   Visitor->AddStmt(C->getChunkSize());
   2532 }
   2533 void OMPClauseEnqueue::VisitOMPDefaultmapClause(
   2534     const OMPDefaultmapClause * /*C*/) {}
   2535 void OMPClauseEnqueue::VisitOMPToClause(const OMPToClause *C) {
   2536   VisitOMPClauseList(C);
   2537 }
   2538 void OMPClauseEnqueue::VisitOMPFromClause(const OMPFromClause *C) {
   2539   VisitOMPClauseList(C);
   2540 }
   2541 void OMPClauseEnqueue::VisitOMPUseDevicePtrClause(
   2542     const OMPUseDevicePtrClause *C) {
   2543   VisitOMPClauseList(C);
   2544 }
   2545 void OMPClauseEnqueue::VisitOMPUseDeviceAddrClause(
   2546     const OMPUseDeviceAddrClause *C) {
   2547   VisitOMPClauseList(C);
   2548 }
   2549 void OMPClauseEnqueue::VisitOMPIsDevicePtrClause(
   2550     const OMPIsDevicePtrClause *C) {
   2551   VisitOMPClauseList(C);
   2552 }
   2553 void OMPClauseEnqueue::VisitOMPNontemporalClause(
   2554     const OMPNontemporalClause *C) {
   2555   VisitOMPClauseList(C);
   2556   for (const auto *E : C->private_refs())
   2557     Visitor->AddStmt(E);
   2558 }
   2559 void OMPClauseEnqueue::VisitOMPOrderClause(const OMPOrderClause *C) {}
   2560 void OMPClauseEnqueue::VisitOMPUsesAllocatorsClause(
   2561     const OMPUsesAllocatorsClause *C) {
   2562   for (unsigned I = 0, E = C->getNumberOfAllocators(); I < E; ++I) {
   2563     const OMPUsesAllocatorsClause::Data &D = C->getAllocatorData(I);
   2564     Visitor->AddStmt(D.Allocator);
   2565     Visitor->AddStmt(D.AllocatorTraits);
   2566   }
   2567 }
   2568 void OMPClauseEnqueue::VisitOMPAffinityClause(const OMPAffinityClause *C) {
   2569   Visitor->AddStmt(C->getModifier());
   2570   for (const Expr *E : C->varlists())
   2571     Visitor->AddStmt(E);
   2572 }
   2573 } // namespace
   2574 
   2575 void EnqueueVisitor::EnqueueChildren(const OMPClause *S) {
   2576   unsigned size = WL.size();
   2577   OMPClauseEnqueue Visitor(this);
   2578   Visitor.Visit(S);
   2579   if (size == WL.size())
   2580     return;
   2581   // Now reverse the entries we just added.  This will match the DFS
   2582   // ordering performed by the worklist.
   2583   VisitorWorkList::iterator I = WL.begin() + size, E = WL.end();
   2584   std::reverse(I, E);
   2585 }
   2586 void EnqueueVisitor::VisitAddrLabelExpr(const AddrLabelExpr *E) {
   2587   WL.push_back(LabelRefVisit(E->getLabel(), E->getLabelLoc(), Parent));
   2588 }
   2589 void EnqueueVisitor::VisitBlockExpr(const BlockExpr *B) {
   2590   AddDecl(B->getBlockDecl());
   2591 }
   2592 void EnqueueVisitor::VisitCompoundLiteralExpr(const CompoundLiteralExpr *E) {
   2593   EnqueueChildren(E);
   2594   AddTypeLoc(E->getTypeSourceInfo());
   2595 }
   2596 void EnqueueVisitor::VisitCompoundStmt(const CompoundStmt *S) {
   2597   for (auto &I : llvm::reverse(S->body()))
   2598     AddStmt(I);
   2599 }
   2600 void EnqueueVisitor::VisitMSDependentExistsStmt(
   2601     const MSDependentExistsStmt *S) {
   2602   AddStmt(S->getSubStmt());
   2603   AddDeclarationNameInfo(S);
   2604   if (NestedNameSpecifierLoc QualifierLoc = S->getQualifierLoc())
   2605     AddNestedNameSpecifierLoc(QualifierLoc);
   2606 }
   2607 
   2608 void EnqueueVisitor::VisitCXXDependentScopeMemberExpr(
   2609     const CXXDependentScopeMemberExpr *E) {
   2610   if (E->hasExplicitTemplateArgs())
   2611     AddExplicitTemplateArgs(E->getTemplateArgs(), E->getNumTemplateArgs());
   2612   AddDeclarationNameInfo(E);
   2613   if (NestedNameSpecifierLoc QualifierLoc = E->getQualifierLoc())
   2614     AddNestedNameSpecifierLoc(QualifierLoc);
   2615   if (!E->isImplicitAccess())
   2616     AddStmt(E->getBase());
   2617 }
   2618 void EnqueueVisitor::VisitCXXNewExpr(const CXXNewExpr *E) {
   2619   // Enqueue the initializer , if any.
   2620   AddStmt(E->getInitializer());
   2621   // Enqueue the array size, if any.
   2622   AddStmt(E->getArraySize().getValueOr(nullptr));
   2623   // Enqueue the allocated type.
   2624   AddTypeLoc(E->getAllocatedTypeSourceInfo());
   2625   // Enqueue the placement arguments.
   2626   for (unsigned I = E->getNumPlacementArgs(); I > 0; --I)
   2627     AddStmt(E->getPlacementArg(I - 1));
   2628 }
   2629 void EnqueueVisitor::VisitCXXOperatorCallExpr(const CXXOperatorCallExpr *CE) {
   2630   for (unsigned I = CE->getNumArgs(); I > 1 /* Yes, this is 1 */; --I)
   2631     AddStmt(CE->getArg(I - 1));
   2632   AddStmt(CE->getCallee());
   2633   AddStmt(CE->getArg(0));
   2634 }
   2635 void EnqueueVisitor::VisitCXXPseudoDestructorExpr(
   2636     const CXXPseudoDestructorExpr *E) {
   2637   // Visit the name of the type being destroyed.
   2638   AddTypeLoc(E->getDestroyedTypeInfo());
   2639   // Visit the scope type that looks disturbingly like the nested-name-specifier
   2640   // but isn't.
   2641   AddTypeLoc(E->getScopeTypeInfo());
   2642   // Visit the nested-name-specifier.
   2643   if (NestedNameSpecifierLoc QualifierLoc = E->getQualifierLoc())
   2644     AddNestedNameSpecifierLoc(QualifierLoc);
   2645   // Visit base expression.
   2646   AddStmt(E->getBase());
   2647 }
   2648 void EnqueueVisitor::VisitCXXScalarValueInitExpr(
   2649     const CXXScalarValueInitExpr *E) {
   2650   AddTypeLoc(E->getTypeSourceInfo());
   2651 }
   2652 void EnqueueVisitor::VisitCXXTemporaryObjectExpr(
   2653     const CXXTemporaryObjectExpr *E) {
   2654   EnqueueChildren(E);
   2655   AddTypeLoc(E->getTypeSourceInfo());
   2656 }
   2657 void EnqueueVisitor::VisitCXXTypeidExpr(const CXXTypeidExpr *E) {
   2658   EnqueueChildren(E);
   2659   if (E->isTypeOperand())
   2660     AddTypeLoc(E->getTypeOperandSourceInfo());
   2661 }
   2662 
   2663 void EnqueueVisitor::VisitCXXUnresolvedConstructExpr(
   2664     const CXXUnresolvedConstructExpr *E) {
   2665   EnqueueChildren(E);
   2666   AddTypeLoc(E->getTypeSourceInfo());
   2667 }
   2668 void EnqueueVisitor::VisitCXXUuidofExpr(const CXXUuidofExpr *E) {
   2669   EnqueueChildren(E);
   2670   if (E->isTypeOperand())
   2671     AddTypeLoc(E->getTypeOperandSourceInfo());
   2672 }
   2673 
   2674 void EnqueueVisitor::VisitCXXCatchStmt(const CXXCatchStmt *S) {
   2675   EnqueueChildren(S);
   2676   AddDecl(S->getExceptionDecl());
   2677 }
   2678 
   2679 void EnqueueVisitor::VisitCXXForRangeStmt(const CXXForRangeStmt *S) {
   2680   AddStmt(S->getBody());
   2681   AddStmt(S->getRangeInit());
   2682   AddDecl(S->getLoopVariable());
   2683 }
   2684 
   2685 void EnqueueVisitor::VisitDeclRefExpr(const DeclRefExpr *DR) {
   2686   if (DR->hasExplicitTemplateArgs())
   2687     AddExplicitTemplateArgs(DR->getTemplateArgs(), DR->getNumTemplateArgs());
   2688   WL.push_back(DeclRefExprParts(DR, Parent));
   2689 }
   2690 void EnqueueVisitor::VisitDependentScopeDeclRefExpr(
   2691     const DependentScopeDeclRefExpr *E) {
   2692   if (E->hasExplicitTemplateArgs())
   2693     AddExplicitTemplateArgs(E->getTemplateArgs(), E->getNumTemplateArgs());
   2694   AddDeclarationNameInfo(E);
   2695   AddNestedNameSpecifierLoc(E->getQualifierLoc());
   2696 }
   2697 void EnqueueVisitor::VisitDeclStmt(const DeclStmt *S) {
   2698   unsigned size = WL.size();
   2699   bool isFirst = true;
   2700   for (const auto *D : S->decls()) {
   2701     AddDecl(D, isFirst);
   2702     isFirst = false;
   2703   }
   2704   if (size == WL.size())
   2705     return;
   2706   // Now reverse the entries we just added.  This will match the DFS
   2707   // ordering performed by the worklist.
   2708   VisitorWorkList::iterator I = WL.begin() + size, E = WL.end();
   2709   std::reverse(I, E);
   2710 }
   2711 void EnqueueVisitor::VisitDesignatedInitExpr(const DesignatedInitExpr *E) {
   2712   AddStmt(E->getInit());
   2713   for (const DesignatedInitExpr::Designator &D :
   2714        llvm::reverse(E->designators())) {
   2715     if (D.isFieldDesignator()) {
   2716       if (FieldDecl *Field = D.getField())
   2717         AddMemberRef(Field, D.getFieldLoc());
   2718       continue;
   2719     }
   2720     if (D.isArrayDesignator()) {
   2721       AddStmt(E->getArrayIndex(D));
   2722       continue;
   2723     }
   2724     assert(D.isArrayRangeDesignator() && "Unknown designator kind");
   2725     AddStmt(E->getArrayRangeEnd(D));
   2726     AddStmt(E->getArrayRangeStart(D));
   2727   }
   2728 }
   2729 void EnqueueVisitor::VisitExplicitCastExpr(const ExplicitCastExpr *E) {
   2730   EnqueueChildren(E);
   2731   AddTypeLoc(E->getTypeInfoAsWritten());
   2732 }
   2733 void EnqueueVisitor::VisitForStmt(const ForStmt *FS) {
   2734   AddStmt(FS->getBody());
   2735   AddStmt(FS->getInc());
   2736   AddStmt(FS->getCond());
   2737   AddDecl(FS->getConditionVariable());
   2738   AddStmt(FS->getInit());
   2739 }
   2740 void EnqueueVisitor::VisitGotoStmt(const GotoStmt *GS) {
   2741   WL.push_back(LabelRefVisit(GS->getLabel(), GS->getLabelLoc(), Parent));
   2742 }
   2743 void EnqueueVisitor::VisitIfStmt(const IfStmt *If) {
   2744   AddStmt(If->getElse());
   2745   AddStmt(If->getThen());
   2746   AddStmt(If->getCond());
   2747   AddStmt(If->getInit());
   2748   AddDecl(If->getConditionVariable());
   2749 }
   2750 void EnqueueVisitor::VisitInitListExpr(const InitListExpr *IE) {
   2751   // We care about the syntactic form of the initializer list, only.
   2752   if (InitListExpr *Syntactic = IE->getSyntacticForm())
   2753     IE = Syntactic;
   2754   EnqueueChildren(IE);
   2755 }
   2756 void EnqueueVisitor::VisitMemberExpr(const MemberExpr *M) {
   2757   WL.push_back(MemberExprParts(M, Parent));
   2758 
   2759   // If the base of the member access expression is an implicit 'this', don't
   2760   // visit it.
   2761   // FIXME: If we ever want to show these implicit accesses, this will be
   2762   // unfortunate. However, clang_getCursor() relies on this behavior.
   2763   if (M->isImplicitAccess())
   2764     return;
   2765 
   2766   // Ignore base anonymous struct/union fields, otherwise they will shadow the
   2767   // real field that we are interested in.
   2768   if (auto *SubME = dyn_cast<MemberExpr>(M->getBase())) {
   2769     if (auto *FD = dyn_cast_or_null<FieldDecl>(SubME->getMemberDecl())) {
   2770       if (FD->isAnonymousStructOrUnion()) {
   2771         AddStmt(SubME->getBase());
   2772         return;
   2773       }
   2774     }
   2775   }
   2776 
   2777   AddStmt(M->getBase());
   2778 }
   2779 void EnqueueVisitor::VisitObjCEncodeExpr(const ObjCEncodeExpr *E) {
   2780   AddTypeLoc(E->getEncodedTypeSourceInfo());
   2781 }
   2782 void EnqueueVisitor::VisitObjCMessageExpr(const ObjCMessageExpr *M) {
   2783   EnqueueChildren(M);
   2784   AddTypeLoc(M->getClassReceiverTypeInfo());
   2785 }
   2786 void EnqueueVisitor::VisitOffsetOfExpr(const OffsetOfExpr *E) {
   2787   // Visit the components of the offsetof expression.
   2788   for (unsigned N = E->getNumComponents(), I = N; I > 0; --I) {
   2789     const OffsetOfNode &Node = E->getComponent(I - 1);
   2790     switch (Node.getKind()) {
   2791     case OffsetOfNode::Array:
   2792       AddStmt(E->getIndexExpr(Node.getArrayExprIndex()));
   2793       break;
   2794     case OffsetOfNode::Field:
   2795       AddMemberRef(Node.getField(), Node.getSourceRange().getEnd());
   2796       break;
   2797     case OffsetOfNode::Identifier:
   2798     case OffsetOfNode::Base:
   2799       continue;
   2800     }
   2801   }
   2802   // Visit the type into which we're computing the offset.
   2803   AddTypeLoc(E->getTypeSourceInfo());
   2804 }
   2805 void EnqueueVisitor::VisitOverloadExpr(const OverloadExpr *E) {
   2806   if (E->hasExplicitTemplateArgs())
   2807     AddExplicitTemplateArgs(E->getTemplateArgs(), E->getNumTemplateArgs());
   2808   WL.push_back(OverloadExprParts(E, Parent));
   2809 }
   2810 void EnqueueVisitor::VisitUnaryExprOrTypeTraitExpr(
   2811     const UnaryExprOrTypeTraitExpr *E) {
   2812   EnqueueChildren(E);
   2813   if (E->isArgumentType())
   2814     AddTypeLoc(E->getArgumentTypeInfo());
   2815 }
   2816 void EnqueueVisitor::VisitStmt(const Stmt *S) { EnqueueChildren(S); }
   2817 void EnqueueVisitor::VisitSwitchStmt(const SwitchStmt *S) {
   2818   AddStmt(S->getBody());
   2819   AddStmt(S->getCond());
   2820   AddDecl(S->getConditionVariable());
   2821 }
   2822 
   2823 void EnqueueVisitor::VisitWhileStmt(const WhileStmt *W) {
   2824   AddStmt(W->getBody());
   2825   AddStmt(W->getCond());
   2826   AddDecl(W->getConditionVariable());
   2827 }
   2828 
   2829 void EnqueueVisitor::VisitTypeTraitExpr(const TypeTraitExpr *E) {
   2830   for (unsigned I = E->getNumArgs(); I > 0; --I)
   2831     AddTypeLoc(E->getArg(I - 1));
   2832 }
   2833 
   2834 void EnqueueVisitor::VisitArrayTypeTraitExpr(const ArrayTypeTraitExpr *E) {
   2835   AddTypeLoc(E->getQueriedTypeSourceInfo());
   2836 }
   2837 
   2838 void EnqueueVisitor::VisitExpressionTraitExpr(const ExpressionTraitExpr *E) {
   2839   EnqueueChildren(E);
   2840 }
   2841 
   2842 void EnqueueVisitor::VisitUnresolvedMemberExpr(const UnresolvedMemberExpr *U) {
   2843   VisitOverloadExpr(U);
   2844   if (!U->isImplicitAccess())
   2845     AddStmt(U->getBase());
   2846 }
   2847 void EnqueueVisitor::VisitVAArgExpr(const VAArgExpr *E) {
   2848   AddStmt(E->getSubExpr());
   2849   AddTypeLoc(E->getWrittenTypeInfo());
   2850 }
   2851 void EnqueueVisitor::VisitSizeOfPackExpr(const SizeOfPackExpr *E) {
   2852   WL.push_back(SizeOfPackExprParts(E, Parent));
   2853 }
   2854 void EnqueueVisitor::VisitOpaqueValueExpr(const OpaqueValueExpr *E) {
   2855   // If the opaque value has a source expression, just transparently
   2856   // visit that.  This is useful for (e.g.) pseudo-object expressions.
   2857   if (Expr *SourceExpr = E->getSourceExpr())
   2858     return Visit(SourceExpr);
   2859 }
   2860 void EnqueueVisitor::VisitLambdaExpr(const LambdaExpr *E) {
   2861   AddStmt(E->getBody());
   2862   WL.push_back(LambdaExprParts(E, Parent));
   2863 }
   2864 void EnqueueVisitor::VisitPseudoObjectExpr(const PseudoObjectExpr *E) {
   2865   // Treat the expression like its syntactic form.
   2866   Visit(E->getSyntacticForm());
   2867 }
   2868 
   2869 void EnqueueVisitor::VisitOMPExecutableDirective(
   2870     const OMPExecutableDirective *D) {
   2871   EnqueueChildren(D);
   2872   for (ArrayRef<OMPClause *>::iterator I = D->clauses().begin(),
   2873                                        E = D->clauses().end();
   2874        I != E; ++I)
   2875     EnqueueChildren(*I);
   2876 }
   2877 
   2878 void EnqueueVisitor::VisitOMPLoopBasedDirective(
   2879     const OMPLoopBasedDirective *D) {
   2880   VisitOMPExecutableDirective(D);
   2881 }
   2882 
   2883 void EnqueueVisitor::VisitOMPLoopDirective(const OMPLoopDirective *D) {
   2884   VisitOMPLoopBasedDirective(D);
   2885 }
   2886 
   2887 void EnqueueVisitor::VisitOMPParallelDirective(const OMPParallelDirective *D) {
   2888   VisitOMPExecutableDirective(D);
   2889 }
   2890 
   2891 void EnqueueVisitor::VisitOMPSimdDirective(const OMPSimdDirective *D) {
   2892   VisitOMPLoopDirective(D);
   2893 }
   2894 
   2895 void EnqueueVisitor::VisitOMPTileDirective(const OMPTileDirective *D) {
   2896   VisitOMPLoopBasedDirective(D);
   2897 }
   2898 
   2899 void EnqueueVisitor::VisitOMPForDirective(const OMPForDirective *D) {
   2900   VisitOMPLoopDirective(D);
   2901 }
   2902 
   2903 void EnqueueVisitor::VisitOMPForSimdDirective(const OMPForSimdDirective *D) {
   2904   VisitOMPLoopDirective(D);
   2905 }
   2906 
   2907 void EnqueueVisitor::VisitOMPSectionsDirective(const OMPSectionsDirective *D) {
   2908   VisitOMPExecutableDirective(D);
   2909 }
   2910 
   2911 void EnqueueVisitor::VisitOMPSectionDirective(const OMPSectionDirective *D) {
   2912   VisitOMPExecutableDirective(D);
   2913 }
   2914 
   2915 void EnqueueVisitor::VisitOMPSingleDirective(const OMPSingleDirective *D) {
   2916   VisitOMPExecutableDirective(D);
   2917 }
   2918 
   2919 void EnqueueVisitor::VisitOMPMasterDirective(const OMPMasterDirective *D) {
   2920   VisitOMPExecutableDirective(D);
   2921 }
   2922 
   2923 void EnqueueVisitor::VisitOMPCriticalDirective(const OMPCriticalDirective *D) {
   2924   VisitOMPExecutableDirective(D);
   2925   AddDeclarationNameInfo(D);
   2926 }
   2927 
   2928 void EnqueueVisitor::VisitOMPParallelForDirective(
   2929     const OMPParallelForDirective *D) {
   2930   VisitOMPLoopDirective(D);
   2931 }
   2932 
   2933 void EnqueueVisitor::VisitOMPParallelForSimdDirective(
   2934     const OMPParallelForSimdDirective *D) {
   2935   VisitOMPLoopDirective(D);
   2936 }
   2937 
   2938 void EnqueueVisitor::VisitOMPParallelMasterDirective(
   2939     const OMPParallelMasterDirective *D) {
   2940   VisitOMPExecutableDirective(D);
   2941 }
   2942 
   2943 void EnqueueVisitor::VisitOMPParallelSectionsDirective(
   2944     const OMPParallelSectionsDirective *D) {
   2945   VisitOMPExecutableDirective(D);
   2946 }
   2947 
   2948 void EnqueueVisitor::VisitOMPTaskDirective(const OMPTaskDirective *D) {
   2949   VisitOMPExecutableDirective(D);
   2950 }
   2951 
   2952 void EnqueueVisitor::VisitOMPTaskyieldDirective(
   2953     const OMPTaskyieldDirective *D) {
   2954   VisitOMPExecutableDirective(D);
   2955 }
   2956 
   2957 void EnqueueVisitor::VisitOMPBarrierDirective(const OMPBarrierDirective *D) {
   2958   VisitOMPExecutableDirective(D);
   2959 }
   2960 
   2961 void EnqueueVisitor::VisitOMPTaskwaitDirective(const OMPTaskwaitDirective *D) {
   2962   VisitOMPExecutableDirective(D);
   2963 }
   2964 
   2965 void EnqueueVisitor::VisitOMPTaskgroupDirective(
   2966     const OMPTaskgroupDirective *D) {
   2967   VisitOMPExecutableDirective(D);
   2968   if (const Expr *E = D->getReductionRef())
   2969     VisitStmt(E);
   2970 }
   2971 
   2972 void EnqueueVisitor::VisitOMPFlushDirective(const OMPFlushDirective *D) {
   2973   VisitOMPExecutableDirective(D);
   2974 }
   2975 
   2976 void EnqueueVisitor::VisitOMPDepobjDirective(const OMPDepobjDirective *D) {
   2977   VisitOMPExecutableDirective(D);
   2978 }
   2979 
   2980 void EnqueueVisitor::VisitOMPScanDirective(const OMPScanDirective *D) {
   2981   VisitOMPExecutableDirective(D);
   2982 }
   2983 
   2984 void EnqueueVisitor::VisitOMPOrderedDirective(const OMPOrderedDirective *D) {
   2985   VisitOMPExecutableDirective(D);
   2986 }
   2987 
   2988 void EnqueueVisitor::VisitOMPAtomicDirective(const OMPAtomicDirective *D) {
   2989   VisitOMPExecutableDirective(D);
   2990 }
   2991 
   2992 void EnqueueVisitor::VisitOMPTargetDirective(const OMPTargetDirective *D) {
   2993   VisitOMPExecutableDirective(D);
   2994 }
   2995 
   2996 void EnqueueVisitor::VisitOMPTargetDataDirective(
   2997     const OMPTargetDataDirective *D) {
   2998   VisitOMPExecutableDirective(D);
   2999 }
   3000 
   3001 void EnqueueVisitor::VisitOMPTargetEnterDataDirective(
   3002     const OMPTargetEnterDataDirective *D) {
   3003   VisitOMPExecutableDirective(D);
   3004 }
   3005 
   3006 void EnqueueVisitor::VisitOMPTargetExitDataDirective(
   3007     const OMPTargetExitDataDirective *D) {
   3008   VisitOMPExecutableDirective(D);
   3009 }
   3010 
   3011 void EnqueueVisitor::VisitOMPTargetParallelDirective(
   3012     const OMPTargetParallelDirective *D) {
   3013   VisitOMPExecutableDirective(D);
   3014 }
   3015 
   3016 void EnqueueVisitor::VisitOMPTargetParallelForDirective(
   3017     const OMPTargetParallelForDirective *D) {
   3018   VisitOMPLoopDirective(D);
   3019 }
   3020 
   3021 void EnqueueVisitor::VisitOMPTeamsDirective(const OMPTeamsDirective *D) {
   3022   VisitOMPExecutableDirective(D);
   3023 }
   3024 
   3025 void EnqueueVisitor::VisitOMPCancellationPointDirective(
   3026     const OMPCancellationPointDirective *D) {
   3027   VisitOMPExecutableDirective(D);
   3028 }
   3029 
   3030 void EnqueueVisitor::VisitOMPCancelDirective(const OMPCancelDirective *D) {
   3031   VisitOMPExecutableDirective(D);
   3032 }
   3033 
   3034 void EnqueueVisitor::VisitOMPTaskLoopDirective(const OMPTaskLoopDirective *D) {
   3035   VisitOMPLoopDirective(D);
   3036 }
   3037 
   3038 void EnqueueVisitor::VisitOMPTaskLoopSimdDirective(
   3039     const OMPTaskLoopSimdDirective *D) {
   3040   VisitOMPLoopDirective(D);
   3041 }
   3042 
   3043 void EnqueueVisitor::VisitOMPMasterTaskLoopDirective(
   3044     const OMPMasterTaskLoopDirective *D) {
   3045   VisitOMPLoopDirective(D);
   3046 }
   3047 
   3048 void EnqueueVisitor::VisitOMPMasterTaskLoopSimdDirective(
   3049     const OMPMasterTaskLoopSimdDirective *D) {
   3050   VisitOMPLoopDirective(D);
   3051 }
   3052 
   3053 void EnqueueVisitor::VisitOMPParallelMasterTaskLoopDirective(
   3054     const OMPParallelMasterTaskLoopDirective *D) {
   3055   VisitOMPLoopDirective(D);
   3056 }
   3057 
   3058 void EnqueueVisitor::VisitOMPParallelMasterTaskLoopSimdDirective(
   3059     const OMPParallelMasterTaskLoopSimdDirective *D) {
   3060   VisitOMPLoopDirective(D);
   3061 }
   3062 
   3063 void EnqueueVisitor::VisitOMPDistributeDirective(
   3064     const OMPDistributeDirective *D) {
   3065   VisitOMPLoopDirective(D);
   3066 }
   3067 
   3068 void EnqueueVisitor::VisitOMPDistributeParallelForDirective(
   3069     const OMPDistributeParallelForDirective *D) {
   3070   VisitOMPLoopDirective(D);
   3071 }
   3072 
   3073 void EnqueueVisitor::VisitOMPDistributeParallelForSimdDirective(
   3074     const OMPDistributeParallelForSimdDirective *D) {
   3075   VisitOMPLoopDirective(D);
   3076 }
   3077 
   3078 void EnqueueVisitor::VisitOMPDistributeSimdDirective(
   3079     const OMPDistributeSimdDirective *D) {
   3080   VisitOMPLoopDirective(D);
   3081 }
   3082 
   3083 void EnqueueVisitor::VisitOMPTargetParallelForSimdDirective(
   3084     const OMPTargetParallelForSimdDirective *D) {
   3085   VisitOMPLoopDirective(D);
   3086 }
   3087 
   3088 void EnqueueVisitor::VisitOMPTargetSimdDirective(
   3089     const OMPTargetSimdDirective *D) {
   3090   VisitOMPLoopDirective(D);
   3091 }
   3092 
   3093 void EnqueueVisitor::VisitOMPTeamsDistributeDirective(
   3094     const OMPTeamsDistributeDirective *D) {
   3095   VisitOMPLoopDirective(D);
   3096 }
   3097 
   3098 void EnqueueVisitor::VisitOMPTeamsDistributeSimdDirective(
   3099     const OMPTeamsDistributeSimdDirective *D) {
   3100   VisitOMPLoopDirective(D);
   3101 }
   3102 
   3103 void EnqueueVisitor::VisitOMPTeamsDistributeParallelForSimdDirective(
   3104     const OMPTeamsDistributeParallelForSimdDirective *D) {
   3105   VisitOMPLoopDirective(D);
   3106 }
   3107 
   3108 void EnqueueVisitor::VisitOMPTeamsDistributeParallelForDirective(
   3109     const OMPTeamsDistributeParallelForDirective *D) {
   3110   VisitOMPLoopDirective(D);
   3111 }
   3112 
   3113 void EnqueueVisitor::VisitOMPTargetTeamsDirective(
   3114     const OMPTargetTeamsDirective *D) {
   3115   VisitOMPExecutableDirective(D);
   3116 }
   3117 
   3118 void EnqueueVisitor::VisitOMPTargetTeamsDistributeDirective(
   3119     const OMPTargetTeamsDistributeDirective *D) {
   3120   VisitOMPLoopDirective(D);
   3121 }
   3122 
   3123 void EnqueueVisitor::VisitOMPTargetTeamsDistributeParallelForDirective(
   3124     const OMPTargetTeamsDistributeParallelForDirective *D) {
   3125   VisitOMPLoopDirective(D);
   3126 }
   3127 
   3128 void EnqueueVisitor::VisitOMPTargetTeamsDistributeParallelForSimdDirective(
   3129     const OMPTargetTeamsDistributeParallelForSimdDirective *D) {
   3130   VisitOMPLoopDirective(D);
   3131 }
   3132 
   3133 void EnqueueVisitor::VisitOMPTargetTeamsDistributeSimdDirective(
   3134     const OMPTargetTeamsDistributeSimdDirective *D) {
   3135   VisitOMPLoopDirective(D);
   3136 }
   3137 
   3138 void CursorVisitor::EnqueueWorkList(VisitorWorkList &WL, const Stmt *S) {
   3139   EnqueueVisitor(WL, MakeCXCursor(S, StmtParent, TU, RegionOfInterest))
   3140       .Visit(S);
   3141 }
   3142 
   3143 bool CursorVisitor::IsInRegionOfInterest(CXCursor C) {
   3144   if (RegionOfInterest.isValid()) {
   3145     SourceRange Range = getRawCursorExtent(C);
   3146     if (Range.isInvalid() || CompareRegionOfInterest(Range))
   3147       return false;
   3148   }
   3149   return true;
   3150 }
   3151 
   3152 bool CursorVisitor::RunVisitorWorkList(VisitorWorkList &WL) {
   3153   while (!WL.empty()) {
   3154     // Dequeue the worklist item.
   3155     VisitorJob LI = WL.pop_back_val();
   3156 
   3157     // Set the Parent field, then back to its old value once we're done.
   3158     SetParentRAII SetParent(Parent, StmtParent, LI.getParent());
   3159 
   3160     switch (LI.getKind()) {
   3161     case VisitorJob::DeclVisitKind: {
   3162       const Decl *D = cast<DeclVisit>(&LI)->get();
   3163       if (!D)
   3164         continue;
   3165 
   3166       // For now, perform default visitation for Decls.
   3167       if (Visit(MakeCXCursor(D, TU, RegionOfInterest,
   3168                              cast<DeclVisit>(&LI)->isFirst())))
   3169         return true;
   3170 
   3171       continue;
   3172     }
   3173     case VisitorJob::ExplicitTemplateArgsVisitKind: {
   3174       for (const TemplateArgumentLoc &Arg :
   3175            *cast<ExplicitTemplateArgsVisit>(&LI)) {
   3176         if (VisitTemplateArgumentLoc(Arg))
   3177           return true;
   3178       }
   3179       continue;
   3180     }
   3181     case VisitorJob::TypeLocVisitKind: {
   3182       // Perform default visitation for TypeLocs.
   3183       if (Visit(cast<TypeLocVisit>(&LI)->get()))
   3184         return true;
   3185       continue;
   3186     }
   3187     case VisitorJob::LabelRefVisitKind: {
   3188       const LabelDecl *LS = cast<LabelRefVisit>(&LI)->get();
   3189       if (LabelStmt *stmt = LS->getStmt()) {
   3190         if (Visit(MakeCursorLabelRef(stmt, cast<LabelRefVisit>(&LI)->getLoc(),
   3191                                      TU))) {
   3192           return true;
   3193         }
   3194       }
   3195       continue;
   3196     }
   3197 
   3198     case VisitorJob::NestedNameSpecifierLocVisitKind: {
   3199       NestedNameSpecifierLocVisit *V = cast<NestedNameSpecifierLocVisit>(&LI);
   3200       if (VisitNestedNameSpecifierLoc(V->get()))
   3201         return true;
   3202       continue;
   3203     }
   3204 
   3205     case VisitorJob::DeclarationNameInfoVisitKind: {
   3206       if (VisitDeclarationNameInfo(cast<DeclarationNameInfoVisit>(&LI)->get()))
   3207         return true;
   3208       continue;
   3209     }
   3210     case VisitorJob::MemberRefVisitKind: {
   3211       MemberRefVisit *V = cast<MemberRefVisit>(&LI);
   3212       if (Visit(MakeCursorMemberRef(V->get(), V->getLoc(), TU)))
   3213         return true;
   3214       continue;
   3215     }
   3216     case VisitorJob::StmtVisitKind: {
   3217       const Stmt *S = cast<StmtVisit>(&LI)->get();
   3218       if (!S)
   3219         continue;
   3220 
   3221       // Update the current cursor.
   3222       CXCursor Cursor = MakeCXCursor(S, StmtParent, TU, RegionOfInterest);
   3223       if (!IsInRegionOfInterest(Cursor))
   3224         continue;
   3225       switch (Visitor(Cursor, Parent, ClientData)) {
   3226       case CXChildVisit_Break:
   3227         return true;
   3228       case CXChildVisit_Continue:
   3229         break;
   3230       case CXChildVisit_Recurse:
   3231         if (PostChildrenVisitor)
   3232           WL.push_back(PostChildrenVisit(nullptr, Cursor));
   3233         EnqueueWorkList(WL, S);
   3234         break;
   3235       }
   3236       continue;
   3237     }
   3238     case VisitorJob::MemberExprPartsKind: {
   3239       // Handle the other pieces in the MemberExpr besides the base.
   3240       const MemberExpr *M = cast<MemberExprParts>(&LI)->get();
   3241 
   3242       // Visit the nested-name-specifier
   3243       if (NestedNameSpecifierLoc QualifierLoc = M->getQualifierLoc())
   3244         if (VisitNestedNameSpecifierLoc(QualifierLoc))
   3245           return true;
   3246 
   3247       // Visit the declaration name.
   3248       if (VisitDeclarationNameInfo(M->getMemberNameInfo()))
   3249         return true;
   3250 
   3251       // Visit the explicitly-specified template arguments, if any.
   3252       if (M->hasExplicitTemplateArgs()) {
   3253         for (const TemplateArgumentLoc *Arg = M->getTemplateArgs(),
   3254                                        *ArgEnd = Arg + M->getNumTemplateArgs();
   3255              Arg != ArgEnd; ++Arg) {
   3256           if (VisitTemplateArgumentLoc(*Arg))
   3257             return true;
   3258         }
   3259       }
   3260       continue;
   3261     }
   3262     case VisitorJob::DeclRefExprPartsKind: {
   3263       const DeclRefExpr *DR = cast<DeclRefExprParts>(&LI)->get();
   3264       // Visit nested-name-specifier, if present.
   3265       if (NestedNameSpecifierLoc QualifierLoc = DR->getQualifierLoc())
   3266         if (VisitNestedNameSpecifierLoc(QualifierLoc))
   3267           return true;
   3268       // Visit declaration name.
   3269       if (VisitDeclarationNameInfo(DR->getNameInfo()))
   3270         return true;
   3271       continue;
   3272     }
   3273     case VisitorJob::OverloadExprPartsKind: {
   3274       const OverloadExpr *O = cast<OverloadExprParts>(&LI)->get();
   3275       // Visit the nested-name-specifier.
   3276       if (NestedNameSpecifierLoc QualifierLoc = O->getQualifierLoc())
   3277         if (VisitNestedNameSpecifierLoc(QualifierLoc))
   3278           return true;
   3279       // Visit the declaration name.
   3280       if (VisitDeclarationNameInfo(O->getNameInfo()))
   3281         return true;
   3282       // Visit the overloaded declaration reference.
   3283       if (Visit(MakeCursorOverloadedDeclRef(O, TU)))
   3284         return true;
   3285       continue;
   3286     }
   3287     case VisitorJob::SizeOfPackExprPartsKind: {
   3288       const SizeOfPackExpr *E = cast<SizeOfPackExprParts>(&LI)->get();
   3289       NamedDecl *Pack = E->getPack();
   3290       if (isa<TemplateTypeParmDecl>(Pack)) {
   3291         if (Visit(MakeCursorTypeRef(cast<TemplateTypeParmDecl>(Pack),
   3292                                     E->getPackLoc(), TU)))
   3293           return true;
   3294 
   3295         continue;
   3296       }
   3297 
   3298       if (isa<TemplateTemplateParmDecl>(Pack)) {
   3299         if (Visit(MakeCursorTemplateRef(cast<TemplateTemplateParmDecl>(Pack),
   3300                                         E->getPackLoc(), TU)))
   3301           return true;
   3302 
   3303         continue;
   3304       }
   3305 
   3306       // Non-type template parameter packs and function parameter packs are
   3307       // treated like DeclRefExpr cursors.
   3308       continue;
   3309     }
   3310 
   3311     case VisitorJob::LambdaExprPartsKind: {
   3312       // Visit non-init captures.
   3313       const LambdaExpr *E = cast<LambdaExprParts>(&LI)->get();
   3314       for (LambdaExpr::capture_iterator C = E->explicit_capture_begin(),
   3315                                         CEnd = E->explicit_capture_end();
   3316            C != CEnd; ++C) {
   3317         if (!C->capturesVariable())
   3318           continue;
   3319 
   3320         if (Visit(MakeCursorVariableRef(C->getCapturedVar(), C->getLocation(),
   3321                                         TU)))
   3322           return true;
   3323       }
   3324       // Visit init captures
   3325       for (auto InitExpr : E->capture_inits()) {
   3326         if (InitExpr && Visit(InitExpr))
   3327           return true;
   3328       }
   3329 
   3330       TypeLoc TL = E->getCallOperator()->getTypeSourceInfo()->getTypeLoc();
   3331       // Visit parameters and return type, if present.
   3332       if (FunctionTypeLoc Proto = TL.getAs<FunctionProtoTypeLoc>()) {
   3333         if (E->hasExplicitParameters()) {
   3334           // Visit parameters.
   3335           for (unsigned I = 0, N = Proto.getNumParams(); I != N; ++I)
   3336             if (Visit(MakeCXCursor(Proto.getParam(I), TU)))
   3337               return true;
   3338         }
   3339         if (E->hasExplicitResultType()) {
   3340           // Visit result type.
   3341           if (Visit(Proto.getReturnLoc()))
   3342             return true;
   3343         }
   3344       }
   3345       break;
   3346     }
   3347 
   3348     case VisitorJob::PostChildrenVisitKind:
   3349       if (PostChildrenVisitor(Parent, ClientData))
   3350         return true;
   3351       break;
   3352     }
   3353   }
   3354   return false;
   3355 }
   3356 
   3357 bool CursorVisitor::Visit(const Stmt *S) {
   3358   VisitorWorkList *WL = nullptr;
   3359   if (!WorkListFreeList.empty()) {
   3360     WL = WorkListFreeList.back();
   3361     WL->clear();
   3362     WorkListFreeList.pop_back();
   3363   } else {
   3364     WL = new VisitorWorkList();
   3365     WorkListCache.push_back(WL);
   3366   }
   3367   EnqueueWorkList(*WL, S);
   3368   bool result = RunVisitorWorkList(*WL);
   3369   WorkListFreeList.push_back(WL);
   3370   return result;
   3371 }
   3372 
   3373 namespace {
   3374 typedef SmallVector<SourceRange, 4> RefNamePieces;
   3375 RefNamePieces buildPieces(unsigned NameFlags, bool IsMemberRefExpr,
   3376                           const DeclarationNameInfo &NI, SourceRange QLoc,
   3377                           const SourceRange *TemplateArgsLoc = nullptr) {
   3378   const bool WantQualifier = NameFlags & CXNameRange_WantQualifier;
   3379   const bool WantTemplateArgs = NameFlags & CXNameRange_WantTemplateArgs;
   3380   const bool WantSinglePiece = NameFlags & CXNameRange_WantSinglePiece;
   3381 
   3382   const DeclarationName::NameKind Kind = NI.getName().getNameKind();
   3383 
   3384   RefNamePieces Pieces;
   3385 
   3386   if (WantQualifier && QLoc.isValid())
   3387     Pieces.push_back(QLoc);
   3388 
   3389   if (Kind != DeclarationName::CXXOperatorName || IsMemberRefExpr)
   3390     Pieces.push_back(NI.getLoc());
   3391 
   3392   if (WantTemplateArgs && TemplateArgsLoc && TemplateArgsLoc->isValid())
   3393     Pieces.push_back(*TemplateArgsLoc);
   3394 
   3395   if (Kind == DeclarationName::CXXOperatorName) {
   3396     Pieces.push_back(NI.getInfo().getCXXOperatorNameBeginLoc());
   3397     Pieces.push_back(NI.getInfo().getCXXOperatorNameEndLoc());
   3398   }
   3399 
   3400   if (WantSinglePiece) {
   3401     SourceRange R(Pieces.front().getBegin(), Pieces.back().getEnd());
   3402     Pieces.clear();
   3403     Pieces.push_back(R);
   3404   }
   3405 
   3406   return Pieces;
   3407 }
   3408 } // namespace
   3409 
   3410 //===----------------------------------------------------------------------===//
   3411 // Misc. API hooks.
   3412 //===----------------------------------------------------------------------===//
   3413 
   3414 namespace {
   3415 struct RegisterFatalErrorHandler {
   3416   RegisterFatalErrorHandler() {
   3417     clang_install_aborting_llvm_fatal_error_handler();
   3418   }
   3419 };
   3420 } // namespace
   3421 
   3422 static llvm::ManagedStatic<RegisterFatalErrorHandler>
   3423     RegisterFatalErrorHandlerOnce;
   3424 
   3425 CXIndex clang_createIndex(int excludeDeclarationsFromPCH,
   3426                           int displayDiagnostics) {
   3427   // We use crash recovery to make some of our APIs more reliable, implicitly
   3428   // enable it.
   3429   if (!getenv("LIBCLANG_DISABLE_CRASH_RECOVERY"))
   3430     llvm::CrashRecoveryContext::Enable();
   3431 
   3432   // Look through the managed static to trigger construction of the managed
   3433   // static which registers our fatal error handler. This ensures it is only
   3434   // registered once.
   3435   (void)*RegisterFatalErrorHandlerOnce;
   3436 
   3437   // Initialize targets for clang module support.
   3438   llvm::InitializeAllTargets();
   3439   llvm::InitializeAllTargetMCs();
   3440   llvm::InitializeAllAsmPrinters();
   3441   llvm::InitializeAllAsmParsers();
   3442 
   3443   CIndexer *CIdxr = new CIndexer();
   3444 
   3445   if (excludeDeclarationsFromPCH)
   3446     CIdxr->setOnlyLocalDecls();
   3447   if (displayDiagnostics)
   3448     CIdxr->setDisplayDiagnostics();
   3449 
   3450   if (getenv("LIBCLANG_BGPRIO_INDEX"))
   3451     CIdxr->setCXGlobalOptFlags(CIdxr->getCXGlobalOptFlags() |
   3452                                CXGlobalOpt_ThreadBackgroundPriorityForIndexing);
   3453   if (getenv("LIBCLANG_BGPRIO_EDIT"))
   3454     CIdxr->setCXGlobalOptFlags(CIdxr->getCXGlobalOptFlags() |
   3455                                CXGlobalOpt_ThreadBackgroundPriorityForEditing);
   3456 
   3457   return CIdxr;
   3458 }
   3459 
   3460 void clang_disposeIndex(CXIndex CIdx) {
   3461   if (CIdx)
   3462     delete static_cast<CIndexer *>(CIdx);
   3463 }
   3464 
   3465 void clang_CXIndex_setGlobalOptions(CXIndex CIdx, unsigned options) {
   3466   if (CIdx)
   3467     static_cast<CIndexer *>(CIdx)->setCXGlobalOptFlags(options);
   3468 }
   3469 
   3470 unsigned clang_CXIndex_getGlobalOptions(CXIndex CIdx) {
   3471   if (CIdx)
   3472     return static_cast<CIndexer *>(CIdx)->getCXGlobalOptFlags();
   3473   return 0;
   3474 }
   3475 
   3476 void clang_CXIndex_setInvocationEmissionPathOption(CXIndex CIdx,
   3477                                                    const char *Path) {
   3478   if (CIdx)
   3479     static_cast<CIndexer *>(CIdx)->setInvocationEmissionPath(Path ? Path : "");
   3480 }
   3481 
   3482 void clang_toggleCrashRecovery(unsigned isEnabled) {
   3483   if (isEnabled)
   3484     llvm::CrashRecoveryContext::Enable();
   3485   else
   3486     llvm::CrashRecoveryContext::Disable();
   3487 }
   3488 
   3489 CXTranslationUnit clang_createTranslationUnit(CXIndex CIdx,
   3490                                               const char *ast_filename) {
   3491   CXTranslationUnit TU;
   3492   enum CXErrorCode Result =
   3493       clang_createTranslationUnit2(CIdx, ast_filename, &TU);
   3494   (void)Result;
   3495   assert((TU && Result == CXError_Success) ||
   3496          (!TU && Result != CXError_Success));
   3497   return TU;
   3498 }
   3499 
   3500 enum CXErrorCode clang_createTranslationUnit2(CXIndex CIdx,
   3501                                               const char *ast_filename,
   3502                                               CXTranslationUnit *out_TU) {
   3503   if (out_TU)
   3504     *out_TU = nullptr;
   3505 
   3506   if (!CIdx || !ast_filename || !out_TU)
   3507     return CXError_InvalidArguments;
   3508 
   3509   LOG_FUNC_SECTION { *Log << ast_filename; }
   3510 
   3511   CIndexer *CXXIdx = static_cast<CIndexer *>(CIdx);
   3512   FileSystemOptions FileSystemOpts;
   3513 
   3514   IntrusiveRefCntPtr<DiagnosticsEngine> Diags =
   3515       CompilerInstance::createDiagnostics(new DiagnosticOptions());
   3516   std::unique_ptr<ASTUnit> AU = ASTUnit::LoadFromASTFile(
   3517       ast_filename, CXXIdx->getPCHContainerOperations()->getRawReader(),
   3518       ASTUnit::LoadEverything, Diags, FileSystemOpts, /*UseDebugInfo=*/false,
   3519       CXXIdx->getOnlyLocalDecls(), CaptureDiagsKind::All,
   3520       /*AllowASTWithCompilerErrors=*/true,
   3521       /*UserFilesAreVolatile=*/true);
   3522   *out_TU = MakeCXTranslationUnit(CXXIdx, std::move(AU));
   3523   return *out_TU ? CXError_Success : CXError_Failure;
   3524 }
   3525 
   3526 unsigned clang_defaultEditingTranslationUnitOptions() {
   3527   return CXTranslationUnit_PrecompiledPreamble |
   3528          CXTranslationUnit_CacheCompletionResults;
   3529 }
   3530 
   3531 CXTranslationUnit clang_createTranslationUnitFromSourceFile(
   3532     CXIndex CIdx, const char *source_filename, int num_command_line_args,
   3533     const char *const *command_line_args, unsigned num_unsaved_files,
   3534     struct CXUnsavedFile *unsaved_files) {
   3535   unsigned Options = CXTranslationUnit_DetailedPreprocessingRecord;
   3536   return clang_parseTranslationUnit(CIdx, source_filename, command_line_args,
   3537                                     num_command_line_args, unsaved_files,
   3538                                     num_unsaved_files, Options);
   3539 }
   3540 
   3541 static CXErrorCode
   3542 clang_parseTranslationUnit_Impl(CXIndex CIdx, const char *source_filename,
   3543                                 const char *const *command_line_args,
   3544                                 int num_command_line_args,
   3545                                 ArrayRef<CXUnsavedFile> unsaved_files,
   3546                                 unsigned options, CXTranslationUnit *out_TU) {
   3547   // Set up the initial return values.
   3548   if (out_TU)
   3549     *out_TU = nullptr;
   3550 
   3551   // Check arguments.
   3552   if (!CIdx || !out_TU)
   3553     return CXError_InvalidArguments;
   3554 
   3555   CIndexer *CXXIdx = static_cast<CIndexer *>(CIdx);
   3556 
   3557   if (CXXIdx->isOptEnabled(CXGlobalOpt_ThreadBackgroundPriorityForIndexing))
   3558     setThreadBackgroundPriority();
   3559 
   3560   bool PrecompilePreamble = options & CXTranslationUnit_PrecompiledPreamble;
   3561   bool CreatePreambleOnFirstParse =
   3562       options & CXTranslationUnit_CreatePreambleOnFirstParse;
   3563   // FIXME: Add a flag for modules.
   3564   TranslationUnitKind TUKind = (options & (CXTranslationUnit_Incomplete |
   3565                                            CXTranslationUnit_SingleFileParse))
   3566                                    ? TU_Prefix
   3567                                    : TU_Complete;
   3568   bool CacheCodeCompletionResults =
   3569       options & CXTranslationUnit_CacheCompletionResults;
   3570   bool IncludeBriefCommentsInCodeCompletion =
   3571       options & CXTranslationUnit_IncludeBriefCommentsInCodeCompletion;
   3572   bool SingleFileParse = options & CXTranslationUnit_SingleFileParse;
   3573   bool ForSerialization = options & CXTranslationUnit_ForSerialization;
   3574   bool RetainExcludedCB =
   3575       options & CXTranslationUnit_RetainExcludedConditionalBlocks;
   3576   SkipFunctionBodiesScope SkipFunctionBodies = SkipFunctionBodiesScope::None;
   3577   if (options & CXTranslationUnit_SkipFunctionBodies) {
   3578     SkipFunctionBodies =
   3579         (options & CXTranslationUnit_LimitSkipFunctionBodiesToPreamble)
   3580             ? SkipFunctionBodiesScope::Preamble
   3581             : SkipFunctionBodiesScope::PreambleAndMainFile;
   3582   }
   3583 
   3584   // Configure the diagnostics.
   3585   IntrusiveRefCntPtr<DiagnosticsEngine> Diags(
   3586       CompilerInstance::createDiagnostics(new DiagnosticOptions));
   3587 
   3588   if (options & CXTranslationUnit_KeepGoing)
   3589     Diags->setFatalsAsError(true);
   3590 
   3591   CaptureDiagsKind CaptureDiagnostics = CaptureDiagsKind::All;
   3592   if (options & CXTranslationUnit_IgnoreNonErrorsFromIncludedFiles)
   3593     CaptureDiagnostics = CaptureDiagsKind::AllWithoutNonErrorsFromIncludes;
   3594 
   3595   // Recover resources if we crash before exiting this function.
   3596   llvm::CrashRecoveryContextCleanupRegistrar<
   3597       DiagnosticsEngine,
   3598       llvm::CrashRecoveryContextReleaseRefCleanup<DiagnosticsEngine>>
   3599       DiagCleanup(Diags.get());
   3600 
   3601   std::unique_ptr<std::vector<ASTUnit::RemappedFile>> RemappedFiles(
   3602       new std::vector<ASTUnit::RemappedFile>());
   3603 
   3604   // Recover resources if we crash before exiting this function.
   3605   llvm::CrashRecoveryContextCleanupRegistrar<std::vector<ASTUnit::RemappedFile>>
   3606       RemappedCleanup(RemappedFiles.get());
   3607 
   3608   for (auto &UF : unsaved_files) {
   3609     std::unique_ptr<llvm::MemoryBuffer> MB =
   3610         llvm::MemoryBuffer::getMemBufferCopy(getContents(UF), UF.Filename);
   3611     RemappedFiles->push_back(std::make_pair(UF.Filename, MB.release()));
   3612   }
   3613 
   3614   std::unique_ptr<std::vector<const char *>> Args(
   3615       new std::vector<const char *>());
   3616 
   3617   // Recover resources if we crash before exiting this method.
   3618   llvm::CrashRecoveryContextCleanupRegistrar<std::vector<const char *>>
   3619       ArgsCleanup(Args.get());
   3620 
   3621   // Since the Clang C library is primarily used by batch tools dealing with
   3622   // (often very broken) source code, where spell-checking can have a
   3623   // significant negative impact on performance (particularly when
   3624   // precompiled headers are involved), we disable it by default.
   3625   // Only do this if we haven't found a spell-checking-related argument.
   3626   bool FoundSpellCheckingArgument = false;
   3627   for (int I = 0; I != num_command_line_args; ++I) {
   3628     if (strcmp(command_line_args[I], "-fno-spell-checking") == 0 ||
   3629         strcmp(command_line_args[I], "-fspell-checking") == 0) {
   3630       FoundSpellCheckingArgument = true;
   3631       break;
   3632     }
   3633   }
   3634   Args->insert(Args->end(), command_line_args,
   3635                command_line_args + num_command_line_args);
   3636 
   3637   if (!FoundSpellCheckingArgument)
   3638     Args->insert(Args->begin() + 1, "-fno-spell-checking");
   3639 
   3640   // The 'source_filename' argument is optional.  If the caller does not
   3641   // specify it then it is assumed that the source file is specified
   3642   // in the actual argument list.
   3643   // Put the source file after command_line_args otherwise if '-x' flag is
   3644   // present it will be unused.
   3645   if (source_filename)
   3646     Args->push_back(source_filename);
   3647 
   3648   // Do we need the detailed preprocessing record?
   3649   if (options & CXTranslationUnit_DetailedPreprocessingRecord) {
   3650     Args->push_back("-Xclang");
   3651     Args->push_back("-detailed-preprocessing-record");
   3652   }
   3653 
   3654   // Suppress any editor placeholder diagnostics.
   3655   Args->push_back("-fallow-editor-placeholders");
   3656 
   3657   unsigned NumErrors = Diags->getClient()->getNumErrors();
   3658   std::unique_ptr<ASTUnit> ErrUnit;
   3659   // Unless the user specified that they want the preamble on the first parse
   3660   // set it up to be created on the first reparse. This makes the first parse
   3661   // faster, trading for a slower (first) reparse.
   3662   unsigned PrecompilePreambleAfterNParses =
   3663       !PrecompilePreamble ? 0 : 2 - CreatePreambleOnFirstParse;
   3664 
   3665   LibclangInvocationReporter InvocationReporter(
   3666       *CXXIdx, LibclangInvocationReporter::OperationKind::ParseOperation,
   3667       options, llvm::makeArrayRef(*Args), /*InvocationArgs=*/None,
   3668       unsaved_files);
   3669   std::unique_ptr<ASTUnit> Unit(ASTUnit::LoadFromCommandLine(
   3670       Args->data(), Args->data() + Args->size(),
   3671       CXXIdx->getPCHContainerOperations(), Diags,
   3672       CXXIdx->getClangResourcesPath(), CXXIdx->getOnlyLocalDecls(),
   3673       CaptureDiagnostics, *RemappedFiles.get(),
   3674       /*RemappedFilesKeepOriginalName=*/true, PrecompilePreambleAfterNParses,
   3675       TUKind, CacheCodeCompletionResults, IncludeBriefCommentsInCodeCompletion,
   3676       /*AllowPCHWithCompilerErrors=*/true, SkipFunctionBodies, SingleFileParse,
   3677       /*UserFilesAreVolatile=*/true, ForSerialization, RetainExcludedCB,
   3678       CXXIdx->getPCHContainerOperations()->getRawReader().getFormat(),
   3679       &ErrUnit));
   3680 
   3681   // Early failures in LoadFromCommandLine may return with ErrUnit unset.
   3682   if (!Unit && !ErrUnit)
   3683     return CXError_ASTReadError;
   3684 
   3685   if (NumErrors != Diags->getClient()->getNumErrors()) {
   3686     // Make sure to check that 'Unit' is non-NULL.
   3687     if (CXXIdx->getDisplayDiagnostics())
   3688       printDiagsToStderr(Unit ? Unit.get() : ErrUnit.get());
   3689   }
   3690 
   3691   if (isASTReadError(Unit ? Unit.get() : ErrUnit.get()))
   3692     return CXError_ASTReadError;
   3693 
   3694   *out_TU = MakeCXTranslationUnit(CXXIdx, std::move(Unit));
   3695   if (CXTranslationUnitImpl *TU = *out_TU) {
   3696     TU->ParsingOptions = options;
   3697     TU->Arguments.reserve(Args->size());
   3698     for (const char *Arg : *Args)
   3699       TU->Arguments.push_back(Arg);
   3700     return CXError_Success;
   3701   }
   3702   return CXError_Failure;
   3703 }
   3704 
   3705 CXTranslationUnit
   3706 clang_parseTranslationUnit(CXIndex CIdx, const char *source_filename,
   3707                            const char *const *command_line_args,
   3708                            int num_command_line_args,
   3709                            struct CXUnsavedFile *unsaved_files,
   3710                            unsigned num_unsaved_files, unsigned options) {
   3711   CXTranslationUnit TU;
   3712   enum CXErrorCode Result = clang_parseTranslationUnit2(
   3713       CIdx, source_filename, command_line_args, num_command_line_args,
   3714       unsaved_files, num_unsaved_files, options, &TU);
   3715   (void)Result;
   3716   assert((TU && Result == CXError_Success) ||
   3717          (!TU && Result != CXError_Success));
   3718   return TU;
   3719 }
   3720 
   3721 enum CXErrorCode clang_parseTranslationUnit2(
   3722     CXIndex CIdx, const char *source_filename,
   3723     const char *const *command_line_args, int num_command_line_args,
   3724     struct CXUnsavedFile *unsaved_files, unsigned num_unsaved_files,
   3725     unsigned options, CXTranslationUnit *out_TU) {
   3726   noteBottomOfStack();
   3727   SmallVector<const char *, 4> Args;
   3728   Args.push_back("clang");
   3729   Args.append(command_line_args, command_line_args + num_command_line_args);
   3730   return clang_parseTranslationUnit2FullArgv(
   3731       CIdx, source_filename, Args.data(), Args.size(), unsaved_files,
   3732       num_unsaved_files, options, out_TU);
   3733 }
   3734 
   3735 enum CXErrorCode clang_parseTranslationUnit2FullArgv(
   3736     CXIndex CIdx, const char *source_filename,
   3737     const char *const *command_line_args, int num_command_line_args,
   3738     struct CXUnsavedFile *unsaved_files, unsigned num_unsaved_files,
   3739     unsigned options, CXTranslationUnit *out_TU) {
   3740   LOG_FUNC_SECTION {
   3741     *Log << source_filename << ": ";
   3742     for (int i = 0; i != num_command_line_args; ++i)
   3743       *Log << command_line_args[i] << " ";
   3744   }
   3745 
   3746   if (num_unsaved_files && !unsaved_files)
   3747     return CXError_InvalidArguments;
   3748 
   3749   CXErrorCode result = CXError_Failure;
   3750   auto ParseTranslationUnitImpl = [=, &result] {
   3751     noteBottomOfStack();
   3752     result = clang_parseTranslationUnit_Impl(
   3753         CIdx, source_filename, command_line_args, num_command_line_args,
   3754         llvm::makeArrayRef(unsaved_files, num_unsaved_files), options, out_TU);
   3755   };
   3756 
   3757   llvm::CrashRecoveryContext CRC;
   3758 
   3759   if (!RunSafely(CRC, ParseTranslationUnitImpl)) {
   3760     fprintf(stderr, "libclang: crash detected during parsing: {\n");
   3761     fprintf(stderr, "  'source_filename' : '%s'\n", source_filename);
   3762     fprintf(stderr, "  'command_line_args' : [");
   3763     for (int i = 0; i != num_command_line_args; ++i) {
   3764       if (i)
   3765         fprintf(stderr, ", ");
   3766       fprintf(stderr, "'%s'", command_line_args[i]);
   3767     }
   3768     fprintf(stderr, "],\n");
   3769     fprintf(stderr, "  'unsaved_files' : [");
   3770     for (unsigned i = 0; i != num_unsaved_files; ++i) {
   3771       if (i)
   3772         fprintf(stderr, ", ");
   3773       fprintf(stderr, "('%s', '...', %ld)", unsaved_files[i].Filename,
   3774               unsaved_files[i].Length);
   3775     }
   3776     fprintf(stderr, "],\n");
   3777     fprintf(stderr, "  'options' : %d,\n", options);
   3778     fprintf(stderr, "}\n");
   3779 
   3780     return CXError_Crashed;
   3781   } else if (getenv("LIBCLANG_RESOURCE_USAGE")) {
   3782     if (CXTranslationUnit *TU = out_TU)
   3783       PrintLibclangResourceUsage(*TU);
   3784   }
   3785 
   3786   return result;
   3787 }
   3788 
   3789 CXString clang_Type_getObjCEncoding(CXType CT) {
   3790   CXTranslationUnit tu = static_cast<CXTranslationUnit>(CT.data[1]);
   3791   ASTContext &Ctx = getASTUnit(tu)->getASTContext();
   3792   std::string encoding;
   3793   Ctx.getObjCEncodingForType(QualType::getFromOpaquePtr(CT.data[0]), encoding);
   3794 
   3795   return cxstring::createDup(encoding);
   3796 }
   3797 
   3798 static const IdentifierInfo *getMacroIdentifier(CXCursor C) {
   3799   if (C.kind == CXCursor_MacroDefinition) {
   3800     if (const MacroDefinitionRecord *MDR = getCursorMacroDefinition(C))
   3801       return MDR->getName();
   3802   } else if (C.kind == CXCursor_MacroExpansion) {
   3803     MacroExpansionCursor ME = getCursorMacroExpansion(C);
   3804     return ME.getName();
   3805   }
   3806   return nullptr;
   3807 }
   3808 
   3809 unsigned clang_Cursor_isMacroFunctionLike(CXCursor C) {
   3810   const IdentifierInfo *II = getMacroIdentifier(C);
   3811   if (!II) {
   3812     return false;
   3813   }
   3814   ASTUnit *ASTU = getCursorASTUnit(C);
   3815   Preprocessor &PP = ASTU->getPreprocessor();
   3816   if (const MacroInfo *MI = PP.getMacroInfo(II))
   3817     return MI->isFunctionLike();
   3818   return false;
   3819 }
   3820 
   3821 unsigned clang_Cursor_isMacroBuiltin(CXCursor C) {
   3822   const IdentifierInfo *II = getMacroIdentifier(C);
   3823   if (!II) {
   3824     return false;
   3825   }
   3826   ASTUnit *ASTU = getCursorASTUnit(C);
   3827   Preprocessor &PP = ASTU->getPreprocessor();
   3828   if (const MacroInfo *MI = PP.getMacroInfo(II))
   3829     return MI->isBuiltinMacro();
   3830   return false;
   3831 }
   3832 
   3833 unsigned clang_Cursor_isFunctionInlined(CXCursor C) {
   3834   const Decl *D = getCursorDecl(C);
   3835   const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D);
   3836   if (!FD) {
   3837     return false;
   3838   }
   3839   return FD->isInlined();
   3840 }
   3841 
   3842 static StringLiteral *getCFSTR_value(CallExpr *callExpr) {
   3843   if (callExpr->getNumArgs() != 1) {
   3844     return nullptr;
   3845   }
   3846 
   3847   StringLiteral *S = nullptr;
   3848   auto *arg = callExpr->getArg(0);
   3849   if (arg->getStmtClass() == Stmt::ImplicitCastExprClass) {
   3850     ImplicitCastExpr *I = static_cast<ImplicitCastExpr *>(arg);
   3851     auto *subExpr = I->getSubExprAsWritten();
   3852 
   3853     if (subExpr->getStmtClass() != Stmt::StringLiteralClass) {
   3854       return nullptr;
   3855     }
   3856 
   3857     S = static_cast<StringLiteral *>(I->getSubExprAsWritten());
   3858   } else if (arg->getStmtClass() == Stmt::StringLiteralClass) {
   3859     S = static_cast<StringLiteral *>(callExpr->getArg(0));
   3860   } else {
   3861     return nullptr;
   3862   }
   3863   return S;
   3864 }
   3865 
   3866 struct ExprEvalResult {
   3867   CXEvalResultKind EvalType;
   3868   union {
   3869     unsigned long long unsignedVal;
   3870     long long intVal;
   3871     double floatVal;
   3872     char *stringVal;
   3873   } EvalData;
   3874   bool IsUnsignedInt;
   3875   ~ExprEvalResult() {
   3876     if (EvalType != CXEval_UnExposed && EvalType != CXEval_Float &&
   3877         EvalType != CXEval_Int) {
   3878       delete[] EvalData.stringVal;
   3879     }
   3880   }
   3881 };
   3882 
   3883 void clang_EvalResult_dispose(CXEvalResult E) {
   3884   delete static_cast<ExprEvalResult *>(E);
   3885 }
   3886 
   3887 CXEvalResultKind clang_EvalResult_getKind(CXEvalResult E) {
   3888   if (!E) {
   3889     return CXEval_UnExposed;
   3890   }
   3891   return ((ExprEvalResult *)E)->EvalType;
   3892 }
   3893 
   3894 int clang_EvalResult_getAsInt(CXEvalResult E) {
   3895   return clang_EvalResult_getAsLongLong(E);
   3896 }
   3897 
   3898 long long clang_EvalResult_getAsLongLong(CXEvalResult E) {
   3899   if (!E) {
   3900     return 0;
   3901   }
   3902   ExprEvalResult *Result = (ExprEvalResult *)E;
   3903   if (Result->IsUnsignedInt)
   3904     return Result->EvalData.unsignedVal;
   3905   return Result->EvalData.intVal;
   3906 }
   3907 
   3908 unsigned clang_EvalResult_isUnsignedInt(CXEvalResult E) {
   3909   return ((ExprEvalResult *)E)->IsUnsignedInt;
   3910 }
   3911 
   3912 unsigned long long clang_EvalResult_getAsUnsigned(CXEvalResult E) {
   3913   if (!E) {
   3914     return 0;
   3915   }
   3916 
   3917   ExprEvalResult *Result = (ExprEvalResult *)E;
   3918   if (Result->IsUnsignedInt)
   3919     return Result->EvalData.unsignedVal;
   3920   return Result->EvalData.intVal;
   3921 }
   3922 
   3923 double clang_EvalResult_getAsDouble(CXEvalResult E) {
   3924   if (!E) {
   3925     return 0;
   3926   }
   3927   return ((ExprEvalResult *)E)->EvalData.floatVal;
   3928 }
   3929 
   3930 const char *clang_EvalResult_getAsStr(CXEvalResult E) {
   3931   if (!E) {
   3932     return nullptr;
   3933   }
   3934   return ((ExprEvalResult *)E)->EvalData.stringVal;
   3935 }
   3936 
   3937 static const ExprEvalResult *evaluateExpr(Expr *expr, CXCursor C) {
   3938   Expr::EvalResult ER;
   3939   ASTContext &ctx = getCursorContext(C);
   3940   if (!expr)
   3941     return nullptr;
   3942 
   3943   expr = expr->IgnoreParens();
   3944   if (expr->isValueDependent())
   3945     return nullptr;
   3946   if (!expr->EvaluateAsRValue(ER, ctx))
   3947     return nullptr;
   3948 
   3949   QualType rettype;
   3950   CallExpr *callExpr;
   3951   auto result = std::make_unique<ExprEvalResult>();
   3952   result->EvalType = CXEval_UnExposed;
   3953   result->IsUnsignedInt = false;
   3954 
   3955   if (ER.Val.isInt()) {
   3956     result->EvalType = CXEval_Int;
   3957 
   3958     auto &val = ER.Val.getInt();
   3959     if (val.isUnsigned()) {
   3960       result->IsUnsignedInt = true;
   3961       result->EvalData.unsignedVal = val.getZExtValue();
   3962     } else {
   3963       result->EvalData.intVal = val.getExtValue();
   3964     }
   3965 
   3966     return result.release();
   3967   }
   3968 
   3969   if (ER.Val.isFloat()) {
   3970     llvm::SmallVector<char, 100> Buffer;
   3971     ER.Val.getFloat().toString(Buffer);
   3972     std::string floatStr(Buffer.data(), Buffer.size());
   3973     result->EvalType = CXEval_Float;
   3974     bool ignored;
   3975     llvm::APFloat apFloat = ER.Val.getFloat();
   3976     apFloat.convert(llvm::APFloat::IEEEdouble(),
   3977                     llvm::APFloat::rmNearestTiesToEven, &ignored);
   3978     result->EvalData.floatVal = apFloat.convertToDouble();
   3979     return result.release();
   3980   }
   3981 
   3982   if (expr->getStmtClass() == Stmt::ImplicitCastExprClass) {
   3983     const ImplicitCastExpr *I = dyn_cast<ImplicitCastExpr>(expr);
   3984     auto *subExpr = I->getSubExprAsWritten();
   3985     if (subExpr->getStmtClass() == Stmt::StringLiteralClass ||
   3986         subExpr->getStmtClass() == Stmt::ObjCStringLiteralClass) {
   3987       const StringLiteral *StrE = nullptr;
   3988       const ObjCStringLiteral *ObjCExpr;
   3989       ObjCExpr = dyn_cast<ObjCStringLiteral>(subExpr);
   3990 
   3991       if (ObjCExpr) {
   3992         StrE = ObjCExpr->getString();
   3993         result->EvalType = CXEval_ObjCStrLiteral;
   3994       } else {
   3995         StrE = cast<StringLiteral>(I->getSubExprAsWritten());
   3996         result->EvalType = CXEval_StrLiteral;
   3997       }
   3998 
   3999       std::string strRef(StrE->getString().str());
   4000       result->EvalData.stringVal = new char[strRef.size() + 1];
   4001       strncpy((char *)result->EvalData.stringVal, strRef.c_str(),
   4002               strRef.size());
   4003       result->EvalData.stringVal[strRef.size()] = '\0';
   4004       return result.release();
   4005     }
   4006   } else if (expr->getStmtClass() == Stmt::ObjCStringLiteralClass ||
   4007              expr->getStmtClass() == Stmt::StringLiteralClass) {
   4008     const StringLiteral *StrE = nullptr;
   4009     const ObjCStringLiteral *ObjCExpr;
   4010     ObjCExpr = dyn_cast<ObjCStringLiteral>(expr);
   4011 
   4012     if (ObjCExpr) {
   4013       StrE = ObjCExpr->getString();
   4014       result->EvalType = CXEval_ObjCStrLiteral;
   4015     } else {
   4016       StrE = cast<StringLiteral>(expr);
   4017       result->EvalType = CXEval_StrLiteral;
   4018     }
   4019 
   4020     std::string strRef(StrE->getString().str());
   4021     result->EvalData.stringVal = new char[strRef.size() + 1];
   4022     strncpy((char *)result->EvalData.stringVal, strRef.c_str(), strRef.size());
   4023     result->EvalData.stringVal[strRef.size()] = '\0';
   4024     return result.release();
   4025   }
   4026 
   4027   if (expr->getStmtClass() == Stmt::CStyleCastExprClass) {
   4028     CStyleCastExpr *CC = static_cast<CStyleCastExpr *>(expr);
   4029 
   4030     rettype = CC->getType();
   4031     if (rettype.getAsString() == "CFStringRef" &&
   4032         CC->getSubExpr()->getStmtClass() == Stmt::CallExprClass) {
   4033 
   4034       callExpr = static_cast<CallExpr *>(CC->getSubExpr());
   4035       StringLiteral *S = getCFSTR_value(callExpr);
   4036       if (S) {
   4037         std::string strLiteral(S->getString().str());
   4038         result->EvalType = CXEval_CFStr;
   4039 
   4040         result->EvalData.stringVal = new char[strLiteral.size() + 1];
   4041         strncpy((char *)result->EvalData.stringVal, strLiteral.c_str(),
   4042                 strLiteral.size());
   4043         result->EvalData.stringVal[strLiteral.size()] = '\0';
   4044         return result.release();
   4045       }
   4046     }
   4047 
   4048   } else if (expr->getStmtClass() == Stmt::CallExprClass) {
   4049     callExpr = static_cast<CallExpr *>(expr);
   4050     rettype = callExpr->getCallReturnType(ctx);
   4051 
   4052     if (rettype->isVectorType() || callExpr->getNumArgs() > 1)
   4053       return nullptr;
   4054 
   4055     if (rettype->isIntegralType(ctx) || rettype->isRealFloatingType()) {
   4056       if (callExpr->getNumArgs() == 1 &&
   4057           !callExpr->getArg(0)->getType()->isIntegralType(ctx))
   4058         return nullptr;
   4059     } else if (rettype.getAsString() == "CFStringRef") {
   4060 
   4061       StringLiteral *S = getCFSTR_value(callExpr);
   4062       if (S) {
   4063         std::string strLiteral(S->getString().str());
   4064         result->EvalType = CXEval_CFStr;
   4065         result->EvalData.stringVal = new char[strLiteral.size() + 1];
   4066         strncpy((char *)result->EvalData.stringVal, strLiteral.c_str(),
   4067                 strLiteral.size());
   4068         result->EvalData.stringVal[strLiteral.size()] = '\0';
   4069         return result.release();
   4070       }
   4071     }
   4072   } else if (expr->getStmtClass() == Stmt::DeclRefExprClass) {
   4073     DeclRefExpr *D = static_cast<DeclRefExpr *>(expr);
   4074     ValueDecl *V = D->getDecl();
   4075     if (V->getKind() == Decl::Function) {
   4076       std::string strName = V->getNameAsString();
   4077       result->EvalType = CXEval_Other;
   4078       result->EvalData.stringVal = new char[strName.size() + 1];
   4079       strncpy(result->EvalData.stringVal, strName.c_str(), strName.size());
   4080       result->EvalData.stringVal[strName.size()] = '\0';
   4081       return result.release();
   4082     }
   4083   }
   4084 
   4085   return nullptr;
   4086 }
   4087 
   4088 static const Expr *evaluateDeclExpr(const Decl *D) {
   4089   if (!D)
   4090     return nullptr;
   4091   if (auto *Var = dyn_cast<VarDecl>(D))
   4092     return Var->getInit();
   4093   else if (auto *Field = dyn_cast<FieldDecl>(D))
   4094     return Field->getInClassInitializer();
   4095   return nullptr;
   4096 }
   4097 
   4098 static const Expr *evaluateCompoundStmtExpr(const CompoundStmt *CS) {
   4099   assert(CS && "invalid compound statement");
   4100   for (auto *bodyIterator : CS->body()) {
   4101     if (const auto *E = dyn_cast<Expr>(bodyIterator))
   4102       return E;
   4103   }
   4104   return nullptr;
   4105 }
   4106 
   4107 CXEvalResult clang_Cursor_Evaluate(CXCursor C) {
   4108   const Expr *E = nullptr;
   4109   if (clang_getCursorKind(C) == CXCursor_CompoundStmt)
   4110     E = evaluateCompoundStmtExpr(cast<CompoundStmt>(getCursorStmt(C)));
   4111   else if (clang_isDeclaration(C.kind))
   4112     E = evaluateDeclExpr(getCursorDecl(C));
   4113   else if (clang_isExpression(C.kind))
   4114     E = getCursorExpr(C);
   4115   if (E)
   4116     return const_cast<CXEvalResult>(
   4117         reinterpret_cast<const void *>(evaluateExpr(const_cast<Expr *>(E), C)));
   4118   return nullptr;
   4119 }
   4120 
   4121 unsigned clang_Cursor_hasAttrs(CXCursor C) {
   4122   const Decl *D = getCursorDecl(C);
   4123   if (!D) {
   4124     return 0;
   4125   }
   4126 
   4127   if (D->hasAttrs()) {
   4128     return 1;
   4129   }
   4130 
   4131   return 0;
   4132 }
   4133 unsigned clang_defaultSaveOptions(CXTranslationUnit TU) {
   4134   return CXSaveTranslationUnit_None;
   4135 }
   4136 
   4137 static CXSaveError clang_saveTranslationUnit_Impl(CXTranslationUnit TU,
   4138                                                   const char *FileName,
   4139                                                   unsigned options) {
   4140   CIndexer *CXXIdx = TU->CIdx;
   4141   if (CXXIdx->isOptEnabled(CXGlobalOpt_ThreadBackgroundPriorityForIndexing))
   4142     setThreadBackgroundPriority();
   4143 
   4144   bool hadError = cxtu::getASTUnit(TU)->Save(FileName);
   4145   return hadError ? CXSaveError_Unknown : CXSaveError_None;
   4146 }
   4147 
   4148 int clang_saveTranslationUnit(CXTranslationUnit TU, const char *FileName,
   4149                               unsigned options) {
   4150   LOG_FUNC_SECTION { *Log << TU << ' ' << FileName; }
   4151 
   4152   if (isNotUsableTU(TU)) {
   4153     LOG_BAD_TU(TU);
   4154     return CXSaveError_InvalidTU;
   4155   }
   4156 
   4157   ASTUnit *CXXUnit = cxtu::getASTUnit(TU);
   4158   ASTUnit::ConcurrencyCheck Check(*CXXUnit);
   4159   if (!CXXUnit->hasSema())
   4160     return CXSaveError_InvalidTU;
   4161 
   4162   CXSaveError result;
   4163   auto SaveTranslationUnitImpl = [=, &result]() {
   4164     result = clang_saveTranslationUnit_Impl(TU, FileName, options);
   4165   };
   4166 
   4167   if (!CXXUnit->getDiagnostics().hasUnrecoverableErrorOccurred()) {
   4168     SaveTranslationUnitImpl();
   4169 
   4170     if (getenv("LIBCLANG_RESOURCE_USAGE"))
   4171       PrintLibclangResourceUsage(TU);
   4172 
   4173     return result;
   4174   }
   4175 
   4176   // We have an AST that has invalid nodes due to compiler errors.
   4177   // Use a crash recovery thread for protection.
   4178 
   4179   llvm::CrashRecoveryContext CRC;
   4180 
   4181   if (!RunSafely(CRC, SaveTranslationUnitImpl)) {
   4182     fprintf(stderr, "libclang: crash detected during AST saving: {\n");
   4183     fprintf(stderr, "  'filename' : '%s'\n", FileName);
   4184     fprintf(stderr, "  'options' : %d,\n", options);
   4185     fprintf(stderr, "}\n");
   4186 
   4187     return CXSaveError_Unknown;
   4188 
   4189   } else if (getenv("LIBCLANG_RESOURCE_USAGE")) {
   4190     PrintLibclangResourceUsage(TU);
   4191   }
   4192 
   4193   return result;
   4194 }
   4195 
   4196 void clang_disposeTranslationUnit(CXTranslationUnit CTUnit) {
   4197   if (CTUnit) {
   4198     // If the translation unit has been marked as unsafe to free, just discard
   4199     // it.
   4200     ASTUnit *Unit = cxtu::getASTUnit(CTUnit);
   4201     if (Unit && Unit->isUnsafeToFree())
   4202       return;
   4203 
   4204     delete cxtu::getASTUnit(CTUnit);
   4205     delete CTUnit->StringPool;
   4206     delete static_cast<CXDiagnosticSetImpl *>(CTUnit->Diagnostics);
   4207     disposeOverridenCXCursorsPool(CTUnit->OverridenCursorsPool);
   4208     delete CTUnit->CommentToXML;
   4209     delete CTUnit;
   4210   }
   4211 }
   4212 
   4213 unsigned clang_suspendTranslationUnit(CXTranslationUnit CTUnit) {
   4214   if (CTUnit) {
   4215     ASTUnit *Unit = cxtu::getASTUnit(CTUnit);
   4216 
   4217     if (Unit && Unit->isUnsafeToFree())
   4218       return false;
   4219 
   4220     Unit->ResetForParse();
   4221     return true;
   4222   }
   4223 
   4224   return false;
   4225 }
   4226 
   4227 unsigned clang_defaultReparseOptions(CXTranslationUnit TU) {
   4228   return CXReparse_None;
   4229 }
   4230 
   4231 static CXErrorCode
   4232 clang_reparseTranslationUnit_Impl(CXTranslationUnit TU,
   4233                                   ArrayRef<CXUnsavedFile> unsaved_files,
   4234                                   unsigned options) {
   4235   // Check arguments.
   4236   if (isNotUsableTU(TU)) {
   4237     LOG_BAD_TU(TU);
   4238     return CXError_InvalidArguments;
   4239   }
   4240 
   4241   // Reset the associated diagnostics.
   4242   delete static_cast<CXDiagnosticSetImpl *>(TU->Diagnostics);
   4243   TU->Diagnostics = nullptr;
   4244 
   4245   CIndexer *CXXIdx = TU->CIdx;
   4246   if (CXXIdx->isOptEnabled(CXGlobalOpt_ThreadBackgroundPriorityForEditing))
   4247     setThreadBackgroundPriority();
   4248 
   4249   ASTUnit *CXXUnit = cxtu::getASTUnit(TU);
   4250   ASTUnit::ConcurrencyCheck Check(*CXXUnit);
   4251 
   4252   std::unique_ptr<std::vector<ASTUnit::RemappedFile>> RemappedFiles(
   4253       new std::vector<ASTUnit::RemappedFile>());
   4254 
   4255   // Recover resources if we crash before exiting this function.
   4256   llvm::CrashRecoveryContextCleanupRegistrar<std::vector<ASTUnit::RemappedFile>>
   4257       RemappedCleanup(RemappedFiles.get());
   4258 
   4259   for (auto &UF : unsaved_files) {
   4260     std::unique_ptr<llvm::MemoryBuffer> MB =
   4261         llvm::MemoryBuffer::getMemBufferCopy(getContents(UF), UF.Filename);
   4262     RemappedFiles->push_back(std::make_pair(UF.Filename, MB.release()));
   4263   }
   4264 
   4265   if (!CXXUnit->Reparse(CXXIdx->getPCHContainerOperations(),
   4266                         *RemappedFiles.get()))
   4267     return CXError_Success;
   4268   if (isASTReadError(CXXUnit))
   4269     return CXError_ASTReadError;
   4270   return CXError_Failure;
   4271 }
   4272 
   4273 int clang_reparseTranslationUnit(CXTranslationUnit TU,
   4274                                  unsigned num_unsaved_files,
   4275                                  struct CXUnsavedFile *unsaved_files,
   4276                                  unsigned options) {
   4277   LOG_FUNC_SECTION { *Log << TU; }
   4278 
   4279   if (num_unsaved_files && !unsaved_files)
   4280     return CXError_InvalidArguments;
   4281 
   4282   CXErrorCode result;
   4283   auto ReparseTranslationUnitImpl = [=, &result]() {
   4284     result = clang_reparseTranslationUnit_Impl(
   4285         TU, llvm::makeArrayRef(unsaved_files, num_unsaved_files), options);
   4286   };
   4287 
   4288   llvm::CrashRecoveryContext CRC;
   4289 
   4290   if (!RunSafely(CRC, ReparseTranslationUnitImpl)) {
   4291     fprintf(stderr, "libclang: crash detected during reparsing\n");
   4292     cxtu::getASTUnit(TU)->setUnsafeToFree(true);
   4293     return CXError_Crashed;
   4294   } else if (getenv("LIBCLANG_RESOURCE_USAGE"))
   4295     PrintLibclangResourceUsage(TU);
   4296 
   4297   return result;
   4298 }
   4299 
   4300 CXString clang_getTranslationUnitSpelling(CXTranslationUnit CTUnit) {
   4301   if (isNotUsableTU(CTUnit)) {
   4302     LOG_BAD_TU(CTUnit);
   4303     return cxstring::createEmpty();
   4304   }
   4305 
   4306   ASTUnit *CXXUnit = cxtu::getASTUnit(CTUnit);
   4307   return cxstring::createDup(CXXUnit->getOriginalSourceFileName());
   4308 }
   4309 
   4310 CXCursor clang_getTranslationUnitCursor(CXTranslationUnit TU) {
   4311   if (isNotUsableTU(TU)) {
   4312     LOG_BAD_TU(TU);
   4313     return clang_getNullCursor();
   4314   }
   4315 
   4316   ASTUnit *CXXUnit = cxtu::getASTUnit(TU);
   4317   return MakeCXCursor(CXXUnit->getASTContext().getTranslationUnitDecl(), TU);
   4318 }
   4319 
   4320 CXTargetInfo clang_getTranslationUnitTargetInfo(CXTranslationUnit CTUnit) {
   4321   if (isNotUsableTU(CTUnit)) {
   4322     LOG_BAD_TU(CTUnit);
   4323     return nullptr;
   4324   }
   4325 
   4326   CXTargetInfoImpl *impl = new CXTargetInfoImpl();
   4327   impl->TranslationUnit = CTUnit;
   4328   return impl;
   4329 }
   4330 
   4331 CXString clang_TargetInfo_getTriple(CXTargetInfo TargetInfo) {
   4332   if (!TargetInfo)
   4333     return cxstring::createEmpty();
   4334 
   4335   CXTranslationUnit CTUnit = TargetInfo->TranslationUnit;
   4336   assert(!isNotUsableTU(CTUnit) &&
   4337          "Unexpected unusable translation unit in TargetInfo");
   4338 
   4339   ASTUnit *CXXUnit = cxtu::getASTUnit(CTUnit);
   4340   std::string Triple =
   4341       CXXUnit->getASTContext().getTargetInfo().getTriple().normalize();
   4342   return cxstring::createDup(Triple);
   4343 }
   4344 
   4345 int clang_TargetInfo_getPointerWidth(CXTargetInfo TargetInfo) {
   4346   if (!TargetInfo)
   4347     return -1;
   4348 
   4349   CXTranslationUnit CTUnit = TargetInfo->TranslationUnit;
   4350   assert(!isNotUsableTU(CTUnit) &&
   4351          "Unexpected unusable translation unit in TargetInfo");
   4352 
   4353   ASTUnit *CXXUnit = cxtu::getASTUnit(CTUnit);
   4354   return CXXUnit->getASTContext().getTargetInfo().getMaxPointerWidth();
   4355 }
   4356 
   4357 void clang_TargetInfo_dispose(CXTargetInfo TargetInfo) {
   4358   if (!TargetInfo)
   4359     return;
   4360 
   4361   delete TargetInfo;
   4362 }
   4363 
   4364 //===----------------------------------------------------------------------===//
   4365 // CXFile Operations.
   4366 //===----------------------------------------------------------------------===//
   4367 
   4368 CXString clang_getFileName(CXFile SFile) {
   4369   if (!SFile)
   4370     return cxstring::createNull();
   4371 
   4372   FileEntry *FEnt = static_cast<FileEntry *>(SFile);
   4373   return cxstring::createRef(FEnt->getName());
   4374 }
   4375 
   4376 time_t clang_getFileTime(CXFile SFile) {
   4377   if (!SFile)
   4378     return 0;
   4379 
   4380   FileEntry *FEnt = static_cast<FileEntry *>(SFile);
   4381   return FEnt->getModificationTime();
   4382 }
   4383 
   4384 CXFile clang_getFile(CXTranslationUnit TU, const char *file_name) {
   4385   if (isNotUsableTU(TU)) {
   4386     LOG_BAD_TU(TU);
   4387     return nullptr;
   4388   }
   4389 
   4390   ASTUnit *CXXUnit = cxtu::getASTUnit(TU);
   4391 
   4392   FileManager &FMgr = CXXUnit->getFileManager();
   4393   auto File = FMgr.getFile(file_name);
   4394   if (!File)
   4395     return nullptr;
   4396   return const_cast<FileEntry *>(*File);
   4397 }
   4398 
   4399 const char *clang_getFileContents(CXTranslationUnit TU, CXFile file,
   4400                                   size_t *size) {
   4401   if (isNotUsableTU(TU)) {
   4402     LOG_BAD_TU(TU);
   4403     return nullptr;
   4404   }
   4405 
   4406   const SourceManager &SM = cxtu::getASTUnit(TU)->getSourceManager();
   4407   FileID fid = SM.translateFile(static_cast<FileEntry *>(file));
   4408   llvm::Optional<llvm::MemoryBufferRef> buf = SM.getBufferOrNone(fid);
   4409   if (!buf) {
   4410     if (size)
   4411       *size = 0;
   4412     return nullptr;
   4413   }
   4414   if (size)
   4415     *size = buf->getBufferSize();
   4416   return buf->getBufferStart();
   4417 }
   4418 
   4419 unsigned clang_isFileMultipleIncludeGuarded(CXTranslationUnit TU, CXFile file) {
   4420   if (isNotUsableTU(TU)) {
   4421     LOG_BAD_TU(TU);
   4422     return 0;
   4423   }
   4424 
   4425   if (!file)
   4426     return 0;
   4427 
   4428   ASTUnit *CXXUnit = cxtu::getASTUnit(TU);
   4429   FileEntry *FEnt = static_cast<FileEntry *>(file);
   4430   return CXXUnit->getPreprocessor()
   4431       .getHeaderSearchInfo()
   4432       .isFileMultipleIncludeGuarded(FEnt);
   4433 }
   4434 
   4435 int clang_getFileUniqueID(CXFile file, CXFileUniqueID *outID) {
   4436   if (!file || !outID)
   4437     return 1;
   4438 
   4439   FileEntry *FEnt = static_cast<FileEntry *>(file);
   4440   const llvm::sys::fs::UniqueID &ID = FEnt->getUniqueID();
   4441   outID->data[0] = ID.getDevice();
   4442   outID->data[1] = ID.getFile();
   4443   outID->data[2] = FEnt->getModificationTime();
   4444   return 0;
   4445 }
   4446 
   4447 int clang_File_isEqual(CXFile file1, CXFile file2) {
   4448   if (file1 == file2)
   4449     return true;
   4450 
   4451   if (!file1 || !file2)
   4452     return false;
   4453 
   4454   FileEntry *FEnt1 = static_cast<FileEntry *>(file1);
   4455   FileEntry *FEnt2 = static_cast<FileEntry *>(file2);
   4456   return FEnt1->getUniqueID() == FEnt2->getUniqueID();
   4457 }
   4458 
   4459 CXString clang_File_tryGetRealPathName(CXFile SFile) {
   4460   if (!SFile)
   4461     return cxstring::createNull();
   4462 
   4463   FileEntry *FEnt = static_cast<FileEntry *>(SFile);
   4464   return cxstring::createRef(FEnt->tryGetRealPathName());
   4465 }
   4466 
   4467 //===----------------------------------------------------------------------===//
   4468 // CXCursor Operations.
   4469 //===----------------------------------------------------------------------===//
   4470 
   4471 static const Decl *getDeclFromExpr(const Stmt *E) {
   4472   if (const ImplicitCastExpr *CE = dyn_cast<ImplicitCastExpr>(E))
   4473     return getDeclFromExpr(CE->getSubExpr());
   4474 
   4475   if (const DeclRefExpr *RefExpr = dyn_cast<DeclRefExpr>(E))
   4476     return RefExpr->getDecl();
   4477   if (const MemberExpr *ME = dyn_cast<MemberExpr>(E))
   4478     return ME->getMemberDecl();
   4479   if (const ObjCIvarRefExpr *RE = dyn_cast<ObjCIvarRefExpr>(E))
   4480     return RE->getDecl();
   4481   if (const ObjCPropertyRefExpr *PRE = dyn_cast<ObjCPropertyRefExpr>(E)) {
   4482     if (PRE->isExplicitProperty())
   4483       return PRE->getExplicitProperty();
   4484     // It could be messaging both getter and setter as in:
   4485     // ++myobj.myprop;
   4486     // in which case prefer to associate the setter since it is less obvious
   4487     // from inspecting the source that the setter is going to get called.
   4488     if (PRE->isMessagingSetter())
   4489       return PRE->getImplicitPropertySetter();
   4490     return PRE->getImplicitPropertyGetter();
   4491   }
   4492   if (const PseudoObjectExpr *POE = dyn_cast<PseudoObjectExpr>(E))
   4493     return getDeclFromExpr(POE->getSyntacticForm());
   4494   if (const OpaqueValueExpr *OVE = dyn_cast<OpaqueValueExpr>(E))
   4495     if (Expr *Src = OVE->getSourceExpr())
   4496       return getDeclFromExpr(Src);
   4497 
   4498   if (const CallExpr *CE = dyn_cast<CallExpr>(E))
   4499     return getDeclFromExpr(CE->getCallee());
   4500   if (const CXXConstructExpr *CE = dyn_cast<CXXConstructExpr>(E))
   4501     if (!CE->isElidable())
   4502       return CE->getConstructor();
   4503   if (const CXXInheritedCtorInitExpr *CE =
   4504           dyn_cast<CXXInheritedCtorInitExpr>(E))
   4505     return CE->getConstructor();
   4506   if (const ObjCMessageExpr *OME = dyn_cast<ObjCMessageExpr>(E))
   4507     return OME->getMethodDecl();
   4508 
   4509   if (const ObjCProtocolExpr *PE = dyn_cast<ObjCProtocolExpr>(E))
   4510     return PE->getProtocol();
   4511   if (const SubstNonTypeTemplateParmPackExpr *NTTP =
   4512           dyn_cast<SubstNonTypeTemplateParmPackExpr>(E))
   4513     return NTTP->getParameterPack();
   4514   if (const SizeOfPackExpr *SizeOfPack = dyn_cast<SizeOfPackExpr>(E))
   4515     if (isa<NonTypeTemplateParmDecl>(SizeOfPack->getPack()) ||
   4516         isa<ParmVarDecl>(SizeOfPack->getPack()))
   4517       return SizeOfPack->getPack();
   4518 
   4519   return nullptr;
   4520 }
   4521 
   4522 static SourceLocation getLocationFromExpr(const Expr *E) {
   4523   if (const ImplicitCastExpr *CE = dyn_cast<ImplicitCastExpr>(E))
   4524     return getLocationFromExpr(CE->getSubExpr());
   4525 
   4526   if (const ObjCMessageExpr *Msg = dyn_cast<ObjCMessageExpr>(E))
   4527     return /*FIXME:*/ Msg->getLeftLoc();
   4528   if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E))
   4529     return DRE->getLocation();
   4530   if (const MemberExpr *Member = dyn_cast<MemberExpr>(E))
   4531     return Member->getMemberLoc();
   4532   if (const ObjCIvarRefExpr *Ivar = dyn_cast<ObjCIvarRefExpr>(E))
   4533     return Ivar->getLocation();
   4534   if (const SizeOfPackExpr *SizeOfPack = dyn_cast<SizeOfPackExpr>(E))
   4535     return SizeOfPack->getPackLoc();
   4536   if (const ObjCPropertyRefExpr *PropRef = dyn_cast<ObjCPropertyRefExpr>(E))
   4537     return PropRef->getLocation();
   4538 
   4539   return E->getBeginLoc();
   4540 }
   4541 
   4542 extern "C" {
   4543 
   4544 unsigned clang_visitChildren(CXCursor parent, CXCursorVisitor visitor,
   4545                              CXClientData client_data) {
   4546   CursorVisitor CursorVis(getCursorTU(parent), visitor, client_data,
   4547                           /*VisitPreprocessorLast=*/false);
   4548   return CursorVis.VisitChildren(parent);
   4549 }
   4550 
   4551 #ifndef __has_feature
   4552 #define __has_feature(x) 0
   4553 #endif
   4554 #if __has_feature(blocks)
   4555 typedef enum CXChildVisitResult (^CXCursorVisitorBlock)(CXCursor cursor,
   4556                                                         CXCursor parent);
   4557 
   4558 static enum CXChildVisitResult visitWithBlock(CXCursor cursor, CXCursor parent,
   4559                                               CXClientData client_data) {
   4560   CXCursorVisitorBlock block = (CXCursorVisitorBlock)client_data;
   4561   return block(cursor, parent);
   4562 }
   4563 #else
   4564 // If we are compiled with a compiler that doesn't have native blocks support,
   4565 // define and call the block manually, so the
   4566 typedef struct _CXChildVisitResult {
   4567   void *isa;
   4568   int flags;
   4569   int reserved;
   4570   enum CXChildVisitResult (*invoke)(struct _CXChildVisitResult *, CXCursor,
   4571                                     CXCursor);
   4572 } * CXCursorVisitorBlock;
   4573 
   4574 static enum CXChildVisitResult visitWithBlock(CXCursor cursor, CXCursor parent,
   4575                                               CXClientData client_data) {
   4576   CXCursorVisitorBlock block = (CXCursorVisitorBlock)client_data;
   4577   return block->invoke(block, cursor, parent);
   4578 }
   4579 #endif
   4580 
   4581 unsigned clang_visitChildrenWithBlock(CXCursor parent,
   4582                                       CXCursorVisitorBlock block) {
   4583   return clang_visitChildren(parent, visitWithBlock, block);
   4584 }
   4585 
   4586 static CXString getDeclSpelling(const Decl *D) {
   4587   if (!D)
   4588     return cxstring::createEmpty();
   4589 
   4590   const NamedDecl *ND = dyn_cast<NamedDecl>(D);
   4591   if (!ND) {
   4592     if (const ObjCPropertyImplDecl *PropImpl =
   4593             dyn_cast<ObjCPropertyImplDecl>(D))
   4594       if (ObjCPropertyDecl *Property = PropImpl->getPropertyDecl())
   4595         return cxstring::createDup(Property->getIdentifier()->getName());
   4596 
   4597     if (const ImportDecl *ImportD = dyn_cast<ImportDecl>(D))
   4598       if (Module *Mod = ImportD->getImportedModule())
   4599         return cxstring::createDup(Mod->getFullModuleName());
   4600 
   4601     return cxstring::createEmpty();
   4602   }
   4603 
   4604   if (const ObjCMethodDecl *OMD = dyn_cast<ObjCMethodDecl>(ND))
   4605     return cxstring::createDup(OMD->getSelector().getAsString());
   4606 
   4607   if (const ObjCCategoryImplDecl *CIMP = dyn_cast<ObjCCategoryImplDecl>(ND))
   4608     // No, this isn't the same as the code below. getIdentifier() is non-virtual
   4609     // and returns different names. NamedDecl returns the class name and
   4610     // ObjCCategoryImplDecl returns the category name.
   4611     return cxstring::createRef(CIMP->getIdentifier()->getNameStart());
   4612 
   4613   if (isa<UsingDirectiveDecl>(D))
   4614     return cxstring::createEmpty();
   4615 
   4616   SmallString<1024> S;
   4617   llvm::raw_svector_ostream os(S);
   4618   ND->printName(os);
   4619 
   4620   return cxstring::createDup(os.str());
   4621 }
   4622 
   4623 CXString clang_getCursorSpelling(CXCursor C) {
   4624   if (clang_isTranslationUnit(C.kind))
   4625     return clang_getTranslationUnitSpelling(getCursorTU(C));
   4626 
   4627   if (clang_isReference(C.kind)) {
   4628     switch (C.kind) {
   4629     case CXCursor_ObjCSuperClassRef: {
   4630       const ObjCInterfaceDecl *Super = getCursorObjCSuperClassRef(C).first;
   4631       return cxstring::createRef(Super->getIdentifier()->getNameStart());
   4632     }
   4633     case CXCursor_ObjCClassRef: {
   4634       const ObjCInterfaceDecl *Class = getCursorObjCClassRef(C).first;
   4635       return cxstring::createRef(Class->getIdentifier()->getNameStart());
   4636     }
   4637     case CXCursor_ObjCProtocolRef: {
   4638       const ObjCProtocolDecl *OID = getCursorObjCProtocolRef(C).first;
   4639       assert(OID && "getCursorSpelling(): Missing protocol decl");
   4640       return cxstring::createRef(OID->getIdentifier()->getNameStart());
   4641     }
   4642     case CXCursor_CXXBaseSpecifier: {
   4643       const CXXBaseSpecifier *B = getCursorCXXBaseSpecifier(C);
   4644       return cxstring::createDup(B->getType().getAsString());
   4645     }
   4646     case CXCursor_TypeRef: {
   4647       const TypeDecl *Type = getCursorTypeRef(C).first;
   4648       assert(Type && "Missing type decl");
   4649 
   4650       return cxstring::createDup(
   4651           getCursorContext(C).getTypeDeclType(Type).getAsString());
   4652     }
   4653     case CXCursor_TemplateRef: {
   4654       const TemplateDecl *Template = getCursorTemplateRef(C).first;
   4655       assert(Template && "Missing template decl");
   4656 
   4657       return cxstring::createDup(Template->getNameAsString());
   4658     }
   4659 
   4660     case CXCursor_NamespaceRef: {
   4661       const NamedDecl *NS = getCursorNamespaceRef(C).first;
   4662       assert(NS && "Missing namespace decl");
   4663 
   4664       return cxstring::createDup(NS->getNameAsString());
   4665     }
   4666 
   4667     case CXCursor_MemberRef: {
   4668       const FieldDecl *Field = getCursorMemberRef(C).first;
   4669       assert(Field && "Missing member decl");
   4670 
   4671       return cxstring::createDup(Field->getNameAsString());
   4672     }
   4673 
   4674     case CXCursor_LabelRef: {
   4675       const LabelStmt *Label = getCursorLabelRef(C).first;
   4676       assert(Label && "Missing label");
   4677 
   4678       return cxstring::createRef(Label->getName());
   4679     }
   4680 
   4681     case CXCursor_OverloadedDeclRef: {
   4682       OverloadedDeclRefStorage Storage = getCursorOverloadedDeclRef(C).first;
   4683       if (const Decl *D = Storage.dyn_cast<const Decl *>()) {
   4684         if (const NamedDecl *ND = dyn_cast<NamedDecl>(D))
   4685           return cxstring::createDup(ND->getNameAsString());
   4686         return cxstring::createEmpty();
   4687       }
   4688       if (const OverloadExpr *E = Storage.dyn_cast<const OverloadExpr *>())
   4689         return cxstring::createDup(E->getName().getAsString());
   4690       OverloadedTemplateStorage *Ovl =
   4691           Storage.get<OverloadedTemplateStorage *>();
   4692       if (Ovl->size() == 0)
   4693         return cxstring::createEmpty();
   4694       return cxstring::createDup((*Ovl->begin())->getNameAsString());
   4695     }
   4696 
   4697     case CXCursor_VariableRef: {
   4698       const VarDecl *Var = getCursorVariableRef(C).first;
   4699       assert(Var && "Missing variable decl");
   4700 
   4701       return cxstring::createDup(Var->getNameAsString());
   4702     }
   4703 
   4704     default:
   4705       return cxstring::createRef("<not implemented>");
   4706     }
   4707   }
   4708 
   4709   if (clang_isExpression(C.kind)) {
   4710     const Expr *E = getCursorExpr(C);
   4711 
   4712     if (C.kind == CXCursor_ObjCStringLiteral ||
   4713         C.kind == CXCursor_StringLiteral) {
   4714       const StringLiteral *SLit;
   4715       if (const ObjCStringLiteral *OSL = dyn_cast<ObjCStringLiteral>(E)) {
   4716         SLit = OSL->getString();
   4717       } else {
   4718         SLit = cast<StringLiteral>(E);
   4719       }
   4720       SmallString<256> Buf;
   4721       llvm::raw_svector_ostream OS(Buf);
   4722       SLit->outputString(OS);
   4723       return cxstring::createDup(OS.str());
   4724     }
   4725 
   4726     const Decl *D = getDeclFromExpr(getCursorExpr(C));
   4727     if (D)
   4728       return getDeclSpelling(D);
   4729     return cxstring::createEmpty();
   4730   }
   4731 
   4732   if (clang_isStatement(C.kind)) {
   4733     const Stmt *S = getCursorStmt(C);
   4734     if (const LabelStmt *Label = dyn_cast_or_null<LabelStmt>(S))
   4735       return cxstring::createRef(Label->getName());
   4736 
   4737     return cxstring::createEmpty();
   4738   }
   4739 
   4740   if (C.kind == CXCursor_MacroExpansion)
   4741     return cxstring::createRef(
   4742         getCursorMacroExpansion(C).getName()->getNameStart());
   4743 
   4744   if (C.kind == CXCursor_MacroDefinition)
   4745     return cxstring::createRef(
   4746         getCursorMacroDefinition(C)->getName()->getNameStart());
   4747 
   4748   if (C.kind == CXCursor_InclusionDirective)
   4749     return cxstring::createDup(getCursorInclusionDirective(C)->getFileName());
   4750 
   4751   if (clang_isDeclaration(C.kind))
   4752     return getDeclSpelling(getCursorDecl(C));
   4753 
   4754   if (C.kind == CXCursor_AnnotateAttr) {
   4755     const AnnotateAttr *AA = cast<AnnotateAttr>(cxcursor::getCursorAttr(C));
   4756     return cxstring::createDup(AA->getAnnotation());
   4757   }
   4758 
   4759   if (C.kind == CXCursor_AsmLabelAttr) {
   4760     const AsmLabelAttr *AA = cast<AsmLabelAttr>(cxcursor::getCursorAttr(C));
   4761     return cxstring::createDup(AA->getLabel());
   4762   }
   4763 
   4764   if (C.kind == CXCursor_PackedAttr) {
   4765     return cxstring::createRef("packed");
   4766   }
   4767 
   4768   if (C.kind == CXCursor_VisibilityAttr) {
   4769     const VisibilityAttr *AA = cast<VisibilityAttr>(cxcursor::getCursorAttr(C));
   4770     switch (AA->getVisibility()) {
   4771     case VisibilityAttr::VisibilityType::Default:
   4772       return cxstring::createRef("default");
   4773     case VisibilityAttr::VisibilityType::Hidden:
   4774       return cxstring::createRef("hidden");
   4775     case VisibilityAttr::VisibilityType::Protected:
   4776       return cxstring::createRef("protected");
   4777     }
   4778     llvm_unreachable("unknown visibility type");
   4779   }
   4780 
   4781   return cxstring::createEmpty();
   4782 }
   4783 
   4784 CXSourceRange clang_Cursor_getSpellingNameRange(CXCursor C, unsigned pieceIndex,
   4785                                                 unsigned options) {
   4786   if (clang_Cursor_isNull(C))
   4787     return clang_getNullRange();
   4788 
   4789   ASTContext &Ctx = getCursorContext(C);
   4790 
   4791   if (clang_isStatement(C.kind)) {
   4792     const Stmt *S = getCursorStmt(C);
   4793     if (const LabelStmt *Label = dyn_cast_or_null<LabelStmt>(S)) {
   4794       if (pieceIndex > 0)
   4795         return clang_getNullRange();
   4796       return cxloc::translateSourceRange(Ctx, Label->getIdentLoc());
   4797     }
   4798 
   4799     return clang_getNullRange();
   4800   }
   4801 
   4802   if (C.kind == CXCursor_ObjCMessageExpr) {
   4803     if (const ObjCMessageExpr *ME =
   4804             dyn_cast_or_null<ObjCMessageExpr>(getCursorExpr(C))) {
   4805       if (pieceIndex >= ME->getNumSelectorLocs())
   4806         return clang_getNullRange();
   4807       return cxloc::translateSourceRange(Ctx, ME->getSelectorLoc(pieceIndex));
   4808     }
   4809   }
   4810 
   4811   if (C.kind == CXCursor_ObjCInstanceMethodDecl ||
   4812       C.kind == CXCursor_ObjCClassMethodDecl) {
   4813     if (const ObjCMethodDecl *MD =
   4814             dyn_cast_or_null<ObjCMethodDecl>(getCursorDecl(C))) {
   4815       if (pieceIndex >= MD->getNumSelectorLocs())
   4816         return clang_getNullRange();
   4817       return cxloc::translateSourceRange(Ctx, MD->getSelectorLoc(pieceIndex));
   4818     }
   4819   }
   4820 
   4821   if (C.kind == CXCursor_ObjCCategoryDecl ||
   4822       C.kind == CXCursor_ObjCCategoryImplDecl) {
   4823     if (pieceIndex > 0)
   4824       return clang_getNullRange();
   4825     if (const ObjCCategoryDecl *CD =
   4826             dyn_cast_or_null<ObjCCategoryDecl>(getCursorDecl(C)))
   4827       return cxloc::translateSourceRange(Ctx, CD->getCategoryNameLoc());
   4828     if (const ObjCCategoryImplDecl *CID =
   4829             dyn_cast_or_null<ObjCCategoryImplDecl>(getCursorDecl(C)))
   4830       return cxloc::translateSourceRange(Ctx, CID->getCategoryNameLoc());
   4831   }
   4832 
   4833   if (C.kind == CXCursor_ModuleImportDecl) {
   4834     if (pieceIndex > 0)
   4835       return clang_getNullRange();
   4836     if (const ImportDecl *ImportD =
   4837             dyn_cast_or_null<ImportDecl>(getCursorDecl(C))) {
   4838       ArrayRef<SourceLocation> Locs = ImportD->getIdentifierLocs();
   4839       if (!Locs.empty())
   4840         return cxloc::translateSourceRange(
   4841             Ctx, SourceRange(Locs.front(), Locs.back()));
   4842     }
   4843     return clang_getNullRange();
   4844   }
   4845 
   4846   if (C.kind == CXCursor_CXXMethod || C.kind == CXCursor_Destructor ||
   4847       C.kind == CXCursor_ConversionFunction ||
   4848       C.kind == CXCursor_FunctionDecl) {
   4849     if (pieceIndex > 0)
   4850       return clang_getNullRange();
   4851     if (const FunctionDecl *FD =
   4852             dyn_cast_or_null<FunctionDecl>(getCursorDecl(C))) {
   4853       DeclarationNameInfo FunctionName = FD->getNameInfo();
   4854       return cxloc::translateSourceRange(Ctx, FunctionName.getSourceRange());
   4855     }
   4856     return clang_getNullRange();
   4857   }
   4858 
   4859   // FIXME: A CXCursor_InclusionDirective should give the location of the
   4860   // filename, but we don't keep track of this.
   4861 
   4862   // FIXME: A CXCursor_AnnotateAttr should give the location of the annotation
   4863   // but we don't keep track of this.
   4864 
   4865   // FIXME: A CXCursor_AsmLabelAttr should give the location of the label
   4866   // but we don't keep track of this.
   4867 
   4868   // Default handling, give the location of the cursor.
   4869 
   4870   if (pieceIndex > 0)
   4871     return clang_getNullRange();
   4872 
   4873   CXSourceLocation CXLoc = clang_getCursorLocation(C);
   4874   SourceLocation Loc = cxloc::translateSourceLocation(CXLoc);
   4875   return cxloc::translateSourceRange(Ctx, Loc);
   4876 }
   4877 
   4878 CXString clang_Cursor_getMangling(CXCursor C) {
   4879   if (clang_isInvalid(C.kind) || !clang_isDeclaration(C.kind))
   4880     return cxstring::createEmpty();
   4881 
   4882   // Mangling only works for functions and variables.
   4883   const Decl *D = getCursorDecl(C);
   4884   if (!D || !(isa<FunctionDecl>(D) || isa<VarDecl>(D)))
   4885     return cxstring::createEmpty();
   4886 
   4887   ASTContext &Ctx = D->getASTContext();
   4888   ASTNameGenerator ASTNameGen(Ctx);
   4889   return cxstring::createDup(ASTNameGen.getName(D));
   4890 }
   4891 
   4892 CXStringSet *clang_Cursor_getCXXManglings(CXCursor C) {
   4893   if (clang_isInvalid(C.kind) || !clang_isDeclaration(C.kind))
   4894     return nullptr;
   4895 
   4896   const Decl *D = getCursorDecl(C);
   4897   if (!(isa<CXXRecordDecl>(D) || isa<CXXMethodDecl>(D)))
   4898     return nullptr;
   4899 
   4900   ASTContext &Ctx = D->getASTContext();
   4901   ASTNameGenerator ASTNameGen(Ctx);
   4902   std::vector<std::string> Manglings = ASTNameGen.getAllManglings(D);
   4903   return cxstring::createSet(Manglings);
   4904 }
   4905 
   4906 CXStringSet *clang_Cursor_getObjCManglings(CXCursor C) {
   4907   if (clang_isInvalid(C.kind) || !clang_isDeclaration(C.kind))
   4908     return nullptr;
   4909 
   4910   const Decl *D = getCursorDecl(C);
   4911   if (!(isa<ObjCInterfaceDecl>(D) || isa<ObjCImplementationDecl>(D)))
   4912     return nullptr;
   4913 
   4914   ASTContext &Ctx = D->getASTContext();
   4915   ASTNameGenerator ASTNameGen(Ctx);
   4916   std::vector<std::string> Manglings = ASTNameGen.getAllManglings(D);
   4917   return cxstring::createSet(Manglings);
   4918 }
   4919 
   4920 CXPrintingPolicy clang_getCursorPrintingPolicy(CXCursor C) {
   4921   if (clang_Cursor_isNull(C))
   4922     return 0;
   4923   return new PrintingPolicy(getCursorContext(C).getPrintingPolicy());
   4924 }
   4925 
   4926 void clang_PrintingPolicy_dispose(CXPrintingPolicy Policy) {
   4927   if (Policy)
   4928     delete static_cast<PrintingPolicy *>(Policy);
   4929 }
   4930 
   4931 unsigned
   4932 clang_PrintingPolicy_getProperty(CXPrintingPolicy Policy,
   4933                                  enum CXPrintingPolicyProperty Property) {
   4934   if (!Policy)
   4935     return 0;
   4936 
   4937   PrintingPolicy *P = static_cast<PrintingPolicy *>(Policy);
   4938   switch (Property) {
   4939   case CXPrintingPolicy_Indentation:
   4940     return P->Indentation;
   4941   case CXPrintingPolicy_SuppressSpecifiers:
   4942     return P->SuppressSpecifiers;
   4943   case CXPrintingPolicy_SuppressTagKeyword:
   4944     return P->SuppressTagKeyword;
   4945   case CXPrintingPolicy_IncludeTagDefinition:
   4946     return P->IncludeTagDefinition;
   4947   case CXPrintingPolicy_SuppressScope:
   4948     return P->SuppressScope;
   4949   case CXPrintingPolicy_SuppressUnwrittenScope:
   4950     return P->SuppressUnwrittenScope;
   4951   case CXPrintingPolicy_SuppressInitializers:
   4952     return P->SuppressInitializers;
   4953   case CXPrintingPolicy_ConstantArraySizeAsWritten:
   4954     return P->ConstantArraySizeAsWritten;
   4955   case CXPrintingPolicy_AnonymousTagLocations:
   4956     return P->AnonymousTagLocations;
   4957   case CXPrintingPolicy_SuppressStrongLifetime:
   4958     return P->SuppressStrongLifetime;
   4959   case CXPrintingPolicy_SuppressLifetimeQualifiers:
   4960     return P->SuppressLifetimeQualifiers;
   4961   case CXPrintingPolicy_SuppressTemplateArgsInCXXConstructors:
   4962     return P->SuppressTemplateArgsInCXXConstructors;
   4963   case CXPrintingPolicy_Bool:
   4964     return P->Bool;
   4965   case CXPrintingPolicy_Restrict:
   4966     return P->Restrict;
   4967   case CXPrintingPolicy_Alignof:
   4968     return P->Alignof;
   4969   case CXPrintingPolicy_UnderscoreAlignof:
   4970     return P->UnderscoreAlignof;
   4971   case CXPrintingPolicy_UseVoidForZeroParams:
   4972     return P->UseVoidForZeroParams;
   4973   case CXPrintingPolicy_TerseOutput:
   4974     return P->TerseOutput;
   4975   case CXPrintingPolicy_PolishForDeclaration:
   4976     return P->PolishForDeclaration;
   4977   case CXPrintingPolicy_Half:
   4978     return P->Half;
   4979   case CXPrintingPolicy_MSWChar:
   4980     return P->MSWChar;
   4981   case CXPrintingPolicy_IncludeNewlines:
   4982     return P->IncludeNewlines;
   4983   case CXPrintingPolicy_MSVCFormatting:
   4984     return P->MSVCFormatting;
   4985   case CXPrintingPolicy_ConstantsAsWritten:
   4986     return P->ConstantsAsWritten;
   4987   case CXPrintingPolicy_SuppressImplicitBase:
   4988     return P->SuppressImplicitBase;
   4989   case CXPrintingPolicy_FullyQualifiedName:
   4990     return P->FullyQualifiedName;
   4991   }
   4992 
   4993   assert(false && "Invalid CXPrintingPolicyProperty");
   4994   return 0;
   4995 }
   4996 
   4997 void clang_PrintingPolicy_setProperty(CXPrintingPolicy Policy,
   4998                                       enum CXPrintingPolicyProperty Property,
   4999                                       unsigned Value) {
   5000   if (!Policy)
   5001     return;
   5002 
   5003   PrintingPolicy *P = static_cast<PrintingPolicy *>(Policy);
   5004   switch (Property) {
   5005   case CXPrintingPolicy_Indentation:
   5006     P->Indentation = Value;
   5007     return;
   5008   case CXPrintingPolicy_SuppressSpecifiers:
   5009     P->SuppressSpecifiers = Value;
   5010     return;
   5011   case CXPrintingPolicy_SuppressTagKeyword:
   5012     P->SuppressTagKeyword = Value;
   5013     return;
   5014   case CXPrintingPolicy_IncludeTagDefinition:
   5015     P->IncludeTagDefinition = Value;
   5016     return;
   5017   case CXPrintingPolicy_SuppressScope:
   5018     P->SuppressScope = Value;
   5019     return;
   5020   case CXPrintingPolicy_SuppressUnwrittenScope:
   5021     P->SuppressUnwrittenScope = Value;
   5022     return;
   5023   case CXPrintingPolicy_SuppressInitializers:
   5024     P->SuppressInitializers = Value;
   5025     return;
   5026   case CXPrintingPolicy_ConstantArraySizeAsWritten:
   5027     P->ConstantArraySizeAsWritten = Value;
   5028     return;
   5029   case CXPrintingPolicy_AnonymousTagLocations:
   5030     P->AnonymousTagLocations = Value;
   5031     return;
   5032   case CXPrintingPolicy_SuppressStrongLifetime:
   5033     P->SuppressStrongLifetime = Value;
   5034     return;
   5035   case CXPrintingPolicy_SuppressLifetimeQualifiers:
   5036     P->SuppressLifetimeQualifiers = Value;
   5037     return;
   5038   case CXPrintingPolicy_SuppressTemplateArgsInCXXConstructors:
   5039     P->SuppressTemplateArgsInCXXConstructors = Value;
   5040     return;
   5041   case CXPrintingPolicy_Bool:
   5042     P->Bool = Value;
   5043     return;
   5044   case CXPrintingPolicy_Restrict:
   5045     P->Restrict = Value;
   5046     return;
   5047   case CXPrintingPolicy_Alignof:
   5048     P->Alignof = Value;
   5049     return;
   5050   case CXPrintingPolicy_UnderscoreAlignof:
   5051     P->UnderscoreAlignof = Value;
   5052     return;
   5053   case CXPrintingPolicy_UseVoidForZeroParams:
   5054     P->UseVoidForZeroParams = Value;
   5055     return;
   5056   case CXPrintingPolicy_TerseOutput:
   5057     P->TerseOutput = Value;
   5058     return;
   5059   case CXPrintingPolicy_PolishForDeclaration:
   5060     P->PolishForDeclaration = Value;
   5061     return;
   5062   case CXPrintingPolicy_Half:
   5063     P->Half = Value;
   5064     return;
   5065   case CXPrintingPolicy_MSWChar:
   5066     P->MSWChar = Value;
   5067     return;
   5068   case CXPrintingPolicy_IncludeNewlines:
   5069     P->IncludeNewlines = Value;
   5070     return;
   5071   case CXPrintingPolicy_MSVCFormatting:
   5072     P->MSVCFormatting = Value;
   5073     return;
   5074   case CXPrintingPolicy_ConstantsAsWritten:
   5075     P->ConstantsAsWritten = Value;
   5076     return;
   5077   case CXPrintingPolicy_SuppressImplicitBase:
   5078     P->SuppressImplicitBase = Value;
   5079     return;
   5080   case CXPrintingPolicy_FullyQualifiedName:
   5081     P->FullyQualifiedName = Value;
   5082     return;
   5083   }
   5084 
   5085   assert(false && "Invalid CXPrintingPolicyProperty");
   5086 }
   5087 
   5088 CXString clang_getCursorPrettyPrinted(CXCursor C, CXPrintingPolicy cxPolicy) {
   5089   if (clang_Cursor_isNull(C))
   5090     return cxstring::createEmpty();
   5091 
   5092   if (clang_isDeclaration(C.kind)) {
   5093     const Decl *D = getCursorDecl(C);
   5094     if (!D)
   5095       return cxstring::createEmpty();
   5096 
   5097     SmallString<128> Str;
   5098     llvm::raw_svector_ostream OS(Str);
   5099     PrintingPolicy *UserPolicy = static_cast<PrintingPolicy *>(cxPolicy);
   5100     D->print(OS, UserPolicy ? *UserPolicy
   5101                             : getCursorContext(C).getPrintingPolicy());
   5102 
   5103     return cxstring::createDup(OS.str());
   5104   }
   5105 
   5106   return cxstring::createEmpty();
   5107 }
   5108 
   5109 CXString clang_getCursorDisplayName(CXCursor C) {
   5110   if (!clang_isDeclaration(C.kind))
   5111     return clang_getCursorSpelling(C);
   5112 
   5113   const Decl *D = getCursorDecl(C);
   5114   if (!D)
   5115     return cxstring::createEmpty();
   5116 
   5117   PrintingPolicy Policy = getCursorContext(C).getPrintingPolicy();
   5118   if (const FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(D))
   5119     D = FunTmpl->getTemplatedDecl();
   5120 
   5121   if (const FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {
   5122     SmallString<64> Str;
   5123     llvm::raw_svector_ostream OS(Str);
   5124     OS << *Function;
   5125     if (Function->getPrimaryTemplate())
   5126       OS << "<>";
   5127     OS << "(";
   5128     for (unsigned I = 0, N = Function->getNumParams(); I != N; ++I) {
   5129       if (I)
   5130         OS << ", ";
   5131       OS << Function->getParamDecl(I)->getType().getAsString(Policy);
   5132     }
   5133 
   5134     if (Function->isVariadic()) {
   5135       if (Function->getNumParams())
   5136         OS << ", ";
   5137       OS << "...";
   5138     }
   5139     OS << ")";
   5140     return cxstring::createDup(OS.str());
   5141   }
   5142 
   5143   if (const ClassTemplateDecl *ClassTemplate = dyn_cast<ClassTemplateDecl>(D)) {
   5144     SmallString<64> Str;
   5145     llvm::raw_svector_ostream OS(Str);
   5146     OS << *ClassTemplate;
   5147     OS << "<";
   5148     TemplateParameterList *Params = ClassTemplate->getTemplateParameters();
   5149     for (unsigned I = 0, N = Params->size(); I != N; ++I) {
   5150       if (I)
   5151         OS << ", ";
   5152 
   5153       NamedDecl *Param = Params->getParam(I);
   5154       if (Param->getIdentifier()) {
   5155         OS << Param->getIdentifier()->getName();
   5156         continue;
   5157       }
   5158 
   5159       // There is no parameter name, which makes this tricky. Try to come up
   5160       // with something useful that isn't too long.
   5161       if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(Param))
   5162         if (const auto *TC = TTP->getTypeConstraint()) {
   5163           TC->getConceptNameInfo().printName(OS, Policy);
   5164           if (TC->hasExplicitTemplateArgs())
   5165             OS << "<...>";
   5166         } else
   5167           OS << (TTP->wasDeclaredWithTypename() ? "typename" : "class");
   5168       else if (NonTypeTemplateParmDecl *NTTP =
   5169                    dyn_cast<NonTypeTemplateParmDecl>(Param))
   5170         OS << NTTP->getType().getAsString(Policy);
   5171       else
   5172         OS << "template<...> class";
   5173     }
   5174 
   5175     OS << ">";
   5176     return cxstring::createDup(OS.str());
   5177   }
   5178 
   5179   if (const ClassTemplateSpecializationDecl *ClassSpec =
   5180           dyn_cast<ClassTemplateSpecializationDecl>(D)) {
   5181     // If the type was explicitly written, use that.
   5182     if (TypeSourceInfo *TSInfo = ClassSpec->getTypeAsWritten())
   5183       return cxstring::createDup(TSInfo->getType().getAsString(Policy));
   5184 
   5185     SmallString<128> Str;
   5186     llvm::raw_svector_ostream OS(Str);
   5187     OS << *ClassSpec;
   5188     printTemplateArgumentList(
   5189         OS, ClassSpec->getTemplateArgs().asArray(), Policy,
   5190         ClassSpec->getSpecializedTemplate()->getTemplateParameters());
   5191     return cxstring::createDup(OS.str());
   5192   }
   5193 
   5194   return clang_getCursorSpelling(C);
   5195 }
   5196 
   5197 CXString clang_getCursorKindSpelling(enum CXCursorKind Kind) {
   5198   switch (Kind) {
   5199   case CXCursor_FunctionDecl:
   5200     return cxstring::createRef("FunctionDecl");
   5201   case CXCursor_TypedefDecl:
   5202     return cxstring::createRef("TypedefDecl");
   5203   case CXCursor_EnumDecl:
   5204     return cxstring::createRef("EnumDecl");
   5205   case CXCursor_EnumConstantDecl:
   5206     return cxstring::createRef("EnumConstantDecl");
   5207   case CXCursor_StructDecl:
   5208     return cxstring::createRef("StructDecl");
   5209   case CXCursor_UnionDecl:
   5210     return cxstring::createRef("UnionDecl");
   5211   case CXCursor_ClassDecl:
   5212     return cxstring::createRef("ClassDecl");
   5213   case CXCursor_FieldDecl:
   5214     return cxstring::createRef("FieldDecl");
   5215   case CXCursor_VarDecl:
   5216     return cxstring::createRef("VarDecl");
   5217   case CXCursor_ParmDecl:
   5218     return cxstring::createRef("ParmDecl");
   5219   case CXCursor_ObjCInterfaceDecl:
   5220     return cxstring::createRef("ObjCInterfaceDecl");
   5221   case CXCursor_ObjCCategoryDecl:
   5222     return cxstring::createRef("ObjCCategoryDecl");
   5223   case CXCursor_ObjCProtocolDecl:
   5224     return cxstring::createRef("ObjCProtocolDecl");
   5225   case CXCursor_ObjCPropertyDecl:
   5226     return cxstring::createRef("ObjCPropertyDecl");
   5227   case CXCursor_ObjCIvarDecl:
   5228     return cxstring::createRef("ObjCIvarDecl");
   5229   case CXCursor_ObjCInstanceMethodDecl:
   5230     return cxstring::createRef("ObjCInstanceMethodDecl");
   5231   case CXCursor_ObjCClassMethodDecl:
   5232     return cxstring::createRef("ObjCClassMethodDecl");
   5233   case CXCursor_ObjCImplementationDecl:
   5234     return cxstring::createRef("ObjCImplementationDecl");
   5235   case CXCursor_ObjCCategoryImplDecl:
   5236     return cxstring::createRef("ObjCCategoryImplDecl");
   5237   case CXCursor_CXXMethod:
   5238     return cxstring::createRef("CXXMethod");
   5239   case CXCursor_UnexposedDecl:
   5240     return cxstring::createRef("UnexposedDecl");
   5241   case CXCursor_ObjCSuperClassRef:
   5242     return cxstring::createRef("ObjCSuperClassRef");
   5243   case CXCursor_ObjCProtocolRef:
   5244     return cxstring::createRef("ObjCProtocolRef");
   5245   case CXCursor_ObjCClassRef:
   5246     return cxstring::createRef("ObjCClassRef");
   5247   case CXCursor_TypeRef:
   5248     return cxstring::createRef("TypeRef");
   5249   case CXCursor_TemplateRef:
   5250     return cxstring::createRef("TemplateRef");
   5251   case CXCursor_NamespaceRef:
   5252     return cxstring::createRef("NamespaceRef");
   5253   case CXCursor_MemberRef:
   5254     return cxstring::createRef("MemberRef");
   5255   case CXCursor_LabelRef:
   5256     return cxstring::createRef("LabelRef");
   5257   case CXCursor_OverloadedDeclRef:
   5258     return cxstring::createRef("OverloadedDeclRef");
   5259   case CXCursor_VariableRef:
   5260     return cxstring::createRef("VariableRef");
   5261   case CXCursor_IntegerLiteral:
   5262     return cxstring::createRef("IntegerLiteral");
   5263   case CXCursor_FixedPointLiteral:
   5264     return cxstring::createRef("FixedPointLiteral");
   5265   case CXCursor_FloatingLiteral:
   5266     return cxstring::createRef("FloatingLiteral");
   5267   case CXCursor_ImaginaryLiteral:
   5268     return cxstring::createRef("ImaginaryLiteral");
   5269   case CXCursor_StringLiteral:
   5270     return cxstring::createRef("StringLiteral");
   5271   case CXCursor_CharacterLiteral:
   5272     return cxstring::createRef("CharacterLiteral");
   5273   case CXCursor_ParenExpr:
   5274     return cxstring::createRef("ParenExpr");
   5275   case CXCursor_UnaryOperator:
   5276     return cxstring::createRef("UnaryOperator");
   5277   case CXCursor_ArraySubscriptExpr:
   5278     return cxstring::createRef("ArraySubscriptExpr");
   5279   case CXCursor_OMPArraySectionExpr:
   5280     return cxstring::createRef("OMPArraySectionExpr");
   5281   case CXCursor_OMPArrayShapingExpr:
   5282     return cxstring::createRef("OMPArrayShapingExpr");
   5283   case CXCursor_OMPIteratorExpr:
   5284     return cxstring::createRef("OMPIteratorExpr");
   5285   case CXCursor_BinaryOperator:
   5286     return cxstring::createRef("BinaryOperator");
   5287   case CXCursor_CompoundAssignOperator:
   5288     return cxstring::createRef("CompoundAssignOperator");
   5289   case CXCursor_ConditionalOperator:
   5290     return cxstring::createRef("ConditionalOperator");
   5291   case CXCursor_CStyleCastExpr:
   5292     return cxstring::createRef("CStyleCastExpr");
   5293   case CXCursor_CompoundLiteralExpr:
   5294     return cxstring::createRef("CompoundLiteralExpr");
   5295   case CXCursor_InitListExpr:
   5296     return cxstring::createRef("InitListExpr");
   5297   case CXCursor_AddrLabelExpr:
   5298     return cxstring::createRef("AddrLabelExpr");
   5299   case CXCursor_StmtExpr:
   5300     return cxstring::createRef("StmtExpr");
   5301   case CXCursor_GenericSelectionExpr:
   5302     return cxstring::createRef("GenericSelectionExpr");
   5303   case CXCursor_GNUNullExpr:
   5304     return cxstring::createRef("GNUNullExpr");
   5305   case CXCursor_CXXStaticCastExpr:
   5306     return cxstring::createRef("CXXStaticCastExpr");
   5307   case CXCursor_CXXDynamicCastExpr:
   5308     return cxstring::createRef("CXXDynamicCastExpr");
   5309   case CXCursor_CXXReinterpretCastExpr:
   5310     return cxstring::createRef("CXXReinterpretCastExpr");
   5311   case CXCursor_CXXConstCastExpr:
   5312     return cxstring::createRef("CXXConstCastExpr");
   5313   case CXCursor_CXXFunctionalCastExpr:
   5314     return cxstring::createRef("CXXFunctionalCastExpr");
   5315   case CXCursor_CXXAddrspaceCastExpr:
   5316     return cxstring::createRef("CXXAddrspaceCastExpr");
   5317   case CXCursor_CXXTypeidExpr:
   5318     return cxstring::createRef("CXXTypeidExpr");
   5319   case CXCursor_CXXBoolLiteralExpr:
   5320     return cxstring::createRef("CXXBoolLiteralExpr");
   5321   case CXCursor_CXXNullPtrLiteralExpr:
   5322     return cxstring::createRef("CXXNullPtrLiteralExpr");
   5323   case CXCursor_CXXThisExpr:
   5324     return cxstring::createRef("CXXThisExpr");
   5325   case CXCursor_CXXThrowExpr:
   5326     return cxstring::createRef("CXXThrowExpr");
   5327   case CXCursor_CXXNewExpr:
   5328     return cxstring::createRef("CXXNewExpr");
   5329   case CXCursor_CXXDeleteExpr:
   5330     return cxstring::createRef("CXXDeleteExpr");
   5331   case CXCursor_UnaryExpr:
   5332     return cxstring::createRef("UnaryExpr");
   5333   case CXCursor_ObjCStringLiteral:
   5334     return cxstring::createRef("ObjCStringLiteral");
   5335   case CXCursor_ObjCBoolLiteralExpr:
   5336     return cxstring::createRef("ObjCBoolLiteralExpr");
   5337   case CXCursor_ObjCAvailabilityCheckExpr:
   5338     return cxstring::createRef("ObjCAvailabilityCheckExpr");
   5339   case CXCursor_ObjCSelfExpr:
   5340     return cxstring::createRef("ObjCSelfExpr");
   5341   case CXCursor_ObjCEncodeExpr:
   5342     return cxstring::createRef("ObjCEncodeExpr");
   5343   case CXCursor_ObjCSelectorExpr:
   5344     return cxstring::createRef("ObjCSelectorExpr");
   5345   case CXCursor_ObjCProtocolExpr:
   5346     return cxstring::createRef("ObjCProtocolExpr");
   5347   case CXCursor_ObjCBridgedCastExpr:
   5348     return cxstring::createRef("ObjCBridgedCastExpr");
   5349   case CXCursor_BlockExpr:
   5350     return cxstring::createRef("BlockExpr");
   5351   case CXCursor_PackExpansionExpr:
   5352     return cxstring::createRef("PackExpansionExpr");
   5353   case CXCursor_SizeOfPackExpr:
   5354     return cxstring::createRef("SizeOfPackExpr");
   5355   case CXCursor_LambdaExpr:
   5356     return cxstring::createRef("LambdaExpr");
   5357   case CXCursor_UnexposedExpr:
   5358     return cxstring::createRef("UnexposedExpr");
   5359   case CXCursor_DeclRefExpr:
   5360     return cxstring::createRef("DeclRefExpr");
   5361   case CXCursor_MemberRefExpr:
   5362     return cxstring::createRef("MemberRefExpr");
   5363   case CXCursor_CallExpr:
   5364     return cxstring::createRef("CallExpr");
   5365   case CXCursor_ObjCMessageExpr:
   5366     return cxstring::createRef("ObjCMessageExpr");
   5367   case CXCursor_BuiltinBitCastExpr:
   5368     return cxstring::createRef("BuiltinBitCastExpr");
   5369   case CXCursor_UnexposedStmt:
   5370     return cxstring::createRef("UnexposedStmt");
   5371   case CXCursor_DeclStmt:
   5372     return cxstring::createRef("DeclStmt");
   5373   case CXCursor_LabelStmt:
   5374     return cxstring::createRef("LabelStmt");
   5375   case CXCursor_CompoundStmt:
   5376     return cxstring::createRef("CompoundStmt");
   5377   case CXCursor_CaseStmt:
   5378     return cxstring::createRef("CaseStmt");
   5379   case CXCursor_DefaultStmt:
   5380     return cxstring::createRef("DefaultStmt");
   5381   case CXCursor_IfStmt:
   5382     return cxstring::createRef("IfStmt");
   5383   case CXCursor_SwitchStmt:
   5384     return cxstring::createRef("SwitchStmt");
   5385   case CXCursor_WhileStmt:
   5386     return cxstring::createRef("WhileStmt");
   5387   case CXCursor_DoStmt:
   5388     return cxstring::createRef("DoStmt");
   5389   case CXCursor_ForStmt:
   5390     return cxstring::createRef("ForStmt");
   5391   case CXCursor_GotoStmt:
   5392     return cxstring::createRef("GotoStmt");
   5393   case CXCursor_IndirectGotoStmt:
   5394     return cxstring::createRef("IndirectGotoStmt");
   5395   case CXCursor_ContinueStmt:
   5396     return cxstring::createRef("ContinueStmt");
   5397   case CXCursor_BreakStmt:
   5398     return cxstring::createRef("BreakStmt");
   5399   case CXCursor_ReturnStmt:
   5400     return cxstring::createRef("ReturnStmt");
   5401   case CXCursor_GCCAsmStmt:
   5402     return cxstring::createRef("GCCAsmStmt");
   5403   case CXCursor_MSAsmStmt:
   5404     return cxstring::createRef("MSAsmStmt");
   5405   case CXCursor_ObjCAtTryStmt:
   5406     return cxstring::createRef("ObjCAtTryStmt");
   5407   case CXCursor_ObjCAtCatchStmt:
   5408     return cxstring::createRef("ObjCAtCatchStmt");
   5409   case CXCursor_ObjCAtFinallyStmt:
   5410     return cxstring::createRef("ObjCAtFinallyStmt");
   5411   case CXCursor_ObjCAtThrowStmt:
   5412     return cxstring::createRef("ObjCAtThrowStmt");
   5413   case CXCursor_ObjCAtSynchronizedStmt:
   5414     return cxstring::createRef("ObjCAtSynchronizedStmt");
   5415   case CXCursor_ObjCAutoreleasePoolStmt:
   5416     return cxstring::createRef("ObjCAutoreleasePoolStmt");
   5417   case CXCursor_ObjCForCollectionStmt:
   5418     return cxstring::createRef("ObjCForCollectionStmt");
   5419   case CXCursor_CXXCatchStmt:
   5420     return cxstring::createRef("CXXCatchStmt");
   5421   case CXCursor_CXXTryStmt:
   5422     return cxstring::createRef("CXXTryStmt");
   5423   case CXCursor_CXXForRangeStmt:
   5424     return cxstring::createRef("CXXForRangeStmt");
   5425   case CXCursor_SEHTryStmt:
   5426     return cxstring::createRef("SEHTryStmt");
   5427   case CXCursor_SEHExceptStmt:
   5428     return cxstring::createRef("SEHExceptStmt");
   5429   case CXCursor_SEHFinallyStmt:
   5430     return cxstring::createRef("SEHFinallyStmt");
   5431   case CXCursor_SEHLeaveStmt:
   5432     return cxstring::createRef("SEHLeaveStmt");
   5433   case CXCursor_NullStmt:
   5434     return cxstring::createRef("NullStmt");
   5435   case CXCursor_InvalidFile:
   5436     return cxstring::createRef("InvalidFile");
   5437   case CXCursor_InvalidCode:
   5438     return cxstring::createRef("InvalidCode");
   5439   case CXCursor_NoDeclFound:
   5440     return cxstring::createRef("NoDeclFound");
   5441   case CXCursor_NotImplemented:
   5442     return cxstring::createRef("NotImplemented");
   5443   case CXCursor_TranslationUnit:
   5444     return cxstring::createRef("TranslationUnit");
   5445   case CXCursor_UnexposedAttr:
   5446     return cxstring::createRef("UnexposedAttr");
   5447   case CXCursor_IBActionAttr:
   5448     return cxstring::createRef("attribute(ibaction)");
   5449   case CXCursor_IBOutletAttr:
   5450     return cxstring::createRef("attribute(iboutlet)");
   5451   case CXCursor_IBOutletCollectionAttr:
   5452     return cxstring::createRef("attribute(iboutletcollection)");
   5453   case CXCursor_CXXFinalAttr:
   5454     return cxstring::createRef("attribute(final)");
   5455   case CXCursor_CXXOverrideAttr:
   5456     return cxstring::createRef("attribute(override)");
   5457   case CXCursor_AnnotateAttr:
   5458     return cxstring::createRef("attribute(annotate)");
   5459   case CXCursor_AsmLabelAttr:
   5460     return cxstring::createRef("asm label");
   5461   case CXCursor_PackedAttr:
   5462     return cxstring::createRef("attribute(packed)");
   5463   case CXCursor_PureAttr:
   5464     return cxstring::createRef("attribute(pure)");
   5465   case CXCursor_ConstAttr:
   5466     return cxstring::createRef("attribute(const)");
   5467   case CXCursor_NoDuplicateAttr:
   5468     return cxstring::createRef("attribute(noduplicate)");
   5469   case CXCursor_CUDAConstantAttr:
   5470     return cxstring::createRef("attribute(constant)");
   5471   case CXCursor_CUDADeviceAttr:
   5472     return cxstring::createRef("attribute(device)");
   5473   case CXCursor_CUDAGlobalAttr:
   5474     return cxstring::createRef("attribute(global)");
   5475   case CXCursor_CUDAHostAttr:
   5476     return cxstring::createRef("attribute(host)");
   5477   case CXCursor_CUDASharedAttr:
   5478     return cxstring::createRef("attribute(shared)");
   5479   case CXCursor_VisibilityAttr:
   5480     return cxstring::createRef("attribute(visibility)");
   5481   case CXCursor_DLLExport:
   5482     return cxstring::createRef("attribute(dllexport)");
   5483   case CXCursor_DLLImport:
   5484     return cxstring::createRef("attribute(dllimport)");
   5485   case CXCursor_NSReturnsRetained:
   5486     return cxstring::createRef("attribute(ns_returns_retained)");
   5487   case CXCursor_NSReturnsNotRetained:
   5488     return cxstring::createRef("attribute(ns_returns_not_retained)");
   5489   case CXCursor_NSReturnsAutoreleased:
   5490     return cxstring::createRef("attribute(ns_returns_autoreleased)");
   5491   case CXCursor_NSConsumesSelf:
   5492     return cxstring::createRef("attribute(ns_consumes_self)");
   5493   case CXCursor_NSConsumed:
   5494     return cxstring::createRef("attribute(ns_consumed)");
   5495   case CXCursor_ObjCException:
   5496     return cxstring::createRef("attribute(objc_exception)");
   5497   case CXCursor_ObjCNSObject:
   5498     return cxstring::createRef("attribute(NSObject)");
   5499   case CXCursor_ObjCIndependentClass:
   5500     return cxstring::createRef("attribute(objc_independent_class)");
   5501   case CXCursor_ObjCPreciseLifetime:
   5502     return cxstring::createRef("attribute(objc_precise_lifetime)");
   5503   case CXCursor_ObjCReturnsInnerPointer:
   5504     return cxstring::createRef("attribute(objc_returns_inner_pointer)");
   5505   case CXCursor_ObjCRequiresSuper:
   5506     return cxstring::createRef("attribute(objc_requires_super)");
   5507   case CXCursor_ObjCRootClass:
   5508     return cxstring::createRef("attribute(objc_root_class)");
   5509   case CXCursor_ObjCSubclassingRestricted:
   5510     return cxstring::createRef("attribute(objc_subclassing_restricted)");
   5511   case CXCursor_ObjCExplicitProtocolImpl:
   5512     return cxstring::createRef(
   5513         "attribute(objc_protocol_requires_explicit_implementation)");
   5514   case CXCursor_ObjCDesignatedInitializer:
   5515     return cxstring::createRef("attribute(objc_designated_initializer)");
   5516   case CXCursor_ObjCRuntimeVisible:
   5517     return cxstring::createRef("attribute(objc_runtime_visible)");
   5518   case CXCursor_ObjCBoxable:
   5519     return cxstring::createRef("attribute(objc_boxable)");
   5520   case CXCursor_FlagEnum:
   5521     return cxstring::createRef("attribute(flag_enum)");
   5522   case CXCursor_PreprocessingDirective:
   5523     return cxstring::createRef("preprocessing directive");
   5524   case CXCursor_MacroDefinition:
   5525     return cxstring::createRef("macro definition");
   5526   case CXCursor_MacroExpansion:
   5527     return cxstring::createRef("macro expansion");
   5528   case CXCursor_InclusionDirective:
   5529     return cxstring::createRef("inclusion directive");
   5530   case CXCursor_Namespace:
   5531     return cxstring::createRef("Namespace");
   5532   case CXCursor_LinkageSpec:
   5533     return cxstring::createRef("LinkageSpec");
   5534   case CXCursor_CXXBaseSpecifier:
   5535     return cxstring::createRef("C++ base class specifier");
   5536   case CXCursor_Constructor:
   5537     return cxstring::createRef("CXXConstructor");
   5538   case CXCursor_Destructor:
   5539     return cxstring::createRef("CXXDestructor");
   5540   case CXCursor_ConversionFunction:
   5541     return cxstring::createRef("CXXConversion");
   5542   case CXCursor_TemplateTypeParameter:
   5543     return cxstring::createRef("TemplateTypeParameter");
   5544   case CXCursor_NonTypeTemplateParameter:
   5545     return cxstring::createRef("NonTypeTemplateParameter");
   5546   case CXCursor_TemplateTemplateParameter:
   5547     return cxstring::createRef("TemplateTemplateParameter");
   5548   case CXCursor_FunctionTemplate:
   5549     return cxstring::createRef("FunctionTemplate");
   5550   case CXCursor_ClassTemplate:
   5551     return cxstring::createRef("ClassTemplate");
   5552   case CXCursor_ClassTemplatePartialSpecialization:
   5553     return cxstring::createRef("ClassTemplatePartialSpecialization");
   5554   case CXCursor_NamespaceAlias:
   5555     return cxstring::createRef("NamespaceAlias");
   5556   case CXCursor_UsingDirective:
   5557     return cxstring::createRef("UsingDirective");
   5558   case CXCursor_UsingDeclaration:
   5559     return cxstring::createRef("UsingDeclaration");
   5560   case CXCursor_TypeAliasDecl:
   5561     return cxstring::createRef("TypeAliasDecl");
   5562   case CXCursor_ObjCSynthesizeDecl:
   5563     return cxstring::createRef("ObjCSynthesizeDecl");
   5564   case CXCursor_ObjCDynamicDecl:
   5565     return cxstring::createRef("ObjCDynamicDecl");
   5566   case CXCursor_CXXAccessSpecifier:
   5567     return cxstring::createRef("CXXAccessSpecifier");
   5568   case CXCursor_ModuleImportDecl:
   5569     return cxstring::createRef("ModuleImport");
   5570   case CXCursor_OMPCanonicalLoop:
   5571     return cxstring::createRef("OMPCanonicalLoop");
   5572   case CXCursor_OMPParallelDirective:
   5573     return cxstring::createRef("OMPParallelDirective");
   5574   case CXCursor_OMPSimdDirective:
   5575     return cxstring::createRef("OMPSimdDirective");
   5576   case CXCursor_OMPTileDirective:
   5577     return cxstring::createRef("OMPTileDirective");
   5578   case CXCursor_OMPForDirective:
   5579     return cxstring::createRef("OMPForDirective");
   5580   case CXCursor_OMPForSimdDirective:
   5581     return cxstring::createRef("OMPForSimdDirective");
   5582   case CXCursor_OMPSectionsDirective:
   5583     return cxstring::createRef("OMPSectionsDirective");
   5584   case CXCursor_OMPSectionDirective:
   5585     return cxstring::createRef("OMPSectionDirective");
   5586   case CXCursor_OMPSingleDirective:
   5587     return cxstring::createRef("OMPSingleDirective");
   5588   case CXCursor_OMPMasterDirective:
   5589     return cxstring::createRef("OMPMasterDirective");
   5590   case CXCursor_OMPCriticalDirective:
   5591     return cxstring::createRef("OMPCriticalDirective");
   5592   case CXCursor_OMPParallelForDirective:
   5593     return cxstring::createRef("OMPParallelForDirective");
   5594   case CXCursor_OMPParallelForSimdDirective:
   5595     return cxstring::createRef("OMPParallelForSimdDirective");
   5596   case CXCursor_OMPParallelMasterDirective:
   5597     return cxstring::createRef("OMPParallelMasterDirective");
   5598   case CXCursor_OMPParallelSectionsDirective:
   5599     return cxstring::createRef("OMPParallelSectionsDirective");
   5600   case CXCursor_OMPTaskDirective:
   5601     return cxstring::createRef("OMPTaskDirective");
   5602   case CXCursor_OMPTaskyieldDirective:
   5603     return cxstring::createRef("OMPTaskyieldDirective");
   5604   case CXCursor_OMPBarrierDirective:
   5605     return cxstring::createRef("OMPBarrierDirective");
   5606   case CXCursor_OMPTaskwaitDirective:
   5607     return cxstring::createRef("OMPTaskwaitDirective");
   5608   case CXCursor_OMPTaskgroupDirective:
   5609     return cxstring::createRef("OMPTaskgroupDirective");
   5610   case CXCursor_OMPFlushDirective:
   5611     return cxstring::createRef("OMPFlushDirective");
   5612   case CXCursor_OMPDepobjDirective:
   5613     return cxstring::createRef("OMPDepobjDirective");
   5614   case CXCursor_OMPScanDirective:
   5615     return cxstring::createRef("OMPScanDirective");
   5616   case CXCursor_OMPOrderedDirective:
   5617     return cxstring::createRef("OMPOrderedDirective");
   5618   case CXCursor_OMPAtomicDirective:
   5619     return cxstring::createRef("OMPAtomicDirective");
   5620   case CXCursor_OMPTargetDirective:
   5621     return cxstring::createRef("OMPTargetDirective");
   5622   case CXCursor_OMPTargetDataDirective:
   5623     return cxstring::createRef("OMPTargetDataDirective");
   5624   case CXCursor_OMPTargetEnterDataDirective:
   5625     return cxstring::createRef("OMPTargetEnterDataDirective");
   5626   case CXCursor_OMPTargetExitDataDirective:
   5627     return cxstring::createRef("OMPTargetExitDataDirective");
   5628   case CXCursor_OMPTargetParallelDirective:
   5629     return cxstring::createRef("OMPTargetParallelDirective");
   5630   case CXCursor_OMPTargetParallelForDirective:
   5631     return cxstring::createRef("OMPTargetParallelForDirective");
   5632   case CXCursor_OMPTargetUpdateDirective:
   5633     return cxstring::createRef("OMPTargetUpdateDirective");
   5634   case CXCursor_OMPTeamsDirective:
   5635     return cxstring::createRef("OMPTeamsDirective");
   5636   case CXCursor_OMPCancellationPointDirective:
   5637     return cxstring::createRef("OMPCancellationPointDirective");
   5638   case CXCursor_OMPCancelDirective:
   5639     return cxstring::createRef("OMPCancelDirective");
   5640   case CXCursor_OMPTaskLoopDirective:
   5641     return cxstring::createRef("OMPTaskLoopDirective");
   5642   case CXCursor_OMPTaskLoopSimdDirective:
   5643     return cxstring::createRef("OMPTaskLoopSimdDirective");
   5644   case CXCursor_OMPMasterTaskLoopDirective:
   5645     return cxstring::createRef("OMPMasterTaskLoopDirective");
   5646   case CXCursor_OMPMasterTaskLoopSimdDirective:
   5647     return cxstring::createRef("OMPMasterTaskLoopSimdDirective");
   5648   case CXCursor_OMPParallelMasterTaskLoopDirective:
   5649     return cxstring::createRef("OMPParallelMasterTaskLoopDirective");
   5650   case CXCursor_OMPParallelMasterTaskLoopSimdDirective:
   5651     return cxstring::createRef("OMPParallelMasterTaskLoopSimdDirective");
   5652   case CXCursor_OMPDistributeDirective:
   5653     return cxstring::createRef("OMPDistributeDirective");
   5654   case CXCursor_OMPDistributeParallelForDirective:
   5655     return cxstring::createRef("OMPDistributeParallelForDirective");
   5656   case CXCursor_OMPDistributeParallelForSimdDirective:
   5657     return cxstring::createRef("OMPDistributeParallelForSimdDirective");
   5658   case CXCursor_OMPDistributeSimdDirective:
   5659     return cxstring::createRef("OMPDistributeSimdDirective");
   5660   case CXCursor_OMPTargetParallelForSimdDirective:
   5661     return cxstring::createRef("OMPTargetParallelForSimdDirective");
   5662   case CXCursor_OMPTargetSimdDirective:
   5663     return cxstring::createRef("OMPTargetSimdDirective");
   5664   case CXCursor_OMPTeamsDistributeDirective:
   5665     return cxstring::createRef("OMPTeamsDistributeDirective");
   5666   case CXCursor_OMPTeamsDistributeSimdDirective:
   5667     return cxstring::createRef("OMPTeamsDistributeSimdDirective");
   5668   case CXCursor_OMPTeamsDistributeParallelForSimdDirective:
   5669     return cxstring::createRef("OMPTeamsDistributeParallelForSimdDirective");
   5670   case CXCursor_OMPTeamsDistributeParallelForDirective:
   5671     return cxstring::createRef("OMPTeamsDistributeParallelForDirective");
   5672   case CXCursor_OMPTargetTeamsDirective:
   5673     return cxstring::createRef("OMPTargetTeamsDirective");
   5674   case CXCursor_OMPTargetTeamsDistributeDirective:
   5675     return cxstring::createRef("OMPTargetTeamsDistributeDirective");
   5676   case CXCursor_OMPTargetTeamsDistributeParallelForDirective:
   5677     return cxstring::createRef("OMPTargetTeamsDistributeParallelForDirective");
   5678   case CXCursor_OMPTargetTeamsDistributeParallelForSimdDirective:
   5679     return cxstring::createRef(
   5680         "OMPTargetTeamsDistributeParallelForSimdDirective");
   5681   case CXCursor_OMPTargetTeamsDistributeSimdDirective:
   5682     return cxstring::createRef("OMPTargetTeamsDistributeSimdDirective");
   5683   case CXCursor_OMPInteropDirective:
   5684     return cxstring::createRef("OMPInteropDirective");
   5685   case CXCursor_OMPDispatchDirective:
   5686     return cxstring::createRef("OMPDispatchDirective");
   5687   case CXCursor_OMPMaskedDirective:
   5688     return cxstring::createRef("OMPMaskedDirective");
   5689   case CXCursor_OverloadCandidate:
   5690     return cxstring::createRef("OverloadCandidate");
   5691   case CXCursor_TypeAliasTemplateDecl:
   5692     return cxstring::createRef("TypeAliasTemplateDecl");
   5693   case CXCursor_StaticAssert:
   5694     return cxstring::createRef("StaticAssert");
   5695   case CXCursor_FriendDecl:
   5696     return cxstring::createRef("FriendDecl");
   5697   case CXCursor_ConvergentAttr:
   5698     return cxstring::createRef("attribute(convergent)");
   5699   case CXCursor_WarnUnusedAttr:
   5700     return cxstring::createRef("attribute(warn_unused)");
   5701   case CXCursor_WarnUnusedResultAttr:
   5702     return cxstring::createRef("attribute(warn_unused_result)");
   5703   case CXCursor_AlignedAttr:
   5704     return cxstring::createRef("attribute(aligned)");
   5705   }
   5706 
   5707   llvm_unreachable("Unhandled CXCursorKind");
   5708 }
   5709 
   5710 struct GetCursorData {
   5711   SourceLocation TokenBeginLoc;
   5712   bool PointsAtMacroArgExpansion;
   5713   bool VisitedObjCPropertyImplDecl;
   5714   SourceLocation VisitedDeclaratorDeclStartLoc;
   5715   CXCursor &BestCursor;
   5716 
   5717   GetCursorData(SourceManager &SM, SourceLocation tokenBegin,
   5718                 CXCursor &outputCursor)
   5719       : TokenBeginLoc(tokenBegin), BestCursor(outputCursor) {
   5720     PointsAtMacroArgExpansion = SM.isMacroArgExpansion(tokenBegin);
   5721     VisitedObjCPropertyImplDecl = false;
   5722   }
   5723 };
   5724 
   5725 static enum CXChildVisitResult
   5726 GetCursorVisitor(CXCursor cursor, CXCursor parent, CXClientData client_data) {
   5727   GetCursorData *Data = static_cast<GetCursorData *>(client_data);
   5728   CXCursor *BestCursor = &Data->BestCursor;
   5729 
   5730   // If we point inside a macro argument we should provide info of what the
   5731   // token is so use the actual cursor, don't replace it with a macro expansion
   5732   // cursor.
   5733   if (cursor.kind == CXCursor_MacroExpansion && Data->PointsAtMacroArgExpansion)
   5734     return CXChildVisit_Recurse;
   5735 
   5736   if (clang_isDeclaration(cursor.kind)) {
   5737     // Avoid having the implicit methods override the property decls.
   5738     if (const ObjCMethodDecl *MD =
   5739             dyn_cast_or_null<ObjCMethodDecl>(getCursorDecl(cursor))) {
   5740       if (MD->isImplicit())
   5741         return CXChildVisit_Break;
   5742 
   5743     } else if (const ObjCInterfaceDecl *ID =
   5744                    dyn_cast_or_null<ObjCInterfaceDecl>(getCursorDecl(cursor))) {
   5745       // Check that when we have multiple @class references in the same line,
   5746       // that later ones do not override the previous ones.
   5747       // If we have:
   5748       // @class Foo, Bar;
   5749       // source ranges for both start at '@', so 'Bar' will end up overriding
   5750       // 'Foo' even though the cursor location was at 'Foo'.
   5751       if (BestCursor->kind == CXCursor_ObjCInterfaceDecl ||
   5752           BestCursor->kind == CXCursor_ObjCClassRef)
   5753         if (const ObjCInterfaceDecl *PrevID =
   5754                 dyn_cast_or_null<ObjCInterfaceDecl>(
   5755                     getCursorDecl(*BestCursor))) {
   5756           if (PrevID != ID && !PrevID->isThisDeclarationADefinition() &&
   5757               !ID->isThisDeclarationADefinition())
   5758             return CXChildVisit_Break;
   5759         }
   5760 
   5761     } else if (const DeclaratorDecl *DD =
   5762                    dyn_cast_or_null<DeclaratorDecl>(getCursorDecl(cursor))) {
   5763       SourceLocation StartLoc = DD->getSourceRange().getBegin();
   5764       // Check that when we have multiple declarators in the same line,
   5765       // that later ones do not override the previous ones.
   5766       // If we have:
   5767       // int Foo, Bar;
   5768       // source ranges for both start at 'int', so 'Bar' will end up overriding
   5769       // 'Foo' even though the cursor location was at 'Foo'.
   5770       if (Data->VisitedDeclaratorDeclStartLoc == StartLoc)
   5771         return CXChildVisit_Break;
   5772       Data->VisitedDeclaratorDeclStartLoc = StartLoc;
   5773 
   5774     } else if (const ObjCPropertyImplDecl *PropImp =
   5775                    dyn_cast_or_null<ObjCPropertyImplDecl>(
   5776                        getCursorDecl(cursor))) {
   5777       (void)PropImp;
   5778       // Check that when we have multiple @synthesize in the same line,
   5779       // that later ones do not override the previous ones.
   5780       // If we have:
   5781       // @synthesize Foo, Bar;
   5782       // source ranges for both start at '@', so 'Bar' will end up overriding
   5783       // 'Foo' even though the cursor location was at 'Foo'.
   5784       if (Data->VisitedObjCPropertyImplDecl)
   5785         return CXChildVisit_Break;
   5786       Data->VisitedObjCPropertyImplDecl = true;
   5787     }
   5788   }
   5789 
   5790   if (clang_isExpression(cursor.kind) &&
   5791       clang_isDeclaration(BestCursor->kind)) {
   5792     if (const Decl *D = getCursorDecl(*BestCursor)) {
   5793       // Avoid having the cursor of an expression replace the declaration cursor
   5794       // when the expression source range overlaps the declaration range.
   5795       // This can happen for C++ constructor expressions whose range generally
   5796       // include the variable declaration, e.g.:
   5797       //  MyCXXClass foo; // Make sure pointing at 'foo' returns a VarDecl
   5798       //  cursor.
   5799       if (D->getLocation().isValid() && Data->TokenBeginLoc.isValid() &&
   5800           D->getLocation() == Data->TokenBeginLoc)
   5801         return CXChildVisit_Break;
   5802     }
   5803   }
   5804 
   5805   // If our current best cursor is the construction of a temporary object,
   5806   // don't replace that cursor with a type reference, because we want
   5807   // clang_getCursor() to point at the constructor.
   5808   if (clang_isExpression(BestCursor->kind) &&
   5809       isa<CXXTemporaryObjectExpr>(getCursorExpr(*BestCursor)) &&
   5810       cursor.kind == CXCursor_TypeRef) {
   5811     // Keep the cursor pointing at CXXTemporaryObjectExpr but also mark it
   5812     // as having the actual point on the type reference.
   5813     *BestCursor = getTypeRefedCallExprCursor(*BestCursor);
   5814     return CXChildVisit_Recurse;
   5815   }
   5816 
   5817   // If we already have an Objective-C superclass reference, don't
   5818   // update it further.
   5819   if (BestCursor->kind == CXCursor_ObjCSuperClassRef)
   5820     return CXChildVisit_Break;
   5821 
   5822   *BestCursor = cursor;
   5823   return CXChildVisit_Recurse;
   5824 }
   5825 
   5826 CXCursor clang_getCursor(CXTranslationUnit TU, CXSourceLocation Loc) {
   5827   if (isNotUsableTU(TU)) {
   5828     LOG_BAD_TU(TU);
   5829     return clang_getNullCursor();
   5830   }
   5831 
   5832   ASTUnit *CXXUnit = cxtu::getASTUnit(TU);
   5833   ASTUnit::ConcurrencyCheck Check(*CXXUnit);
   5834 
   5835   SourceLocation SLoc = cxloc::translateSourceLocation(Loc);
   5836   CXCursor Result = cxcursor::getCursor(TU, SLoc);
   5837 
   5838   LOG_FUNC_SECTION {
   5839     CXFile SearchFile;
   5840     unsigned SearchLine, SearchColumn;
   5841     CXFile ResultFile;
   5842     unsigned ResultLine, ResultColumn;
   5843     CXString SearchFileName, ResultFileName, KindSpelling, USR;
   5844     const char *IsDef = clang_isCursorDefinition(Result) ? " (Definition)" : "";
   5845     CXSourceLocation ResultLoc = clang_getCursorLocation(Result);
   5846 
   5847     clang_getFileLocation(Loc, &SearchFile, &SearchLine, &SearchColumn,
   5848                           nullptr);
   5849     clang_getFileLocation(ResultLoc, &ResultFile, &ResultLine, &ResultColumn,
   5850                           nullptr);
   5851     SearchFileName = clang_getFileName(SearchFile);
   5852     ResultFileName = clang_getFileName(ResultFile);
   5853     KindSpelling = clang_getCursorKindSpelling(Result.kind);
   5854     USR = clang_getCursorUSR(Result);
   5855     *Log << llvm::format("(%s:%d:%d) = %s", clang_getCString(SearchFileName),
   5856                          SearchLine, SearchColumn,
   5857                          clang_getCString(KindSpelling))
   5858          << llvm::format("(%s:%d:%d):%s%s", clang_getCString(ResultFileName),
   5859                          ResultLine, ResultColumn, clang_getCString(USR),
   5860                          IsDef);
   5861     clang_disposeString(SearchFileName);
   5862     clang_disposeString(ResultFileName);
   5863     clang_disposeString(KindSpelling);
   5864     clang_disposeString(USR);
   5865 
   5866     CXCursor Definition = clang_getCursorDefinition(Result);
   5867     if (!clang_equalCursors(Definition, clang_getNullCursor())) {
   5868       CXSourceLocation DefinitionLoc = clang_getCursorLocation(Definition);
   5869       CXString DefinitionKindSpelling =
   5870           clang_getCursorKindSpelling(Definition.kind);
   5871       CXFile DefinitionFile;
   5872       unsigned DefinitionLine, DefinitionColumn;
   5873       clang_getFileLocation(DefinitionLoc, &DefinitionFile, &DefinitionLine,
   5874                             &DefinitionColumn, nullptr);
   5875       CXString DefinitionFileName = clang_getFileName(DefinitionFile);
   5876       *Log << llvm::format("  -> %s(%s:%d:%d)",
   5877                            clang_getCString(DefinitionKindSpelling),
   5878                            clang_getCString(DefinitionFileName), DefinitionLine,
   5879                            DefinitionColumn);
   5880       clang_disposeString(DefinitionFileName);
   5881       clang_disposeString(DefinitionKindSpelling);
   5882     }
   5883   }
   5884 
   5885   return Result;
   5886 }
   5887 
   5888 CXCursor clang_getNullCursor(void) {
   5889   return MakeCXCursorInvalid(CXCursor_InvalidFile);
   5890 }
   5891 
   5892 unsigned clang_equalCursors(CXCursor X, CXCursor Y) {
   5893   // Clear out the "FirstInDeclGroup" part in a declaration cursor, since we
   5894   // can't set consistently. For example, when visiting a DeclStmt we will set
   5895   // it but we don't set it on the result of clang_getCursorDefinition for
   5896   // a reference of the same declaration.
   5897   // FIXME: Setting "FirstInDeclGroup" in CXCursors is a hack that only works
   5898   // when visiting a DeclStmt currently, the AST should be enhanced to be able
   5899   // to provide that kind of info.
   5900   if (clang_isDeclaration(X.kind))
   5901     X.data[1] = nullptr;
   5902   if (clang_isDeclaration(Y.kind))
   5903     Y.data[1] = nullptr;
   5904 
   5905   return X == Y;
   5906 }
   5907 
   5908 unsigned clang_hashCursor(CXCursor C) {
   5909   unsigned Index = 0;
   5910   if (clang_isExpression(C.kind) || clang_isStatement(C.kind))
   5911     Index = 1;
   5912 
   5913   return llvm::DenseMapInfo<std::pair<unsigned, const void *>>::getHashValue(
   5914       std::make_pair(C.kind, C.data[Index]));
   5915 }
   5916 
   5917 unsigned clang_isInvalid(enum CXCursorKind K) {
   5918   return K >= CXCursor_FirstInvalid && K <= CXCursor_LastInvalid;
   5919 }
   5920 
   5921 unsigned clang_isDeclaration(enum CXCursorKind K) {
   5922   return (K >= CXCursor_FirstDecl && K <= CXCursor_LastDecl) ||
   5923          (K >= CXCursor_FirstExtraDecl && K <= CXCursor_LastExtraDecl);
   5924 }
   5925 
   5926 unsigned clang_isInvalidDeclaration(CXCursor C) {
   5927   if (clang_isDeclaration(C.kind)) {
   5928     if (const Decl *D = getCursorDecl(C))
   5929       return D->isInvalidDecl();
   5930   }
   5931 
   5932   return 0;
   5933 }
   5934 
   5935 unsigned clang_isReference(enum CXCursorKind K) {
   5936   return K >= CXCursor_FirstRef && K <= CXCursor_LastRef;
   5937 }
   5938 
   5939 unsigned clang_isExpression(enum CXCursorKind K) {
   5940   return K >= CXCursor_FirstExpr && K <= CXCursor_LastExpr;
   5941 }
   5942 
   5943 unsigned clang_isStatement(enum CXCursorKind K) {
   5944   return K >= CXCursor_FirstStmt && K <= CXCursor_LastStmt;
   5945 }
   5946 
   5947 unsigned clang_isAttribute(enum CXCursorKind K) {
   5948   return K >= CXCursor_FirstAttr && K <= CXCursor_LastAttr;
   5949 }
   5950 
   5951 unsigned clang_isTranslationUnit(enum CXCursorKind K) {
   5952   return K == CXCursor_TranslationUnit;
   5953 }
   5954 
   5955 unsigned clang_isPreprocessing(enum CXCursorKind K) {
   5956   return K >= CXCursor_FirstPreprocessing && K <= CXCursor_LastPreprocessing;
   5957 }
   5958 
   5959 unsigned clang_isUnexposed(enum CXCursorKind K) {
   5960   switch (K) {
   5961   case CXCursor_UnexposedDecl:
   5962   case CXCursor_UnexposedExpr:
   5963   case CXCursor_UnexposedStmt:
   5964   case CXCursor_UnexposedAttr:
   5965     return true;
   5966   default:
   5967     return false;
   5968   }
   5969 }
   5970 
   5971 CXCursorKind clang_getCursorKind(CXCursor C) { return C.kind; }
   5972 
   5973 CXSourceLocation clang_getCursorLocation(CXCursor C) {
   5974   if (clang_isReference(C.kind)) {
   5975     switch (C.kind) {
   5976     case CXCursor_ObjCSuperClassRef: {
   5977       std::pair<const ObjCInterfaceDecl *, SourceLocation> P =
   5978           getCursorObjCSuperClassRef(C);
   5979       return cxloc::translateSourceLocation(P.first->getASTContext(), P.second);
   5980     }
   5981 
   5982     case CXCursor_ObjCProtocolRef: {
   5983       std::pair<const ObjCProtocolDecl *, SourceLocation> P =
   5984           getCursorObjCProtocolRef(C);
   5985       return cxloc::translateSourceLocation(P.first->getASTContext(), P.second);
   5986     }
   5987 
   5988     case CXCursor_ObjCClassRef: {
   5989       std::pair<const ObjCInterfaceDecl *, SourceLocation> P =
   5990           getCursorObjCClassRef(C);
   5991       return cxloc::translateSourceLocation(P.first->getASTContext(), P.second);
   5992     }
   5993 
   5994     case CXCursor_TypeRef: {
   5995       std::pair<const TypeDecl *, SourceLocation> P = getCursorTypeRef(C);
   5996       return cxloc::translateSourceLocation(P.first->getASTContext(), P.second);
   5997     }
   5998 
   5999     case CXCursor_TemplateRef: {
   6000       std::pair<const TemplateDecl *, SourceLocation> P =
   6001           getCursorTemplateRef(C);
   6002       return cxloc::translateSourceLocation(P.first->getASTContext(), P.second);
   6003     }
   6004 
   6005     case CXCursor_NamespaceRef: {
   6006       std::pair<const NamedDecl *, SourceLocation> P = getCursorNamespaceRef(C);
   6007       return cxloc::translateSourceLocation(P.first->getASTContext(), P.second);
   6008     }
   6009 
   6010     case CXCursor_MemberRef: {
   6011       std::pair<const FieldDecl *, SourceLocation> P = getCursorMemberRef(C);
   6012       return cxloc::translateSourceLocation(P.first->getASTContext(), P.second);
   6013     }
   6014 
   6015     case CXCursor_VariableRef: {
   6016       std::pair<const VarDecl *, SourceLocation> P = getCursorVariableRef(C);
   6017       return cxloc::translateSourceLocation(P.first->getASTContext(), P.second);
   6018     }
   6019 
   6020     case CXCursor_CXXBaseSpecifier: {
   6021       const CXXBaseSpecifier *BaseSpec = getCursorCXXBaseSpecifier(C);
   6022       if (!BaseSpec)
   6023         return clang_getNullLocation();
   6024 
   6025       if (TypeSourceInfo *TSInfo = BaseSpec->getTypeSourceInfo())
   6026         return cxloc::translateSourceLocation(
   6027             getCursorContext(C), TSInfo->getTypeLoc().getBeginLoc());
   6028 
   6029       return cxloc::translateSourceLocation(getCursorContext(C),
   6030                                             BaseSpec->getBeginLoc());
   6031     }
   6032 
   6033     case CXCursor_LabelRef: {
   6034       std::pair<const LabelStmt *, SourceLocation> P = getCursorLabelRef(C);
   6035       return cxloc::translateSourceLocation(getCursorContext(C), P.second);
   6036     }
   6037 
   6038     case CXCursor_OverloadedDeclRef:
   6039       return cxloc::translateSourceLocation(
   6040           getCursorContext(C), getCursorOverloadedDeclRef(C).second);
   6041 
   6042     default:
   6043       // FIXME: Need a way to enumerate all non-reference cases.
   6044       llvm_unreachable("Missed a reference kind");
   6045     }
   6046   }
   6047 
   6048   if (clang_isExpression(C.kind))
   6049     return cxloc::translateSourceLocation(
   6050         getCursorContext(C), getLocationFromExpr(getCursorExpr(C)));
   6051 
   6052   if (clang_isStatement(C.kind))
   6053     return cxloc::translateSourceLocation(getCursorContext(C),
   6054                                           getCursorStmt(C)->getBeginLoc());
   6055 
   6056   if (C.kind == CXCursor_PreprocessingDirective) {
   6057     SourceLocation L = cxcursor::getCursorPreprocessingDirective(C).getBegin();
   6058     return cxloc::translateSourceLocation(getCursorContext(C), L);
   6059   }
   6060 
   6061   if (C.kind == CXCursor_MacroExpansion) {
   6062     SourceLocation L =
   6063         cxcursor::getCursorMacroExpansion(C).getSourceRange().getBegin();
   6064     return cxloc::translateSourceLocation(getCursorContext(C), L);
   6065   }
   6066 
   6067   if (C.kind == CXCursor_MacroDefinition) {
   6068     SourceLocation L = cxcursor::getCursorMacroDefinition(C)->getLocation();
   6069     return cxloc::translateSourceLocation(getCursorContext(C), L);
   6070   }
   6071 
   6072   if (C.kind == CXCursor_InclusionDirective) {
   6073     SourceLocation L =
   6074         cxcursor::getCursorInclusionDirective(C)->getSourceRange().getBegin();
   6075     return cxloc::translateSourceLocation(getCursorContext(C), L);
   6076   }
   6077 
   6078   if (clang_isAttribute(C.kind)) {
   6079     SourceLocation L = cxcursor::getCursorAttr(C)->getLocation();
   6080     return cxloc::translateSourceLocation(getCursorContext(C), L);
   6081   }
   6082 
   6083   if (!clang_isDeclaration(C.kind))
   6084     return clang_getNullLocation();
   6085 
   6086   const Decl *D = getCursorDecl(C);
   6087   if (!D)
   6088     return clang_getNullLocation();
   6089 
   6090   SourceLocation Loc = D->getLocation();
   6091   // FIXME: Multiple variables declared in a single declaration
   6092   // currently lack the information needed to correctly determine their
   6093   // ranges when accounting for the type-specifier.  We use context
   6094   // stored in the CXCursor to determine if the VarDecl is in a DeclGroup,
   6095   // and if so, whether it is the first decl.
   6096   if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
   6097     if (!cxcursor::isFirstInDeclGroup(C))
   6098       Loc = VD->getLocation();
   6099   }
   6100 
   6101   // For ObjC methods, give the start location of the method name.
   6102   if (const ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(D))
   6103     Loc = MD->getSelectorStartLoc();
   6104 
   6105   return cxloc::translateSourceLocation(getCursorContext(C), Loc);
   6106 }
   6107 
   6108 } // end extern "C"
   6109 
   6110 CXCursor cxcursor::getCursor(CXTranslationUnit TU, SourceLocation SLoc) {
   6111   assert(TU);
   6112 
   6113   // Guard against an invalid SourceLocation, or we may assert in one
   6114   // of the following calls.
   6115   if (SLoc.isInvalid())
   6116     return clang_getNullCursor();
   6117 
   6118   ASTUnit *CXXUnit = cxtu::getASTUnit(TU);
   6119 
   6120   // Translate the given source location to make it point at the beginning of
   6121   // the token under the cursor.
   6122   SLoc = Lexer::GetBeginningOfToken(SLoc, CXXUnit->getSourceManager(),
   6123                                     CXXUnit->getASTContext().getLangOpts());
   6124 
   6125   CXCursor Result = MakeCXCursorInvalid(CXCursor_NoDeclFound);
   6126   if (SLoc.isValid()) {
   6127     GetCursorData ResultData(CXXUnit->getSourceManager(), SLoc, Result);
   6128     CursorVisitor CursorVis(TU, GetCursorVisitor, &ResultData,
   6129                             /*VisitPreprocessorLast=*/true,
   6130                             /*VisitIncludedEntities=*/false,
   6131                             SourceLocation(SLoc));
   6132     CursorVis.visitFileRegion();
   6133   }
   6134 
   6135   return Result;
   6136 }
   6137 
   6138 static SourceRange getRawCursorExtent(CXCursor C) {
   6139   if (clang_isReference(C.kind)) {
   6140     switch (C.kind) {
   6141     case CXCursor_ObjCSuperClassRef:
   6142       return getCursorObjCSuperClassRef(C).second;
   6143 
   6144     case CXCursor_ObjCProtocolRef:
   6145       return getCursorObjCProtocolRef(C).second;
   6146 
   6147     case CXCursor_ObjCClassRef:
   6148       return getCursorObjCClassRef(C).second;
   6149 
   6150     case CXCursor_TypeRef:
   6151       return getCursorTypeRef(C).second;
   6152 
   6153     case CXCursor_TemplateRef:
   6154       return getCursorTemplateRef(C).second;
   6155 
   6156     case CXCursor_NamespaceRef:
   6157       return getCursorNamespaceRef(C).second;
   6158 
   6159     case CXCursor_MemberRef:
   6160       return getCursorMemberRef(C).second;
   6161 
   6162     case CXCursor_CXXBaseSpecifier:
   6163       return getCursorCXXBaseSpecifier(C)->getSourceRange();
   6164 
   6165     case CXCursor_LabelRef:
   6166       return getCursorLabelRef(C).second;
   6167 
   6168     case CXCursor_OverloadedDeclRef:
   6169       return getCursorOverloadedDeclRef(C).second;
   6170 
   6171     case CXCursor_VariableRef:
   6172       return getCursorVariableRef(C).second;
   6173 
   6174     default:
   6175       // FIXME: Need a way to enumerate all non-reference cases.
   6176       llvm_unreachable("Missed a reference kind");
   6177     }
   6178   }
   6179 
   6180   if (clang_isExpression(C.kind))
   6181     return getCursorExpr(C)->getSourceRange();
   6182 
   6183   if (clang_isStatement(C.kind))
   6184     return getCursorStmt(C)->getSourceRange();
   6185 
   6186   if (clang_isAttribute(C.kind))
   6187     return getCursorAttr(C)->getRange();
   6188 
   6189   if (C.kind == CXCursor_PreprocessingDirective)
   6190     return cxcursor::getCursorPreprocessingDirective(C);
   6191 
   6192   if (C.kind == CXCursor_MacroExpansion) {
   6193     ASTUnit *TU = getCursorASTUnit(C);
   6194     SourceRange Range = cxcursor::getCursorMacroExpansion(C).getSourceRange();
   6195     return TU->mapRangeFromPreamble(Range);
   6196   }
   6197 
   6198   if (C.kind == CXCursor_MacroDefinition) {
   6199     ASTUnit *TU = getCursorASTUnit(C);
   6200     SourceRange Range = cxcursor::getCursorMacroDefinition(C)->getSourceRange();
   6201     return TU->mapRangeFromPreamble(Range);
   6202   }
   6203 
   6204   if (C.kind == CXCursor_InclusionDirective) {
   6205     ASTUnit *TU = getCursorASTUnit(C);
   6206     SourceRange Range =
   6207         cxcursor::getCursorInclusionDirective(C)->getSourceRange();
   6208     return TU->mapRangeFromPreamble(Range);
   6209   }
   6210 
   6211   if (C.kind == CXCursor_TranslationUnit) {
   6212     ASTUnit *TU = getCursorASTUnit(C);
   6213     FileID MainID = TU->getSourceManager().getMainFileID();
   6214     SourceLocation Start = TU->getSourceManager().getLocForStartOfFile(MainID);
   6215     SourceLocation End = TU->getSourceManager().getLocForEndOfFile(MainID);
   6216     return SourceRange(Start, End);
   6217   }
   6218 
   6219   if (clang_isDeclaration(C.kind)) {
   6220     const Decl *D = cxcursor::getCursorDecl(C);
   6221     if (!D)
   6222       return SourceRange();
   6223 
   6224     SourceRange R = D->getSourceRange();
   6225     // FIXME: Multiple variables declared in a single declaration
   6226     // currently lack the information needed to correctly determine their
   6227     // ranges when accounting for the type-specifier.  We use context
   6228     // stored in the CXCursor to determine if the VarDecl is in a DeclGroup,
   6229     // and if so, whether it is the first decl.
   6230     if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
   6231       if (!cxcursor::isFirstInDeclGroup(C))
   6232         R.setBegin(VD->getLocation());
   6233     }
   6234     return R;
   6235   }
   6236   return SourceRange();
   6237 }
   6238 
   6239 /// Retrieves the "raw" cursor extent, which is then extended to include
   6240 /// the decl-specifier-seq for declarations.
   6241 static SourceRange getFullCursorExtent(CXCursor C, SourceManager &SrcMgr) {
   6242   if (clang_isDeclaration(C.kind)) {
   6243     const Decl *D = cxcursor::getCursorDecl(C);
   6244     if (!D)
   6245       return SourceRange();
   6246 
   6247     SourceRange R = D->getSourceRange();
   6248 
   6249     // Adjust the start of the location for declarations preceded by
   6250     // declaration specifiers.
   6251     SourceLocation StartLoc;
   6252     if (const DeclaratorDecl *DD = dyn_cast<DeclaratorDecl>(D)) {
   6253       if (TypeSourceInfo *TI = DD->getTypeSourceInfo())
   6254         StartLoc = TI->getTypeLoc().getBeginLoc();
   6255     } else if (const TypedefDecl *Typedef = dyn_cast<TypedefDecl>(D)) {
   6256       if (TypeSourceInfo *TI = Typedef->getTypeSourceInfo())
   6257         StartLoc = TI->getTypeLoc().getBeginLoc();
   6258     }
   6259 
   6260     if (StartLoc.isValid() && R.getBegin().isValid() &&
   6261         SrcMgr.isBeforeInTranslationUnit(StartLoc, R.getBegin()))
   6262       R.setBegin(StartLoc);
   6263 
   6264     // FIXME: Multiple variables declared in a single declaration
   6265     // currently lack the information needed to correctly determine their
   6266     // ranges when accounting for the type-specifier.  We use context
   6267     // stored in the CXCursor to determine if the VarDecl is in a DeclGroup,
   6268     // and if so, whether it is the first decl.
   6269     if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
   6270       if (!cxcursor::isFirstInDeclGroup(C))
   6271         R.setBegin(VD->getLocation());
   6272     }
   6273 
   6274     return R;
   6275   }
   6276 
   6277   return getRawCursorExtent(C);
   6278 }
   6279 
   6280 CXSourceRange clang_getCursorExtent(CXCursor C) {
   6281   SourceRange R = getRawCursorExtent(C);
   6282   if (R.isInvalid())
   6283     return clang_getNullRange();
   6284 
   6285   return cxloc::translateSourceRange(getCursorContext(C), R);
   6286 }
   6287 
   6288 CXCursor clang_getCursorReferenced(CXCursor C) {
   6289   if (clang_isInvalid(C.kind))
   6290     return clang_getNullCursor();
   6291 
   6292   CXTranslationUnit tu = getCursorTU(C);
   6293   if (clang_isDeclaration(C.kind)) {
   6294     const Decl *D = getCursorDecl(C);
   6295     if (!D)
   6296       return clang_getNullCursor();
   6297     if (const UsingDecl *Using = dyn_cast<UsingDecl>(D))
   6298       return MakeCursorOverloadedDeclRef(Using, D->getLocation(), tu);
   6299     if (const ObjCPropertyImplDecl *PropImpl =
   6300             dyn_cast<ObjCPropertyImplDecl>(D))
   6301       if (ObjCPropertyDecl *Property = PropImpl->getPropertyDecl())
   6302         return MakeCXCursor(Property, tu);
   6303 
   6304     return C;
   6305   }
   6306 
   6307   if (clang_isExpression(C.kind)) {
   6308     const Expr *E = getCursorExpr(C);
   6309     const Decl *D = getDeclFromExpr(E);
   6310     if (D) {
   6311       CXCursor declCursor = MakeCXCursor(D, tu);
   6312       declCursor = getSelectorIdentifierCursor(getSelectorIdentifierIndex(C),
   6313                                                declCursor);
   6314       return declCursor;
   6315     }
   6316 
   6317     if (const OverloadExpr *Ovl = dyn_cast_or_null<OverloadExpr>(E))
   6318       return MakeCursorOverloadedDeclRef(Ovl, tu);
   6319 
   6320     return clang_getNullCursor();
   6321   }
   6322 
   6323   if (clang_isStatement(C.kind)) {
   6324     const Stmt *S = getCursorStmt(C);
   6325     if (const GotoStmt *Goto = dyn_cast_or_null<GotoStmt>(S))
   6326       if (LabelDecl *label = Goto->getLabel())
   6327         if (LabelStmt *labelS = label->getStmt())
   6328           return MakeCXCursor(labelS, getCursorDecl(C), tu);
   6329 
   6330     return clang_getNullCursor();
   6331   }
   6332 
   6333   if (C.kind == CXCursor_MacroExpansion) {
   6334     if (const MacroDefinitionRecord *Def =
   6335             getCursorMacroExpansion(C).getDefinition())
   6336       return MakeMacroDefinitionCursor(Def, tu);
   6337   }
   6338 
   6339   if (!clang_isReference(C.kind))
   6340     return clang_getNullCursor();
   6341 
   6342   switch (C.kind) {
   6343   case CXCursor_ObjCSuperClassRef:
   6344     return MakeCXCursor(getCursorObjCSuperClassRef(C).first, tu);
   6345 
   6346   case CXCursor_ObjCProtocolRef: {
   6347     const ObjCProtocolDecl *Prot = getCursorObjCProtocolRef(C).first;
   6348     if (const ObjCProtocolDecl *Def = Prot->getDefinition())
   6349       return MakeCXCursor(Def, tu);
   6350 
   6351     return MakeCXCursor(Prot, tu);
   6352   }
   6353 
   6354   case CXCursor_ObjCClassRef: {
   6355     const ObjCInterfaceDecl *Class = getCursorObjCClassRef(C).first;
   6356     if (const ObjCInterfaceDecl *Def = Class->getDefinition())
   6357       return MakeCXCursor(Def, tu);
   6358 
   6359     return MakeCXCursor(Class, tu);
   6360   }
   6361 
   6362   case CXCursor_TypeRef:
   6363     return MakeCXCursor(getCursorTypeRef(C).first, tu);
   6364 
   6365   case CXCursor_TemplateRef:
   6366     return MakeCXCursor(getCursorTemplateRef(C).first, tu);
   6367 
   6368   case CXCursor_NamespaceRef:
   6369     return MakeCXCursor(getCursorNamespaceRef(C).first, tu);
   6370 
   6371   case CXCursor_MemberRef:
   6372     return MakeCXCursor(getCursorMemberRef(C).first, tu);
   6373 
   6374   case CXCursor_CXXBaseSpecifier: {
   6375     const CXXBaseSpecifier *B = cxcursor::getCursorCXXBaseSpecifier(C);
   6376     return clang_getTypeDeclaration(cxtype::MakeCXType(B->getType(), tu));
   6377   }
   6378 
   6379   case CXCursor_LabelRef:
   6380     // FIXME: We end up faking the "parent" declaration here because we
   6381     // don't want to make CXCursor larger.
   6382     return MakeCXCursor(
   6383         getCursorLabelRef(C).first,
   6384         cxtu::getASTUnit(tu)->getASTContext().getTranslationUnitDecl(), tu);
   6385 
   6386   case CXCursor_OverloadedDeclRef:
   6387     return C;
   6388 
   6389   case CXCursor_VariableRef:
   6390     return MakeCXCursor(getCursorVariableRef(C).first, tu);
   6391 
   6392   default:
   6393     // We would prefer to enumerate all non-reference cursor kinds here.
   6394     llvm_unreachable("Unhandled reference cursor kind");
   6395   }
   6396 }
   6397 
   6398 CXCursor clang_getCursorDefinition(CXCursor C) {
   6399   if (clang_isInvalid(C.kind))
   6400     return clang_getNullCursor();
   6401 
   6402   CXTranslationUnit TU = getCursorTU(C);
   6403 
   6404   bool WasReference = false;
   6405   if (clang_isReference(C.kind) || clang_isExpression(C.kind)) {
   6406     C = clang_getCursorReferenced(C);
   6407     WasReference = true;
   6408   }
   6409 
   6410   if (C.kind == CXCursor_MacroExpansion)
   6411     return clang_getCursorReferenced(C);
   6412 
   6413   if (!clang_isDeclaration(C.kind))
   6414     return clang_getNullCursor();
   6415 
   6416   const Decl *D = getCursorDecl(C);
   6417   if (!D)
   6418     return clang_getNullCursor();
   6419 
   6420   switch (D->getKind()) {
   6421   // Declaration kinds that don't really separate the notions of
   6422   // declaration and definition.
   6423   case Decl::Namespace:
   6424   case Decl::Typedef:
   6425   case Decl::TypeAlias:
   6426   case Decl::TypeAliasTemplate:
   6427   case Decl::TemplateTypeParm:
   6428   case Decl::EnumConstant:
   6429   case Decl::Field:
   6430   case Decl::Binding:
   6431   case Decl::MSProperty:
   6432   case Decl::MSGuid:
   6433   case Decl::TemplateParamObject:
   6434   case Decl::IndirectField:
   6435   case Decl::ObjCIvar:
   6436   case Decl::ObjCAtDefsField:
   6437   case Decl::ImplicitParam:
   6438   case Decl::ParmVar:
   6439   case Decl::NonTypeTemplateParm:
   6440   case Decl::TemplateTemplateParm:
   6441   case Decl::ObjCCategoryImpl:
   6442   case Decl::ObjCImplementation:
   6443   case Decl::AccessSpec:
   6444   case Decl::LinkageSpec:
   6445   case Decl::Export:
   6446   case Decl::ObjCPropertyImpl:
   6447   case Decl::FileScopeAsm:
   6448   case Decl::StaticAssert:
   6449   case Decl::Block:
   6450   case Decl::Captured:
   6451   case Decl::OMPCapturedExpr:
   6452   case Decl::Label: // FIXME: Is this right??
   6453   case Decl::ClassScopeFunctionSpecialization:
   6454   case Decl::CXXDeductionGuide:
   6455   case Decl::Import:
   6456   case Decl::OMPThreadPrivate:
   6457   case Decl::OMPAllocate:
   6458   case Decl::OMPDeclareReduction:
   6459   case Decl::OMPDeclareMapper:
   6460   case Decl::OMPRequires:
   6461   case Decl::ObjCTypeParam:
   6462   case Decl::BuiltinTemplate:
   6463   case Decl::PragmaComment:
   6464   case Decl::PragmaDetectMismatch:
   6465   case Decl::UsingPack:
   6466   case Decl::Concept:
   6467   case Decl::LifetimeExtendedTemporary:
   6468   case Decl::RequiresExprBody:
   6469     return C;
   6470 
   6471   // Declaration kinds that don't make any sense here, but are
   6472   // nonetheless harmless.
   6473   case Decl::Empty:
   6474   case Decl::TranslationUnit:
   6475   case Decl::ExternCContext:
   6476     break;
   6477 
   6478   // Declaration kinds for which the definition is not resolvable.
   6479   case Decl::UnresolvedUsingTypename:
   6480   case Decl::UnresolvedUsingValue:
   6481     break;
   6482 
   6483   case Decl::UsingDirective:
   6484     return MakeCXCursor(cast<UsingDirectiveDecl>(D)->getNominatedNamespace(),
   6485                         TU);
   6486 
   6487   case Decl::NamespaceAlias:
   6488     return MakeCXCursor(cast<NamespaceAliasDecl>(D)->getNamespace(), TU);
   6489 
   6490   case Decl::Enum:
   6491   case Decl::Record:
   6492   case Decl::CXXRecord:
   6493   case Decl::ClassTemplateSpecialization:
   6494   case Decl::ClassTemplatePartialSpecialization:
   6495     if (TagDecl *Def = cast<TagDecl>(D)->getDefinition())
   6496       return MakeCXCursor(Def, TU);
   6497     return clang_getNullCursor();
   6498 
   6499   case Decl::Function:
   6500   case Decl::CXXMethod:
   6501   case Decl::CXXConstructor:
   6502   case Decl::CXXDestructor:
   6503   case Decl::CXXConversion: {
   6504     const FunctionDecl *Def = nullptr;
   6505     if (cast<FunctionDecl>(D)->getBody(Def))
   6506       return MakeCXCursor(Def, TU);
   6507     return clang_getNullCursor();
   6508   }
   6509 
   6510   case Decl::Var:
   6511   case Decl::VarTemplateSpecialization:
   6512   case Decl::VarTemplatePartialSpecialization:
   6513   case Decl::Decomposition: {
   6514     // Ask the variable if it has a definition.
   6515     if (const VarDecl *Def = cast<VarDecl>(D)->getDefinition())
   6516       return MakeCXCursor(Def, TU);
   6517     return clang_getNullCursor();
   6518   }
   6519 
   6520   case Decl::FunctionTemplate: {
   6521     const FunctionDecl *Def = nullptr;
   6522     if (cast<FunctionTemplateDecl>(D)->getTemplatedDecl()->getBody(Def))
   6523       return MakeCXCursor(Def->getDescribedFunctionTemplate(), TU);
   6524     return clang_getNullCursor();
   6525   }
   6526 
   6527   case Decl::ClassTemplate: {
   6528     if (RecordDecl *Def =
   6529             cast<ClassTemplateDecl>(D)->getTemplatedDecl()->getDefinition())
   6530       return MakeCXCursor(cast<CXXRecordDecl>(Def)->getDescribedClassTemplate(),
   6531                           TU);
   6532     return clang_getNullCursor();
   6533   }
   6534 
   6535   case Decl::VarTemplate: {
   6536     if (VarDecl *Def =
   6537             cast<VarTemplateDecl>(D)->getTemplatedDecl()->getDefinition())
   6538       return MakeCXCursor(cast<VarDecl>(Def)->getDescribedVarTemplate(), TU);
   6539     return clang_getNullCursor();
   6540   }
   6541 
   6542   case Decl::Using:
   6543     return MakeCursorOverloadedDeclRef(cast<UsingDecl>(D), D->getLocation(),
   6544                                        TU);
   6545 
   6546   case Decl::UsingShadow:
   6547   case Decl::ConstructorUsingShadow:
   6548     return clang_getCursorDefinition(
   6549         MakeCXCursor(cast<UsingShadowDecl>(D)->getTargetDecl(), TU));
   6550 
   6551   case Decl::ObjCMethod: {
   6552     const ObjCMethodDecl *Method = cast<ObjCMethodDecl>(D);
   6553     if (Method->isThisDeclarationADefinition())
   6554       return C;
   6555 
   6556     // Dig out the method definition in the associated
   6557     // @implementation, if we have it.
   6558     // FIXME: The ASTs should make finding the definition easier.
   6559     if (const ObjCInterfaceDecl *Class =
   6560             dyn_cast<ObjCInterfaceDecl>(Method->getDeclContext()))
   6561       if (ObjCImplementationDecl *ClassImpl = Class->getImplementation())
   6562         if (ObjCMethodDecl *Def = ClassImpl->getMethod(
   6563                 Method->getSelector(), Method->isInstanceMethod()))
   6564           if (Def->isThisDeclarationADefinition())
   6565             return MakeCXCursor(Def, TU);
   6566 
   6567     return clang_getNullCursor();
   6568   }
   6569 
   6570   case Decl::ObjCCategory:
   6571     if (ObjCCategoryImplDecl *Impl =
   6572             cast<ObjCCategoryDecl>(D)->getImplementation())
   6573       return MakeCXCursor(Impl, TU);
   6574     return clang_getNullCursor();
   6575 
   6576   case Decl::ObjCProtocol:
   6577     if (const ObjCProtocolDecl *Def =
   6578             cast<ObjCProtocolDecl>(D)->getDefinition())
   6579       return MakeCXCursor(Def, TU);
   6580     return clang_getNullCursor();
   6581 
   6582   case Decl::ObjCInterface: {
   6583     // There are two notions of a "definition" for an Objective-C
   6584     // class: the interface and its implementation. When we resolved a
   6585     // reference to an Objective-C class, produce the @interface as
   6586     // the definition; when we were provided with the interface,
   6587     // produce the @implementation as the definition.
   6588     const ObjCInterfaceDecl *IFace = cast<ObjCInterfaceDecl>(D);
   6589     if (WasReference) {
   6590       if (const ObjCInterfaceDecl *Def = IFace->getDefinition())
   6591         return MakeCXCursor(Def, TU);
   6592     } else if (ObjCImplementationDecl *Impl = IFace->getImplementation())
   6593       return MakeCXCursor(Impl, TU);
   6594     return clang_getNullCursor();
   6595   }
   6596 
   6597   case Decl::ObjCProperty:
   6598     // FIXME: We don't really know where to find the
   6599     // ObjCPropertyImplDecls that implement this property.
   6600     return clang_getNullCursor();
   6601 
   6602   case Decl::ObjCCompatibleAlias:
   6603     if (const ObjCInterfaceDecl *Class =
   6604             cast<ObjCCompatibleAliasDecl>(D)->getClassInterface())
   6605       if (const ObjCInterfaceDecl *Def = Class->getDefinition())
   6606         return MakeCXCursor(Def, TU);
   6607 
   6608     return clang_getNullCursor();
   6609 
   6610   case Decl::Friend:
   6611     if (NamedDecl *Friend = cast<FriendDecl>(D)->getFriendDecl())
   6612       return clang_getCursorDefinition(MakeCXCursor(Friend, TU));
   6613     return clang_getNullCursor();
   6614 
   6615   case Decl::FriendTemplate:
   6616     if (NamedDecl *Friend = cast<FriendTemplateDecl>(D)->getFriendDecl())
   6617       return clang_getCursorDefinition(MakeCXCursor(Friend, TU));
   6618     return clang_getNullCursor();
   6619   }
   6620 
   6621   return clang_getNullCursor();
   6622 }
   6623 
   6624 unsigned clang_isCursorDefinition(CXCursor C) {
   6625   if (!clang_isDeclaration(C.kind))
   6626     return 0;
   6627 
   6628   return clang_getCursorDefinition(C) == C;
   6629 }
   6630 
   6631 CXCursor clang_getCanonicalCursor(CXCursor C) {
   6632   if (!clang_isDeclaration(C.kind))
   6633     return C;
   6634 
   6635   if (const Decl *D = getCursorDecl(C)) {
   6636     if (const ObjCCategoryImplDecl *CatImplD =
   6637             dyn_cast<ObjCCategoryImplDecl>(D))
   6638       if (ObjCCategoryDecl *CatD = CatImplD->getCategoryDecl())
   6639         return MakeCXCursor(CatD, getCursorTU(C));
   6640 
   6641     if (const ObjCImplDecl *ImplD = dyn_cast<ObjCImplDecl>(D))
   6642       if (const ObjCInterfaceDecl *IFD = ImplD->getClassInterface())
   6643         return MakeCXCursor(IFD, getCursorTU(C));
   6644 
   6645     return MakeCXCursor(D->getCanonicalDecl(), getCursorTU(C));
   6646   }
   6647 
   6648   return C;
   6649 }
   6650 
   6651 int clang_Cursor_getObjCSelectorIndex(CXCursor cursor) {
   6652   return cxcursor::getSelectorIdentifierIndexAndLoc(cursor).first;
   6653 }
   6654 
   6655 unsigned clang_getNumOverloadedDecls(CXCursor C) {
   6656   if (C.kind != CXCursor_OverloadedDeclRef)
   6657     return 0;
   6658 
   6659   OverloadedDeclRefStorage Storage = getCursorOverloadedDeclRef(C).first;
   6660   if (const OverloadExpr *E = Storage.dyn_cast<const OverloadExpr *>())
   6661     return E->getNumDecls();
   6662 
   6663   if (OverloadedTemplateStorage *S =
   6664           Storage.dyn_cast<OverloadedTemplateStorage *>())
   6665     return S->size();
   6666 
   6667   const Decl *D = Storage.get<const Decl *>();
   6668   if (const UsingDecl *Using = dyn_cast<UsingDecl>(D))
   6669     return Using->shadow_size();
   6670 
   6671   return 0;
   6672 }
   6673 
   6674 CXCursor clang_getOverloadedDecl(CXCursor cursor, unsigned index) {
   6675   if (cursor.kind != CXCursor_OverloadedDeclRef)
   6676     return clang_getNullCursor();
   6677 
   6678   if (index >= clang_getNumOverloadedDecls(cursor))
   6679     return clang_getNullCursor();
   6680 
   6681   CXTranslationUnit TU = getCursorTU(cursor);
   6682   OverloadedDeclRefStorage Storage = getCursorOverloadedDeclRef(cursor).first;
   6683   if (const OverloadExpr *E = Storage.dyn_cast<const OverloadExpr *>())
   6684     return MakeCXCursor(E->decls_begin()[index], TU);
   6685 
   6686   if (OverloadedTemplateStorage *S =
   6687           Storage.dyn_cast<OverloadedTemplateStorage *>())
   6688     return MakeCXCursor(S->begin()[index], TU);
   6689 
   6690   const Decl *D = Storage.get<const Decl *>();
   6691   if (const UsingDecl *Using = dyn_cast<UsingDecl>(D)) {
   6692     // FIXME: This is, unfortunately, linear time.
   6693     UsingDecl::shadow_iterator Pos = Using->shadow_begin();
   6694     std::advance(Pos, index);
   6695     return MakeCXCursor(cast<UsingShadowDecl>(*Pos)->getTargetDecl(), TU);
   6696   }
   6697 
   6698   return clang_getNullCursor();
   6699 }
   6700 
   6701 void clang_getDefinitionSpellingAndExtent(
   6702     CXCursor C, const char **startBuf, const char **endBuf, unsigned *startLine,
   6703     unsigned *startColumn, unsigned *endLine, unsigned *endColumn) {
   6704   assert(getCursorDecl(C) && "CXCursor has null decl");
   6705   const FunctionDecl *FD = dyn_cast<FunctionDecl>(getCursorDecl(C));
   6706   CompoundStmt *Body = dyn_cast<CompoundStmt>(FD->getBody());
   6707 
   6708   SourceManager &SM = FD->getASTContext().getSourceManager();
   6709   *startBuf = SM.getCharacterData(Body->getLBracLoc());
   6710   *endBuf = SM.getCharacterData(Body->getRBracLoc());
   6711   *startLine = SM.getSpellingLineNumber(Body->getLBracLoc());
   6712   *startColumn = SM.getSpellingColumnNumber(Body->getLBracLoc());
   6713   *endLine = SM.getSpellingLineNumber(Body->getRBracLoc());
   6714   *endColumn = SM.getSpellingColumnNumber(Body->getRBracLoc());
   6715 }
   6716 
   6717 CXSourceRange clang_getCursorReferenceNameRange(CXCursor C, unsigned NameFlags,
   6718                                                 unsigned PieceIndex) {
   6719   RefNamePieces Pieces;
   6720 
   6721   switch (C.kind) {
   6722   case CXCursor_MemberRefExpr:
   6723     if (const MemberExpr *E = dyn_cast<MemberExpr>(getCursorExpr(C)))
   6724       Pieces = buildPieces(NameFlags, true, E->getMemberNameInfo(),
   6725                            E->getQualifierLoc().getSourceRange());
   6726     break;
   6727 
   6728   case CXCursor_DeclRefExpr:
   6729     if (const DeclRefExpr *E = dyn_cast<DeclRefExpr>(getCursorExpr(C))) {
   6730       SourceRange TemplateArgLoc(E->getLAngleLoc(), E->getRAngleLoc());
   6731       Pieces =
   6732           buildPieces(NameFlags, false, E->getNameInfo(),
   6733                       E->getQualifierLoc().getSourceRange(), &TemplateArgLoc);
   6734     }
   6735     break;
   6736 
   6737   case CXCursor_CallExpr:
   6738     if (const CXXOperatorCallExpr *OCE =
   6739             dyn_cast<CXXOperatorCallExpr>(getCursorExpr(C))) {
   6740       const Expr *Callee = OCE->getCallee();
   6741       if (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(Callee))
   6742         Callee = ICE->getSubExpr();
   6743 
   6744       if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Callee))
   6745         Pieces = buildPieces(NameFlags, false, DRE->getNameInfo(),
   6746                              DRE->getQualifierLoc().getSourceRange());
   6747     }
   6748     break;
   6749 
   6750   default:
   6751     break;
   6752   }
   6753 
   6754   if (Pieces.empty()) {
   6755     if (PieceIndex == 0)
   6756       return clang_getCursorExtent(C);
   6757   } else if (PieceIndex < Pieces.size()) {
   6758     SourceRange R = Pieces[PieceIndex];
   6759     if (R.isValid())
   6760       return cxloc::translateSourceRange(getCursorContext(C), R);
   6761   }
   6762 
   6763   return clang_getNullRange();
   6764 }
   6765 
   6766 void clang_enableStackTraces(void) {
   6767   // FIXME: Provide an argv0 here so we can find llvm-symbolizer.
   6768   llvm::sys::PrintStackTraceOnErrorSignal(StringRef());
   6769 }
   6770 
   6771 void clang_executeOnThread(void (*fn)(void *), void *user_data,
   6772                            unsigned stack_size) {
   6773   llvm::llvm_execute_on_thread(fn, user_data,
   6774                                stack_size == 0
   6775                                    ? clang::DesiredStackSize
   6776                                    : llvm::Optional<unsigned>(stack_size));
   6777 }
   6778 
   6779 //===----------------------------------------------------------------------===//
   6780 // Token-based Operations.
   6781 //===----------------------------------------------------------------------===//
   6782 
   6783 /* CXToken layout:
   6784  *   int_data[0]: a CXTokenKind
   6785  *   int_data[1]: starting token location
   6786  *   int_data[2]: token length
   6787  *   int_data[3]: reserved
   6788  *   ptr_data: for identifiers and keywords, an IdentifierInfo*.
   6789  *   otherwise unused.
   6790  */
   6791 CXTokenKind clang_getTokenKind(CXToken CXTok) {
   6792   return static_cast<CXTokenKind>(CXTok.int_data[0]);
   6793 }
   6794 
   6795 CXString clang_getTokenSpelling(CXTranslationUnit TU, CXToken CXTok) {
   6796   switch (clang_getTokenKind(CXTok)) {
   6797   case CXToken_Identifier:
   6798   case CXToken_Keyword:
   6799     // We know we have an IdentifierInfo*, so use that.
   6800     return cxstring::createRef(
   6801         static_cast<IdentifierInfo *>(CXTok.ptr_data)->getNameStart());
   6802 
   6803   case CXToken_Literal: {
   6804     // We have stashed the starting pointer in the ptr_data field. Use it.
   6805     const char *Text = static_cast<const char *>(CXTok.ptr_data);
   6806     return cxstring::createDup(StringRef(Text, CXTok.int_data[2]));
   6807   }
   6808 
   6809   case CXToken_Punctuation:
   6810   case CXToken_Comment:
   6811     break;
   6812   }
   6813 
   6814   if (isNotUsableTU(TU)) {
   6815     LOG_BAD_TU(TU);
   6816     return cxstring::createEmpty();
   6817   }
   6818 
   6819   // We have to find the starting buffer pointer the hard way, by
   6820   // deconstructing the source location.
   6821   ASTUnit *CXXUnit = cxtu::getASTUnit(TU);
   6822   if (!CXXUnit)
   6823     return cxstring::createEmpty();
   6824 
   6825   SourceLocation Loc = SourceLocation::getFromRawEncoding(CXTok.int_data[1]);
   6826   std::pair<FileID, unsigned> LocInfo =
   6827       CXXUnit->getSourceManager().getDecomposedSpellingLoc(Loc);
   6828   bool Invalid = false;
   6829   StringRef Buffer =
   6830       CXXUnit->getSourceManager().getBufferData(LocInfo.first, &Invalid);
   6831   if (Invalid)
   6832     return cxstring::createEmpty();
   6833 
   6834   return cxstring::createDup(Buffer.substr(LocInfo.second, CXTok.int_data[2]));
   6835 }
   6836 
   6837 CXSourceLocation clang_getTokenLocation(CXTranslationUnit TU, CXToken CXTok) {
   6838   if (isNotUsableTU(TU)) {
   6839     LOG_BAD_TU(TU);
   6840     return clang_getNullLocation();
   6841   }
   6842 
   6843   ASTUnit *CXXUnit = cxtu::getASTUnit(TU);
   6844   if (!CXXUnit)
   6845     return clang_getNullLocation();
   6846 
   6847   return cxloc::translateSourceLocation(
   6848       CXXUnit->getASTContext(),
   6849       SourceLocation::getFromRawEncoding(CXTok.int_data[1]));
   6850 }
   6851 
   6852 CXSourceRange clang_getTokenExtent(CXTranslationUnit TU, CXToken CXTok) {
   6853   if (isNotUsableTU(TU)) {
   6854     LOG_BAD_TU(TU);
   6855     return clang_getNullRange();
   6856   }
   6857 
   6858   ASTUnit *CXXUnit = cxtu::getASTUnit(TU);
   6859   if (!CXXUnit)
   6860     return clang_getNullRange();
   6861 
   6862   return cxloc::translateSourceRange(
   6863       CXXUnit->getASTContext(),
   6864       SourceLocation::getFromRawEncoding(CXTok.int_data[1]));
   6865 }
   6866 
   6867 static void getTokens(ASTUnit *CXXUnit, SourceRange Range,
   6868                       SmallVectorImpl<CXToken> &CXTokens) {
   6869   SourceManager &SourceMgr = CXXUnit->getSourceManager();
   6870   std::pair<FileID, unsigned> BeginLocInfo =
   6871       SourceMgr.getDecomposedSpellingLoc(Range.getBegin());
   6872   std::pair<FileID, unsigned> EndLocInfo =
   6873       SourceMgr.getDecomposedSpellingLoc(Range.getEnd());
   6874 
   6875   // Cannot tokenize across files.
   6876   if (BeginLocInfo.first != EndLocInfo.first)
   6877     return;
   6878 
   6879   // Create a lexer
   6880   bool Invalid = false;
   6881   StringRef Buffer = SourceMgr.getBufferData(BeginLocInfo.first, &Invalid);
   6882   if (Invalid)
   6883     return;
   6884 
   6885   Lexer Lex(SourceMgr.getLocForStartOfFile(BeginLocInfo.first),
   6886             CXXUnit->getASTContext().getLangOpts(), Buffer.begin(),
   6887             Buffer.data() + BeginLocInfo.second, Buffer.end());
   6888   Lex.SetCommentRetentionState(true);
   6889 
   6890   // Lex tokens until we hit the end of the range.
   6891   const char *EffectiveBufferEnd = Buffer.data() + EndLocInfo.second;
   6892   Token Tok;
   6893   bool previousWasAt = false;
   6894   do {
   6895     // Lex the next token
   6896     Lex.LexFromRawLexer(Tok);
   6897     if (Tok.is(tok::eof))
   6898       break;
   6899 
   6900     // Initialize the CXToken.
   6901     CXToken CXTok;
   6902 
   6903     //   - Common fields
   6904     CXTok.int_data[1] = Tok.getLocation().getRawEncoding();
   6905     CXTok.int_data[2] = Tok.getLength();
   6906     CXTok.int_data[3] = 0;
   6907 
   6908     //   - Kind-specific fields
   6909     if (Tok.isLiteral()) {
   6910       CXTok.int_data[0] = CXToken_Literal;
   6911       CXTok.ptr_data = const_cast<char *>(Tok.getLiteralData());
   6912     } else if (Tok.is(tok::raw_identifier)) {
   6913       // Lookup the identifier to determine whether we have a keyword.
   6914       IdentifierInfo *II = CXXUnit->getPreprocessor().LookUpIdentifierInfo(Tok);
   6915 
   6916       if ((II->getObjCKeywordID() != tok::objc_not_keyword) && previousWasAt) {
   6917         CXTok.int_data[0] = CXToken_Keyword;
   6918       } else {
   6919         CXTok.int_data[0] =
   6920             Tok.is(tok::identifier) ? CXToken_Identifier : CXToken_Keyword;
   6921       }
   6922       CXTok.ptr_data = II;
   6923     } else if (Tok.is(tok::comment)) {
   6924       CXTok.int_data[0] = CXToken_Comment;
   6925       CXTok.ptr_data = nullptr;
   6926     } else {
   6927       CXTok.int_data[0] = CXToken_Punctuation;
   6928       CXTok.ptr_data = nullptr;
   6929     }
   6930     CXTokens.push_back(CXTok);
   6931     previousWasAt = Tok.is(tok::at);
   6932   } while (Lex.getBufferLocation() < EffectiveBufferEnd);
   6933 }
   6934 
   6935 CXToken *clang_getToken(CXTranslationUnit TU, CXSourceLocation Location) {
   6936   LOG_FUNC_SECTION { *Log << TU << ' ' << Location; }
   6937 
   6938   if (isNotUsableTU(TU)) {
   6939     LOG_BAD_TU(TU);
   6940     return NULL;
   6941   }
   6942 
   6943   ASTUnit *CXXUnit = cxtu::getASTUnit(TU);
   6944   if (!CXXUnit)
   6945     return NULL;
   6946 
   6947   SourceLocation Begin = cxloc::translateSourceLocation(Location);
   6948   if (Begin.isInvalid())
   6949     return NULL;
   6950   SourceManager &SM = CXXUnit->getSourceManager();
   6951   std::pair<FileID, unsigned> DecomposedEnd = SM.getDecomposedLoc(Begin);
   6952   DecomposedEnd.second +=
   6953       Lexer::MeasureTokenLength(Begin, SM, CXXUnit->getLangOpts());
   6954 
   6955   SourceLocation End =
   6956       SM.getComposedLoc(DecomposedEnd.first, DecomposedEnd.second);
   6957 
   6958   SmallVector<CXToken, 32> CXTokens;
   6959   getTokens(CXXUnit, SourceRange(Begin, End), CXTokens);
   6960 
   6961   if (CXTokens.empty())
   6962     return NULL;
   6963 
   6964   CXTokens.resize(1);
   6965   CXToken *Token = static_cast<CXToken *>(llvm::safe_malloc(sizeof(CXToken)));
   6966 
   6967   memmove(Token, CXTokens.data(), sizeof(CXToken));
   6968   return Token;
   6969 }
   6970 
   6971 void clang_tokenize(CXTranslationUnit TU, CXSourceRange Range, CXToken **Tokens,
   6972                     unsigned *NumTokens) {
   6973   LOG_FUNC_SECTION { *Log << TU << ' ' << Range; }
   6974 
   6975   if (Tokens)
   6976     *Tokens = nullptr;
   6977   if (NumTokens)
   6978     *NumTokens = 0;
   6979 
   6980   if (isNotUsableTU(TU)) {
   6981     LOG_BAD_TU(TU);
   6982     return;
   6983   }
   6984 
   6985   ASTUnit *CXXUnit = cxtu::getASTUnit(TU);
   6986   if (!CXXUnit || !Tokens || !NumTokens)
   6987     return;
   6988 
   6989   ASTUnit::ConcurrencyCheck Check(*CXXUnit);
   6990 
   6991   SourceRange R = cxloc::translateCXSourceRange(Range);
   6992   if (R.isInvalid())
   6993     return;
   6994 
   6995   SmallVector<CXToken, 32> CXTokens;
   6996   getTokens(CXXUnit, R, CXTokens);
   6997 
   6998   if (CXTokens.empty())
   6999     return;
   7000 
   7001   *Tokens = static_cast<CXToken *>(
   7002       llvm::safe_malloc(sizeof(CXToken) * CXTokens.size()));
   7003   memmove(*Tokens, CXTokens.data(), sizeof(CXToken) * CXTokens.size());
   7004   *NumTokens = CXTokens.size();
   7005 }
   7006 
   7007 void clang_disposeTokens(CXTranslationUnit TU, CXToken *Tokens,
   7008                          unsigned NumTokens) {
   7009   free(Tokens);
   7010 }
   7011 
   7012 //===----------------------------------------------------------------------===//
   7013 // Token annotation APIs.
   7014 //===----------------------------------------------------------------------===//
   7015 
   7016 static enum CXChildVisitResult AnnotateTokensVisitor(CXCursor cursor,
   7017                                                      CXCursor parent,
   7018                                                      CXClientData client_data);
   7019 static bool AnnotateTokensPostChildrenVisitor(CXCursor cursor,
   7020                                               CXClientData client_data);
   7021 
   7022 namespace {
   7023 class AnnotateTokensWorker {
   7024   CXToken *Tokens;
   7025   CXCursor *Cursors;
   7026   unsigned NumTokens;
   7027   unsigned TokIdx;
   7028   unsigned PreprocessingTokIdx;
   7029   CursorVisitor AnnotateVis;
   7030   SourceManager &SrcMgr;
   7031   bool HasContextSensitiveKeywords;
   7032 
   7033   struct PostChildrenAction {
   7034     CXCursor cursor;
   7035     enum Action { Invalid, Ignore, Postpone } action;
   7036   };
   7037   using PostChildrenActions = SmallVector<PostChildrenAction, 0>;
   7038 
   7039   struct PostChildrenInfo {
   7040     CXCursor Cursor;
   7041     SourceRange CursorRange;
   7042     unsigned BeforeReachingCursorIdx;
   7043     unsigned BeforeChildrenTokenIdx;
   7044     PostChildrenActions ChildActions;
   7045   };
   7046   SmallVector<PostChildrenInfo, 8> PostChildrenInfos;
   7047 
   7048   CXToken &getTok(unsigned Idx) {
   7049     assert(Idx < NumTokens);
   7050     return Tokens[Idx];
   7051   }
   7052   const CXToken &getTok(unsigned Idx) const {
   7053     assert(Idx < NumTokens);
   7054     return Tokens[Idx];
   7055   }
   7056   bool MoreTokens() const { return TokIdx < NumTokens; }
   7057   unsigned NextToken() const { return TokIdx; }
   7058   void AdvanceToken() { ++TokIdx; }
   7059   SourceLocation GetTokenLoc(unsigned tokI) {
   7060     return SourceLocation::getFromRawEncoding(getTok(tokI).int_data[1]);
   7061   }
   7062   bool isFunctionMacroToken(unsigned tokI) const {
   7063     return getTok(tokI).int_data[3] != 0;
   7064   }
   7065   SourceLocation getFunctionMacroTokenLoc(unsigned tokI) const {
   7066     return SourceLocation::getFromRawEncoding(getTok(tokI).int_data[3]);
   7067   }
   7068 
   7069   void annotateAndAdvanceTokens(CXCursor, RangeComparisonResult, SourceRange);
   7070   bool annotateAndAdvanceFunctionMacroTokens(CXCursor, RangeComparisonResult,
   7071                                              SourceRange);
   7072 
   7073 public:
   7074   AnnotateTokensWorker(CXToken *tokens, CXCursor *cursors, unsigned numTokens,
   7075                        CXTranslationUnit TU, SourceRange RegionOfInterest)
   7076       : Tokens(tokens), Cursors(cursors), NumTokens(numTokens), TokIdx(0),
   7077         PreprocessingTokIdx(0),
   7078         AnnotateVis(TU, AnnotateTokensVisitor, this,
   7079                     /*VisitPreprocessorLast=*/true,
   7080                     /*VisitIncludedEntities=*/false, RegionOfInterest,
   7081                     /*VisitDeclsOnly=*/false,
   7082                     AnnotateTokensPostChildrenVisitor),
   7083         SrcMgr(cxtu::getASTUnit(TU)->getSourceManager()),
   7084         HasContextSensitiveKeywords(false) {}
   7085 
   7086   void VisitChildren(CXCursor C) { AnnotateVis.VisitChildren(C); }
   7087   enum CXChildVisitResult Visit(CXCursor cursor, CXCursor parent);
   7088   bool IsIgnoredChildCursor(CXCursor cursor) const;
   7089   PostChildrenActions DetermineChildActions(CXCursor Cursor) const;
   7090 
   7091   bool postVisitChildren(CXCursor cursor);
   7092   void HandlePostPonedChildCursors(const PostChildrenInfo &Info);
   7093   void HandlePostPonedChildCursor(CXCursor Cursor, unsigned StartTokenIndex);
   7094 
   7095   void AnnotateTokens();
   7096 
   7097   /// Determine whether the annotator saw any cursors that have
   7098   /// context-sensitive keywords.
   7099   bool hasContextSensitiveKeywords() const {
   7100     return HasContextSensitiveKeywords;
   7101   }
   7102 
   7103   ~AnnotateTokensWorker() { assert(PostChildrenInfos.empty()); }
   7104 };
   7105 } // namespace
   7106 
   7107 void AnnotateTokensWorker::AnnotateTokens() {
   7108   // Walk the AST within the region of interest, annotating tokens
   7109   // along the way.
   7110   AnnotateVis.visitFileRegion();
   7111 }
   7112 
   7113 bool AnnotateTokensWorker::IsIgnoredChildCursor(CXCursor cursor) const {
   7114   if (PostChildrenInfos.empty())
   7115     return false;
   7116 
   7117   for (const auto &ChildAction : PostChildrenInfos.back().ChildActions) {
   7118     if (ChildAction.cursor == cursor &&
   7119         ChildAction.action == PostChildrenAction::Ignore) {
   7120       return true;
   7121     }
   7122   }
   7123 
   7124   return false;
   7125 }
   7126 
   7127 const CXXOperatorCallExpr *GetSubscriptOrCallOperator(CXCursor Cursor) {
   7128   if (!clang_isExpression(Cursor.kind))
   7129     return nullptr;
   7130 
   7131   const Expr *E = getCursorExpr(Cursor);
   7132   if (const auto *OCE = dyn_cast<CXXOperatorCallExpr>(E)) {
   7133     const OverloadedOperatorKind Kind = OCE->getOperator();
   7134     if (Kind == OO_Call || Kind == OO_Subscript)
   7135       return OCE;
   7136   }
   7137 
   7138   return nullptr;
   7139 }
   7140 
   7141 AnnotateTokensWorker::PostChildrenActions
   7142 AnnotateTokensWorker::DetermineChildActions(CXCursor Cursor) const {
   7143   PostChildrenActions actions;
   7144 
   7145   // The DeclRefExpr of CXXOperatorCallExpr refering to the custom operator is
   7146   // visited before the arguments to the operator call. For the Call and
   7147   // Subscript operator the range of this DeclRefExpr includes the whole call
   7148   // expression, so that all tokens in that range would be mapped to the
   7149   // operator function, including the tokens of the arguments. To avoid that,
   7150   // ensure to visit this DeclRefExpr as last node.
   7151   if (const auto *OCE = GetSubscriptOrCallOperator(Cursor)) {
   7152     const Expr *Callee = OCE->getCallee();
   7153     if (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(Callee)) {
   7154       const Expr *SubExpr = ICE->getSubExpr();
   7155       if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(SubExpr)) {
   7156         const Decl *parentDecl = getCursorDecl(Cursor);
   7157         CXTranslationUnit TU = clang_Cursor_getTranslationUnit(Cursor);
   7158 
   7159         // Visit the DeclRefExpr as last.
   7160         CXCursor cxChild = MakeCXCursor(DRE, parentDecl, TU);
   7161         actions.push_back({cxChild, PostChildrenAction::Postpone});
   7162 
   7163         // The parent of the DeclRefExpr, an ImplicitCastExpr, has an equally
   7164         // wide range as the DeclRefExpr. We can skip visiting this entirely.
   7165         cxChild = MakeCXCursor(ICE, parentDecl, TU);
   7166         actions.push_back({cxChild, PostChildrenAction::Ignore});
   7167       }
   7168     }
   7169   }
   7170 
   7171   return actions;
   7172 }
   7173 
   7174 static inline void updateCursorAnnotation(CXCursor &Cursor,
   7175                                           const CXCursor &updateC) {
   7176   if (clang_isInvalid(updateC.kind) || !clang_isInvalid(Cursor.kind))
   7177     return;
   7178   Cursor = updateC;
   7179 }
   7180 
   7181 /// It annotates and advances tokens with a cursor until the comparison
   7182 //// between the cursor location and the source range is the same as
   7183 /// \arg compResult.
   7184 ///
   7185 /// Pass RangeBefore to annotate tokens with a cursor until a range is reached.
   7186 /// Pass RangeOverlap to annotate tokens inside a range.
   7187 void AnnotateTokensWorker::annotateAndAdvanceTokens(
   7188     CXCursor updateC, RangeComparisonResult compResult, SourceRange range) {
   7189   while (MoreTokens()) {
   7190     const unsigned I = NextToken();
   7191     if (isFunctionMacroToken(I))
   7192       if (!annotateAndAdvanceFunctionMacroTokens(updateC, compResult, range))
   7193         return;
   7194 
   7195     SourceLocation TokLoc = GetTokenLoc(I);
   7196     if (LocationCompare(SrcMgr, TokLoc, range) == compResult) {
   7197       updateCursorAnnotation(Cursors[I], updateC);
   7198       AdvanceToken();
   7199       continue;
   7200     }
   7201     break;
   7202   }
   7203 }
   7204 
   7205 /// Special annotation handling for macro argument tokens.
   7206 /// \returns true if it advanced beyond all macro tokens, false otherwise.
   7207 bool AnnotateTokensWorker::annotateAndAdvanceFunctionMacroTokens(
   7208     CXCursor updateC, RangeComparisonResult compResult, SourceRange range) {
   7209   assert(MoreTokens());
   7210   assert(isFunctionMacroToken(NextToken()) &&
   7211          "Should be called only for macro arg tokens");
   7212 
   7213   // This works differently than annotateAndAdvanceTokens; because expanded
   7214   // macro arguments can have arbitrary translation-unit source order, we do not
   7215   // advance the token index one by one until a token fails the range test.
   7216   // We only advance once past all of the macro arg tokens if all of them
   7217   // pass the range test. If one of them fails we keep the token index pointing
   7218   // at the start of the macro arg tokens so that the failing token will be
   7219   // annotated by a subsequent annotation try.
   7220 
   7221   bool atLeastOneCompFail = false;
   7222 
   7223   unsigned I = NextToken();
   7224   for (; I < NumTokens && isFunctionMacroToken(I); ++I) {
   7225     SourceLocation TokLoc = getFunctionMacroTokenLoc(I);
   7226     if (TokLoc.isFileID())
   7227       continue; // not macro arg token, it's parens or comma.
   7228     if (LocationCompare(SrcMgr, TokLoc, range) == compResult) {
   7229       if (clang_isInvalid(clang_getCursorKind(Cursors[I])))
   7230         Cursors[I] = updateC;
   7231     } else
   7232       atLeastOneCompFail = true;
   7233   }
   7234 
   7235   if (atLeastOneCompFail)
   7236     return false;
   7237 
   7238   TokIdx = I; // All of the tokens were handled, advance beyond all of them.
   7239   return true;
   7240 }
   7241 
   7242 enum CXChildVisitResult AnnotateTokensWorker::Visit(CXCursor cursor,
   7243                                                     CXCursor parent) {
   7244   SourceRange cursorRange = getRawCursorExtent(cursor);
   7245   if (cursorRange.isInvalid())
   7246     return CXChildVisit_Recurse;
   7247 
   7248   if (IsIgnoredChildCursor(cursor))
   7249     return CXChildVisit_Continue;
   7250 
   7251   if (!HasContextSensitiveKeywords) {
   7252     // Objective-C properties can have context-sensitive keywords.
   7253     if (cursor.kind == CXCursor_ObjCPropertyDecl) {
   7254       if (const ObjCPropertyDecl *Property =
   7255               dyn_cast_or_null<ObjCPropertyDecl>(getCursorDecl(cursor)))
   7256         HasContextSensitiveKeywords =
   7257             Property->getPropertyAttributesAsWritten() != 0;
   7258     }
   7259     // Objective-C methods can have context-sensitive keywords.
   7260     else if (cursor.kind == CXCursor_ObjCInstanceMethodDecl ||
   7261              cursor.kind == CXCursor_ObjCClassMethodDecl) {
   7262       if (const ObjCMethodDecl *Method =
   7263               dyn_cast_or_null<ObjCMethodDecl>(getCursorDecl(cursor))) {
   7264         if (Method->getObjCDeclQualifier())
   7265           HasContextSensitiveKeywords = true;
   7266         else {
   7267           for (const auto *P : Method->parameters()) {
   7268             if (P->getObjCDeclQualifier()) {
   7269               HasContextSensitiveKeywords = true;
   7270               break;
   7271             }
   7272           }
   7273         }
   7274       }
   7275     }
   7276     // C++ methods can have context-sensitive keywords.
   7277     else if (cursor.kind == CXCursor_CXXMethod) {
   7278       if (const CXXMethodDecl *Method =
   7279               dyn_cast_or_null<CXXMethodDecl>(getCursorDecl(cursor))) {
   7280         if (Method->hasAttr<FinalAttr>() || Method->hasAttr<OverrideAttr>())
   7281           HasContextSensitiveKeywords = true;
   7282       }
   7283     }
   7284     // C++ classes can have context-sensitive keywords.
   7285     else if (cursor.kind == CXCursor_StructDecl ||
   7286              cursor.kind == CXCursor_ClassDecl ||
   7287              cursor.kind == CXCursor_ClassTemplate ||
   7288              cursor.kind == CXCursor_ClassTemplatePartialSpecialization) {
   7289       if (const Decl *D = getCursorDecl(cursor))
   7290         if (D->hasAttr<FinalAttr>())
   7291           HasContextSensitiveKeywords = true;
   7292     }
   7293   }
   7294 
   7295   // Don't override a property annotation with its getter/setter method.
   7296   if (cursor.kind == CXCursor_ObjCInstanceMethodDecl &&
   7297       parent.kind == CXCursor_ObjCPropertyDecl)
   7298     return CXChildVisit_Continue;
   7299 
   7300   if (clang_isPreprocessing(cursor.kind)) {
   7301     // Items in the preprocessing record are kept separate from items in
   7302     // declarations, so we keep a separate token index.
   7303     unsigned SavedTokIdx = TokIdx;
   7304     TokIdx = PreprocessingTokIdx;
   7305 
   7306     // Skip tokens up until we catch up to the beginning of the preprocessing
   7307     // entry.
   7308     while (MoreTokens()) {
   7309       const unsigned I = NextToken();
   7310       SourceLocation TokLoc = GetTokenLoc(I);
   7311       switch (LocationCompare(SrcMgr, TokLoc, cursorRange)) {
   7312       case RangeBefore:
   7313         AdvanceToken();
   7314         continue;
   7315       case RangeAfter:
   7316       case RangeOverlap:
   7317         break;
   7318       }
   7319       break;
   7320     }
   7321 
   7322     // Look at all of the tokens within this range.
   7323     while (MoreTokens()) {
   7324       const unsigned I = NextToken();
   7325       SourceLocation TokLoc = GetTokenLoc(I);
   7326       switch (LocationCompare(SrcMgr, TokLoc, cursorRange)) {
   7327       case RangeBefore:
   7328         llvm_unreachable("Infeasible");
   7329       case RangeAfter:
   7330         break;
   7331       case RangeOverlap:
   7332         // For macro expansions, just note where the beginning of the macro
   7333         // expansion occurs.
   7334         if (cursor.kind == CXCursor_MacroExpansion) {
   7335           if (TokLoc == cursorRange.getBegin())
   7336             Cursors[I] = cursor;
   7337           AdvanceToken();
   7338           break;
   7339         }
   7340         // We may have already annotated macro names inside macro definitions.
   7341         if (Cursors[I].kind != CXCursor_MacroExpansion)
   7342           Cursors[I] = cursor;
   7343         AdvanceToken();
   7344         continue;
   7345       }
   7346       break;
   7347     }
   7348 
   7349     // Save the preprocessing token index; restore the non-preprocessing
   7350     // token index.
   7351     PreprocessingTokIdx = TokIdx;
   7352     TokIdx = SavedTokIdx;
   7353     return CXChildVisit_Recurse;
   7354   }
   7355 
   7356   if (cursorRange.isInvalid())
   7357     return CXChildVisit_Continue;
   7358 
   7359   unsigned BeforeReachingCursorIdx = NextToken();
   7360   const enum CXCursorKind cursorK = clang_getCursorKind(cursor);
   7361   const enum CXCursorKind K = clang_getCursorKind(parent);
   7362   const CXCursor updateC =
   7363       (clang_isInvalid(K) || K == CXCursor_TranslationUnit ||
   7364        // Attributes are annotated out-of-order, skip tokens until we reach it.
   7365        clang_isAttribute(cursor.kind))
   7366           ? clang_getNullCursor()
   7367           : parent;
   7368 
   7369   annotateAndAdvanceTokens(updateC, RangeBefore, cursorRange);
   7370 
   7371   // Avoid having the cursor of an expression "overwrite" the annotation of the
   7372   // variable declaration that it belongs to.
   7373   // This can happen for C++ constructor expressions whose range generally
   7374   // include the variable declaration, e.g.:
   7375   //  MyCXXClass foo; // Make sure we don't annotate 'foo' as a CallExpr cursor.
   7376   if (clang_isExpression(cursorK) && MoreTokens()) {
   7377     const Expr *E = getCursorExpr(cursor);
   7378     if (const Decl *D = getCursorDecl(cursor)) {
   7379       const unsigned I = NextToken();
   7380       if (E->getBeginLoc().isValid() && D->getLocation().isValid() &&
   7381           E->getBeginLoc() == D->getLocation() &&
   7382           E->getBeginLoc() == GetTokenLoc(I)) {
   7383         updateCursorAnnotation(Cursors[I], updateC);
   7384         AdvanceToken();
   7385       }
   7386     }
   7387   }
   7388 
   7389   // Before recursing into the children keep some state that we are going
   7390   // to use in the AnnotateTokensWorker::postVisitChildren callback to do some
   7391   // extra work after the child nodes are visited.
   7392   // Note that we don't call VisitChildren here to avoid traversing statements
   7393   // code-recursively which can blow the stack.
   7394 
   7395   PostChildrenInfo Info;
   7396   Info.Cursor = cursor;
   7397   Info.CursorRange = cursorRange;
   7398   Info.BeforeReachingCursorIdx = BeforeReachingCursorIdx;
   7399   Info.BeforeChildrenTokenIdx = NextToken();
   7400   Info.ChildActions = DetermineChildActions(cursor);
   7401   PostChildrenInfos.push_back(Info);
   7402 
   7403   return CXChildVisit_Recurse;
   7404 }
   7405 
   7406 bool AnnotateTokensWorker::postVisitChildren(CXCursor cursor) {
   7407   if (PostChildrenInfos.empty())
   7408     return false;
   7409   const PostChildrenInfo &Info = PostChildrenInfos.back();
   7410   if (!clang_equalCursors(Info.Cursor, cursor))
   7411     return false;
   7412 
   7413   HandlePostPonedChildCursors(Info);
   7414 
   7415   const unsigned BeforeChildren = Info.BeforeChildrenTokenIdx;
   7416   const unsigned AfterChildren = NextToken();
   7417   SourceRange cursorRange = Info.CursorRange;
   7418 
   7419   // Scan the tokens that are at the end of the cursor, but are not captured
   7420   // but the child cursors.
   7421   annotateAndAdvanceTokens(cursor, RangeOverlap, cursorRange);
   7422 
   7423   // Scan the tokens that are at the beginning of the cursor, but are not
   7424   // capture by the child cursors.
   7425   for (unsigned I = BeforeChildren; I != AfterChildren; ++I) {
   7426     if (!clang_isInvalid(clang_getCursorKind(Cursors[I])))
   7427       break;
   7428 
   7429     Cursors[I] = cursor;
   7430   }
   7431 
   7432   // Attributes are annotated out-of-order, rewind TokIdx to when we first
   7433   // encountered the attribute cursor.
   7434   if (clang_isAttribute(cursor.kind))
   7435     TokIdx = Info.BeforeReachingCursorIdx;
   7436 
   7437   PostChildrenInfos.pop_back();
   7438   return false;
   7439 }
   7440 
   7441 void AnnotateTokensWorker::HandlePostPonedChildCursors(
   7442     const PostChildrenInfo &Info) {
   7443   for (const auto &ChildAction : Info.ChildActions) {
   7444     if (ChildAction.action == PostChildrenAction::Postpone) {
   7445       HandlePostPonedChildCursor(ChildAction.cursor,
   7446                                  Info.BeforeChildrenTokenIdx);
   7447     }
   7448   }
   7449 }
   7450 
   7451 void AnnotateTokensWorker::HandlePostPonedChildCursor(
   7452     CXCursor Cursor, unsigned StartTokenIndex) {
   7453   unsigned I = StartTokenIndex;
   7454 
   7455   // The bracket tokens of a Call or Subscript operator are mapped to
   7456   // CallExpr/CXXOperatorCallExpr because we skipped visiting the corresponding
   7457   // DeclRefExpr. Remap these tokens to the DeclRefExpr cursors.
   7458   for (unsigned RefNameRangeNr = 0; I < NumTokens; RefNameRangeNr++) {
   7459     const CXSourceRange CXRefNameRange = clang_getCursorReferenceNameRange(
   7460         Cursor, CXNameRange_WantQualifier, RefNameRangeNr);
   7461     if (clang_Range_isNull(CXRefNameRange))
   7462       break; // All ranges handled.
   7463 
   7464     SourceRange RefNameRange = cxloc::translateCXSourceRange(CXRefNameRange);
   7465     while (I < NumTokens) {
   7466       const SourceLocation TokenLocation = GetTokenLoc(I);
   7467       if (!TokenLocation.isValid())
   7468         break;
   7469 
   7470       // Adapt the end range, because LocationCompare() reports
   7471       // RangeOverlap even for the not-inclusive end location.
   7472       const SourceLocation fixedEnd =
   7473           RefNameRange.getEnd().getLocWithOffset(-1);
   7474       RefNameRange = SourceRange(RefNameRange.getBegin(), fixedEnd);
   7475 
   7476       const RangeComparisonResult ComparisonResult =
   7477           LocationCompare(SrcMgr, TokenLocation, RefNameRange);
   7478 
   7479       if (ComparisonResult == RangeOverlap) {
   7480         Cursors[I++] = Cursor;
   7481       } else if (ComparisonResult == RangeBefore) {
   7482         ++I; // Not relevant token, check next one.
   7483       } else if (ComparisonResult == RangeAfter) {
   7484         break; // All tokens updated for current range, check next.
   7485       }
   7486     }
   7487   }
   7488 }
   7489 
   7490 static enum CXChildVisitResult AnnotateTokensVisitor(CXCursor cursor,
   7491                                                      CXCursor parent,
   7492                                                      CXClientData client_data) {
   7493   return static_cast<AnnotateTokensWorker *>(client_data)
   7494       ->Visit(cursor, parent);
   7495 }
   7496 
   7497 static bool AnnotateTokensPostChildrenVisitor(CXCursor cursor,
   7498                                               CXClientData client_data) {
   7499   return static_cast<AnnotateTokensWorker *>(client_data)
   7500       ->postVisitChildren(cursor);
   7501 }
   7502 
   7503 namespace {
   7504 
   7505 /// Uses the macro expansions in the preprocessing record to find
   7506 /// and mark tokens that are macro arguments. This info is used by the
   7507 /// AnnotateTokensWorker.
   7508 class MarkMacroArgTokensVisitor {
   7509   SourceManager &SM;
   7510   CXToken *Tokens;
   7511   unsigned NumTokens;
   7512   unsigned CurIdx;
   7513 
   7514 public:
   7515   MarkMacroArgTokensVisitor(SourceManager &SM, CXToken *tokens,
   7516                             unsigned numTokens)
   7517       : SM(SM), Tokens(tokens), NumTokens(numTokens), CurIdx(0) {}
   7518 
   7519   CXChildVisitResult visit(CXCursor cursor, CXCursor parent) {
   7520     if (cursor.kind != CXCursor_MacroExpansion)
   7521       return CXChildVisit_Continue;
   7522 
   7523     SourceRange macroRange = getCursorMacroExpansion(cursor).getSourceRange();
   7524     if (macroRange.getBegin() == macroRange.getEnd())
   7525       return CXChildVisit_Continue; // it's not a function macro.
   7526 
   7527     for (; CurIdx < NumTokens; ++CurIdx) {
   7528       if (!SM.isBeforeInTranslationUnit(getTokenLoc(CurIdx),
   7529                                         macroRange.getBegin()))
   7530         break;
   7531     }
   7532 
   7533     if (CurIdx == NumTokens)
   7534       return CXChildVisit_Break;
   7535 
   7536     for (; CurIdx < NumTokens; ++CurIdx) {
   7537       SourceLocation tokLoc = getTokenLoc(CurIdx);
   7538       if (!SM.isBeforeInTranslationUnit(tokLoc, macroRange.getEnd()))
   7539         break;
   7540 
   7541       setFunctionMacroTokenLoc(CurIdx, SM.getMacroArgExpandedLocation(tokLoc));
   7542     }
   7543 
   7544     if (CurIdx == NumTokens)
   7545       return CXChildVisit_Break;
   7546 
   7547     return CXChildVisit_Continue;
   7548   }
   7549 
   7550 private:
   7551   CXToken &getTok(unsigned Idx) {
   7552     assert(Idx < NumTokens);
   7553     return Tokens[Idx];
   7554   }
   7555   const CXToken &getTok(unsigned Idx) const {
   7556     assert(Idx < NumTokens);
   7557     return Tokens[Idx];
   7558   }
   7559 
   7560   SourceLocation getTokenLoc(unsigned tokI) {
   7561     return SourceLocation::getFromRawEncoding(getTok(tokI).int_data[1]);
   7562   }
   7563 
   7564   void setFunctionMacroTokenLoc(unsigned tokI, SourceLocation loc) {
   7565     // The third field is reserved and currently not used. Use it here
   7566     // to mark macro arg expanded tokens with their expanded locations.
   7567     getTok(tokI).int_data[3] = loc.getRawEncoding();
   7568   }
   7569 };
   7570 
   7571 } // end anonymous namespace
   7572 
   7573 static CXChildVisitResult
   7574 MarkMacroArgTokensVisitorDelegate(CXCursor cursor, CXCursor parent,
   7575                                   CXClientData client_data) {
   7576   return static_cast<MarkMacroArgTokensVisitor *>(client_data)
   7577       ->visit(cursor, parent);
   7578 }
   7579 
   7580 /// Used by \c annotatePreprocessorTokens.
   7581 /// \returns true if lexing was finished, false otherwise.
   7582 static bool lexNext(Lexer &Lex, Token &Tok, unsigned &NextIdx,
   7583                     unsigned NumTokens) {
   7584   if (NextIdx >= NumTokens)
   7585     return true;
   7586 
   7587   ++NextIdx;
   7588   Lex.LexFromRawLexer(Tok);
   7589   return Tok.is(tok::eof);
   7590 }
   7591 
   7592 static void annotatePreprocessorTokens(CXTranslationUnit TU,
   7593                                        SourceRange RegionOfInterest,
   7594                                        CXCursor *Cursors, CXToken *Tokens,
   7595                                        unsigned NumTokens) {
   7596   ASTUnit *CXXUnit = cxtu::getASTUnit(TU);
   7597 
   7598   Preprocessor &PP = CXXUnit->getPreprocessor();
   7599   SourceManager &SourceMgr = CXXUnit->getSourceManager();
   7600   std::pair<FileID, unsigned> BeginLocInfo =
   7601       SourceMgr.getDecomposedSpellingLoc(RegionOfInterest.getBegin());
   7602   std::pair<FileID, unsigned> EndLocInfo =
   7603       SourceMgr.getDecomposedSpellingLoc(RegionOfInterest.getEnd());
   7604 
   7605   if (BeginLocInfo.first != EndLocInfo.first)
   7606     return;
   7607 
   7608   StringRef Buffer;
   7609   bool Invalid = false;
   7610   Buffer = SourceMgr.getBufferData(BeginLocInfo.first, &Invalid);
   7611   if (Buffer.empty() || Invalid)
   7612     return;
   7613 
   7614   Lexer Lex(SourceMgr.getLocForStartOfFile(BeginLocInfo.first),
   7615             CXXUnit->getASTContext().getLangOpts(), Buffer.begin(),
   7616             Buffer.data() + BeginLocInfo.second, Buffer.end());
   7617   Lex.SetCommentRetentionState(true);
   7618 
   7619   unsigned NextIdx = 0;
   7620   // Lex tokens in raw mode until we hit the end of the range, to avoid
   7621   // entering #includes or expanding macros.
   7622   while (true) {
   7623     Token Tok;
   7624     if (lexNext(Lex, Tok, NextIdx, NumTokens))
   7625       break;
   7626     unsigned TokIdx = NextIdx - 1;
   7627     assert(Tok.getLocation() ==
   7628            SourceLocation::getFromRawEncoding(Tokens[TokIdx].int_data[1]));
   7629 
   7630   reprocess:
   7631     if (Tok.is(tok::hash) && Tok.isAtStartOfLine()) {
   7632       // We have found a preprocessing directive. Annotate the tokens
   7633       // appropriately.
   7634       //
   7635       // FIXME: Some simple tests here could identify macro definitions and
   7636       // #undefs, to provide specific cursor kinds for those.
   7637 
   7638       SourceLocation BeginLoc = Tok.getLocation();
   7639       if (lexNext(Lex, Tok, NextIdx, NumTokens))
   7640         break;
   7641 
   7642       MacroInfo *MI = nullptr;
   7643       if (Tok.is(tok::raw_identifier) && Tok.getRawIdentifier() == "define") {
   7644         if (lexNext(Lex, Tok, NextIdx, NumTokens))
   7645           break;
   7646 
   7647         if (Tok.is(tok::raw_identifier)) {
   7648           IdentifierInfo &II =
   7649               PP.getIdentifierTable().get(Tok.getRawIdentifier());
   7650           SourceLocation MappedTokLoc =
   7651               CXXUnit->mapLocationToPreamble(Tok.getLocation());
   7652           MI = getMacroInfo(II, MappedTokLoc, TU);
   7653         }
   7654       }
   7655 
   7656       bool finished = false;
   7657       do {
   7658         if (lexNext(Lex, Tok, NextIdx, NumTokens)) {
   7659           finished = true;
   7660           break;
   7661         }
   7662         // If we are in a macro definition, check if the token was ever a
   7663         // macro name and annotate it if that's the case.
   7664         if (MI) {
   7665           SourceLocation SaveLoc = Tok.getLocation();
   7666           Tok.setLocation(CXXUnit->mapLocationToPreamble(SaveLoc));
   7667           MacroDefinitionRecord *MacroDef =
   7668               checkForMacroInMacroDefinition(MI, Tok, TU);
   7669           Tok.setLocation(SaveLoc);
   7670           if (MacroDef)
   7671             Cursors[NextIdx - 1] =
   7672                 MakeMacroExpansionCursor(MacroDef, Tok.getLocation(), TU);
   7673         }
   7674       } while (!Tok.isAtStartOfLine());
   7675 
   7676       unsigned LastIdx = finished ? NextIdx - 1 : NextIdx - 2;
   7677       assert(TokIdx <= LastIdx);
   7678       SourceLocation EndLoc =
   7679           SourceLocation::getFromRawEncoding(Tokens[LastIdx].int_data[1]);
   7680       CXCursor Cursor =
   7681           MakePreprocessingDirectiveCursor(SourceRange(BeginLoc, EndLoc), TU);
   7682 
   7683       for (; TokIdx <= LastIdx; ++TokIdx)
   7684         updateCursorAnnotation(Cursors[TokIdx], Cursor);
   7685 
   7686       if (finished)
   7687         break;
   7688       goto reprocess;
   7689     }
   7690   }
   7691 }
   7692 
   7693 // This gets run a separate thread to avoid stack blowout.
   7694 static void clang_annotateTokensImpl(CXTranslationUnit TU, ASTUnit *CXXUnit,
   7695                                      CXToken *Tokens, unsigned NumTokens,
   7696                                      CXCursor *Cursors) {
   7697   CIndexer *CXXIdx = TU->CIdx;
   7698   if (CXXIdx->isOptEnabled(CXGlobalOpt_ThreadBackgroundPriorityForEditing))
   7699     setThreadBackgroundPriority();
   7700 
   7701   // Determine the region of interest, which contains all of the tokens.
   7702   SourceRange RegionOfInterest;
   7703   RegionOfInterest.setBegin(
   7704       cxloc::translateSourceLocation(clang_getTokenLocation(TU, Tokens[0])));
   7705   RegionOfInterest.setEnd(cxloc::translateSourceLocation(
   7706       clang_getTokenLocation(TU, Tokens[NumTokens - 1])));
   7707 
   7708   // Relex the tokens within the source range to look for preprocessing
   7709   // directives.
   7710   annotatePreprocessorTokens(TU, RegionOfInterest, Cursors, Tokens, NumTokens);
   7711 
   7712   // If begin location points inside a macro argument, set it to the expansion
   7713   // location so we can have the full context when annotating semantically.
   7714   {
   7715     SourceManager &SM = CXXUnit->getSourceManager();
   7716     SourceLocation Loc =
   7717         SM.getMacroArgExpandedLocation(RegionOfInterest.getBegin());
   7718     if (Loc.isMacroID())
   7719       RegionOfInterest.setBegin(SM.getExpansionLoc(Loc));
   7720   }
   7721 
   7722   if (CXXUnit->getPreprocessor().getPreprocessingRecord()) {
   7723     // Search and mark tokens that are macro argument expansions.
   7724     MarkMacroArgTokensVisitor Visitor(CXXUnit->getSourceManager(), Tokens,
   7725                                       NumTokens);
   7726     CursorVisitor MacroArgMarker(
   7727         TU, MarkMacroArgTokensVisitorDelegate, &Visitor,
   7728         /*VisitPreprocessorLast=*/true,
   7729         /*VisitIncludedEntities=*/false, RegionOfInterest);
   7730     MacroArgMarker.visitPreprocessedEntitiesInRegion();
   7731   }
   7732 
   7733   // Annotate all of the source locations in the region of interest that map to
   7734   // a specific cursor.
   7735   AnnotateTokensWorker W(Tokens, Cursors, NumTokens, TU, RegionOfInterest);
   7736 
   7737   // FIXME: We use a ridiculous stack size here because the data-recursion
   7738   // algorithm uses a large stack frame than the non-data recursive version,
   7739   // and AnnotationTokensWorker currently transforms the data-recursion
   7740   // algorithm back into a traditional recursion by explicitly calling
   7741   // VisitChildren().  We will need to remove this explicit recursive call.
   7742   W.AnnotateTokens();
   7743 
   7744   // If we ran into any entities that involve context-sensitive keywords,
   7745   // take another pass through the tokens to mark them as such.
   7746   if (W.hasContextSensitiveKeywords()) {
   7747     for (unsigned I = 0; I != NumTokens; ++I) {
   7748       if (clang_getTokenKind(Tokens[I]) != CXToken_Identifier)
   7749         continue;
   7750 
   7751       if (Cursors[I].kind == CXCursor_ObjCPropertyDecl) {
   7752         IdentifierInfo *II = static_cast<IdentifierInfo *>(Tokens[I].ptr_data);
   7753         if (const ObjCPropertyDecl *Property =
   7754                 dyn_cast_or_null<ObjCPropertyDecl>(getCursorDecl(Cursors[I]))) {
   7755           if (Property->getPropertyAttributesAsWritten() != 0 &&
   7756               llvm::StringSwitch<bool>(II->getName())
   7757                   .Case("readonly", true)
   7758                   .Case("assign", true)
   7759                   .Case("unsafe_unretained", true)
   7760                   .Case("readwrite", true)
   7761                   .Case("retain", true)
   7762                   .Case("copy", true)
   7763                   .Case("nonatomic", true)
   7764                   .Case("atomic", true)
   7765                   .Case("getter", true)
   7766                   .Case("setter", true)
   7767                   .Case("strong", true)
   7768                   .Case("weak", true)
   7769                   .Case("class", true)
   7770                   .Default(false))
   7771             Tokens[I].int_data[0] = CXToken_Keyword;
   7772         }
   7773         continue;
   7774       }
   7775 
   7776       if (Cursors[I].kind == CXCursor_ObjCInstanceMethodDecl ||
   7777           Cursors[I].kind == CXCursor_ObjCClassMethodDecl) {
   7778         IdentifierInfo *II = static_cast<IdentifierInfo *>(Tokens[I].ptr_data);
   7779         if (llvm::StringSwitch<bool>(II->getName())
   7780                 .Case("in", true)
   7781                 .Case("out", true)
   7782                 .Case("inout", true)
   7783                 .Case("oneway", true)
   7784                 .Case("bycopy", true)
   7785                 .Case("byref", true)
   7786                 .Default(false))
   7787           Tokens[I].int_data[0] = CXToken_Keyword;
   7788         continue;
   7789       }
   7790 
   7791       if (Cursors[I].kind == CXCursor_CXXFinalAttr ||
   7792           Cursors[I].kind == CXCursor_CXXOverrideAttr) {
   7793         Tokens[I].int_data[0] = CXToken_Keyword;
   7794         continue;
   7795       }
   7796     }
   7797   }
   7798 }
   7799 
   7800 void clang_annotateTokens(CXTranslationUnit TU, CXToken *Tokens,
   7801                           unsigned NumTokens, CXCursor *Cursors) {
   7802   if (isNotUsableTU(TU)) {
   7803     LOG_BAD_TU(TU);
   7804     return;
   7805   }
   7806   if (NumTokens == 0 || !Tokens || !Cursors) {
   7807     LOG_FUNC_SECTION { *Log << "<null input>"; }
   7808     return;
   7809   }
   7810 
   7811   LOG_FUNC_SECTION {
   7812     *Log << TU << ' ';
   7813     CXSourceLocation bloc = clang_getTokenLocation(TU, Tokens[0]);
   7814     CXSourceLocation eloc = clang_getTokenLocation(TU, Tokens[NumTokens - 1]);
   7815     *Log << clang_getRange(bloc, eloc);
   7816   }
   7817 
   7818   // Any token we don't specifically annotate will have a NULL cursor.
   7819   CXCursor C = clang_getNullCursor();
   7820   for (unsigned I = 0; I != NumTokens; ++I)
   7821     Cursors[I] = C;
   7822 
   7823   ASTUnit *CXXUnit = cxtu::getASTUnit(TU);
   7824   if (!CXXUnit)
   7825     return;
   7826 
   7827   ASTUnit::ConcurrencyCheck Check(*CXXUnit);
   7828 
   7829   auto AnnotateTokensImpl = [=]() {
   7830     clang_annotateTokensImpl(TU, CXXUnit, Tokens, NumTokens, Cursors);
   7831   };
   7832   llvm::CrashRecoveryContext CRC;
   7833   if (!RunSafely(CRC, AnnotateTokensImpl, GetSafetyThreadStackSize() * 2)) {
   7834     fprintf(stderr, "libclang: crash detected while annotating tokens\n");
   7835   }
   7836 }
   7837 
   7838 //===----------------------------------------------------------------------===//
   7839 // Operations for querying linkage of a cursor.
   7840 //===----------------------------------------------------------------------===//
   7841 
   7842 CXLinkageKind clang_getCursorLinkage(CXCursor cursor) {
   7843   if (!clang_isDeclaration(cursor.kind))
   7844     return CXLinkage_Invalid;
   7845 
   7846   const Decl *D = cxcursor::getCursorDecl(cursor);
   7847   if (const NamedDecl *ND = dyn_cast_or_null<NamedDecl>(D))
   7848     switch (ND->getLinkageInternal()) {
   7849     case NoLinkage:
   7850     case VisibleNoLinkage:
   7851       return CXLinkage_NoLinkage;
   7852     case ModuleInternalLinkage:
   7853     case InternalLinkage:
   7854       return CXLinkage_Internal;
   7855     case UniqueExternalLinkage:
   7856       return CXLinkage_UniqueExternal;
   7857     case ModuleLinkage:
   7858     case ExternalLinkage:
   7859       return CXLinkage_External;
   7860     };
   7861 
   7862   return CXLinkage_Invalid;
   7863 }
   7864 
   7865 //===----------------------------------------------------------------------===//
   7866 // Operations for querying visibility of a cursor.
   7867 //===----------------------------------------------------------------------===//
   7868 
   7869 CXVisibilityKind clang_getCursorVisibility(CXCursor cursor) {
   7870   if (!clang_isDeclaration(cursor.kind))
   7871     return CXVisibility_Invalid;
   7872 
   7873   const Decl *D = cxcursor::getCursorDecl(cursor);
   7874   if (const NamedDecl *ND = dyn_cast_or_null<NamedDecl>(D))
   7875     switch (ND->getVisibility()) {
   7876     case HiddenVisibility:
   7877       return CXVisibility_Hidden;
   7878     case ProtectedVisibility:
   7879       return CXVisibility_Protected;
   7880     case DefaultVisibility:
   7881       return CXVisibility_Default;
   7882     };
   7883 
   7884   return CXVisibility_Invalid;
   7885 }
   7886 
   7887 //===----------------------------------------------------------------------===//
   7888 // Operations for querying language of a cursor.
   7889 //===----------------------------------------------------------------------===//
   7890 
   7891 static CXLanguageKind getDeclLanguage(const Decl *D) {
   7892   if (!D)
   7893     return CXLanguage_C;
   7894 
   7895   switch (D->getKind()) {
   7896   default:
   7897     break;
   7898   case Decl::ImplicitParam:
   7899   case Decl::ObjCAtDefsField:
   7900   case Decl::ObjCCategory:
   7901   case Decl::ObjCCategoryImpl:
   7902   case Decl::ObjCCompatibleAlias:
   7903   case Decl::ObjCImplementation:
   7904   case Decl::ObjCInterface:
   7905   case Decl::ObjCIvar:
   7906   case Decl::ObjCMethod:
   7907   case Decl::ObjCProperty:
   7908   case Decl::ObjCPropertyImpl:
   7909   case Decl::ObjCProtocol:
   7910   case Decl::ObjCTypeParam:
   7911     return CXLanguage_ObjC;
   7912   case Decl::CXXConstructor:
   7913   case Decl::CXXConversion:
   7914   case Decl::CXXDestructor:
   7915   case Decl::CXXMethod:
   7916   case Decl::CXXRecord:
   7917   case Decl::ClassTemplate:
   7918   case Decl::ClassTemplatePartialSpecialization:
   7919   case Decl::ClassTemplateSpecialization:
   7920   case Decl::Friend:
   7921   case Decl::FriendTemplate:
   7922   case Decl::FunctionTemplate:
   7923   case Decl::LinkageSpec:
   7924   case Decl::Namespace:
   7925   case Decl::NamespaceAlias:
   7926   case Decl::NonTypeTemplateParm:
   7927   case Decl::StaticAssert:
   7928   case Decl::TemplateTemplateParm:
   7929   case Decl::TemplateTypeParm:
   7930   case Decl::UnresolvedUsingTypename:
   7931   case Decl::UnresolvedUsingValue:
   7932   case Decl::Using:
   7933   case Decl::UsingDirective:
   7934   case Decl::UsingShadow:
   7935     return CXLanguage_CPlusPlus;
   7936   }
   7937 
   7938   return CXLanguage_C;
   7939 }
   7940 
   7941 static CXAvailabilityKind getCursorAvailabilityForDecl(const Decl *D) {
   7942   if (isa<FunctionDecl>(D) && cast<FunctionDecl>(D)->isDeleted())
   7943     return CXAvailability_NotAvailable;
   7944 
   7945   switch (D->getAvailability()) {
   7946   case AR_Available:
   7947   case AR_NotYetIntroduced:
   7948     if (const EnumConstantDecl *EnumConst = dyn_cast<EnumConstantDecl>(D))
   7949       return getCursorAvailabilityForDecl(
   7950           cast<Decl>(EnumConst->getDeclContext()));
   7951     return CXAvailability_Available;
   7952 
   7953   case AR_Deprecated:
   7954     return CXAvailability_Deprecated;
   7955 
   7956   case AR_Unavailable:
   7957     return CXAvailability_NotAvailable;
   7958   }
   7959 
   7960   llvm_unreachable("Unknown availability kind!");
   7961 }
   7962 
   7963 enum CXAvailabilityKind clang_getCursorAvailability(CXCursor cursor) {
   7964   if (clang_isDeclaration(cursor.kind))
   7965     if (const Decl *D = cxcursor::getCursorDecl(cursor))
   7966       return getCursorAvailabilityForDecl(D);
   7967 
   7968   return CXAvailability_Available;
   7969 }
   7970 
   7971 static CXVersion convertVersion(VersionTuple In) {
   7972   CXVersion Out = {-1, -1, -1};
   7973   if (In.empty())
   7974     return Out;
   7975 
   7976   Out.Major = In.getMajor();
   7977 
   7978   Optional<unsigned> Minor = In.getMinor();
   7979   if (Minor.hasValue())
   7980     Out.Minor = *Minor;
   7981   else
   7982     return Out;
   7983 
   7984   Optional<unsigned> Subminor = In.getSubminor();
   7985   if (Subminor.hasValue())
   7986     Out.Subminor = *Subminor;
   7987 
   7988   return Out;
   7989 }
   7990 
   7991 static void getCursorPlatformAvailabilityForDecl(
   7992     const Decl *D, int *always_deprecated, CXString *deprecated_message,
   7993     int *always_unavailable, CXString *unavailable_message,
   7994     SmallVectorImpl<AvailabilityAttr *> &AvailabilityAttrs) {
   7995   bool HadAvailAttr = false;
   7996   for (auto A : D->attrs()) {
   7997     if (DeprecatedAttr *Deprecated = dyn_cast<DeprecatedAttr>(A)) {
   7998       HadAvailAttr = true;
   7999       if (always_deprecated)
   8000         *always_deprecated = 1;
   8001       if (deprecated_message) {
   8002         clang_disposeString(*deprecated_message);
   8003         *deprecated_message = cxstring::createDup(Deprecated->getMessage());
   8004       }
   8005       continue;
   8006     }
   8007 
   8008     if (UnavailableAttr *Unavailable = dyn_cast<UnavailableAttr>(A)) {
   8009       HadAvailAttr = true;
   8010       if (always_unavailable)
   8011         *always_unavailable = 1;
   8012       if (unavailable_message) {
   8013         clang_disposeString(*unavailable_message);
   8014         *unavailable_message = cxstring::createDup(Unavailable->getMessage());
   8015       }
   8016       continue;
   8017     }
   8018 
   8019     if (AvailabilityAttr *Avail = dyn_cast<AvailabilityAttr>(A)) {
   8020       AvailabilityAttrs.push_back(Avail);
   8021       HadAvailAttr = true;
   8022     }
   8023   }
   8024 
   8025   if (!HadAvailAttr)
   8026     if (const EnumConstantDecl *EnumConst = dyn_cast<EnumConstantDecl>(D))
   8027       return getCursorPlatformAvailabilityForDecl(
   8028           cast<Decl>(EnumConst->getDeclContext()), always_deprecated,
   8029           deprecated_message, always_unavailable, unavailable_message,
   8030           AvailabilityAttrs);
   8031 
   8032   if (AvailabilityAttrs.empty())
   8033     return;
   8034 
   8035   llvm::sort(
   8036       AvailabilityAttrs, [](AvailabilityAttr *LHS, AvailabilityAttr *RHS) {
   8037         return LHS->getPlatform()->getName() < RHS->getPlatform()->getName();
   8038       });
   8039   ASTContext &Ctx = D->getASTContext();
   8040   auto It = std::unique(
   8041       AvailabilityAttrs.begin(), AvailabilityAttrs.end(),
   8042       [&Ctx](AvailabilityAttr *LHS, AvailabilityAttr *RHS) {
   8043         if (LHS->getPlatform() != RHS->getPlatform())
   8044           return false;
   8045 
   8046         if (LHS->getIntroduced() == RHS->getIntroduced() &&
   8047             LHS->getDeprecated() == RHS->getDeprecated() &&
   8048             LHS->getObsoleted() == RHS->getObsoleted() &&
   8049             LHS->getMessage() == RHS->getMessage() &&
   8050             LHS->getReplacement() == RHS->getReplacement())
   8051           return true;
   8052 
   8053         if ((!LHS->getIntroduced().empty() && !RHS->getIntroduced().empty()) ||
   8054             (!LHS->getDeprecated().empty() && !RHS->getDeprecated().empty()) ||
   8055             (!LHS->getObsoleted().empty() && !RHS->getObsoleted().empty()))
   8056           return false;
   8057 
   8058         if (LHS->getIntroduced().empty() && !RHS->getIntroduced().empty())
   8059           LHS->setIntroduced(Ctx, RHS->getIntroduced());
   8060 
   8061         if (LHS->getDeprecated().empty() && !RHS->getDeprecated().empty()) {
   8062           LHS->setDeprecated(Ctx, RHS->getDeprecated());
   8063           if (LHS->getMessage().empty())
   8064             LHS->setMessage(Ctx, RHS->getMessage());
   8065           if (LHS->getReplacement().empty())
   8066             LHS->setReplacement(Ctx, RHS->getReplacement());
   8067         }
   8068 
   8069         if (LHS->getObsoleted().empty() && !RHS->getObsoleted().empty()) {
   8070           LHS->setObsoleted(Ctx, RHS->getObsoleted());
   8071           if (LHS->getMessage().empty())
   8072             LHS->setMessage(Ctx, RHS->getMessage());
   8073           if (LHS->getReplacement().empty())
   8074             LHS->setReplacement(Ctx, RHS->getReplacement());
   8075         }
   8076 
   8077         return true;
   8078       });
   8079   AvailabilityAttrs.erase(It, AvailabilityAttrs.end());
   8080 }
   8081 
   8082 int clang_getCursorPlatformAvailability(CXCursor cursor, int *always_deprecated,
   8083                                         CXString *deprecated_message,
   8084                                         int *always_unavailable,
   8085                                         CXString *unavailable_message,
   8086                                         CXPlatformAvailability *availability,
   8087                                         int availability_size) {
   8088   if (always_deprecated)
   8089     *always_deprecated = 0;
   8090   if (deprecated_message)
   8091     *deprecated_message = cxstring::createEmpty();
   8092   if (always_unavailable)
   8093     *always_unavailable = 0;
   8094   if (unavailable_message)
   8095     *unavailable_message = cxstring::createEmpty();
   8096 
   8097   if (!clang_isDeclaration(cursor.kind))
   8098     return 0;
   8099 
   8100   const Decl *D = cxcursor::getCursorDecl(cursor);
   8101   if (!D)
   8102     return 0;
   8103 
   8104   SmallVector<AvailabilityAttr *, 8> AvailabilityAttrs;
   8105   getCursorPlatformAvailabilityForDecl(D, always_deprecated, deprecated_message,
   8106                                        always_unavailable, unavailable_message,
   8107                                        AvailabilityAttrs);
   8108   for (const auto &Avail :
   8109        llvm::enumerate(llvm::makeArrayRef(AvailabilityAttrs)
   8110                            .take_front(availability_size))) {
   8111     availability[Avail.index()].Platform =
   8112         cxstring::createDup(Avail.value()->getPlatform()->getName());
   8113     availability[Avail.index()].Introduced =
   8114         convertVersion(Avail.value()->getIntroduced());
   8115     availability[Avail.index()].Deprecated =
   8116         convertVersion(Avail.value()->getDeprecated());
   8117     availability[Avail.index()].Obsoleted =
   8118         convertVersion(Avail.value()->getObsoleted());
   8119     availability[Avail.index()].Unavailable = Avail.value()->getUnavailable();
   8120     availability[Avail.index()].Message =
   8121         cxstring::createDup(Avail.value()->getMessage());
   8122   }
   8123 
   8124   return AvailabilityAttrs.size();
   8125 }
   8126 
   8127 void clang_disposeCXPlatformAvailability(CXPlatformAvailability *availability) {
   8128   clang_disposeString(availability->Platform);
   8129   clang_disposeString(availability->Message);
   8130 }
   8131 
   8132 CXLanguageKind clang_getCursorLanguage(CXCursor cursor) {
   8133   if (clang_isDeclaration(cursor.kind))
   8134     return getDeclLanguage(cxcursor::getCursorDecl(cursor));
   8135 
   8136   return CXLanguage_Invalid;
   8137 }
   8138 
   8139 CXTLSKind clang_getCursorTLSKind(CXCursor cursor) {
   8140   const Decl *D = cxcursor::getCursorDecl(cursor);
   8141   if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
   8142     switch (VD->getTLSKind()) {
   8143     case VarDecl::TLS_None:
   8144       return CXTLS_None;
   8145     case VarDecl::TLS_Dynamic:
   8146       return CXTLS_Dynamic;
   8147     case VarDecl::TLS_Static:
   8148       return CXTLS_Static;
   8149     }
   8150   }
   8151 
   8152   return CXTLS_None;
   8153 }
   8154 
   8155 /// If the given cursor is the "templated" declaration
   8156 /// describing a class or function template, return the class or
   8157 /// function template.
   8158 static const Decl *maybeGetTemplateCursor(const Decl *D) {
   8159   if (!D)
   8160     return nullptr;
   8161 
   8162   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D))
   8163     if (FunctionTemplateDecl *FunTmpl = FD->getDescribedFunctionTemplate())
   8164       return FunTmpl;
   8165 
   8166   if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(D))
   8167     if (ClassTemplateDecl *ClassTmpl = RD->getDescribedClassTemplate())
   8168       return ClassTmpl;
   8169 
   8170   return D;
   8171 }
   8172 
   8173 enum CX_StorageClass clang_Cursor_getStorageClass(CXCursor C) {
   8174   StorageClass sc = SC_None;
   8175   const Decl *D = getCursorDecl(C);
   8176   if (D) {
   8177     if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
   8178       sc = FD->getStorageClass();
   8179     } else if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {
   8180       sc = VD->getStorageClass();
   8181     } else {
   8182       return CX_SC_Invalid;
   8183     }
   8184   } else {
   8185     return CX_SC_Invalid;
   8186   }
   8187   switch (sc) {
   8188   case SC_None:
   8189     return CX_SC_None;
   8190   case SC_Extern:
   8191     return CX_SC_Extern;
   8192   case SC_Static:
   8193     return CX_SC_Static;
   8194   case SC_PrivateExtern:
   8195     return CX_SC_PrivateExtern;
   8196   case SC_Auto:
   8197     return CX_SC_Auto;
   8198   case SC_Register:
   8199     return CX_SC_Register;
   8200   }
   8201   llvm_unreachable("Unhandled storage class!");
   8202 }
   8203 
   8204 CXCursor clang_getCursorSemanticParent(CXCursor cursor) {
   8205   if (clang_isDeclaration(cursor.kind)) {
   8206     if (const Decl *D = getCursorDecl(cursor)) {
   8207       const DeclContext *DC = D->getDeclContext();
   8208       if (!DC)
   8209         return clang_getNullCursor();
   8210 
   8211       return MakeCXCursor(maybeGetTemplateCursor(cast<Decl>(DC)),
   8212                           getCursorTU(cursor));
   8213     }
   8214   }
   8215 
   8216   if (clang_isStatement(cursor.kind) || clang_isExpression(cursor.kind)) {
   8217     if (const Decl *D = getCursorDecl(cursor))
   8218       return MakeCXCursor(D, getCursorTU(cursor));
   8219   }
   8220 
   8221   return clang_getNullCursor();
   8222 }
   8223 
   8224 CXCursor clang_getCursorLexicalParent(CXCursor cursor) {
   8225   if (clang_isDeclaration(cursor.kind)) {
   8226     if (const Decl *D = getCursorDecl(cursor)) {
   8227       const DeclContext *DC = D->getLexicalDeclContext();
   8228       if (!DC)
   8229         return clang_getNullCursor();
   8230 
   8231       return MakeCXCursor(maybeGetTemplateCursor(cast<Decl>(DC)),
   8232                           getCursorTU(cursor));
   8233     }
   8234   }
   8235 
   8236   // FIXME: Note that we can't easily compute the lexical context of a
   8237   // statement or expression, so we return nothing.
   8238   return clang_getNullCursor();
   8239 }
   8240 
   8241 CXFile clang_getIncludedFile(CXCursor cursor) {
   8242   if (cursor.kind != CXCursor_InclusionDirective)
   8243     return nullptr;
   8244 
   8245   const InclusionDirective *ID = getCursorInclusionDirective(cursor);
   8246   return const_cast<FileEntry *>(ID->getFile());
   8247 }
   8248 
   8249 unsigned clang_Cursor_getObjCPropertyAttributes(CXCursor C, unsigned reserved) {
   8250   if (C.kind != CXCursor_ObjCPropertyDecl)
   8251     return CXObjCPropertyAttr_noattr;
   8252 
   8253   unsigned Result = CXObjCPropertyAttr_noattr;
   8254   const ObjCPropertyDecl *PD = dyn_cast<ObjCPropertyDecl>(getCursorDecl(C));
   8255   ObjCPropertyAttribute::Kind Attr = PD->getPropertyAttributesAsWritten();
   8256 
   8257 #define SET_CXOBJCPROP_ATTR(A)                                                 \
   8258   if (Attr & ObjCPropertyAttribute::kind_##A)                                  \
   8259   Result |= CXObjCPropertyAttr_##A
   8260   SET_CXOBJCPROP_ATTR(readonly);
   8261   SET_CXOBJCPROP_ATTR(getter);
   8262   SET_CXOBJCPROP_ATTR(assign);
   8263   SET_CXOBJCPROP_ATTR(readwrite);
   8264   SET_CXOBJCPROP_ATTR(retain);
   8265   SET_CXOBJCPROP_ATTR(copy);
   8266   SET_CXOBJCPROP_ATTR(nonatomic);
   8267   SET_CXOBJCPROP_ATTR(setter);
   8268   SET_CXOBJCPROP_ATTR(atomic);
   8269   SET_CXOBJCPROP_ATTR(weak);
   8270   SET_CXOBJCPROP_ATTR(strong);
   8271   SET_CXOBJCPROP_ATTR(unsafe_unretained);
   8272   SET_CXOBJCPROP_ATTR(class);
   8273 #undef SET_CXOBJCPROP_ATTR
   8274 
   8275   return Result;
   8276 }
   8277 
   8278 CXString clang_Cursor_getObjCPropertyGetterName(CXCursor C) {
   8279   if (C.kind != CXCursor_ObjCPropertyDecl)
   8280     return cxstring::createNull();
   8281 
   8282   const ObjCPropertyDecl *PD = dyn_cast<ObjCPropertyDecl>(getCursorDecl(C));
   8283   Selector sel = PD->getGetterName();
   8284   if (sel.isNull())
   8285     return cxstring::createNull();
   8286 
   8287   return cxstring::createDup(sel.getAsString());
   8288 }
   8289 
   8290 CXString clang_Cursor_getObjCPropertySetterName(CXCursor C) {
   8291   if (C.kind != CXCursor_ObjCPropertyDecl)
   8292     return cxstring::createNull();
   8293 
   8294   const ObjCPropertyDecl *PD = dyn_cast<ObjCPropertyDecl>(getCursorDecl(C));
   8295   Selector sel = PD->getSetterName();
   8296   if (sel.isNull())
   8297     return cxstring::createNull();
   8298 
   8299   return cxstring::createDup(sel.getAsString());
   8300 }
   8301 
   8302 unsigned clang_Cursor_getObjCDeclQualifiers(CXCursor C) {
   8303   if (!clang_isDeclaration(C.kind))
   8304     return CXObjCDeclQualifier_None;
   8305 
   8306   Decl::ObjCDeclQualifier QT = Decl::OBJC_TQ_None;
   8307   const Decl *D = getCursorDecl(C);
   8308   if (const ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(D))
   8309     QT = MD->getObjCDeclQualifier();
   8310   else if (const ParmVarDecl *PD = dyn_cast<ParmVarDecl>(D))
   8311     QT = PD->getObjCDeclQualifier();
   8312   if (QT == Decl::OBJC_TQ_None)
   8313     return CXObjCDeclQualifier_None;
   8314 
   8315   unsigned Result = CXObjCDeclQualifier_None;
   8316   if (QT & Decl::OBJC_TQ_In)
   8317     Result |= CXObjCDeclQualifier_In;
   8318   if (QT & Decl::OBJC_TQ_Inout)
   8319     Result |= CXObjCDeclQualifier_Inout;
   8320   if (QT & Decl::OBJC_TQ_Out)
   8321     Result |= CXObjCDeclQualifier_Out;
   8322   if (QT & Decl::OBJC_TQ_Bycopy)
   8323     Result |= CXObjCDeclQualifier_Bycopy;
   8324   if (QT & Decl::OBJC_TQ_Byref)
   8325     Result |= CXObjCDeclQualifier_Byref;
   8326   if (QT & Decl::OBJC_TQ_Oneway)
   8327     Result |= CXObjCDeclQualifier_Oneway;
   8328 
   8329   return Result;
   8330 }
   8331 
   8332 unsigned clang_Cursor_isObjCOptional(CXCursor C) {
   8333   if (!clang_isDeclaration(C.kind))
   8334     return 0;
   8335 
   8336   const Decl *D = getCursorDecl(C);
   8337   if (const ObjCPropertyDecl *PD = dyn_cast<ObjCPropertyDecl>(D))
   8338     return PD->getPropertyImplementation() == ObjCPropertyDecl::Optional;
   8339   if (const ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(D))
   8340     return MD->getImplementationControl() == ObjCMethodDecl::Optional;
   8341 
   8342   return 0;
   8343 }
   8344 
   8345 unsigned clang_Cursor_isVariadic(CXCursor C) {
   8346   if (!clang_isDeclaration(C.kind))
   8347     return 0;
   8348 
   8349   const Decl *D = getCursorDecl(C);
   8350   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D))
   8351     return FD->isVariadic();
   8352   if (const ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(D))
   8353     return MD->isVariadic();
   8354 
   8355   return 0;
   8356 }
   8357 
   8358 unsigned clang_Cursor_isExternalSymbol(CXCursor C, CXString *language,
   8359                                        CXString *definedIn,
   8360                                        unsigned *isGenerated) {
   8361   if (!clang_isDeclaration(C.kind))
   8362     return 0;
   8363 
   8364   const Decl *D = getCursorDecl(C);
   8365 
   8366   if (auto *attr = D->getExternalSourceSymbolAttr()) {
   8367     if (language)
   8368       *language = cxstring::createDup(attr->getLanguage());
   8369     if (definedIn)
   8370       *definedIn = cxstring::createDup(attr->getDefinedIn());
   8371     if (isGenerated)
   8372       *isGenerated = attr->getGeneratedDeclaration();
   8373     return 1;
   8374   }
   8375   return 0;
   8376 }
   8377 
   8378 CXSourceRange clang_Cursor_getCommentRange(CXCursor C) {
   8379   if (!clang_isDeclaration(C.kind))
   8380     return clang_getNullRange();
   8381 
   8382   const Decl *D = getCursorDecl(C);
   8383   ASTContext &Context = getCursorContext(C);
   8384   const RawComment *RC = Context.getRawCommentForAnyRedecl(D);
   8385   if (!RC)
   8386     return clang_getNullRange();
   8387 
   8388   return cxloc::translateSourceRange(Context, RC->getSourceRange());
   8389 }
   8390 
   8391 CXString clang_Cursor_getRawCommentText(CXCursor C) {
   8392   if (!clang_isDeclaration(C.kind))
   8393     return cxstring::createNull();
   8394 
   8395   const Decl *D = getCursorDecl(C);
   8396   ASTContext &Context = getCursorContext(C);
   8397   const RawComment *RC = Context.getRawCommentForAnyRedecl(D);
   8398   StringRef RawText =
   8399       RC ? RC->getRawText(Context.getSourceManager()) : StringRef();
   8400 
   8401   // Don't duplicate the string because RawText points directly into source
   8402   // code.
   8403   return cxstring::createRef(RawText);
   8404 }
   8405 
   8406 CXString clang_Cursor_getBriefCommentText(CXCursor C) {
   8407   if (!clang_isDeclaration(C.kind))
   8408     return cxstring::createNull();
   8409 
   8410   const Decl *D = getCursorDecl(C);
   8411   const ASTContext &Context = getCursorContext(C);
   8412   const RawComment *RC = Context.getRawCommentForAnyRedecl(D);
   8413 
   8414   if (RC) {
   8415     StringRef BriefText = RC->getBriefText(Context);
   8416 
   8417     // Don't duplicate the string because RawComment ensures that this memory
   8418     // will not go away.
   8419     return cxstring::createRef(BriefText);
   8420   }
   8421 
   8422   return cxstring::createNull();
   8423 }
   8424 
   8425 CXModule clang_Cursor_getModule(CXCursor C) {
   8426   if (C.kind == CXCursor_ModuleImportDecl) {
   8427     if (const ImportDecl *ImportD =
   8428             dyn_cast_or_null<ImportDecl>(getCursorDecl(C)))
   8429       return ImportD->getImportedModule();
   8430   }
   8431 
   8432   return nullptr;
   8433 }
   8434 
   8435 CXModule clang_getModuleForFile(CXTranslationUnit TU, CXFile File) {
   8436   if (isNotUsableTU(TU)) {
   8437     LOG_BAD_TU(TU);
   8438     return nullptr;
   8439   }
   8440   if (!File)
   8441     return nullptr;
   8442   FileEntry *FE = static_cast<FileEntry *>(File);
   8443 
   8444   ASTUnit &Unit = *cxtu::getASTUnit(TU);
   8445   HeaderSearch &HS = Unit.getPreprocessor().getHeaderSearchInfo();
   8446   ModuleMap::KnownHeader Header = HS.findModuleForHeader(FE);
   8447 
   8448   return Header.getModule();
   8449 }
   8450 
   8451 CXFile clang_Module_getASTFile(CXModule CXMod) {
   8452   if (!CXMod)
   8453     return nullptr;
   8454   Module *Mod = static_cast<Module *>(CXMod);
   8455   if (auto File = Mod->getASTFile())
   8456     return const_cast<FileEntry *>(&File->getFileEntry());
   8457   return nullptr;
   8458 }
   8459 
   8460 CXModule clang_Module_getParent(CXModule CXMod) {
   8461   if (!CXMod)
   8462     return nullptr;
   8463   Module *Mod = static_cast<Module *>(CXMod);
   8464   return Mod->Parent;
   8465 }
   8466 
   8467 CXString clang_Module_getName(CXModule CXMod) {
   8468   if (!CXMod)
   8469     return cxstring::createEmpty();
   8470   Module *Mod = static_cast<Module *>(CXMod);
   8471   return cxstring::createDup(Mod->Name);
   8472 }
   8473 
   8474 CXString clang_Module_getFullName(CXModule CXMod) {
   8475   if (!CXMod)
   8476     return cxstring::createEmpty();
   8477   Module *Mod = static_cast<Module *>(CXMod);
   8478   return cxstring::createDup(Mod->getFullModuleName());
   8479 }
   8480 
   8481 int clang_Module_isSystem(CXModule CXMod) {
   8482   if (!CXMod)
   8483     return 0;
   8484   Module *Mod = static_cast<Module *>(CXMod);
   8485   return Mod->IsSystem;
   8486 }
   8487 
   8488 unsigned clang_Module_getNumTopLevelHeaders(CXTranslationUnit TU,
   8489                                             CXModule CXMod) {
   8490   if (isNotUsableTU(TU)) {
   8491     LOG_BAD_TU(TU);
   8492     return 0;
   8493   }
   8494   if (!CXMod)
   8495     return 0;
   8496   Module *Mod = static_cast<Module *>(CXMod);
   8497   FileManager &FileMgr = cxtu::getASTUnit(TU)->getFileManager();
   8498   ArrayRef<const FileEntry *> TopHeaders = Mod->getTopHeaders(FileMgr);
   8499   return TopHeaders.size();
   8500 }
   8501 
   8502 CXFile clang_Module_getTopLevelHeader(CXTranslationUnit TU, CXModule CXMod,
   8503                                       unsigned Index) {
   8504   if (isNotUsableTU(TU)) {
   8505     LOG_BAD_TU(TU);
   8506     return nullptr;
   8507   }
   8508   if (!CXMod)
   8509     return nullptr;
   8510   Module *Mod = static_cast<Module *>(CXMod);
   8511   FileManager &FileMgr = cxtu::getASTUnit(TU)->getFileManager();
   8512 
   8513   ArrayRef<const FileEntry *> TopHeaders = Mod->getTopHeaders(FileMgr);
   8514   if (Index < TopHeaders.size())
   8515     return const_cast<FileEntry *>(TopHeaders[Index]);
   8516 
   8517   return nullptr;
   8518 }
   8519 
   8520 //===----------------------------------------------------------------------===//
   8521 // C++ AST instrospection.
   8522 //===----------------------------------------------------------------------===//
   8523 
   8524 unsigned clang_CXXConstructor_isDefaultConstructor(CXCursor C) {
   8525   if (!clang_isDeclaration(C.kind))
   8526     return 0;
   8527 
   8528   const Decl *D = cxcursor::getCursorDecl(C);
   8529   const CXXConstructorDecl *Constructor =
   8530       D ? dyn_cast_or_null<CXXConstructorDecl>(D->getAsFunction()) : nullptr;
   8531   return (Constructor && Constructor->isDefaultConstructor()) ? 1 : 0;
   8532 }
   8533 
   8534 unsigned clang_CXXConstructor_isCopyConstructor(CXCursor C) {
   8535   if (!clang_isDeclaration(C.kind))
   8536     return 0;
   8537 
   8538   const Decl *D = cxcursor::getCursorDecl(C);
   8539   const CXXConstructorDecl *Constructor =
   8540       D ? dyn_cast_or_null<CXXConstructorDecl>(D->getAsFunction()) : nullptr;
   8541   return (Constructor && Constructor->isCopyConstructor()) ? 1 : 0;
   8542 }
   8543 
   8544 unsigned clang_CXXConstructor_isMoveConstructor(CXCursor C) {
   8545   if (!clang_isDeclaration(C.kind))
   8546     return 0;
   8547 
   8548   const Decl *D = cxcursor::getCursorDecl(C);
   8549   const CXXConstructorDecl *Constructor =
   8550       D ? dyn_cast_or_null<CXXConstructorDecl>(D->getAsFunction()) : nullptr;
   8551   return (Constructor && Constructor->isMoveConstructor()) ? 1 : 0;
   8552 }
   8553 
   8554 unsigned clang_CXXConstructor_isConvertingConstructor(CXCursor C) {
   8555   if (!clang_isDeclaration(C.kind))
   8556     return 0;
   8557 
   8558   const Decl *D = cxcursor::getCursorDecl(C);
   8559   const CXXConstructorDecl *Constructor =
   8560       D ? dyn_cast_or_null<CXXConstructorDecl>(D->getAsFunction()) : nullptr;
   8561   // Passing 'false' excludes constructors marked 'explicit'.
   8562   return (Constructor && Constructor->isConvertingConstructor(false)) ? 1 : 0;
   8563 }
   8564 
   8565 unsigned clang_CXXField_isMutable(CXCursor C) {
   8566   if (!clang_isDeclaration(C.kind))
   8567     return 0;
   8568 
   8569   if (const auto D = cxcursor::getCursorDecl(C))
   8570     if (const auto FD = dyn_cast_or_null<FieldDecl>(D))
   8571       return FD->isMutable() ? 1 : 0;
   8572   return 0;
   8573 }
   8574 
   8575 unsigned clang_CXXMethod_isPureVirtual(CXCursor C) {
   8576   if (!clang_isDeclaration(C.kind))
   8577     return 0;
   8578 
   8579   const Decl *D = cxcursor::getCursorDecl(C);
   8580   const CXXMethodDecl *Method =
   8581       D ? dyn_cast_or_null<CXXMethodDecl>(D->getAsFunction()) : nullptr;
   8582   return (Method && Method->isVirtual() && Method->isPure()) ? 1 : 0;
   8583 }
   8584 
   8585 unsigned clang_CXXMethod_isConst(CXCursor C) {
   8586   if (!clang_isDeclaration(C.kind))
   8587     return 0;
   8588 
   8589   const Decl *D = cxcursor::getCursorDecl(C);
   8590   const CXXMethodDecl *Method =
   8591       D ? dyn_cast_or_null<CXXMethodDecl>(D->getAsFunction()) : nullptr;
   8592   return (Method && Method->getMethodQualifiers().hasConst()) ? 1 : 0;
   8593 }
   8594 
   8595 unsigned clang_CXXMethod_isDefaulted(CXCursor C) {
   8596   if (!clang_isDeclaration(C.kind))
   8597     return 0;
   8598 
   8599   const Decl *D = cxcursor::getCursorDecl(C);
   8600   const CXXMethodDecl *Method =
   8601       D ? dyn_cast_or_null<CXXMethodDecl>(D->getAsFunction()) : nullptr;
   8602   return (Method && Method->isDefaulted()) ? 1 : 0;
   8603 }
   8604 
   8605 unsigned clang_CXXMethod_isStatic(CXCursor C) {
   8606   if (!clang_isDeclaration(C.kind))
   8607     return 0;
   8608 
   8609   const Decl *D = cxcursor::getCursorDecl(C);
   8610   const CXXMethodDecl *Method =
   8611       D ? dyn_cast_or_null<CXXMethodDecl>(D->getAsFunction()) : nullptr;
   8612   return (Method && Method->isStatic()) ? 1 : 0;
   8613 }
   8614 
   8615 unsigned clang_CXXMethod_isVirtual(CXCursor C) {
   8616   if (!clang_isDeclaration(C.kind))
   8617     return 0;
   8618 
   8619   const Decl *D = cxcursor::getCursorDecl(C);
   8620   const CXXMethodDecl *Method =
   8621       D ? dyn_cast_or_null<CXXMethodDecl>(D->getAsFunction()) : nullptr;
   8622   return (Method && Method->isVirtual()) ? 1 : 0;
   8623 }
   8624 
   8625 unsigned clang_CXXRecord_isAbstract(CXCursor C) {
   8626   if (!clang_isDeclaration(C.kind))
   8627     return 0;
   8628 
   8629   const auto *D = cxcursor::getCursorDecl(C);
   8630   const auto *RD = dyn_cast_or_null<CXXRecordDecl>(D);
   8631   if (RD)
   8632     RD = RD->getDefinition();
   8633   return (RD && RD->isAbstract()) ? 1 : 0;
   8634 }
   8635 
   8636 unsigned clang_EnumDecl_isScoped(CXCursor C) {
   8637   if (!clang_isDeclaration(C.kind))
   8638     return 0;
   8639 
   8640   const Decl *D = cxcursor::getCursorDecl(C);
   8641   auto *Enum = dyn_cast_or_null<EnumDecl>(D);
   8642   return (Enum && Enum->isScoped()) ? 1 : 0;
   8643 }
   8644 
   8645 //===----------------------------------------------------------------------===//
   8646 // Attribute introspection.
   8647 //===----------------------------------------------------------------------===//
   8648 
   8649 CXType clang_getIBOutletCollectionType(CXCursor C) {
   8650   if (C.kind != CXCursor_IBOutletCollectionAttr)
   8651     return cxtype::MakeCXType(QualType(), cxcursor::getCursorTU(C));
   8652 
   8653   const IBOutletCollectionAttr *A =
   8654       cast<IBOutletCollectionAttr>(cxcursor::getCursorAttr(C));
   8655 
   8656   return cxtype::MakeCXType(A->getInterface(), cxcursor::getCursorTU(C));
   8657 }
   8658 
   8659 //===----------------------------------------------------------------------===//
   8660 // Inspecting memory usage.
   8661 //===----------------------------------------------------------------------===//
   8662 
   8663 typedef std::vector<CXTUResourceUsageEntry> MemUsageEntries;
   8664 
   8665 static inline void createCXTUResourceUsageEntry(MemUsageEntries &entries,
   8666                                                 enum CXTUResourceUsageKind k,
   8667                                                 unsigned long amount) {
   8668   CXTUResourceUsageEntry entry = {k, amount};
   8669   entries.push_back(entry);
   8670 }
   8671 
   8672 const char *clang_getTUResourceUsageName(CXTUResourceUsageKind kind) {
   8673   const char *str = "";
   8674   switch (kind) {
   8675   case CXTUResourceUsage_AST:
   8676     str = "ASTContext: expressions, declarations, and types";
   8677     break;
   8678   case CXTUResourceUsage_Identifiers:
   8679     str = "ASTContext: identifiers";
   8680     break;
   8681   case CXTUResourceUsage_Selectors:
   8682     str = "ASTContext: selectors";
   8683     break;
   8684   case CXTUResourceUsage_GlobalCompletionResults:
   8685     str = "Code completion: cached global results";
   8686     break;
   8687   case CXTUResourceUsage_SourceManagerContentCache:
   8688     str = "SourceManager: content cache allocator";
   8689     break;
   8690   case CXTUResourceUsage_AST_SideTables:
   8691     str = "ASTContext: side tables";
   8692     break;
   8693   case CXTUResourceUsage_SourceManager_Membuffer_Malloc:
   8694     str = "SourceManager: malloc'ed memory buffers";
   8695     break;
   8696   case CXTUResourceUsage_SourceManager_Membuffer_MMap:
   8697     str = "SourceManager: mmap'ed memory buffers";
   8698     break;
   8699   case CXTUResourceUsage_ExternalASTSource_Membuffer_Malloc:
   8700     str = "ExternalASTSource: malloc'ed memory buffers";
   8701     break;
   8702   case CXTUResourceUsage_ExternalASTSource_Membuffer_MMap:
   8703     str = "ExternalASTSource: mmap'ed memory buffers";
   8704     break;
   8705   case CXTUResourceUsage_Preprocessor:
   8706     str = "Preprocessor: malloc'ed memory";
   8707     break;
   8708   case CXTUResourceUsage_PreprocessingRecord:
   8709     str = "Preprocessor: PreprocessingRecord";
   8710     break;
   8711   case CXTUResourceUsage_SourceManager_DataStructures:
   8712     str = "SourceManager: data structures and tables";
   8713     break;
   8714   case CXTUResourceUsage_Preprocessor_HeaderSearch:
   8715     str = "Preprocessor: header search tables";
   8716     break;
   8717   }
   8718   return str;
   8719 }
   8720 
   8721 CXTUResourceUsage clang_getCXTUResourceUsage(CXTranslationUnit TU) {
   8722   if (isNotUsableTU(TU)) {
   8723     LOG_BAD_TU(TU);
   8724     CXTUResourceUsage usage = {(void *)nullptr, 0, nullptr};
   8725     return usage;
   8726   }
   8727 
   8728   ASTUnit *astUnit = cxtu::getASTUnit(TU);
   8729   std::unique_ptr<MemUsageEntries> entries(new MemUsageEntries());
   8730   ASTContext &astContext = astUnit->getASTContext();
   8731 
   8732   // How much memory is used by AST nodes and types?
   8733   createCXTUResourceUsageEntry(
   8734       *entries, CXTUResourceUsage_AST,
   8735       (unsigned long)astContext.getASTAllocatedMemory());
   8736 
   8737   // How much memory is used by identifiers?
   8738   createCXTUResourceUsageEntry(
   8739       *entries, CXTUResourceUsage_Identifiers,
   8740       (unsigned long)astContext.Idents.getAllocator().getTotalMemory());
   8741 
   8742   // How much memory is used for selectors?
   8743   createCXTUResourceUsageEntry(
   8744       *entries, CXTUResourceUsage_Selectors,
   8745       (unsigned long)astContext.Selectors.getTotalMemory());
   8746 
   8747   // How much memory is used by ASTContext's side tables?
   8748   createCXTUResourceUsageEntry(
   8749       *entries, CXTUResourceUsage_AST_SideTables,
   8750       (unsigned long)astContext.getSideTableAllocatedMemory());
   8751 
   8752   // How much memory is used for caching global code completion results?
   8753   unsigned long completionBytes = 0;
   8754   if (GlobalCodeCompletionAllocator *completionAllocator =
   8755           astUnit->getCachedCompletionAllocator().get()) {
   8756     completionBytes = completionAllocator->getTotalMemory();
   8757   }
   8758   createCXTUResourceUsageEntry(
   8759       *entries, CXTUResourceUsage_GlobalCompletionResults, completionBytes);
   8760 
   8761   // How much memory is being used by SourceManager's content cache?
   8762   createCXTUResourceUsageEntry(
   8763       *entries, CXTUResourceUsage_SourceManagerContentCache,
   8764       (unsigned long)astContext.getSourceManager().getContentCacheSize());
   8765 
   8766   // How much memory is being used by the MemoryBuffer's in SourceManager?
   8767   const SourceManager::MemoryBufferSizes &srcBufs =
   8768       astUnit->getSourceManager().getMemoryBufferSizes();
   8769 
   8770   createCXTUResourceUsageEntry(*entries,
   8771                                CXTUResourceUsage_SourceManager_Membuffer_Malloc,
   8772                                (unsigned long)srcBufs.malloc_bytes);
   8773   createCXTUResourceUsageEntry(*entries,
   8774                                CXTUResourceUsage_SourceManager_Membuffer_MMap,
   8775                                (unsigned long)srcBufs.mmap_bytes);
   8776   createCXTUResourceUsageEntry(
   8777       *entries, CXTUResourceUsage_SourceManager_DataStructures,
   8778       (unsigned long)astContext.getSourceManager().getDataStructureSizes());
   8779 
   8780   // How much memory is being used by the ExternalASTSource?
   8781   if (ExternalASTSource *esrc = astContext.getExternalSource()) {
   8782     const ExternalASTSource::MemoryBufferSizes &sizes =
   8783         esrc->getMemoryBufferSizes();
   8784 
   8785     createCXTUResourceUsageEntry(
   8786         *entries, CXTUResourceUsage_ExternalASTSource_Membuffer_Malloc,
   8787         (unsigned long)sizes.malloc_bytes);
   8788     createCXTUResourceUsageEntry(
   8789         *entries, CXTUResourceUsage_ExternalASTSource_Membuffer_MMap,
   8790         (unsigned long)sizes.mmap_bytes);
   8791   }
   8792 
   8793   // How much memory is being used by the Preprocessor?
   8794   Preprocessor &pp = astUnit->getPreprocessor();
   8795   createCXTUResourceUsageEntry(*entries, CXTUResourceUsage_Preprocessor,
   8796                                pp.getTotalMemory());
   8797 
   8798   if (PreprocessingRecord *pRec = pp.getPreprocessingRecord()) {
   8799     createCXTUResourceUsageEntry(*entries,
   8800                                  CXTUResourceUsage_PreprocessingRecord,
   8801                                  pRec->getTotalMemory());
   8802   }
   8803 
   8804   createCXTUResourceUsageEntry(*entries,
   8805                                CXTUResourceUsage_Preprocessor_HeaderSearch,
   8806                                pp.getHeaderSearchInfo().getTotalMemory());
   8807 
   8808   CXTUResourceUsage usage = {(void *)entries.get(), (unsigned)entries->size(),
   8809                              !entries->empty() ? &(*entries)[0] : nullptr};
   8810   (void)entries.release();
   8811   return usage;
   8812 }
   8813 
   8814 void clang_disposeCXTUResourceUsage(CXTUResourceUsage usage) {
   8815   if (usage.data)
   8816     delete (MemUsageEntries *)usage.data;
   8817 }
   8818 
   8819 CXSourceRangeList *clang_getSkippedRanges(CXTranslationUnit TU, CXFile file) {
   8820   CXSourceRangeList *skipped = new CXSourceRangeList;
   8821   skipped->count = 0;
   8822   skipped->ranges = nullptr;
   8823 
   8824   if (isNotUsableTU(TU)) {
   8825     LOG_BAD_TU(TU);
   8826     return skipped;
   8827   }
   8828 
   8829   if (!file)
   8830     return skipped;
   8831 
   8832   ASTUnit *astUnit = cxtu::getASTUnit(TU);
   8833   PreprocessingRecord *ppRec =
   8834       astUnit->getPreprocessor().getPreprocessingRecord();
   8835   if (!ppRec)
   8836     return skipped;
   8837 
   8838   ASTContext &Ctx = astUnit->getASTContext();
   8839   SourceManager &sm = Ctx.getSourceManager();
   8840   FileEntry *fileEntry = static_cast<FileEntry *>(file);
   8841   FileID wantedFileID = sm.translateFile(fileEntry);
   8842   bool isMainFile = wantedFileID == sm.getMainFileID();
   8843 
   8844   const std::vector<SourceRange> &SkippedRanges = ppRec->getSkippedRanges();
   8845   std::vector<SourceRange> wantedRanges;
   8846   for (std::vector<SourceRange>::const_iterator i = SkippedRanges.begin(),
   8847                                                 ei = SkippedRanges.end();
   8848        i != ei; ++i) {
   8849     if (sm.getFileID(i->getBegin()) == wantedFileID ||
   8850         sm.getFileID(i->getEnd()) == wantedFileID)
   8851       wantedRanges.push_back(*i);
   8852     else if (isMainFile && (astUnit->isInPreambleFileID(i->getBegin()) ||
   8853                             astUnit->isInPreambleFileID(i->getEnd())))
   8854       wantedRanges.push_back(*i);
   8855   }
   8856 
   8857   skipped->count = wantedRanges.size();
   8858   skipped->ranges = new CXSourceRange[skipped->count];
   8859   for (unsigned i = 0, ei = skipped->count; i != ei; ++i)
   8860     skipped->ranges[i] = cxloc::translateSourceRange(Ctx, wantedRanges[i]);
   8861 
   8862   return skipped;
   8863 }
   8864 
   8865 CXSourceRangeList *clang_getAllSkippedRanges(CXTranslationUnit TU) {
   8866   CXSourceRangeList *skipped = new CXSourceRangeList;
   8867   skipped->count = 0;
   8868   skipped->ranges = nullptr;
   8869 
   8870   if (isNotUsableTU(TU)) {
   8871     LOG_BAD_TU(TU);
   8872     return skipped;
   8873   }
   8874 
   8875   ASTUnit *astUnit = cxtu::getASTUnit(TU);
   8876   PreprocessingRecord *ppRec =
   8877       astUnit->getPreprocessor().getPreprocessingRecord();
   8878   if (!ppRec)
   8879     return skipped;
   8880 
   8881   ASTContext &Ctx = astUnit->getASTContext();
   8882 
   8883   const std::vector<SourceRange> &SkippedRanges = ppRec->getSkippedRanges();
   8884 
   8885   skipped->count = SkippedRanges.size();
   8886   skipped->ranges = new CXSourceRange[skipped->count];
   8887   for (unsigned i = 0, ei = skipped->count; i != ei; ++i)
   8888     skipped->ranges[i] = cxloc::translateSourceRange(Ctx, SkippedRanges[i]);
   8889 
   8890   return skipped;
   8891 }
   8892 
   8893 void clang_disposeSourceRangeList(CXSourceRangeList *ranges) {
   8894   if (ranges) {
   8895     delete[] ranges->ranges;
   8896     delete ranges;
   8897   }
   8898 }
   8899 
   8900 void clang::PrintLibclangResourceUsage(CXTranslationUnit TU) {
   8901   CXTUResourceUsage Usage = clang_getCXTUResourceUsage(TU);
   8902   for (unsigned I = 0; I != Usage.numEntries; ++I)
   8903     fprintf(stderr, "  %s: %lu\n",
   8904             clang_getTUResourceUsageName(Usage.entries[I].kind),
   8905             Usage.entries[I].amount);
   8906 
   8907   clang_disposeCXTUResourceUsage(Usage);
   8908 }
   8909 
   8910 CXCursor clang_Cursor_getVarDeclInitializer(CXCursor cursor) {
   8911   const Decl *const D = getCursorDecl(cursor);
   8912   if (!D)
   8913     return clang_getNullCursor();
   8914   const auto *const VD = dyn_cast<VarDecl>(D);
   8915   if (!VD)
   8916     return clang_getNullCursor();
   8917   const Expr *const Init = VD->getInit();
   8918   if (!Init)
   8919     return clang_getNullCursor();
   8920 
   8921   return cxcursor::MakeCXCursor(Init, VD, cxcursor::getCursorTU(cursor));
   8922 }
   8923 
   8924 int clang_Cursor_hasVarDeclGlobalStorage(CXCursor cursor) {
   8925   const Decl *const D = getCursorDecl(cursor);
   8926   if (!D)
   8927     return -1;
   8928   const auto *const VD = dyn_cast<VarDecl>(D);
   8929   if (!VD)
   8930     return -1;
   8931 
   8932   return VD->hasGlobalStorage();
   8933 }
   8934 
   8935 int clang_Cursor_hasVarDeclExternalStorage(CXCursor cursor) {
   8936   const Decl *const D = getCursorDecl(cursor);
   8937   if (!D)
   8938     return -1;
   8939   const auto *const VD = dyn_cast<VarDecl>(D);
   8940   if (!VD)
   8941     return -1;
   8942 
   8943   return VD->hasExternalStorage();
   8944 }
   8945 
   8946 //===----------------------------------------------------------------------===//
   8947 // Misc. utility functions.
   8948 //===----------------------------------------------------------------------===//
   8949 
   8950 /// Default to using our desired 8 MB stack size on "safety" threads.
   8951 static unsigned SafetyStackThreadSize = DesiredStackSize;
   8952 
   8953 namespace clang {
   8954 
   8955 bool RunSafely(llvm::CrashRecoveryContext &CRC, llvm::function_ref<void()> Fn,
   8956                unsigned Size) {
   8957   if (!Size)
   8958     Size = GetSafetyThreadStackSize();
   8959   if (Size && !getenv("LIBCLANG_NOTHREADS"))
   8960     return CRC.RunSafelyOnThread(Fn, Size);
   8961   return CRC.RunSafely(Fn);
   8962 }
   8963 
   8964 unsigned GetSafetyThreadStackSize() { return SafetyStackThreadSize; }
   8965 
   8966 void SetSafetyThreadStackSize(unsigned Value) { SafetyStackThreadSize = Value; }
   8967 
   8968 } // namespace clang
   8969 
   8970 void clang::setThreadBackgroundPriority() {
   8971   if (getenv("LIBCLANG_BGPRIO_DISABLE"))
   8972     return;
   8973 
   8974 #if LLVM_ENABLE_THREADS
   8975   llvm::set_thread_priority(llvm::ThreadPriority::Background);
   8976 #endif
   8977 }
   8978 
   8979 void cxindex::printDiagsToStderr(ASTUnit *Unit) {
   8980   if (!Unit)
   8981     return;
   8982 
   8983   for (ASTUnit::stored_diag_iterator D = Unit->stored_diag_begin(),
   8984                                      DEnd = Unit->stored_diag_end();
   8985        D != DEnd; ++D) {
   8986     CXStoredDiagnostic Diag(*D, Unit->getLangOpts());
   8987     CXString Msg =
   8988         clang_formatDiagnostic(&Diag, clang_defaultDiagnosticDisplayOptions());
   8989     fprintf(stderr, "%s\n", clang_getCString(Msg));
   8990     clang_disposeString(Msg);
   8991   }
   8992 #ifdef _WIN32
   8993   // On Windows, force a flush, since there may be multiple copies of
   8994   // stderr and stdout in the file system, all with different buffers
   8995   // but writing to the same device.
   8996   fflush(stderr);
   8997 #endif
   8998 }
   8999 
   9000 MacroInfo *cxindex::getMacroInfo(const IdentifierInfo &II,
   9001                                  SourceLocation MacroDefLoc,
   9002                                  CXTranslationUnit TU) {
   9003   if (MacroDefLoc.isInvalid() || !TU)
   9004     return nullptr;
   9005   if (!II.hadMacroDefinition())
   9006     return nullptr;
   9007 
   9008   ASTUnit *Unit = cxtu::getASTUnit(TU);
   9009   Preprocessor &PP = Unit->getPreprocessor();
   9010   MacroDirective *MD = PP.getLocalMacroDirectiveHistory(&II);
   9011   if (MD) {
   9012     for (MacroDirective::DefInfo Def = MD->getDefinition(); Def;
   9013          Def = Def.getPreviousDefinition()) {
   9014       if (MacroDefLoc == Def.getMacroInfo()->getDefinitionLoc())
   9015         return Def.getMacroInfo();
   9016     }
   9017   }
   9018 
   9019   return nullptr;
   9020 }
   9021 
   9022 const MacroInfo *cxindex::getMacroInfo(const MacroDefinitionRecord *MacroDef,
   9023                                        CXTranslationUnit TU) {
   9024   if (!MacroDef || !TU)
   9025     return nullptr;
   9026   const IdentifierInfo *II = MacroDef->getName();
   9027   if (!II)
   9028     return nullptr;
   9029 
   9030   return getMacroInfo(*II, MacroDef->getLocation(), TU);
   9031 }
   9032 
   9033 MacroDefinitionRecord *
   9034 cxindex::checkForMacroInMacroDefinition(const MacroInfo *MI, const Token &Tok,
   9035                                         CXTranslationUnit TU) {
   9036   if (!MI || !TU)
   9037     return nullptr;
   9038   if (Tok.isNot(tok::raw_identifier))
   9039     return nullptr;
   9040 
   9041   if (MI->getNumTokens() == 0)
   9042     return nullptr;
   9043   SourceRange DefRange(MI->getReplacementToken(0).getLocation(),
   9044                        MI->getDefinitionEndLoc());
   9045   ASTUnit *Unit = cxtu::getASTUnit(TU);
   9046 
   9047   // Check that the token is inside the definition and not its argument list.
   9048   SourceManager &SM = Unit->getSourceManager();
   9049   if (SM.isBeforeInTranslationUnit(Tok.getLocation(), DefRange.getBegin()))
   9050     return nullptr;
   9051   if (SM.isBeforeInTranslationUnit(DefRange.getEnd(), Tok.getLocation()))
   9052     return nullptr;
   9053 
   9054   Preprocessor &PP = Unit->getPreprocessor();
   9055   PreprocessingRecord *PPRec = PP.getPreprocessingRecord();
   9056   if (!PPRec)
   9057     return nullptr;
   9058 
   9059   IdentifierInfo &II = PP.getIdentifierTable().get(Tok.getRawIdentifier());
   9060   if (!II.hadMacroDefinition())
   9061     return nullptr;
   9062 
   9063   // Check that the identifier is not one of the macro arguments.
   9064   if (std::find(MI->param_begin(), MI->param_end(), &II) != MI->param_end())
   9065     return nullptr;
   9066 
   9067   MacroDirective *InnerMD = PP.getLocalMacroDirectiveHistory(&II);
   9068   if (!InnerMD)
   9069     return nullptr;
   9070 
   9071   return PPRec->findMacroDefinition(InnerMD->getMacroInfo());
   9072 }
   9073 
   9074 MacroDefinitionRecord *
   9075 cxindex::checkForMacroInMacroDefinition(const MacroInfo *MI, SourceLocation Loc,
   9076                                         CXTranslationUnit TU) {
   9077   if (Loc.isInvalid() || !MI || !TU)
   9078     return nullptr;
   9079 
   9080   if (MI->getNumTokens() == 0)
   9081     return nullptr;
   9082   ASTUnit *Unit = cxtu::getASTUnit(TU);
   9083   Preprocessor &PP = Unit->getPreprocessor();
   9084   if (!PP.getPreprocessingRecord())
   9085     return nullptr;
   9086   Loc = Unit->getSourceManager().getSpellingLoc(Loc);
   9087   Token Tok;
   9088   if (PP.getRawToken(Loc, Tok))
   9089     return nullptr;
   9090 
   9091   return checkForMacroInMacroDefinition(MI, Tok, TU);
   9092 }
   9093 
   9094 CXString clang_getClangVersion() {
   9095   return cxstring::createDup(getClangFullVersion());
   9096 }
   9097 
   9098 Logger &cxindex::Logger::operator<<(CXTranslationUnit TU) {
   9099   if (TU) {
   9100     if (ASTUnit *Unit = cxtu::getASTUnit(TU)) {
   9101       LogOS << '<' << Unit->getMainFileName() << '>';
   9102       if (Unit->isMainFileAST())
   9103         LogOS << " (" << Unit->getASTFileName() << ')';
   9104       return *this;
   9105     }
   9106   } else {
   9107     LogOS << "<NULL TU>";
   9108   }
   9109   return *this;
   9110 }
   9111 
   9112 Logger &cxindex::Logger::operator<<(const FileEntry *FE) {
   9113   *this << FE->getName();
   9114   return *this;
   9115 }
   9116 
   9117 Logger &cxindex::Logger::operator<<(CXCursor cursor) {
   9118   CXString cursorName = clang_getCursorDisplayName(cursor);
   9119   *this << cursorName << "@" << clang_getCursorLocation(cursor);
   9120   clang_disposeString(cursorName);
   9121   return *this;
   9122 }
   9123 
   9124 Logger &cxindex::Logger::operator<<(CXSourceLocation Loc) {
   9125   CXFile File;
   9126   unsigned Line, Column;
   9127   clang_getFileLocation(Loc, &File, &Line, &Column, nullptr);
   9128   CXString FileName = clang_getFileName(File);
   9129   *this << llvm::format("(%s:%d:%d)", clang_getCString(FileName), Line, Column);
   9130   clang_disposeString(FileName);
   9131   return *this;
   9132 }
   9133 
   9134 Logger &cxindex::Logger::operator<<(CXSourceRange range) {
   9135   CXSourceLocation BLoc = clang_getRangeStart(range);
   9136   CXSourceLocation ELoc = clang_getRangeEnd(range);
   9137 
   9138   CXFile BFile;
   9139   unsigned BLine, BColumn;
   9140   clang_getFileLocation(BLoc, &BFile, &BLine, &BColumn, nullptr);
   9141 
   9142   CXFile EFile;
   9143   unsigned ELine, EColumn;
   9144   clang_getFileLocation(ELoc, &EFile, &ELine, &EColumn, nullptr);
   9145 
   9146   CXString BFileName = clang_getFileName(BFile);
   9147   if (BFile == EFile) {
   9148     *this << llvm::format("[%s %d:%d-%d:%d]", clang_getCString(BFileName),
   9149                           BLine, BColumn, ELine, EColumn);
   9150   } else {
   9151     CXString EFileName = clang_getFileName(EFile);
   9152     *this << llvm::format("[%s:%d:%d - ", clang_getCString(BFileName), BLine,
   9153                           BColumn)
   9154           << llvm::format("%s:%d:%d]", clang_getCString(EFileName), ELine,
   9155                           EColumn);
   9156     clang_disposeString(EFileName);
   9157   }
   9158   clang_disposeString(BFileName);
   9159   return *this;
   9160 }
   9161 
   9162 Logger &cxindex::Logger::operator<<(CXString Str) {
   9163   *this << clang_getCString(Str);
   9164   return *this;
   9165 }
   9166 
   9167 Logger &cxindex::Logger::operator<<(const llvm::format_object_base &Fmt) {
   9168   LogOS << Fmt;
   9169   return *this;
   9170 }
   9171 
   9172 static llvm::ManagedStatic<std::mutex> LoggingMutex;
   9173 
   9174 cxindex::Logger::~Logger() {
   9175   std::lock_guard<std::mutex> L(*LoggingMutex);
   9176 
   9177   static llvm::TimeRecord sBeginTR = llvm::TimeRecord::getCurrentTime();
   9178 
   9179   raw_ostream &OS = llvm::errs();
   9180   OS << "[libclang:" << Name << ':';
   9181 
   9182 #ifdef USE_DARWIN_THREADS
   9183   // TODO: Portability.
   9184   mach_port_t tid = pthread_mach_thread_np(pthread_self());
   9185   OS << tid << ':';
   9186 #endif
   9187 
   9188   llvm::TimeRecord TR = llvm::TimeRecord::getCurrentTime();
   9189   OS << llvm::format("%7.4f] ", TR.getWallTime() - sBeginTR.getWallTime());
   9190   OS << Msg << '\n';
   9191 
   9192   if (Trace) {
   9193     llvm::sys::PrintStackTrace(OS);
   9194     OS << "--------------------------------------------------\n";
   9195   }
   9196 }
   9197