[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / SemaObjC / block-id-as-block-argtype.m
blob11be5a33b577efcd2fa2bc2bd5bd8f4c7cff477d
1 // RUN: %clang_cc1 %s -fsyntax-only -verify -fblocks
3 @class NSObject;
4 typedef void (^block1_t)(int arg);
5 typedef void (^block2_t)(block1_t arg);
6 typedef void (^block3_t)(NSObject *arg);
7 typedef void (^block4_t)(id arg);
9 void fn(block4_t arg); // expected-note {{passing argument to parameter 'arg' here}}
11 void another_fn(block2_t arg);
13 int main(void) {
14     block1_t b1;
15     block2_t b2;
16     block3_t b3;
17     block3_t b4;
18     block4_t b5;
20     fn(b1);  // expected-error {{incompatible block pointer types passing 'block1_t' (aka 'void (^)(int)') to parameter of type 'block4_t' (aka 'void (^)(id)')}}
21     fn(b2);  // must succeed: block1_t *is* compatible with id
22     fn(b3);  // succeeds: NSObject* compatible with id
23     fn(b4);  // succeeds: id compatible with id
25     another_fn(b5);