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.
This commit is contained in:
parent
8002d5d2b9
commit
17598d49e1
@ -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')
|
||||
|
21
tests/unix/ffi_float.py
Normal file
21
tests/unix/ffi_float.py
Normal file
@ -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))
|
2
tests/unix/ffi_float.py.exp
Normal file
2
tests/unix/ffi_float.py.exp
Normal file
@ -0,0 +1,2 @@
|
||||
1.230000
|
||||
1.230000
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user