diff libinterp/corefcn/ordschur.cc @ 22961:0e9606b04ae0

use F77_INT instead of octave_idx_type for libinterp ordschur function * ordschur.cc: Use F77_INT instead of octave_idx_type for integer data passed to Fortran subroutines.
author John W. Eaton <jwe@octave.org>
date Tue, 27 Dec 2016 13:19:54 -0500
parents 3a2b891d0b33
children cd33c785e80e
line wrap: on
line diff
--- a/libinterp/corefcn/ordschur.cc	Tue Dec 27 11:58:30 2016 -0500
+++ b/libinterp/corefcn/ordschur.cc	Tue Dec 27 13:19:54 2016 -0500
@@ -77,16 +77,17 @@
   if (args.length () != 3)
     print_usage ();
 
-  const Array<octave_idx_type> sel = args(2).octave_idx_type_vector_value ("ordschur: SELECT must be an array of integers");
+  const Array<octave_idx_type> sel_arg = args(2).octave_idx_type_vector_value ("ordschur: SELECT must be an array of integers");
 
-  const octave_idx_type n = sel.numel ();
+  const octave_idx_type sel_n = sel_arg.numel ();
 
   const dim_vector dimU = args(0).dims ();
   const dim_vector dimS = args(1).dims ();
 
-  if (n != dimU(0))
+  if (sel_n != dimU(0))
     error ("ordschur: SELECT must have same length as the sides of U and S");
-  else if (n != dimU(0) || n != dimS(0) || n != dimU(1) || n != dimS(1))
+  else if (sel_n != dimU(0) || sel_n != dimS(0) || sel_n != dimU(1)
+           || sel_n != dimS(1))
     error ("ordschur: U and S must be square and of equal sizes");
 
   octave_value_list retval;
@@ -97,12 +98,14 @@
                             || args(1).is_complex_type ();
 
 #define PREPARE_ARGS(TYPE, TYPE_M, TYPE_COND)                           \
-  TYPE ## Matrix U = args(0).x ## TYPE_M ## _value ("ordschur: U and S must be real or complex floating point matrices"); \
-  TYPE ## Matrix S = args(1).x ## TYPE_M ## _value ("ordschur: U and S must be real or complex floating point matrices"); \
+  TYPE ## Matrix U = args(0).x ## TYPE_M ## _value                      \
+    ("ordschur: U and S must be real or complex floating point matrices"); \
+  TYPE ## Matrix S = args(1).x ## TYPE_M ## _value                      \
+    ("ordschur: U and S must be real or complex floating point matrices"); \
   TYPE ## Matrix w (dim_vector (n, 1));                                 \
   TYPE ## Matrix work (dim_vector (n, 1));                              \
-  octave_idx_type m;                                                    \
-  octave_idx_type info;                                                 \
+  F77_INT m;                                                            \
+  F77_INT info;                                                         \
   TYPE_COND cond1, cond2;
 
 #define PREPARE_OUTPUT()                        \
@@ -111,6 +114,11 @@
                                                 \
   retval = ovl (U, S);
 
+  F77_INT n = to_f77_int (sel_n);
+  Array<F77_INT> sel (dim_vector (n, 1));
+  for (F77_INT i = 0; i < n; i++)
+    sel.xelem (i) = to_f77_int (sel_arg.xelem (i));
+
   if (double_type)
     {
       if (complex_type)
@@ -131,7 +139,7 @@
         {
           PREPARE_ARGS (, matrix, double)
           Matrix wi (dim_vector (n, 1));
-          Array<octave_idx_type> iwork (dim_vector (n, 1));
+          Array<F77_INT> iwork (dim_vector (n, 1));
 
           F77_XFCN (dtrsen, dtrsen,
                     (F77_CONST_CHAR_ARG ("N"), F77_CONST_CHAR_ARG ("V"),
@@ -162,7 +170,7 @@
         {
           PREPARE_ARGS (Float, float_matrix, float)
           FloatMatrix wi (dim_vector (n, 1));
-          Array<octave_idx_type> iwork (dim_vector (n, 1));
+          Array<F77_INT> iwork (dim_vector (n, 1));
 
           F77_XFCN (strsen, strsen,
                     (F77_CONST_CHAR_ARG ("N"), F77_CONST_CHAR_ARG ("V"),