diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-12-13 18:47:35 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-12-13 18:47:35 +0000 |
commit | ccdf8276a3fc447a3d7657f3dd7fcce7624affdf (patch) | |
tree | 05623d0c08d7bb62dd03dc1d938fb3d2e52aacd0 /clang/tools/libclang/IndexingContext.cpp | |
parent | 9f2a83eb595b41db9d89c86d12380ad3977dbbf7 (diff) | |
download | bcm5719-llvm-ccdf8276a3fc447a3d7657f3dd7fcce7624affdf.tar.gz bcm5719-llvm-ccdf8276a3fc447a3d7657f3dd7fcce7624affdf.zip |
[libclang] Indexing API: Fix suppressing of references in macros and suppress
@class forward references.
rdar://10568080&10568103&10568119
llvm-svn: 146496
Diffstat (limited to 'clang/tools/libclang/IndexingContext.cpp')
-rw-r--r-- | clang/tools/libclang/IndexingContext.cpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/clang/tools/libclang/IndexingContext.cpp b/clang/tools/libclang/IndexingContext.cpp index b95d22d010a..66e552c8f47 100644 --- a/clang/tools/libclang/IndexingContext.cpp +++ b/clang/tools/libclang/IndexingContext.cpp @@ -228,7 +228,8 @@ bool IndexingContext::handleDecl(const NamedDecl *D, if (!DInfo.EntInfo.USR || Loc.isInvalid()) return false; - markEntityOccurrenceInFile(D, Loc); + if (suppressRefs()) + markEntityOccurrenceInFile(D, Loc); DInfo.entityInfo = &DInfo.EntInfo; DInfo.cursor = Cursor; @@ -304,6 +305,12 @@ bool IndexingContext::handleObjCClass(const ObjCClassDecl *D) { SourceLocation Loc = Ref->getLocation(); bool isRedeclaration = IFaceD->getLocation() != Loc; + // For @class forward declarations, suppress them the same way as references. + if (suppressRefs()) { + if (markEntityOccurrenceInFile(IFaceD, Loc)) + return false; // already occurred. + } + ObjCContainerDeclInfo ContDInfo(/*isForwardRef=*/true, isRedeclaration, /*isImplementation=*/false); return handleObjCContainer(IFaceD, Loc, @@ -373,6 +380,9 @@ bool IndexingContext::handleObjCCategory(const ObjCCategoryDecl *D) { : D->getCategoryNameLoc(); getEntityInfo(IFaceD, ClassEntity, SA); + if (suppressRefs()) + markEntityOccurrenceInFile(IFaceD, ClassLoc); + CatDInfo.ObjCCatDeclInfo.containerInfo = &CatDInfo.ObjCContDeclInfo; if (IFaceD) { CatDInfo.ObjCCatDeclInfo.objcClass = &ClassEntity; @@ -583,10 +593,13 @@ bool IndexingContext::handleCXXRecordDecl(const CXXRecordDecl *RD, bool IndexingContext::markEntityOccurrenceInFile(const NamedDecl *D, SourceLocation Loc) { + if (!D || Loc.isInvalid()) + return true; + SourceManager &SM = Ctx->getSourceManager(); D = getEntityDecl(D); - std::pair<FileID, unsigned> LocInfo = SM.getDecomposedLoc(Loc); + std::pair<FileID, unsigned> LocInfo = SM.getDecomposedLoc(SM.getFileLoc(Loc)); FileID FID = LocInfo.first; if (FID.isInvalid()) return true; |