[AMDGPU][True16][CodeGen] true16 codegen pattern for v_med3_u/i16 (#121850)
[llvm-project.git] / clang / test / SemaObjCXX / warn-implicit-self-in-block.mm
blob28c8ec3f3b026b7fbad38eb3a59b85ee5884e1a3
1 // RUN: %clang_cc1 -x objective-c++ -std=c++11 -fobjc-arc -fblocks -Wimplicit-retain-self -verify %s
3 typedef void (^BlockTy)();
5 void noescapeFunc(__attribute__((noescape)) BlockTy);
6 void escapeFunc(BlockTy);
8 @interface Root @end
10 @interface I : Root
12   int _bar;
14 @end
16 @implementation I
17   - (void)foo{
18       ^{
19            _bar = 3; // expected-warning {{block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior}}
20        }();
21   }
23   - (void)testNested{
24     noescapeFunc(^{
25       (void)_bar;
26       escapeFunc(^{
27         (void)_bar; // expected-warning {{block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior}}
28         noescapeFunc(^{
29           (void)_bar; // expected-warning {{block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior}}
30         });
31         (void)_bar; // expected-warning {{block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior}}
32       });
33       (void)_bar;
34     });
35   }
37   - (void)testLambdaInBlock{
38     noescapeFunc(^{ [&](){ (void)_bar; }(); });
39     escapeFunc(^{ [&](){ (void)_bar; }(); }); // expected-warning {{block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior}}
40   }
42   - (BlockTy)testDeclType{
43     return ^{ decltype(_bar) i = 12; (void)i; };
44   }
45 @end