Bug report sent by Alexander V. Kobotov (from Intel) on Mon, 6 Apr 2009 to "lapack...
authorlangou <langou@users.noreply.github.com>
Sun, 10 May 2009 20:45:07 +0000 (20:45 +0000)
committerlangou <langou@users.noreply.github.com>
Sun, 10 May 2009 20:45:07 +0000 (20:45 +0000)
"(c/z)geesx: no lwork=-1 branch at all, info = -15 is returned while doing lquery."
I noticed that the S and D version where not exiting after WORKSPACE query as well.
Thanks Alexander. Bug corrected.

SRC/cgeesx.f
SRC/dgeesx.f
SRC/sgeesx.f
SRC/zgeesx.f

index 8cda6e6..b7dcb5e 100644 (file)
       PARAMETER          ( ZERO = 0.0E0, ONE = 1.0E0 )
 *     ..
 *     .. Local Scalars ..
-      LOGICAL            SCALEA, WANTSB, WANTSE, WANTSN, WANTST,
+      LOGICAL            LQUERY, SCALEA, WANTSB, WANTSE, WANTSN, WANTST,
      $                   WANTSV, WANTVS
       INTEGER            HSWORK, I, IBAL, ICOND, IERR, IEVAL, IHI, ILO,
      $                   ITAU, IWRK, LWRK, MAXWRK, MINWRK
       WANTSE = LSAME( SENSE, 'E' )
       WANTSV = LSAME( SENSE, 'V' )
       WANTSB = LSAME( SENSE, 'B' )
+      LQUERY = ( LWORK.EQ.-1 )
+*
       IF( ( .NOT.WANTVS ) .AND. ( .NOT.LSAME( JOBVS, 'N' ) ) ) THEN
          INFO = -1
       ELSE IF( ( .NOT.WANTST ) .AND. ( .NOT.LSAME( SORT, 'N' ) ) ) THEN
          END IF
          WORK( 1 ) = LWRK
 *
-         IF( LWORK.LT.MINWRK ) THEN
+         IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN
             INFO = -15
          END IF
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'CGEESX', -INFO )
          RETURN
+      ELSE IF( LQUERY ) THEN
+         RETURN
       END IF
 *
 *     Quick return if possible
index 950031e..65b2ab6 100644 (file)
       WANTSV = LSAME( SENSE, 'V' )
       WANTSB = LSAME( SENSE, 'B' )
       LQUERY = ( LWORK.EQ.-1 .OR. LIWORK.EQ.-1 )
+*
       IF( ( .NOT.WANTVS ) .AND. ( .NOT.LSAME( JOBVS, 'N' ) ) ) THEN
          INFO = -1
       ELSE IF( ( .NOT.WANTST ) .AND. ( .NOT.LSAME( SORT, 'N' ) ) ) THEN
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'DGEESX', -INFO )
          RETURN
+      ELSE IF( LQUERY ) THEN
+         RETURN
       END IF
 *
 *     Quick return if possible
index 16933a7..bdc1680 100644 (file)
       WANTSV = LSAME( SENSE, 'V' )
       WANTSB = LSAME( SENSE, 'B' )
       LQUERY = ( LWORK.EQ.-1 .OR. LIWORK.EQ.-1 )
+*
       IF( ( .NOT.WANTVS ) .AND. ( .NOT.LSAME( JOBVS, 'N' ) ) ) THEN
          INFO = -1
       ELSE IF( ( .NOT.WANTST ) .AND. ( .NOT.LSAME( SORT, 'N' ) ) ) THEN
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'SGEESX', -INFO )
          RETURN
+      ELSE IF( LQUERY ) THEN
+         RETURN
       END IF
 *
 *     Quick return if possible
index 98af9a3..c5978f5 100644 (file)
       PARAMETER          ( ZERO = 0.0D0, ONE = 1.0D0 )
 *     ..
 *     .. Local Scalars ..
-      LOGICAL            SCALEA, WANTSB, WANTSE, WANTSN, WANTST, WANTSV,
-     $                   WANTVS
+      LOGICAL            LQUERY, SCALEA, WANTSB, WANTSE, WANTSN, WANTST,
+     $                   WANTSV, WANTVS
       INTEGER            HSWORK, I, IBAL, ICOND, IERR, IEVAL, IHI, ILO,
      $                   ITAU, IWRK, LWRK, MAXWRK, MINWRK
       DOUBLE PRECISION   ANRM, BIGNUM, CSCALE, EPS, SMLNUM
       WANTSE = LSAME( SENSE, 'E' )
       WANTSV = LSAME( SENSE, 'V' )
       WANTSB = LSAME( SENSE, 'B' )
+      LQUERY = ( LWORK.EQ.-1 )
+*
       IF( ( .NOT.WANTVS ) .AND. ( .NOT.LSAME( JOBVS, 'N' ) ) ) THEN
          INFO = -1
       ELSE IF( ( .NOT.WANTST ) .AND. ( .NOT.LSAME( SORT, 'N' ) ) ) THEN
          END IF
          WORK( 1 ) = LWRK
 *
-         IF( LWORK.LT.MINWRK ) THEN
+         IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN
             INFO = -15
          END IF
       END IF
       IF( INFO.NE.0 ) THEN
          CALL XERBLA( 'ZGEESX', -INFO )
          RETURN
+      ELSE IF( LQUERY ) THEN
+         RETURN
       END IF
 *
 *     Quick return if possible