To test without openblas , you can renable netlib blas
$ mv /usr/bin/cygblas-0.dll  /usr/bin/cygblas-0.dll_bk

Yep, works fine with netlib blas. Pure C repro case is attached,
gcc -g 5728.c -o 5728 -llapack && gdb ./5728

I can submit upstream, unless you'd like to.

-Tony
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#define BLASINT int32_t
void dgeev_(char*, char*, BLASINT*, double*, BLASINT*, double*, double*,
   double*, BLASINT*, double*, BLASINT*, double*, BLASINT*, BLASINT*);
int main() {
char jobvl = 'N';
char jobvr = 'N';
BLASINT n = 1000;
double *A = malloc(n*n*sizeof(double));
BLASINT lda = n;
double *WR = malloc(n*sizeof(double));
double *WI = malloc(n*sizeof(double));
double *VL;
BLASINT ldvl = n;
double *VR;
BLASINT ldvr = n;
double *work = malloc(1*sizeof(double));
BLASINT lwork = -1;
BLASINT info[1];
BLASINT i, j;
for (i=0; i<n; i++) {
   for (j=0; j<n; j++) {
       A[n*i+j] = n*(((double)rand()/(double)RAND_MAX) - 0.5);
   }
}
dgeev_(&jobvl, &jobvr, &n, A, &lda, WR, WI,
   VL, &ldvl, VR, &ldvr, work, &lwork, info);
printf("info[0] is %d\n", info[0]);
printf("lwork is %d\n", lwork);
printf("work[0] is %g\n", work[0]);
lwork = work[0];
free(work);
work = malloc(lwork*sizeof(double));
dgeev_(&jobvl, &jobvr, &n, A, &lda, WR, WI,
   VL, &ldvl, VR, &ldvr, work, &lwork, info);
printf("info[0] is %d\n", info[0]);
printf("lwork is %d\n", lwork);
printf("work[0] is %g\n", work[0]);
}

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

Reply via email to