17fe43adaSDoug Wyatt// RUN: %clang_cc1 -fsyntax-only -fblocks -fcxx-exceptions -fobjc-exceptions -verify -Wfunction-effects %s 27fe43adaSDoug Wyatt 37fe43adaSDoug Wyatt#pragma clang diagnostic ignored "-Wperf-constraint-implies-noexcept" 47fe43adaSDoug Wyatt 57fe43adaSDoug Wyatt// Objective-C 67fe43adaSDoug Wyatt@interface OCClass 77fe43adaSDoug Wyatt- (void)method; 87fe43adaSDoug Wyatt@end 97fe43adaSDoug Wyatt 107fe43adaSDoug Wyattvoid nb1(OCClass *oc) [[clang::nonblocking]] { 117fe43adaSDoug Wyatt [oc method]; // expected-warning {{function with 'nonblocking' attribute must not access ObjC methods or properties}} 127fe43adaSDoug Wyatt} 137fe43adaSDoug Wyattvoid nb2(OCClass *oc) { 147fe43adaSDoug Wyatt [oc method]; // expected-note {{function cannot be inferred 'nonblocking' because it accesses an ObjC method or property}} 157fe43adaSDoug Wyatt} 167fe43adaSDoug Wyattvoid nb3(OCClass *oc) [[clang::nonblocking]] { 177fe43adaSDoug Wyatt nb2(oc); // expected-warning {{function with 'nonblocking' attribute must not call non-'nonblocking' function 'nb2'}} 187fe43adaSDoug Wyatt} 197fe43adaSDoug Wyatt 207fe43adaSDoug Wyattvoid nb4() [[clang::nonblocking]] { 217fe43adaSDoug Wyatt @try { 227fe43adaSDoug Wyatt @throw @"foo"; // expected-warning {{function with 'nonblocking' attribute must not throw or catch exceptions}} 237fe43adaSDoug Wyatt } 247fe43adaSDoug Wyatt @catch (...) { // expected-warning {{function with 'nonblocking' attribute must not throw or catch exceptions}} 257fe43adaSDoug Wyatt } 26*cef66aa0SDoug Wyatt @finally { // expected-warning {{function with 'nonblocking' attribute must not throw or catch exceptions}} 27*cef66aa0SDoug Wyatt } 28*cef66aa0SDoug Wyatt} 29*cef66aa0SDoug Wyatt 30*cef66aa0SDoug Wyatt@class Lock; 31*cef66aa0SDoug Wyattextern Lock *someLock; 32*cef66aa0SDoug Wyatt 33*cef66aa0SDoug Wyattvoid nb5() [[clang::nonblocking]] { 34*cef66aa0SDoug Wyatt @autoreleasepool { // expected-warning {{function with 'nonblocking' attribute must not access ObjC methods or properties}} 35*cef66aa0SDoug Wyatt } 36*cef66aa0SDoug Wyatt 37*cef66aa0SDoug Wyatt @synchronized(someLock) { // expected-warning {{function with 'nonblocking' attribute must not access ObjC methods or properties}} 38*cef66aa0SDoug Wyatt } 397fe43adaSDoug Wyatt} 40