# HG changeset patch # User Mike Miller # Date 1493926267 25200 # Node ID 7864849e84c2c562a70ed57a2e4cff312aa21c54 # Parent 2011e0d2f9262d7c51cf217bf5de3127cfd56fb5 Eliminate some compiler warnings * Makefile.am (AM_CXXFLAGS): Build with -W -Wall by default. * __py_struct_from_dict__.cc (F__py_int64_scalar_value__, F__py_uint64_scalar_value__, F__py_is_none__, F__py_isinstance__, F__py_objstore_del__, F__py_objstore_get__, F__py_objstore_put__, F__py_string_value__, F__py_struct_from_dict__): Remove unused parameter to eliminate -Wunused-parameter warning. * pyexec.cc (Fpyexec): Likewise. * oct-py-init.cc (pytave::py_init): Declare argv array correctly to eliminate -Wwrite-strings warning. * oct-py-types.cc (pytave::make_py_bool): Explicitly increment and return value to eliminate -Wstrict-aliasing warning. (pytave::make_py_complex, pytave::extract_py_complex): Copy complex values between C++ and Python types to eliminate -Wstrict-aliasing warning. (pytave::extract_py_int64): Add braces to nested if block to eliminate -Wparentheses warning. diff -r 2011e0d2f926 -r 7864849e84c2 Makefile.am --- a/Makefile.am Thu May 04 09:41:40 2017 -0700 +++ b/Makefile.am Thu May 04 12:31:07 2017 -0700 @@ -23,6 +23,7 @@ ACLOCAL_AMFLAGS = -I m4 AM_CPPFLAGS = $(OCTAVE_CPPFLAGS) $(PYTHON_CPPFLAGS) +AM_CXXFLAGS = -W -Wall INCFLAGS = $(DEFAULT_INCLUDES) export INCFLAGS diff -r 2011e0d2f926 -r 7864849e84c2 __py_struct_from_dict__.cc --- a/__py_struct_from_dict__.cc Thu May 04 09:41:40 2017 -0700 +++ b/__py_struct_from_dict__.cc Thu May 04 12:31:07 2017 -0700 @@ -71,7 +71,7 @@ %!error __py_class_name__ (1, 2) */ -DEFUN_DLD (__py_int64_scalar_value__, args, nargout, +DEFUN_DLD (__py_int64_scalar_value__, args, , "-*- texinfo -*-\n\ @deftypefn {} {} __py_int64_scalar_value__ (@var{x})\n\ Extract a scalar int64 value from the Python integer @var{x}.\n\ @@ -123,7 +123,7 @@ %!error __py_int64_scalar_value__ (1, 2) */ -DEFUN_DLD (__py_uint64_scalar_value__, args, nargout, +DEFUN_DLD (__py_uint64_scalar_value__, args, , "-*- texinfo -*-\n\ @deftypefn {} {} __py_uint64_scalar_value__ (@var{x})\n\ Extract a scalar uint64 value from the Python integer @var{x}.\n\ @@ -174,7 +174,7 @@ %!error __py_uint64_scalar_value__ (1, 2) */ -DEFUN_DLD (__py_is_none__, args, nargout, +DEFUN_DLD (__py_is_none__, args, , "-*- texinfo -*-\n\ @deftypefn {} {} __py_is_none__ (@var{x})\n\ Check whether the Python object @var{obj} is the @code{None} object.\n\ @@ -204,7 +204,7 @@ %!error __py_is_none__ (1, 2) */ -DEFUN_DLD (__py_isinstance__, args, nargout, +DEFUN_DLD (__py_isinstance__, args, , "-*- texinfo -*-\n\ @deftypefn {} {} __py_isinstance__ (@var{x})\n\ Check whether the Python object @var{obj} is an instance of a Python type\n\ @@ -242,7 +242,7 @@ return retval; } -DEFUN_DLD (__py_objstore_del__, args, nargout, +DEFUN_DLD (__py_objstore_del__, args, , "-*- texinfo -*-\n\ @deftypefn {} {} __py_objstore_del__ (@var{key})\n\ Delete the Python object stored under @var{key} from the object store.\n\ @@ -261,7 +261,7 @@ return ovl (); } -DEFUN_DLD (__py_objstore_get__, args, nargout, +DEFUN_DLD (__py_objstore_get__, args, , "-*- texinfo -*-\n\ @deftypefn {} {} __py_objstore_get__ (@var{key})\n\ Get the Python object stored under @var{key} from the object store.\n\ @@ -285,7 +285,7 @@ return ovl (retval); } -DEFUN_DLD (__py_objstore_put__, args, nargout, +DEFUN_DLD (__py_objstore_put__, args, , "-*- texinfo -*-\n\ @deftypefn {} {} __py_objstore_put__ (@var{value})\n\ Convert @var{value} to a Python value and store in the object store.\n\ @@ -308,7 +308,7 @@ return ovl (octave_uint64 (key)); } -DEFUN_DLD (__py_string_value__, args, nargout, +DEFUN_DLD (__py_string_value__, args, , "-*- texinfo -*-\n\ @deftypefn {} {} __py_string_value__ (@var{obj})\n\ Return the string value or representation of the Python object @var{obj}.\n\ @@ -343,7 +343,7 @@ return ovl (str); } -DEFUN_DLD (__py_struct_from_dict__, args, nargout, +DEFUN_DLD (__py_struct_from_dict__, args, , "-*- texinfo -*-\n\ @deftypefn {} {} __py_struct_from_dict__ (@var{dict})\n\ Extract a scalar struct from the Python dict @var{dict}.\n\ diff -r 2011e0d2f926 -r 7864849e84c2 oct-py-init.cc --- a/oct-py-init.cc Thu May 04 09:41:40 2017 -0700 +++ b/oct-py-init.cc Thu May 04 12:31:07 2017 -0700 @@ -32,9 +32,11 @@ { #if PY_VERSION_HEX >= 0x03000000 - wchar_t *sys_argv[] { L"", nullptr }; + static wchar_t sys_argv0[] {L'\0'}; + static wchar_t *sys_argv[] {sys_argv0, nullptr}; #else - char *sys_argv[] { "", nullptr }; + static char sys_argv0[] {'\0'}; + static char *sys_argv[] {sys_argv0, nullptr}; #endif void diff -r 2011e0d2f926 -r 7864849e84c2 oct-py-types.cc --- a/oct-py-types.cc Thu May 04 09:41:40 2017 -0700 +++ b/oct-py-types.cc Thu May 04 12:31:07 2017 -0700 @@ -42,16 +42,15 @@ PyObject * make_py_bool (bool value) { - if (value) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; + python_object retval = value ? Py_True : Py_False; + Py_INCREF (retval); + return retval.release (); } PyObject * make_py_complex (std::complex value) { - Py_complex& py_complex_value = reinterpret_cast (value); + Py_complex py_complex_value {value.real (), value.imag ()}; return PyComplex_FromCComplex (py_complex_value); } @@ -83,7 +82,7 @@ throw object_convert_exception ("failed to extract complex: wrong type"); Py_complex value = PyComplex_AsCComplex (obj); - return reinterpret_cast&> (value); + return std::complex {value.real, value.imag}; } double @@ -375,10 +374,12 @@ long value = PyLong_AsLongAndOverflow (obj, &overflow); #endif if (overflow) - if (overflow > 0) - value = std::numeric_limits::max (); - else - value = std::numeric_limits::min (); + { + if (overflow > 0) + value = std::numeric_limits::max (); + else + value = std::numeric_limits::min (); + } return static_cast (value); } #if PY_VERSION_HEX < 0x03000000 diff -r 2011e0d2f926 -r 7864849e84c2 pyexec.cc --- a/pyexec.cc Thu May 04 09:41:40 2017 -0700 +++ b/pyexec.cc Thu May 04 12:31:07 2017 -0700 @@ -31,7 +31,7 @@ #include "oct-py-init.h" #include "oct-py-util.h" -DEFUN_DLD (pyexec, args, nargout, +DEFUN_DLD (pyexec, args, , "-*- texinfo -*-\n\ @deftypefn {} {} pyexec (@var{expr})\n\ @deftypefnx {} {} pyexec (@var{expr}, @var{localns})\n\