r179108 - Objective-C: This patch fixes a none-issuance of warning

Douglas Gregor dgregor at apple.com
Tue Apr 9 13:47:03 PDT 2013


On Apr 9, 2013, at 10:52 AM, Fariborz Jahanian <fjahanian at apple.com> 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;
> +
> + at interface NSObject @end
> +
> + at protocol CKMessage
> + at property (nonatomic,readonly,assign) int64_t sequenceNumber; // expected-note {{previous definition is here}}
> + at end
> +
> + at protocol CKMessage;
> +
> + at interface CKIMMessage : NSObject<CKMessage>
> + at end
> +
> + at 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;
> +}
> + at end
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130409/b185d045/attachment.html>


More information about the cfe-commits mailing list