diff options
author | Dan Liew <daniel.liew@imperial.ac.uk> | 2017-06-05 10:38:17 +0100 |
---|---|---|
committer | Dan Liew <daniel.liew@imperial.ac.uk> | 2017-06-05 10:38:17 +0100 |
commit | 9481fd85532187ebcdff0e9d7ab8efaaa05a4149 (patch) | |
tree | e6907ea2ec97fca0848c1375b92ad98b5418e657 | |
parent | e3b88631ef58ad406ac069bd3a4ba16fb4aa07cc (diff) | |
download | klee-9481fd85532187ebcdff0e9d7ab8efaaa05a4149.tar.gz |
Fix test failure on systems with libstdc++ corresponding to gcc7.
This fixes #664. As reported by @jirislaby the `test/Feature/LongDouble.cpp` test fails to compile with Clang 3.4 due to new changes the libstdc++ headers. This ends up giving errors like ``` In file included from /home/abuild/rpmbuild/BUILD/klee-1.3.0+20170409/test/Feature/LongDouble.cpp:12: In file included from /usr/bin/../lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7/cstdlib:77: /usr/bin/../lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7/bits/std_abs.h:101:3: error: unknown type name '__float128' __float128 ^ /usr/bin/../lib64/gcc/x86_64-suse-linux/7/../../../../include/c++/7/bits/std_abs.h:102:7: error: unknown type name '__float128' abs(__float128 __x) ^ 2 errors generated. ``` Clang 4.0 seems fine with this source file so the problem has already been addressed upstream so we don't need to file a bug. We just need to move to a newer LLVM version to fix this properly! To work around this the test has been made into a C program rather than a C++ program to avoid including the C++ headers. The program wasn't using any important C++ features anyway so this seems like a sensible change.
-rw-r--r-- | test/Feature/LongDouble.c (renamed from test/Feature/LongDouble.cpp) | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/test/Feature/LongDouble.cpp b/test/Feature/LongDouble.c index 08924293..ad4c1a79 100644 --- a/test/Feature/LongDouble.cpp +++ b/test/Feature/LongDouble.c @@ -1,6 +1,7 @@ -// RUN: %llvmgxx -I../../../include -g -fno-exceptions -emit-llvm -O0 -c -o %t.bc %s +// RUN: %llvmgcc -g -emit-llvm -O0 -c -o %t.bc %s // RUN: rm -rf %t.klee-out // RUN: %klee --output-dir=%t.klee-out --libc=klee --no-output --exit-on-error %t.bc > %t.log +// FIXME: When we remove LLVM 2.9 support just use FileCheck and remove these `grep`s. // RUN: grep -q powl\(-11\\.0,0\)=1\\.0\\+ %t.log // RUN: grep -q powl\(-11\\.0,1\)=-11\\.0\\+ %t.log // RUN: grep -q powl\(-11\\.0,2\)=121\\.0\\+ %t.log @@ -8,28 +9,26 @@ // RUN: grep -q 1/-1=-1\\.0\\+ %t.log // RUN: grep -q 1/-2=-0\\.50\\+ %t.log -#include <cstdio> -#include <cstdlib> -#include <cmath> -#include <cassert> - #include "klee/klee.h" +#include <assert.h> +#include <math.h> +#include <stdio.h> +#include <stdlib.h> unsigned klee_urange(unsigned start, unsigned end) { unsigned x; klee_make_symbolic(&x, sizeof x, "x"); - if (x-start>=end-start) klee_silent_exit(0); + if (x - start >= end - start) + klee_silent_exit(0); return x; } -int main(int argc, char ** argv) -{ - - int a = klee_urange(0,3); +int main(int argc, char **argv) { + int a = klee_urange(0, 3); int b; // fork states - switch(a) { + switch (a) { case 0: b = -0; break; @@ -40,7 +39,7 @@ int main(int argc, char ** argv) b = -2; break; default: - assert(false && "Impossible switch target"); + assert(0 && "Impossible switch target"); } // test 80-bit external dispatch @@ -52,7 +51,7 @@ int main(int argc, char ** argv) printf("powl(-11.0,%d)=%Lf\n", a, d); // test 80-bit fdiv - long double e = (long double) 1 / (long double) b; + long double e = (long double)1 / (long double)b; // CHECK-DAG: 1/0=inf // CHECK-DAG: 1/1-1=-1.0 // CHECK-DAG: 1/-2=-0.50 @@ -60,5 +59,3 @@ int main(int argc, char ** argv) return 0; } - - |