8181C > LWORK is INTEGER
8282C > \endverbatim
8383C > \verbatim
84- C > The dimension of the array WORK. The dimension can be divided into three parts.
84+ C > The dimension of the array WORK. LWORK >= 1 if MIN(M,N) = 0,
85+ C > otherwise the dimension can be divided into three parts.
8586C > \endverbatim
8687C > \verbatim
8788C > 1) The part for the triangular factor T. If the very last T is not bigger
@@ -212,7 +213,13 @@ SUBROUTINE CGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
212213 LLWORK = MAX (MAX ((N- M)* K, (N- M)* NB), MAX (K* NB, NB* NB))
213214 LLWORK = SCEIL(REAL (LLWORK)/ REAL (NB))
214215
215- IF ( NT.GT. NB ) THEN
216+ IF ( K.EQ. 0 ) THEN
217+
218+ LBWORK = 0
219+ LWKOPT = 1
220+ WORK( 1 ) = LWKOPT
221+
222+ ELSE IF ( NT.GT. NB ) THEN
216223
217224 LBWORK = K- NT
218225*
@@ -239,8 +246,9 @@ SUBROUTINE CGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
239246 INFO = - 2
240247 ELSE IF ( LDA.LT. MAX ( 1 , M ) ) THEN
241248 INFO = - 4
242- ELSE IF ( LWORK.LT. MAX ( 1 , N ) .AND. .NOT. LQUERY ) THEN
243- INFO = - 7
249+ ELSE IF ( .NOT. LQUERY ) THEN
250+ IF ( LWORK.LE. 0 .OR. ( M.GT. 0 .AND. LWORK.LT. MAX ( 1 , N ) ) )
251+ $ INFO = - 7
244252 END IF
245253 IF ( INFO.NE. 0 ) THEN
246254 CALL XERBLA( ' CGEQRF' , - INFO )
@@ -252,7 +260,6 @@ SUBROUTINE CGEQRF ( M, N, A, LDA, TAU, WORK, LWORK, INFO )
252260* Quick return if possible
253261*
254262 IF ( K.EQ. 0 ) THEN
255- WORK( 1 ) = 1
256263 RETURN
257264 END IF
258265*
0 commit comments