1// RUN: %clang_cc1 -S -o - -triple i686-windows -verify -fblocks \ 2// RUN: -Wno-unused-comparison %s 3 4#pragma clang diagnostic ignored "-Wunused-comparison" 5 6#define nil ((id)nullptr) 7 8@protocol NSObject 9@end 10 11@protocol NSCopying 12@end 13 14@protocol OtherProtocol 15@end 16 17__attribute__((objc_root_class)) 18@interface NSObject <NSObject, NSCopying> 19@end 20 21__attribute__((objc_root_class)) 22@interface Test 23@end 24 25int main() { 26 void (^block)() = ^{}; 27 NSObject *object; 28 id<NSObject, NSCopying> qualifiedId; 29 30 id<OtherProtocol> poorlyQualified1; 31 Test *objectOfWrongType; 32 33 block == nil; 34 block == object; 35 block == qualifiedId; 36 37 nil == block; 38 object == block; 39 qualifiedId == block; 40 41 // these are still not valid: blocks must be compared with id, NSObject*, or a protocol-qualified id 42 // conforming to NSCopying or NSObject. 43 44 block == poorlyQualified1; // expected-error {{invalid operands to binary expression ('void (^)()' and 'id<OtherProtocol>')}} 45 block == objectOfWrongType; // expected-error {{invalid operands to binary expression ('void (^)()' and 'Test *')}} 46 47 poorlyQualified1 == block; // expected-error {{invalid operands to binary expression ('id<OtherProtocol>' and 'void (^)()')}} 48 objectOfWrongType == block; // expected-error {{invalid operands to binary expression ('Test *' and 'void (^)()')}} 49 50 return 0; 51} 52