Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / clang / test / SemaObjC / block-compare.mm
blobc63f484a80aad01b61252b2c394f0cf3b7e51db9
1 // RUN: %clang_cc1 -S -o - -triple i686-windows -verify -fblocks \
2 // RUN:     -Wno-unused-comparison %s
4 #pragma clang diagnostic ignored "-Wunused-comparison"
6 #define nil ((id)nullptr)
8 @protocol NSObject
9 @end
11 @protocol NSCopying
12 @end
14 @protocol OtherProtocol
15 @end
17 __attribute__((objc_root_class))
18 @interface NSObject <NSObject, NSCopying>
19 @end
21 __attribute__((objc_root_class))
22 @interface Test
23 @end
25 int main() {
26   void (^block)() = ^{};
27   NSObject *object;
28   id<NSObject, NSCopying> qualifiedId;
30   id<OtherProtocol> poorlyQualified1;
31   Test *objectOfWrongType;
33   block == nil;
34   block == object;
35   block == qualifiedId;
37   nil == block;
38   object == block;
39   qualifiedId == block;
41   // these are still not valid: blocks must be compared with id, NSObject*, or a protocol-qualified id
42   // conforming to NSCopying or NSObject.
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 *')}}
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 (^)()')}}
50   return 0;