Skip to content

Commit e19e140

Browse files
authored
Add NaN checks for input matrix A (Reference-LAPACK PR 1136)
1 parent 904f9d6 commit e19e140

4 files changed

Lines changed: 20 additions & 4 deletions

File tree

lapack-netlib/SRC/cgeev.f

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ SUBROUTINE CGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR, LDVR,
216216
$ CHSEQR, CLACPY, CLASCL, CSCAL, CTREVC3, CUNGHR
217217
* ..
218218
* .. External Functions ..
219-
LOGICAL LSAME
219+
LOGICAL LSAME, SISNAN
220220
INTEGER ISAMAX, ILAENV
221221
REAL SLAMCH, SCNRM2, CLANGE, SROUNDUP_LWORK
222222
EXTERNAL LSAME, ISAMAX, ILAENV, SLAMCH, SCNRM2, CLANGE,
@@ -329,6 +329,10 @@ SUBROUTINE CGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR, LDVR,
329329
ELSE IF( ANRM.GT.BIGNUM ) THEN
330330
SCALEA = .TRUE.
331331
CSCALE = BIGNUM
332+
ELSE IF ( SISNAN( ANRM ) ) THEN
333+
INFO = -4
334+
CALL XERBLA( 'CGEEV', -INFO )
335+
RETURN
332336
END IF
333337
IF( SCALEA )
334338
$ CALL CLASCL( 'G', 0, 0, ANRM, CSCALE, N, N, A, LDA, IERR )

lapack-netlib/SRC/dgeev.f

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ SUBROUTINE DGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL, VR,
228228
$ XERBLA
229229
* ..
230230
* .. External Functions ..
231-
LOGICAL LSAME
231+
LOGICAL LSAME, DISNAN
232232
INTEGER IDAMAX, ILAENV
233233
DOUBLE PRECISION DLAMCH, DLANGE, DLAPY2, DNRM2
234234
EXTERNAL LSAME, IDAMAX, ILAENV, DLAMCH, DLANGE, DLAPY2,
@@ -350,6 +350,10 @@ SUBROUTINE DGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL, VR,
350350
ELSE IF( ANRM.GT.BIGNUM ) THEN
351351
SCALEA = .TRUE.
352352
CSCALE = BIGNUM
353+
ELSE IF ( DISNAN (ANRM ) ) THEN
354+
INFO = -4
355+
CALL XERBLA ( 'DGEEV', -INFO )
356+
RETURN
353357
END IF
354358
IF( SCALEA )
355359
$ CALL DLASCL( 'G', 0, 0, ANRM, CSCALE, N, N, A, LDA, IERR )

lapack-netlib/SRC/sgeev.f

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ SUBROUTINE SGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL, VR,
227227
$ SLASCL, SORGHR, SROT, SSCAL, STREVC3, XERBLA
228228
* ..
229229
* .. External Functions ..
230-
LOGICAL LSAME
230+
LOGICAL LSAME, SISNAN
231231
INTEGER ISAMAX, ILAENV
232232
REAL SLAMCH, SLANGE, SLAPY2, SNRM2, SROUNDUP_LWORK
233233
EXTERNAL LSAME, ISAMAX, ILAENV, SLAMCH, SLANGE, SLAPY2,
@@ -348,6 +348,10 @@ SUBROUTINE SGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL, VR,
348348
ELSE IF( ANRM.GT.BIGNUM ) THEN
349349
SCALEA = .TRUE.
350350
CSCALE = BIGNUM
351+
ELSE IF ( SISNAN ( ANRM ) ) THEN
352+
INFO = -4
353+
CALL XERBLA ( 'SGEEV', -INFO )
354+
RETURN
351355
END IF
352356
IF( SCALEA )
353357
$ CALL SLASCL( 'G', 0, 0, ANRM, CSCALE, N, N, A, LDA, IERR )

lapack-netlib/SRC/zgeev.f

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ SUBROUTINE ZGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR, LDVR,
216216
$ ZHSEQR, ZLACPY, ZLASCL, ZSCAL, ZTREVC3, ZUNGHR
217217
* ..
218218
* .. External Functions ..
219-
LOGICAL LSAME
219+
LOGICAL LSAME, DISNAN
220220
INTEGER IDAMAX, ILAENV
221221
DOUBLE PRECISION DLAMCH, DZNRM2, ZLANGE
222222
EXTERNAL LSAME, IDAMAX, ILAENV, DLAMCH, DZNRM2, ZLANGE
@@ -329,6 +329,10 @@ SUBROUTINE ZGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR, LDVR,
329329
ELSE IF( ANRM.GT.BIGNUM ) THEN
330330
SCALEA = .TRUE.
331331
CSCALE = BIGNUM
332+
ELSE IF ( DISNAN ( ANRM ) ) THEN
333+
INFO = -4
334+
CALL XERBLA ( 'ZGEEV', -INFO )
335+
RETURN
332336
END IF
333337
IF( SCALEA )
334338
$ CALL ZLASCL( 'G', 0, 0, ANRM, CSCALE, N, N, A, LDA, IERR )

0 commit comments

Comments
 (0)