Move Analysis-Apple/CFString.c to Analysis (the test case now works on all platforms).

llvm-svn: 52346
This commit is contained in:
Ted Kremenek 2008-06-16 19:35:31 +00:00
parent 476e91ab75
commit 951bc67096
2 changed files with 49 additions and 30 deletions

View File

@ -1,30 +0,0 @@
// RUN: clang -checker-cfref -verify %s
#include <CoreFoundation/CFString.h>
#include <CoreFoundation/CFArray.h>
void f1() {
// Create the array.
CFMutableArrayRef A = CFArrayCreateMutable(NULL, 10, &kCFTypeArrayCallBacks);
// Create a string.
CFStringRef s1 = CFStringCreateWithCString(NULL, "hello world",
kCFStringEncodingUTF8);
// Add the string to the array.
CFArrayAppendValue(A, s1);
// Decrement the reference count.
CFRelease(s1); // no-warning
// Get the string. We don't own it.
s1 = (CFStringRef) CFArrayGetValueAtIndex(A, 0);
// Release the array.
CFRelease(A); // no-warning
// Release the string. This is a bug.
CFRelease(s1); // expected-warning{{Incorrect decrement of the reference count}}
}

View File

@ -0,0 +1,49 @@
// RUN: clang -checker-cfref -verify %s
//===----------------------------------------------------------------------===//
// The following code is reduced using delta-debugging from
// CoreFoundation.h (Mac OS X).
//
// It includes the basic definitions for the test cases below.
// Not directly including CoreFoundation.h directly makes this test case
// both svelt and portable to non-Mac platforms.
//===----------------------------------------------------------------------===//
typedef signed long CFIndex;
typedef const struct __CFString * CFStringRef;
typedef struct {} CFArrayCallBacks;
extern const CFArrayCallBacks kCFTypeArrayCallBacks;
typedef const struct __CFArray * CFArrayRef;
typedef struct __CFArray * CFMutableArrayRef;
extern const void *CFArrayGetValueAtIndex(CFArrayRef theArray, CFIndex idx);
enum { kCFStringEncodingMacRoman = 0, kCFStringEncodingWindowsLatin1 = 0x0500, kCFStringEncodingISOLatin1 = 0x0201, kCFStringEncodingNextStepLatin = 0x0B01, kCFStringEncodingASCII = 0x0600, kCFStringEncodingUnicode = 0x0100, kCFStringEncodingUTF8 = 0x08000100, kCFStringEncodingNonLossyASCII = 0x0BFF , kCFStringEncodingUTF16 = 0x0100, kCFStringEncodingUTF16BE = 0x10000100, kCFStringEncodingUTF16LE = 0x14000100, kCFStringEncodingUTF32 = 0x0c000100, kCFStringEncodingUTF32BE = 0x18000100, kCFStringEncodingUTF32LE = 0x1c000100 };
//===----------------------------------------------------------------------===//
// Test cases.
//===----------------------------------------------------------------------===//
void f1() {
// Create the array.
CFMutableArrayRef A = CFArrayCreateMutable(0, 10, &kCFTypeArrayCallBacks);
// Create a string.
CFStringRef s1 = CFStringCreateWithCString(0, "hello world",
kCFStringEncodingUTF8);
// Add the string to the array.
CFArrayAppendValue(A, s1);
// Decrement the reference count.
CFRelease(s1); // no-warning
// Get the string. We don't own it.
s1 = (CFStringRef) CFArrayGetValueAtIndex(A, 0);
// Release the array.
CFRelease(A); // no-warning
// Release the string. This is a bug.
CFRelease(s1); // expected-warning{{Incorrect decrement of the reference count}}
}