| // RUN: %clang_analyze_cc1 -std=c++14 -verify=no-retain-count %s \ | |
| // RUN: -analyzer-checker=core,osx \ | |
| // RUN: -analyzer-disable-checker osx.cocoa.RetainCount | |
| // | |
| // RUN: %clang_analyze_cc1 -std=c++14 -verify=no-os-object %s \ | |
| // RUN: -analyzer-checker=core,osx \ | |
| // RUN: -analyzer-disable-checker osx.OSObjectRetainCount | |
| #include "os_object_base.h" | |
| typedef const void * CFTypeRef; | |
| extern CFTypeRef CFRetain(CFTypeRef cf); | |
| extern void CFRelease(CFTypeRef cf); | |
| #define CF_RETURNS_RETAINED __attribute__((cf_returns_retained)) | |
| extern CFTypeRef CFCreate() CF_RETURNS_RETAINED; | |
| using size_t = decltype(sizeof(int)); | |
| void cf_overrelease() { | |
| CFTypeRef cf = CFCreate(); | |
| CFRelease(cf); | |
| CFRelease(cf); // no-os-object-warning{{Reference-counted object is used after it is released}} | |
| } | |
| void osobject_overrelease() { | |
| OSObject *o = new OSObject; | |
| o->release(); | |
| o->release(); // no-retain-count-warning{{Reference-counted object is used after it is released}} | |
| } |