diff options
author | Martin Nowack <martin.nowack@gmail.com> | 2013-08-13 12:22:36 +0200 |
---|---|---|
committer | Martin Nowack <martin.nowack@gmail.com> | 2013-08-27 23:16:18 +0200 |
commit | b1b96a784632f71928220117624a2c07ab3ca9e6 (patch) | |
tree | 8b47a50e639521fee563d276579f60e8512f048f /test/Feature | |
parent | c4147c2ad9ba1e74642e1a3de31be8f4446cc7f3 (diff) | |
download | klee-b1b96a784632f71928220117624a2c07ab3ca9e6.tar.gz |
Port to LLVM 3.3
Major changes are: - Switching to llvm-link to build archive files - Use GetMallocUsage instead of GetTotalMemoryUsage (be aware of bug in LLVM 3.3 http://llvm.org/bugs/show_bug.cgi?id=16847) - intrinsic library functions like memcpy/mov/set use weak linkage to be replaced by e.g. uclibc functions - rewrote linking with library - enhanced MemoryLimit test case to check if mallocs were successful
Diffstat (limited to 'test/Feature')
-rw-r--r-- | test/Feature/MemoryLimit.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/test/Feature/MemoryLimit.c b/test/Feature/MemoryLimit.c index 3b1bacaf..d959c3de 100644 --- a/test/Feature/MemoryLimit.c +++ b/test/Feature/MemoryLimit.c @@ -2,35 +2,43 @@ // RUN: %llvmgcc -g -c %s -o %t.big.bc // RUN: %klee --max-memory=20 %t.little.bc > %t.little.log // RUN: %klee --max-memory=20 %t.big.bc > %t.big.log +// RUN: not grep -q "MALLOC FAILED" %t.little.log +// RUN: not grep -q "MALLOC FAILED" %t.big.log // RUN: not grep -q "DONE" %t.little.log // RUN: not grep -q "DONE" %t.big.log #include <stdlib.h> +#include <stdio.h> int main() { - int i, j, x=0; + int i, j, x=0, malloc_failed = 0; #ifdef LITTLE_ALLOC printf("IN LITTLE ALLOC\n"); // 200 MBs total (in 32 byte chunks) - for (i=0; i<100; i++) { - for (j=0; j<(1<<16); j++) - malloc(1<<5); + for (i=0; i<100 && !malloc_failed; i++) { + for (j=0; j<(1<<16); j++){ + void * p = malloc(1<<5); + malloc_failed |= (p == 0); + } } #else printf("IN BIG ALLOC\n"); // 200 MBs total - for (i=0; i<100; i++) { - malloc(1<<21); - + for (i=0; i<100 && !malloc_failed; i++) { + void *p = malloc(1<<21); + malloc_failed |= (p == 0); // Ensure we hit the periodic check + // Use the pointer to be not optimized out by the compiler for (j=0; j<10000; j++) - x++; + x+=(unsigned)p; } #endif + if (malloc_failed) + printf("MALLOC FAILED\n"); printf("DONE!\n"); return x; |