// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=osx.SecKeychainAPI -analyzer-store=region -analyzer-output=text -verify %s

// This file is for testing enhanced diagnostics produced by the default SecKeychainAPI checker.

typedef unsigned int OSStatus;
typedef unsigned int SecKeychainAttributeList;
typedef unsigned int SecKeychainItemRef;
typedef unsigned int SecItemClass;
typedef unsigned int UInt32;
enum {
    noErr                      = 0,
    GenericError               = 1
};
OSStatus SecKeychainItemCopyContent (
                                     SecKeychainItemRef itemRef,
                                     SecItemClass *itemClass,
                                     SecKeychainAttributeList *attrList,
                                     UInt32 *length,
                                     void **outData
                                     );

void DellocWithCFStringCreate4() {
    unsigned int *ptr = 0;
    OSStatus st = 0;
    UInt32 length;
    char *bytes;
    char *x;
    st = SecKeychainItemCopyContent(2, ptr, ptr, &length, (void **)&bytes); // expected-note {{Data is allocated here}}
    x = bytes;
    if (st == noErr) // expected-note {{Assuming 'st' is equal to noErr}} // expected-note{{Taking true branch}}
        x = bytes;;
  
    length++; // expected-warning {{Allocated data is not released}} // expected-note{{Allocated data is not released}}
}

