summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLisandro Dalcin <dalcinl@gmail.com>2014-11-21 17:50:53 +0300
committerLisandro Dalcin <dalcinl@gmail.com>2014-11-21 17:50:53 +0300
commit047ee3a0f40e5b1b66643d9fd0c2e816671b085c (patch)
treeee5e644664a169c2e306cc75ce3d0916363ffcb6
parent09f7a4408f8fec688142e2f3d5d8f08b7f3923dd (diff)
downloadcffi-047ee3a0f40e5b1b66643d9fd0c2e816671b085c.tar.gz
Enable GCC/Clang -Wconversion and add tests for expected failures
-rw-r--r--testing/test_verify.py40
1 files changed, 37 insertions, 3 deletions
diff --git a/testing/test_verify.py b/testing/test_verify.py
index 1a2d18a..40f580c 100644
--- a/testing/test_verify.py
+++ b/testing/test_verify.py
@@ -14,12 +14,13 @@ if sys.platform == 'win32':
else:
if (sys.platform == 'darwin' and
[int(x) for x in os.uname()[2].split('.')] >= [11, 0, 0]):
+ # assume a standard clang or gcc
+ extra_compile_args = ['-Werror', '-Wconversion']
# special things for clang
- extra_compile_args = [
- '-Werror', '-Qunused-arguments', '-Wno-error=shorten-64-to-32']
+ extra_compile_args.append('-Qunused-arguments')
else:
# assume a standard gcc
- extra_compile_args = ['-Werror']
+ extra_compile_args = ['-Werror', '-Wconversion']
class FFI(FFI):
def verify(self, *args, **kwds):
@@ -89,6 +90,39 @@ def test_simple_case():
lib = ffi.verify('#include <math.h>', libraries=lib_m)
assert lib.sin(1.23) == math.sin(1.23)
+def _Wconversion(cdef, source, **kargs):
+ if sys.platform == 'win32':
+ py.test.skip("needs GCC or Clang")
+ ffi = FFI()
+ ffi.cdef(cdef)
+ py.test.raises(VerificationError, ffi.verify, source, **kargs)
+ extra_compile_args_orig = extra_compile_args[:]
+ extra_compile_args.remove('-Wconversion')
+ try:
+ ffi.verify(source, **kargs)
+ finally:
+ extra_compile_args[:] = extra_compile_args_orig
+
+def test_Wconversion_unsigned():
+ _Wconversion("unsigned foo(void);",
+ "int foo(void) { return -1;}")
+
+def test_Wconversion_integer():
+ _Wconversion("short foo(void);",
+ "long long foo(void) { return 1<<sizeof(short);}")
+
+def test_Wconversion_floating():
+ _Wconversion("float sin(double);",
+ "#include <math.h>", libraries=lib_m)
+
+def test_Wconversion_float2int():
+ _Wconversion("int sinf(float);",
+ "#include <math.h>", libraries=lib_m)
+
+def test_Wconversion_double2int():
+ _Wconversion("int sin(double);",
+ "#include <math.h>", libraries=lib_m)
+
def test_rounding_1():
ffi = FFI()
ffi.cdef("double sinf(float x);")