|  | // RUN: %clang_cc1 -verify %s \ | 
|  | // RUN:   -fblocks -fobjc-exceptions -fexceptions -fsyntax-only \ | 
|  | // RUN:   -Wno-unused-value -Wno-unused-getter-return-value | 
|  |  | 
|  | #if !__has_extension(statement_attributes_with_gnu_syntax) | 
|  | #error "We should have statement attributes with GNU syntax support" | 
|  | #endif | 
|  |  | 
|  | @interface Base | 
|  | @end | 
|  |  | 
|  | @interface Test : Base | 
|  | @property(getter=hasFoobar) int foobar; | 
|  | - (void)foo; | 
|  | - (void)bar; | 
|  | @end | 
|  |  | 
|  | Test *getTest(void); | 
|  |  | 
|  | @implementation Test | 
|  | - (void)foo __attribute__((nomerge)) { | 
|  | // expected-error@-1 {{'nomerge' attribute only applies to functions, statements and variables}} | 
|  | } | 
|  |  | 
|  | - (void)bar { | 
|  | __attribute__(()) [self foo]; | 
|  | // expected-error@-1 {{missing '[' at start of message send expression}} | 
|  | // expected-error@-2 {{expected ']'}} | 
|  | // expected-error@-3 {{expected identifier or '('}} | 
|  | // expected-note@-4 {{to match this '['}} | 
|  | __attribute__((nomerge)) [self foo]; | 
|  | // expected-warning@-1 {{'nomerge' attribute is ignored because there exists no call expression inside the statement}} | 
|  | __attribute__((nomerge)) [getTest() foo]; | 
|  |  | 
|  | __attribute__(()) ^{}; | 
|  | // expected-error@-1 {{expected identifier or '('}} | 
|  | __attribute__((nomerge)) ^{}; | 
|  | // expected-warning@-1 {{'nomerge' attribute is ignored because there exists no call expression inside the statement}} | 
|  | __attribute__((nomerge)) ^{ [self foo]; }(); | 
|  |  | 
|  | __attribute__(()) @try { | 
|  | [self foo]; | 
|  | } @finally { | 
|  | } | 
|  |  | 
|  | __attribute__((nomerge)) @try { | 
|  | [getTest() foo]; | 
|  | } @finally { | 
|  | } | 
|  |  | 
|  | __attribute__((nomerge)) (__bridge void *)self; | 
|  | // expected-warning@-1 {{'nomerge' attribute is ignored because there exists no call expression inside the statement}} | 
|  |  | 
|  | __attribute__((nomerge)) self.hasFoobar; | 
|  | // expected-warning@-1 {{'nomerge' attribute is ignored because there exists no call expression inside the statement}} | 
|  | } | 
|  | @end |