[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / Parser / stmt-attributes.m
blob7b15bc8e0b8155018a5920bb345ebc72043b2ae4
1 // RUN: %clang_cc1 -verify %s \
2 // RUN:   -fblocks -fobjc-exceptions -fexceptions -fsyntax-only \
3 // RUN:   -Wno-unused-value -Wno-unused-getter-return-value
5 #if !__has_extension(statement_attributes_with_gnu_syntax)
6 #error "We should have statement attributes with GNU syntax support"
7 #endif
9 @interface Base
10 @end
12 @interface Test : Base
13 @property(getter=hasFoobar) int foobar;
14 - (void)foo;
15 - (void)bar;
16 @end
18 Test *getTest(void);
20 @implementation Test
21 - (void)foo __attribute__((nomerge)) {
22   // expected-error@-1 {{'nomerge' attribute only applies to functions, statements and variables}}
25 - (void)bar {
26   __attribute__(()) [self foo];
27   // expected-error@-1 {{missing '[' at start of message send expression}}
28   // expected-error@-2 {{expected ']'}}
29   // expected-error@-3 {{expected identifier or '('}}
30   // expected-note@-4 {{to match this '['}}
31   __attribute__((nomerge)) [self foo];
32   // expected-warning@-1 {{'nomerge' attribute is ignored because there exists no call expression inside the statement}}
33   __attribute__((nomerge)) [getTest() foo];
35   __attribute__(()) ^{};
36   // expected-error@-1 {{expected identifier or '('}}
37   __attribute__((nomerge)) ^{};
38   // expected-warning@-1 {{'nomerge' attribute is ignored because there exists no call expression inside the statement}}
39   __attribute__((nomerge)) ^{ [self foo]; }();
41   __attribute__(()) @try {
42     [self foo];
43   } @finally {
44   }
46   __attribute__((nomerge)) @try {
47     [getTest() foo];
48   } @finally {
49   }
51   __attribute__((nomerge)) (__bridge void *)self;
52   // expected-warning@-1 {{'nomerge' attribute is ignored because there exists no call expression inside the statement}}
54   __attribute__((nomerge)) self.hasFoobar;
55   // expected-warning@-1 {{'nomerge' attribute is ignored because there exists no call expression inside the statement}}
57 @end