brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · c63f484 Raw
52 lines · plain
1// RUN: %clang_cc1 -S -o - -triple i686-windows -verify -fblocks \2// RUN:     -Wno-unused-comparison %s3 4#pragma clang diagnostic ignored "-Wunused-comparison"5 6#define nil ((id)nullptr)7 8@protocol NSObject9@end10 11@protocol NSCopying12@end13 14@protocol OtherProtocol15@end16 17__attribute__((objc_root_class))18@interface NSObject <NSObject, NSCopying>19@end20 21__attribute__((objc_root_class))22@interface Test23@end24 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 id42  // 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