diff options
author | Adrian Prantl <aprantl@apple.com> | 2019-11-04 14:28:14 -0800 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2019-11-08 08:23:22 -0800 |
commit | 2073dd2da702baca447efaf1879cb6151e8c6100 (patch) | |
tree | 9ec90e6d822e23671983144f24051873e521ede9 /clang/tools/libclang | |
parent | 8d22100f66c4170510c6ff028c60672acfe1cff9 (diff) | |
download | bcm5719-llvm-2073dd2da702baca447efaf1879cb6151e8c6100.tar.gz bcm5719-llvm-2073dd2da702baca447efaf1879cb6151e8c6100.zip |
Redeclare Objective-C property accessors inside the ObjCImplDecl in which they are synthesized.
This patch is motivated by (and factored out from)
https://reviews.llvm.org/D66121 which is a debug info bugfix. Starting
with DWARF 5 all Objective-C methods are nested inside their
containing type, and that patch implements this for synthesized
Objective-C properties.
1. SemaObjCProperty populates a list of synthesized accessors that may
need to inserted into an ObjCImplDecl.
2. SemaDeclObjC::ActOnEnd inserts forward-declarations for all
accessors for which no override was provided into their
ObjCImplDecl. This patch does *not* synthesize AST function
*bodies*. Moving that code from the static analyzer into Sema may
be a good idea though.
3. Places that expect all methods to have bodies have been updated.
I did not update the static analyzer's inliner for synthesized
properties to point back to the property declaration (see
test/Analysis/Inputs/expected-plists/nullability-notes.m.plist), which
I believed to be more bug than a feature.
Differential Revision: https://reviews.llvm.org/D68108
rdar://problem/53782400
Diffstat (limited to 'clang/tools/libclang')
-rw-r--r-- | clang/tools/libclang/CIndex.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/clang/tools/libclang/CIndex.cpp b/clang/tools/libclang/CIndex.cpp index 48e8b615158..ada5d7551d7 100644 --- a/clang/tools/libclang/CIndex.cpp +++ b/clang/tools/libclang/CIndex.cpp @@ -629,6 +629,11 @@ bool CursorVisitor::VisitDeclContext(DeclContext *DC) { Decl *D = *I; if (D->getLexicalDeclContext() != DC) continue; + // Filter out synthesized property accessor redeclarations. + if (isa<ObjCImplDecl>(DC)) + if (auto *OMD = dyn_cast<ObjCMethodDecl>(D)) + if (OMD->isSynthesizedAccessorStub()) + continue; const Optional<bool> V = handleDeclForVisitation(D); if (!V.hasValue()) continue; |