diff options
author | Jordan Rose <jordan_rose@apple.com> | 2012-06-20 05:34:32 +0000 |
---|---|---|
committer | Jordan Rose <jordan_rose@apple.com> | 2012-06-20 05:34:32 +0000 |
commit | 7d2bdd538d013768a226bec38626551496f63ceb (patch) | |
tree | 2770d8f0abd3360a49cb3c87a8deed08deb2fd62 /clang | |
parent | ff2ed7b6872a8c0888ac16d0931b353a0bda95f4 (diff) | |
download | bcm5719-llvm-7d2bdd538d013768a226bec38626551496f63ceb.tar.gz bcm5719-llvm-7d2bdd538d013768a226bec38626551496f63ceb.zip |
[analyzer] Move failing 'new' test cases back into new.cpp instead of XFAILing.
Per Anna's comment, this is a better way to handle "to-do list"-type failures.
This way we'll know if any of the features get fixed; in an XFAIL file, /all/
the cases have to be fixed before lit would tell us anything.
llvm-svn: 158791
Diffstat (limited to 'clang')
-rw-r--r-- | clang/test/Analysis/new-fail.cpp | 21 | ||||
-rw-r--r-- | clang/test/Analysis/new.cpp | 31 |
2 files changed, 31 insertions, 21 deletions
diff --git a/clang/test/Analysis/new-fail.cpp b/clang/test/Analysis/new-fail.cpp deleted file mode 100644 index 8b1903fbead..00000000000 --- a/clang/test/Analysis/new-fail.cpp +++ /dev/null @@ -1,21 +0,0 @@ -// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix.Malloc -analyzer-store region -verify %s -// XFAIL: * - -void f1() { - int *n = new int; - if (*n) { // expected-warning {{Branch condition evaluates to a garbage value}} - } -} - -void f2() { - int *n = new int(3); - if (*n) { // no-warning - } -} - -void *operator new(size_t, void *, void *); -void *testCustomNew() { - int *x = (int *)malloc(sizeof(int)); - void *y = new (0, x) int; - return y; // no-warning (placement new could have freed x) -} diff --git a/clang/test/Analysis/new.cpp b/clang/test/Analysis/new.cpp index 3cf5b0f8cc9..8093eff3a1c 100644 --- a/clang/test/Analysis/new.cpp +++ b/clang/test/Analysis/new.cpp @@ -34,3 +34,34 @@ void *testCustomNew() { return y; // no-warning } + +//-------------------------------- +// Incorrectly-modelled behavior +//-------------------------------- + +void testZeroInitialization() { + int *n = new int; + + // Should warn that *n is uninitialized. + if (*n) { // no-warning + } +} + +void testValueInitialization() { + int *n = new int(3); + + // Should be TRUE (and have no uninitialized variable warning) + clang_analyzer_eval(*n == 3); // expected-warning{{UNKNOWN}} +} + + +void *operator new(size_t, void *, void *); +void *testCustomNewMalloc() { + int *x = (int *)malloc(sizeof(int)); + + // Should be no-warning (the custom allocator could have freed x). + void *y = new (0, x) int; // expected-warning{{leak of memory pointed to by 'x'}} + + return y; +} + |