diff options
author | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2018-04-27 18:01:23 +0000 |
---|---|---|
committer | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2018-04-27 18:01:23 +0000 |
commit | fbff2fafb3b169acba47de6c6154d5890c16a709 (patch) | |
tree | d79dfe2b65a2beaf6caa3d6cb3c230d45d653f21 /clang/lib/Serialization/ASTReaderDecl.cpp | |
parent | a6322924e69838d1cda04b3d6a87c1b475d1e218 (diff) | |
download | bcm5719-llvm-fbff2fafb3b169acba47de6c6154d5890c16a709.tar.gz bcm5719-llvm-fbff2fafb3b169acba47de6c6154d5890c16a709.zip |
[Modules][ObjC] ASTReader should add protocols for class extensions
During deserialization clang is currently missing the merging of
protocols into the canonical interface for the class extension.
This merging only currently happens during parsing and should also
be considered during deserialization.
rdar://problem/38724303
llvm-svn: 331063
Diffstat (limited to 'clang/lib/Serialization/ASTReaderDecl.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTReaderDecl.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp index 7a5d22c00f8..046c699a224 100644 --- a/clang/lib/Serialization/ASTReaderDecl.cpp +++ b/clang/lib/Serialization/ASTReaderDecl.cpp @@ -1205,6 +1205,12 @@ void ASTDeclReader::VisitObjCCategoryDecl(ObjCCategoryDecl *CD) { ProtoLocs.push_back(ReadSourceLocation()); CD->setProtocolList(ProtoRefs.data(), NumProtoRefs, ProtoLocs.data(), Reader.getContext()); + + // Protocols in the class extension belong to the class. + if (NumProtoRefs > 0 && CD->ClassInterface && CD->IsClassExtension()) + CD->ClassInterface->mergeClassExtensionProtocolList( + (ObjCProtocolDecl *const *)ProtoRefs.data(), NumProtoRefs, + Reader.getContext()); } void ASTDeclReader::VisitObjCCompatibleAliasDecl(ObjCCompatibleAliasDecl *CAD) { |