"(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.
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
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
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
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