diff options
-rw-r--r-- | test/SemaObjC/protocol-undef.m | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/test/SemaObjC/protocol-undef.m b/test/SemaObjC/protocol-undef.m new file mode 100644 index 0000000000..c35d3f8636 --- /dev/null +++ b/test/SemaObjC/protocol-undef.m @@ -0,0 +1,47 @@ +// RUN: clang -fsyntax-only -verify %s + +typedef signed char BOOL; +@class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator; +@protocol NSObject +- (BOOL)isEqual:(id)object; +@end +@protocol NSCoding +- (void)encodeWithCoder:(NSCoder *)aCoder; +@end +@interface NSObject <NSObject> {} @end +@class NSArray, NSAttributedString, NSEvent, NSInputServer, NSImage; +@interface NSController : NSObject <NSCoding> {} @end +@class OzzyView; +typedef struct _OzzyInset {} OzzyInset; +@protocol OzzyP; +typedef NSObject <OzzyP> Ozzy; +@protocol OzzyAnchorP; +typedef NSObject <OzzyAnchorP> OzzyAnchor; +@protocol OzzyAnchorDelegateP +- (BOOL)anchor:(OzzyAnchor *)anchor confirmRepresentedObject:(id)newObject; +@end +typedef NSObject <OzzyAnchorDelegateP> OzzyAnchorDelegate; +// GCC doesn't warn about the following (which is inconsistent with it's handling of @interface below). +@protocol OzzyAnchorP <OzzyP> // expected-warning{{cannot find protocol definition for 'OzzyP'}} + @property(nonatomic,retain) id representedObject; + @property(nonatomic,retain) Ozzy * contentGroup; +@end +@interface XXX : NSObject <OzzyP> // expected-warning{{cannot find protocol definition for 'OzzyP'}} +@end +@protocol OzzyActionDelegateP + @optional - (BOOL)elementView:(OzzyView *)elementView shouldDragElement:(Ozzy *)element; +@end +typedef NSObject <OzzyActionDelegateP> OzzyActionDelegate; +@interface OzzyUnit : OzzyAnchorDelegate <OzzyAnchorDelegateP> {} +@end +@interface OzzyArrayUnit : OzzyUnit {} @end +@implementation OzzyArrayUnit +- (BOOL)willChangeLayoutForObjects:(NSArray *)objects fromObjects:(NSArray *)oldObjects {} +- (void)_recalculateStoredArraysForAnchor:(OzzyAnchor *)anchor { + Ozzy * contentGroup = anchor.contentGroup; + if (contentGroup == ((void *)0)) { + // GCC doesn't warn about the following (which seems wrong). + contentGroup = anchor; // expected-warning{{incompatible pointer types assigning 'OzzyAnchor *', expected 'Ozzy *'}} + } +} +@end |