From 17598d49e1091e2745d8f01288f95007189cdcf5 Mon Sep 17 00:00:00 2001 From: Damien George Date: Sat, 6 Sep 2014 17:46:52 +0100 Subject: [PATCH] unix: Don't use -Wno-error=cpp or #warning; fix strict alias warning. For the sake of older versions of gcc (and other compilers), don't use the #warning CPP directive, nor the -Wno-error=cpp option. Also, fix a strict alias warning in modffi.c for older compilers, and add a test for ffi module. Addresses issue #847. --- tests/run-tests | 2 +- tests/unix/ffi_float.py | 21 +++++++++++++++++++++ tests/unix/ffi_float.py.exp | 2 ++ unix/Makefile | 2 +- unix/modffi.c | 4 ++-- unix/modsocket.c | 3 ++- 6 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 tests/unix/ffi_float.py create mode 100644 tests/unix/ffi_float.py.exp diff --git a/tests/run-tests b/tests/run-tests index 8e7d2f2575..15eedc43c4 100755 --- a/tests/run-tests +++ b/tests/run-tests @@ -149,7 +149,7 @@ def main(): if args.test_dirs is None: if pyb is None: # run PC tests - test_dirs = ('basics', 'micropython', 'float', 'import', 'io', 'misc', 'unicode') + test_dirs = ('basics', 'micropython', 'float', 'import', 'io', 'misc', 'unicode', 'unix') else: # run pyboard tests test_dirs = ('basics', 'micropython', 'float', 'pyb', 'pybnative', 'inlineasm') diff --git a/tests/unix/ffi_float.py b/tests/unix/ffi_float.py new file mode 100644 index 0000000000..96a5ceeca6 --- /dev/null +++ b/tests/unix/ffi_float.py @@ -0,0 +1,21 @@ +# test ffi float support + +import ffi + +def ffi_open(names): + err = None + for n in names: + try: + mod = ffi.open(n) + return mod + except OSError as e: + err = e + raise err + +libc = ffi_open(('libc.so', 'libc.so.0', 'libc.so.6')) + +strtof = libc.func("f", "strtof", "sp") +print('%.6f' % strtof('1.23', None)) + +strtod = libc.func("d", "strtod", "sp") +print('%.6f' % strtod('1.23', None)) diff --git a/tests/unix/ffi_float.py.exp b/tests/unix/ffi_float.py.exp new file mode 100644 index 0000000000..e6fd5b7292 --- /dev/null +++ b/tests/unix/ffi_float.py.exp @@ -0,0 +1,2 @@ +1.230000 +1.230000 diff --git a/unix/Makefile b/unix/Makefile index 9d035cab76..fff6fe0944 100644 --- a/unix/Makefile +++ b/unix/Makefile @@ -18,7 +18,7 @@ INC += -I$(PY_SRC) INC += -I$(BUILD) # compiler settings -CWARN = -Wall -Werror -Wno-error=cpp +CWARN = -Wall -Werror CFLAGS = $(INC) $(CWARN) -ansi -std=gnu99 -DUNIX $(CFLAGS_MOD) $(COPT) $(CFLAGS_EXTRA) # Debugging/Optimization diff --git a/unix/modffi.c b/unix/modffi.c index c788f5dd26..e019e9fc95 100644 --- a/unix/modffi.c +++ b/unix/modffi.c @@ -146,8 +146,8 @@ STATIC mp_obj_t return_ffi_value(ffi_arg val, char type) case 'v': return mp_const_none; case 'f': { - float *p = (float*)&val; - return mp_obj_new_float(*p); + union { ffi_arg ffi; float flt; } val_union = { .ffi = val }; + return mp_obj_new_float(val_union.flt); } case 'd': { double *p = (double*)&val; diff --git a/unix/modsocket.c b/unix/modsocket.c index be97441af2..76787184a0 100644 --- a/unix/modsocket.c +++ b/unix/modsocket.c @@ -371,7 +371,8 @@ STATIC mp_obj_t mod_socket_getaddrinfo(mp_uint_t n_args, const mp_obj_t *args) { hints.ai_flags = AI_NUMERICSERV; #ifdef __UCLIBC_MAJOR__ #if __UCLIBC_MAJOR__ == 0 && (__UCLIBC_MINOR__ < 9 || (__UCLIBC_MINOR__ == 9 && __UCLIBC_SUBLEVEL__ <= 32)) -#warning Working around uClibc bug with numeric service name +// "warning" requires -Wno-cpp which is a relatively new gcc option, so we choose not to use it. +//#warning Working around uClibc bug with numeric service name // Older versions og uClibc have bugs when numeric ports in service // arg require also hints.ai_socktype (or hints.ai_protocol) != 0 // This actually was fixed in 0.9.32.1, but uClibc doesn't allow to