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,