On Fri, Oct 9, 2015 at 9:10 PM, Douglas Gregor <dgre...@apple.com> wrote:
>
>
> Sent from my iPhone
>
>> On Oct 9, 2015, at 2:17 PM, Hans Wennborg <h...@chromium.org> wrote:
>>
>>> On Fri, Oct 9, 2015 at 1:46 PM, Douglas Gregor <dgre...@apple.com> wrote:
>>>
>>>> On Oct 7, 2015, at 11:55 AM, Hans Wennborg <h...@chromium.org> wrote:
>>>>
>>>> Hi Doug,
>>>>
>>>> On Wed, Sep 30, 2015 at 2:27 PM, Douglas Gregor via cfe-commits
>>>> <cfe-commits@lists.llvm.org> wrote:
>>>>> Author: dgregor
>>>>> Date: Wed Sep 30 16:27:42 2015
>>>>> New Revision: 248949
>>>>>
>>>>> URL: http://llvm.org/viewvc/llvm-project?rev=248949&view=rev
>>>>> Log:
>>>>> Don't inherit availability information when implementing a protocol 
>>>>> requirement.
>>>>>
>>>>> When an Objective-C method implements a protocol requirement, do not
>>>>> inherit any availability information from the protocol
>>>>> requirement. Rather, check that the implementation is not less
>>>>> available than the protocol requirement, as we do when overriding a
>>>>> method that has availability. Fixes rdar://problem/22734745.
>>>>
>>>> This is causing new warnings to fire in Chromium, and I'm not sure
>>>> they're correct.
>>>>
>>>> For example:
>>>>
>>>> $ cat | build/bin/clang -c -x objective-c++ -
>>>> #import <Cocoa/Cocoa.h>
>>>> @protocol Foo
>>>> @end
>>>> @interface Bar : NSTextView<Foo> {
>>>> }
>>>> @end
>>>> @implementation Bar
>>>> - (void)setMarkedText:(id)aString selectedRange:(NSRange)selRange {
>>>>   [super setMarkedText:aString selectedRange:selRange];
>>>> }
>>>> @end
>>>> <stdin>:9:10: warning: 'setMarkedText:selectedRange:' is deprecated:
>>>> first deprecated in OS X 10.6 [-Wdeprecated-declarations]
>>>>   [super setMarkedText:aString selectedRange:selRange];
>>>>          ^
>>>> /System/Library/Frameworks/AppKit.framework/Headers/NSInputManager.h:21:1:
>>>> note: 'setMarkedText:selectedRange:' has been explicitly marked
>>>> deprecated here
>>>> - (void) setMarkedText:(id)aString selectedRange:(NSRange)selRange
>>>> NS_DEPRECATED_MAC(10_0, 10_6);
>>>> ^
>>>>
>>>> I don't really know Objective-C, but from what I understand,
>>>> NSTextView implements both NSTextInput and NSTextInputClient.
>>>> setMarkedText is deprecated in the former, but not the latter. So
>>>> warning here is probably wrong?
>>>
>>> The warning is correct. We no longer infer that -[Bar 
>>> setMarkedText:selectedRange:] is deprecated simply because it matches up 
>>> with a deprecated requirement in the NSTextView protocol. You can mark this 
>>> method with
>>>
>>>        NS_DEPRECATED_MAC(10_0, 10_6)
>>>
>>> (i.e., copy the availability information from the protocol requirement) to 
>>> get the old behavior.
>>
>>
>> Again, apologies for my Objective-C ignorance here, but don't you mean
>> the other way around?
>
> No, I have it correct.
>
>> Before this patch we did not warn that setMarkedText was deprecated,
>> but now we do. It seems we've gone from not inferring that it's
>> deprecated to doing so?
>
> NSTextView's setMarkedText is deprecated. Whether we diagnose a call to a 
> deprecated method depends on the context: inside another deprecated method we 
> suppress the diagnostic.
>
> That's where the inference comes in. We used to (incorrectly) infer that 
> Bar's setMarkedText was deprecated. That's wrong, and it suppressed the 
> deprecated warning for the call to the NSTextView version.

Oh, I see what you're saying. That makes sense. Thanks for explaining!

 - Hans
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to