forked from OSchip/llvm-project
[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
This commit is contained in:
parent
a6322924e6
commit
fbff2fafb3
|
@ -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) {
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
#import "a.h"
|
||||
#import "a-proto.h"
|
||||
|
||||
@interface A () <AProto>
|
||||
@end
|
|
@ -0,0 +1,7 @@
|
|||
@protocol NSObject
|
||||
@end
|
||||
|
||||
@protocol AProto <NSObject>
|
||||
@property (nonatomic, readwrite, assign) int p0;
|
||||
@property (nonatomic, readwrite, assign) int p1;
|
||||
@end
|
|
@ -0,0 +1,5 @@
|
|||
@interface NSObject
|
||||
@end
|
||||
|
||||
@interface A : NSObject
|
||||
@end
|
|
@ -0,0 +1,11 @@
|
|||
|
||||
module A {
|
||||
header "a.h"
|
||||
header "a-proto.h"
|
||||
export *
|
||||
}
|
||||
|
||||
module AP {
|
||||
header "a-private.h"
|
||||
export *
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
// RUN: rm -rf %t.cache
|
||||
// RUN: %clang_cc1 %s -fsyntax-only -fmodules -fimplicit-module-maps -fmodules-cache-path=%t.cache -I%S/Inputs/class-extension -verify
|
||||
// expected-no-diagnostics
|
||||
|
||||
#import "a-private.h"
|
||||
|
||||
int foo(A *X) {
|
||||
return X.p0 + X.p1;
|
||||
}
|
Loading…
Reference in New Issue