On Apr 9, 2013, at 10:52 AM, Fariborz Jahanian <[email protected]> wrote:
> Author: fjahanian > Date: Tue Apr 9 12:52:29 2013 > New Revision: 179108 > > URL: http://llvm.org/viewvc/llvm-project?rev=179108&view=rev > Log: > Objective-C: This patch fixes a none-issuance of warning > when result type of protocol property and getter method > differ by fixing a more serious problem. When a forward > protocol declaration comes between its definition and > its use in class protocol list, the forward protocol > ast was being used in building the protocol list. > // rdar://12522752 Why is this a problem? The protocol list could have a reference to the protocol declaration that was actually visible, and the callers that need definitions should use getDefinition(). - Doug > Modified: > cfe/trunk/lib/Sema/SemaDeclObjC.cpp > cfe/trunk/test/SemaObjC/method-conflict-2.m > > Modified: cfe/trunk/lib/Sema/SemaDeclObjC.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclObjC.cpp?rev=179108&r1=179107&r2=179108&view=diff > ============================================================================== > --- cfe/trunk/lib/Sema/SemaDeclObjC.cpp (original) > +++ cfe/trunk/lib/Sema/SemaDeclObjC.cpp Tue Apr 9 12:52:29 2013 > @@ -745,7 +745,10 @@ Sema::FindProtocolDeclaration(bool WarnO > << ProtocolId[i].first; > continue; > } > - > + // If this is a forward protocol declaration, get its definition. > + if (!PDecl->isThisDeclarationADefinition() && PDecl->getDefinition()) > + PDecl = PDecl->getDefinition(); > + > (void)DiagnoseUseOfDecl(PDecl, ProtocolId[i].second); > > // If this is a forward declaration and we are supposed to warn in this > > Modified: cfe/trunk/test/SemaObjC/method-conflict-2.m > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/method-conflict-2.m?rev=179108&r1=179107&r2=179108&view=diff > ============================================================================== > --- cfe/trunk/test/SemaObjC/method-conflict-2.m (original) > +++ cfe/trunk/test/SemaObjC/method-conflict-2.m Tue Apr 9 12:52:29 2013 > @@ -1,4 +1,5 @@ > // RUN: %clang_cc1 -Wmethod-signatures -fsyntax-only -verify > -Wno-objc-root-class %s > +// RUN: %clang_cc1 -x objective-c++ -Wmethod-signatures -fsyntax-only > -verify -Wno-objc-root-class %s > > @interface A @end > @interface B : A @end > @@ -42,3 +43,24 @@ > - (A*) test1 { return 0; } // id -> A* is rdar://problem/8596987 > - (id) test2 { return 0; } > @end > + > +// rdar://12522752 > +typedef int int32_t; > +typedef long long int64_t; > + > +@interface NSObject @end > + > +@protocol CKMessage > +@property (nonatomic,readonly,assign) int64_t sequenceNumber; // > expected-note {{previous definition is here}} > +@end > + > +@protocol CKMessage; > + > +@interface CKIMMessage : NSObject<CKMessage> > +@end > + > +@implementation CKIMMessage > +- (int32_t)sequenceNumber { // expected-warning {{conflicting return type in > implementation of 'sequenceNumber': 'int64_t' (aka 'long long') vs 'int32_t' > (aka 'int')}} > + return 0; > +} > +@end > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
