The problem isn't that it's unimplemented, it's that it's undeclared. And 
@selector isn't really an operator. How about "no methods visible for selector 
%0" or "no methods declared for selector %0 in this translation unit"?

Jordan


On Jan 14, 2014, at 12:35, Fariborz Jahanian <[email protected]> wrote:

> Author: fjahanian
> Date: Tue Jan 14 14:35:13 2014
> New Revision: 199255
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=199255&view=rev
> Log:
> ObjectiveC. produce more expressive warning when
> -Wselector detects an unimplemented method used
> in an @selector expression. // rdar://15781538
> 
> Modified:
>    cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
>    cfe/trunk/test/PCH/chain-selectors.m
>    cfe/trunk/test/SemaObjC/selector-3.m
> 
> Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
> URL: 
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=199255&r1=199254&r2=199255&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
> +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Tue Jan 14 14:35:13 
> 2014
> @@ -855,7 +855,8 @@ def warn_auto_implicit_atomic_property :
>   "property is assumed atomic when auto-synthesizing the property">,
>   InGroup<ImplicitAtomic>, DefaultIgnore;
> def warn_unimplemented_selector:  Warning<
> -  "creating selector for nonexistent method %0">, InGroup<Selector>, 
> DefaultIgnore;
> +  "using @selector on method %0 with no implementation in translation 
> unit">, 
> +  InGroup<Selector>, DefaultIgnore;
> def warn_unimplemented_protocol_method : Warning<
>   "method %0 in protocol %1 not implemented">, InGroup<Protocol>;
> 
> 
> Modified: cfe/trunk/test/PCH/chain-selectors.m
> URL: 
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/PCH/chain-selectors.m?rev=199255&r1=199254&r2=199255&view=diff
> ==============================================================================
> --- cfe/trunk/test/PCH/chain-selectors.m (original)
> +++ cfe/trunk/test/PCH/chain-selectors.m Tue Jan 14 14:35:13 2014
> @@ -18,9 +18,9 @@ void bar() {
>   // FIXME: Can't verify notes in headers
>   //[a f2];
> 
> -  (void)@selector(x); // expected-warning {{creating selector for 
> nonexistent method 'x'}}
> -  (void)@selector(y); // expected-warning {{creating selector for 
> nonexistent method 'y'}}
> -  (void)@selector(e); // expected-warning {{creating selector for 
> nonexistent method 'e'}}
> +  (void)@selector(x); // expected-warning {{using @selector on method 'x' 
> with no implementation in translation unit}}
> +  (void)@selector(y); // expected-warning {{using @selector on method 'y' 
> with no implementation in translation unit}}
> +  (void)@selector(e); // expected-warning {{using @selector on method 'e' 
> with no implementation in translation unit}}
> }
> 
> @implementation X (Blah)
> 
> Modified: cfe/trunk/test/SemaObjC/selector-3.m
> URL: 
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/selector-3.m?rev=199255&r1=199254&r2=199255&view=diff
> ==============================================================================
> --- cfe/trunk/test/SemaObjC/selector-3.m (original)
> +++ cfe/trunk/test/SemaObjC/selector-3.m Tue Jan 14 14:35:13 2014
> @@ -14,7 +14,7 @@
> - (void) foo
> {
>   SEL a,b,c;
> -  a = @selector(b1ar);  // expected-warning {{creating selector for 
> nonexistent method 'b1ar'}}
> +  a = @selector(b1ar);  // expected-warning {{using @selector on method 
> 'b1ar' with no implementation in translation unit}}
>   b = @selector(bar);
> }
> @end
> @@ -25,7 +25,7 @@
> 
> SEL func()
> {
> -    return  @selector(length);  // expected-warning {{creating selector for 
> nonexistent method 'length'}}
> +    return  @selector(length);  // expected-warning {{using @selector on 
> method 'length' with no implementation in translation unit}}
> }
> 
> // rdar://9545564
> @@ -69,7 +69,7 @@ extern SEL MySelector(SEL s);
> 
> @implementation INTF
> - (void) Meth {
> -  if( [cnx respondsToSelector:MySelector(@selector( _setQueue: ))] ) // 
> expected-warning {{creating selector for nonexistent method '_setQueue:'}} 
> +  if( [cnx respondsToSelector:MySelector(@selector( _setQueue: ))] ) // 
> expected-warning {{using @selector on method '_setQueue:' with no 
> implementation in translation unit}}
>   {
>   }
> 
> 
> 
> _______________________________________________
> 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

Reply via email to