Mercurial > octave
diff liboctave/numeric/oct-convn.cc @ 22135:407c66ae1e20
reduce warnings from GCC's link-time optimization feature (bug #48531)
* f77-fcn.h (F77_DBLE_CMPLX, F77_CMPLX): Use C types instead of
typedefs for std::complex<T> types.
(F77_CMPLX_ARG, F77_CONST_CMPLX_ARG, F77_DBLE_CMPLX_ARG,
F77_CONST_DBLE_CMPLX_ARG): New macros.
* dot.cc, ordschur.cc, qz.cc, CColVector.cc, CMatrix.cc,
CRowVector.cc, CSparse.cc, dSparse.cc, fCColVector.cc, fCMatrix.cc,
fCRowVector.cc, f77-fcn.h, EIG.cc, aepbalance.cc, chol.cc,
eigs-base.cc, fEIG.cc, gepbalance.cc, hess.cc, lo-specfun.cc, lu.cc,
oct-convn.cc, qr.cc, qrp.cc, schur.cc, svd.cc: Use new macros for
passing complex arguments to Fortran function. Always pass pointers
to complex arguments.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 18 Jul 2016 09:38:57 -0400 |
parents | 59cadee1c74b |
children | e43d83253e28 |
line wrap: on
line diff
--- a/liboctave/numeric/oct-convn.cc Mon Jul 18 09:56:41 2016 -0400 +++ b/liboctave/numeric/oct-convn.cc Mon Jul 18 09:38:57 2016 -0400 @@ -40,7 +40,8 @@ T *c, bool inner); // Forward instances to our Fortran implementations. -#define FORWARD_IMPL(T, R, f, F) \ +#define FORWARD_IMPL(T_CXX, R_CXX, T, R, T_CAST, T_CONST_CAST, \ + R_CONST_CAST, f, F) \ extern "C" \ F77_RET_T \ F77_FUNC (f##conv2o, F##CONV2O) (const F77_INT&, \ @@ -56,22 +57,33 @@ const F77_INT&, const R*, T *); \ \ template <> void \ -convolve_2d<T, R> (const T *a, F77_INT ma, F77_INT na, \ - const R *b, F77_INT mb, F77_INT nb, \ - T *c, bool inner) \ +convolve_2d<T_CXX, R_CXX> (const T_CXX *a, F77_INT ma, F77_INT na, \ + const R_CXX *b, F77_INT mb, F77_INT nb, \ + T_CXX *c, bool inner) \ { \ if (inner) \ - F77_XFCN (f##conv2i, F##CONV2I, (ma, na, a, mb, nb, b, c)); \ + F77_XFCN (f##conv2i, F##CONV2I, (ma, na, T_CONST_CAST (a), \ + mb, nb, R_CONST_CAST (b), T_CAST (c))); \ else \ - F77_XFCN (f##conv2o, F##CONV2O, (ma, na, a, mb, nb, b, c)); \ + F77_XFCN (f##conv2o, F##CONV2O, (ma, na, T_CONST_CAST (a), \ + mb, nb, R_CONST_CAST (b), T_CAST (c))); \ } -FORWARD_IMPL (F77_DBLE, F77_DBLE, d, D) -FORWARD_IMPL (F77_REAL, F77_REAL, s, S) -FORWARD_IMPL (F77_DBLE_CMPLX, F77_DBLE_CMPLX, z, Z) -FORWARD_IMPL (F77_CMPLX, F77_CMPLX, c, C) -FORWARD_IMPL (F77_DBLE_CMPLX, F77_DBLE, zd, ZD) -FORWARD_IMPL (F77_CMPLX, F77_REAL, cs, CS) +FORWARD_IMPL (double, double, F77_DBLE, F77_DBLE, , , , d, D) +FORWARD_IMPL (float, float, F77_REAL, F77_REAL, , , , s, S) + +FORWARD_IMPL (std::complex<double>, std::complex<double>, + F77_DBLE_CMPLX, F77_DBLE_CMPLX, F77_DBLE_CMPLX_ARG, + F77_CONST_DBLE_CMPLX_ARG, F77_CONST_DBLE_CMPLX_ARG, z, Z) +FORWARD_IMPL (std::complex<float>, std::complex<float>, + F77_CMPLX, F77_CMPLX, F77_CMPLX_ARG, + F77_CONST_CMPLX_ARG, F77_CONST_CMPLX_ARG, c, C) + +FORWARD_IMPL (std::complex<double>, double, + F77_DBLE_CMPLX, F77_DBLE, F77_DBLE_CMPLX_ARG, + F77_CONST_DBLE_CMPLX_ARG, , zd, ZD) +FORWARD_IMPL (std::complex<float>, float, F77_CMPLX, F77_REAL, F77_CMPLX_ARG, + F77_CONST_CMPLX_ARG, , cs, CS) template <typename T, typename R> void convolve_nd (const T *a, const dim_vector& ad, const dim_vector& acd,