// RUN: %clang_cc1 -S -o - -triple i686-windows -verify -fblocks \ // RUN: -Wno-unused-comparison %s #pragma clang diagnostic ignored "-Wunused-comparison" #define nil ((id)nullptr) @protocol NSObject @end @protocol NSCopying @end @protocol OtherProtocol @end __attribute__((objc_root_class)) @interface NSObject <NSObject, NSCopying> @end __attribute__((objc_root_class)) @interface Test @end int main() { void (^block)() = ^{}; NSObject *object; id<NSObject, NSCopying> qualifiedId; id<OtherProtocol> poorlyQualified1; Test *objectOfWrongType; block == nil; block == object; block == qualifiedId; nil == block; object == block; qualifiedId == block; // these are still not valid: blocks must be compared with id, NSObject*, or a protocol-qualified id // conforming to NSCopying or NSObject. block == poorlyQualified1; // expected-error {{invalid operands to binary expression ('void (^)()' and 'id<OtherProtocol>')}} block == objectOfWrongType; // expected-error {{invalid operands to binary expression ('void (^)()' and 'Test *')}} poorlyQualified1 == block; // expected-error {{invalid operands to binary expression ('id<OtherProtocol>' and 'void (^)()')}} objectOfWrongType == block; // expected-error {{invalid operands to binary expression ('Test *' and 'void (^)()')}} return 0; }