| /* APPLE LOCAL begin radar 4310884 */ |
| /* Any usage of Foo<Bar> (where Foo is a *not yet defined* class and Bar is a protocol) |
| in a declaration results in inability to cast a Foo-derived classes to Foo (due to |
| warning) afterwards. |
| */ |
| /* { dg-options "-Wall -Werror -Wno-self-assign" } */ |
| /* { dg-do compile } */ |
| |
| #import <Foundation/Foundation.h> |
| |
| |
| @class AClass; |
| @protocol AProtocol; |
| |
| /* This line somehow "bounds" AProtocol and AClass, if AClass is not |
| yet defined, resulting in the buggy warning below. */ |
| void bar(AClass<AProtocol> *a1); |
| |
| /* If AClass declaration is placed *before* the above of |
| AnotherProtocol, the warning disappears. */ |
| |
| @interface AClass : NSObject |
| {} |
| @end |
| |
| @interface AnotherClass : AClass |
| {} |
| @end |
| |
| @implementation AnotherClass |
| |
| - (void)foo |
| { |
| /* |
| For the next line we get the warning: |
| "class 'AnotherClass' does not implement the 'AProtocol' protocol" |
| */ |
| AClass *f = self; |
| |
| f = f; // just to avoid warning due to -Wunused |
| } |
| |
| @end |
| /* APPLE LOCAL end radar 4310884 */ |