// Propagate the 'defined' bit.
if (Method->isDefined())
PrevObjCMethod->setDefined(true);
- else if (!PrevObjCMethod->isDefined()) {
+ else {
// Objective-C doesn't allow an @interface for a class after its
// @implementation. So if Method is not defined and there already is
// an entry for this type signature, Method has to be for a different
@end
@interface InterfaceWithSameMethodAsUndeclaredImpl
-- (void)partiallyUnavailableMethod __attribute__((unavailable)); // expected-note{{explicitly marked unavailable here}}
+- (void)partiallyUnavailableMethod __attribute__((unavailable));
@end
void f(id a) {
- // FIXME: Warning on this looks incorrect, since `a` could be an
- // UndeclaredImpl object, where this method isn't inavailable.
- [a partiallyUnavailableMethod]; // expected-error{{is unavailable}}
+ [a partiallyUnavailableMethod]; // no warning, `a` could be an UndeclaredImpl.
+}
+
+@interface InterfaceWithImplementation
+- (void)anotherPartiallyUnavailableMethod;
+@end
+@implementation InterfaceWithImplementation
+- (void)anotherPartiallyUnavailableMethod {}
+@end
+
+@interface InterfaceWithSameMethodAsInterfaceWithImplementation
+- (void)anotherPartiallyUnavailableMethod __attribute__((unavailable));
+@end
+
+void g(id a) {
+ [a anotherPartiallyUnavailableMethod]; // no warning, `a` could be an InterfaceWithImplementation.
}