1*9b1e4a82SArtem Dergachev // RUN: %clang_analyze_cc1 -analyzer-checker=core,osx.coreFoundation.CFError \ 2*9b1e4a82SArtem Dergachev // RUN: -verify %s 3*9b1e4a82SArtem Dergachev 4*9b1e4a82SArtem Dergachev typedef unsigned long size_t; 5*9b1e4a82SArtem Dergachev struct __CFError {}; 6*9b1e4a82SArtem Dergachev typedef struct __CFError *CFErrorRef; 7*9b1e4a82SArtem Dergachev void *malloc(size_t); 8*9b1e4a82SArtem Dergachev 9*9b1e4a82SArtem Dergachev class Foo { 10*9b1e4a82SArtem Dergachev public: Foo(CFErrorRef * error)11*9b1e4a82SArtem Dergachev Foo(CFErrorRef *error) {} // no-warning 12*9b1e4a82SArtem Dergachev operator delete(void * pointer,CFErrorRef * error)13*9b1e4a82SArtem Dergachev void operator delete(void *pointer, CFErrorRef *error) { // no-warning 14*9b1e4a82SArtem Dergachev return; 15*9b1e4a82SArtem Dergachev } 16*9b1e4a82SArtem Dergachev operator delete[](void * pointer,CFErrorRef * error)17*9b1e4a82SArtem Dergachev void operator delete[](void *pointer, CFErrorRef *error) { // no-warning 18*9b1e4a82SArtem Dergachev return; 19*9b1e4a82SArtem Dergachev } 20*9b1e4a82SArtem Dergachev 21*9b1e4a82SArtem Dergachev // Check that we report warnings for operators when it can be useful operator ()(CFErrorRef * error)22*9b1e4a82SArtem Dergachev void operator()(CFErrorRef *error) {} // expected-warning {{Function accepting CFErrorRef* should have a non-void return value to indicate whether or not an error occurred}} 23*9b1e4a82SArtem Dergachev }; 24*9b1e4a82SArtem Dergachev 25*9b1e4a82SArtem Dergachev // Check that global delete operator is not bothered as well operator delete(void * pointer,CFErrorRef * error)26*9b1e4a82SArtem Dergachevvoid operator delete(void *pointer, CFErrorRef *error) { // no-warning 27*9b1e4a82SArtem Dergachev return; 28*9b1e4a82SArtem Dergachev } 29