From 9d7cf2baaf19b389936fb641b3e0763df900e985 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Tue, 17 Jan 2012 18:52:07 +0000 Subject: [PATCH] objc: fixes a bug where struct used inside an objc class was not being exported to parent decl context resulting in bogus mismatch warning later on. // rdar://10655530 llvm-svn: 148320 --- clang/lib/Sema/SemaDecl.cpp | 3 ++- .../SemaObjC/continuation-class-property.m | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 6196ea3f6cb4..0e99f7047686 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -7872,7 +7872,8 @@ Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, // Find the context where we'll be declaring the tag. // FIXME: We would like to maintain the current DeclContext as the // lexical context, - while (SearchDC->isRecord() || SearchDC->isTransparentContext()) + while (SearchDC->isRecord() || SearchDC->isTransparentContext() || + SearchDC->isObjCContainer()) SearchDC = SearchDC->getParent(); // Find the scope where we'll be declaring the tag. diff --git a/clang/test/SemaObjC/continuation-class-property.m b/clang/test/SemaObjC/continuation-class-property.m index d017ac23dced..7d95424a06c8 100644 --- a/clang/test/SemaObjC/continuation-class-property.m +++ b/clang/test/SemaObjC/continuation-class-property.m @@ -41,3 +41,23 @@ typedef struct { @property (readwrite) NSString *foo; // expected-error {{type of property 'NSString *' in continuation class does not match property type in primary class}} @property (readwrite, strong) NSRect bar; // expected-error {{type of property 'NSRect' in continuation class does not match property type in primary class}} @end + +// rdar://10655530 +struct S; +struct S1; +@interface STAdKitContext +@property (nonatomic, readonly, assign) struct evhttp_request *httpRequest; +@property (nonatomic, readonly, assign) struct S *httpRequest2; +@property (nonatomic, readonly, assign) struct S1 *httpRequest3; +@property (nonatomic, readonly, assign) struct S2 *httpRequest4; +@end + +struct evhttp_request; +struct S1; + +@interface STAdKitContext() +@property (nonatomic, readwrite, assign) struct evhttp_request *httpRequest; +@property (nonatomic, readwrite, assign) struct S *httpRequest2; +@property (nonatomic, readwrite, assign) struct S1 *httpRequest3; +@property (nonatomic, readwrite, assign) struct S2 *httpRequest4; +@end