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