LAPACK  3.5.0
LAPACK: Linear Algebra PACKage
 All Classes Files Functions Variables Typedefs Macros
cgesvd-zgesvd-stack-corruption.patch
Go to the documentation of this file.
1 Description: Fix {C,Z}GESVD stack corruption issue (upstream bug #114)
2 Origin: upstream, commit: r1455
3 Bug: http://icl.utk.edu/lapack-forum/viewtopic.php?f=13&t=4392
4 Reviewed-by: Sébastien Villemot <sebastien@debian.org>
5 Last-Update: 2014-08-07
6 ---
7 This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
8 --- a/src/cgesvd.f
9 +++ b/src/cgesvd.f
10 @@ -321,24 +321,24 @@
11  *
12  MNTHR = ILAENV( 6, 'CGESVD', JOBU // JOBVT, M, N, 0, 0 )
13  * Compute space needed for CGEQRF
14 - CALL CGEQRF( M, N, A, LDA, DUM(1), DUM(1), -1, IERR )
15 - LWORK_CGEQRF=DUM(1)
16 + CALL CGEQRF( M, N, A, LDA, CDUM(1), CDUM(1), -1, IERR )
17 + LWORK_CGEQRF=CDUM(1)
18  * Compute space needed for CUNGQR
19 - CALL CUNGQR( M, N, N, A, LDA, DUM(1), DUM(1), -1, IERR )
20 - LWORK_CUNGQR_N=DUM(1)
21 - CALL CUNGQR( M, M, N, A, LDA, DUM(1), DUM(1), -1, IERR )
22 - LWORK_CUNGQR_M=DUM(1)
23 + CALL CUNGQR( M, N, N, A, LDA, CDUM(1), CDUM(1), -1, IERR )
24 + LWORK_CUNGQR_N=CDUM(1)
25 + CALL CUNGQR( M, M, N, A, LDA, CDUM(1), CDUM(1), -1, IERR )
26 + LWORK_CUNGQR_M=CDUM(1)
27  * Compute space needed for CGEBRD
28 - CALL CGEBRD( N, N, A, LDA, S, DUM(1), DUM(1),
29 - $ DUM(1), DUM(1), -1, IERR )
30 - LWORK_CGEBRD=DUM(1)
31 + CALL CGEBRD( N, N, A, LDA, S, DUM(1), CDUM(1),
32 + $ CDUM(1), CDUM(1), -1, IERR )
33 + LWORK_CGEBRD=CDUM(1)
34  * Compute space needed for CUNGBR
35 - CALL CUNGBR( 'P', N, N, N, A, LDA, DUM(1),
36 - $ DUM(1), -1, IERR )
37 - LWORK_CUNGBR_P=DUM(1)
38 - CALL CUNGBR( 'Q', N, N, N, A, LDA, DUM(1),
39 - $ DUM(1), -1, IERR )
40 - LWORK_CUNGBR_Q=DUM(1)
41 + CALL CUNGBR( 'P', N, N, N, A, LDA, CDUM(1),
42 + $ CDUM(1), -1, IERR )
43 + LWORK_CUNGBR_P=CDUM(1)
44 + CALL CUNGBR( 'Q', N, N, N, A, LDA, CDUM(1),
45 + $ CDUM(1), -1, IERR )
46 + LWORK_CUNGBR_Q=CDUM(1)
47  *
48  MNTHR = ILAENV( 6, 'CGESVD', JOBU // JOBVT, M, N, 0, 0 )
49  IF( M.GE.MNTHR ) THEN
50 @@ -444,20 +444,20 @@
51  *
52  * Path 10 (M at least N, but not much larger)
53  *
54 - CALL CGEBRD( M, N, A, LDA, S, DUM(1), DUM(1),
55 - $ DUM(1), DUM(1), -1, IERR )
56 - LWORK_CGEBRD=DUM(1)
57 + CALL CGEBRD( M, N, A, LDA, S, DUM(1), CDUM(1),
58 + $ CDUM(1), CDUM(1), -1, IERR )
59 + LWORK_CGEBRD=CDUM(1)
60  MAXWRK = 2*N + LWORK_CGEBRD
61  IF( WNTUS .OR. WNTUO ) THEN
62 - CALL CUNGBR( 'Q', M, N, N, A, LDA, DUM(1),
63 - $ DUM(1), -1, IERR )
64 - LWORK_CUNGBR_Q=DUM(1)
65 + CALL CUNGBR( 'Q', M, N, N, A, LDA, CDUM(1),
66 + $ CDUM(1), -1, IERR )
67 + LWORK_CUNGBR_Q=CDUM(1)
68  MAXWRK = MAX( MAXWRK, 2*N+LWORK_CUNGBR_Q )
69  END IF
70  IF( WNTUA ) THEN
71 - CALL CUNGBR( 'Q', M, M, N, A, LDA, DUM(1),
72 - $ DUM(1), -1, IERR )
73 - LWORK_CUNGBR_Q=DUM(1)
74 + CALL CUNGBR( 'Q', M, M, N, A, LDA, CDUM(1),
75 + $ CDUM(1), -1, IERR )
76 + LWORK_CUNGBR_Q=CDUM(1)
77  MAXWRK = MAX( MAXWRK, 2*N+LWORK_CUNGBR_Q )
78  END IF
79  IF( .NOT.WNTVN ) THEN
80 @@ -471,25 +471,26 @@
81  *
82  MNTHR = ILAENV( 6, 'CGESVD', JOBU // JOBVT, M, N, 0, 0 )
83  * Compute space needed for CGELQF
84 - CALL CGELQF( M, N, A, LDA, DUM(1), DUM(1), -1, IERR )
85 - LWORK_CGELQF=DUM(1)
86 + CALL CGELQF( M, N, A, LDA, CDUM(1), CDUM(1), -1, IERR )
87 + LWORK_CGELQF=CDUM(1)
88  * Compute space needed for CUNGLQ
89 - CALL CUNGLQ( N, N, M, DUM(1), N, DUM(1), DUM(1), -1, IERR )
90 - LWORK_CUNGLQ_N=DUM(1)
91 - CALL CUNGLQ( M, N, M, A, LDA, DUM(1), DUM(1), -1, IERR )
92 - LWORK_CUNGLQ_M=DUM(1)
93 + CALL CUNGLQ( N, N, M, CDUM(1), N, CDUM(1), CDUM(1), -1,
94 + $ IERR )
95 + LWORK_CUNGLQ_N=CDUM(1)
96 + CALL CUNGLQ( M, N, M, A, LDA, CDUM(1), CDUM(1), -1, IERR )
97 + LWORK_CUNGLQ_M=CDUM(1)
98  * Compute space needed for CGEBRD
99 - CALL CGEBRD( M, M, A, LDA, S, DUM(1), DUM(1),
100 - $ DUM(1), DUM(1), -1, IERR )
101 - LWORK_CGEBRD=DUM(1)
102 + CALL CGEBRD( M, M, A, LDA, S, DUM(1), CDUM(1),
103 + $ CDUM(1), CDUM(1), -1, IERR )
104 + LWORK_CGEBRD=CDUM(1)
105  * Compute space needed for CUNGBR P
106 - CALL CUNGBR( 'P', M, M, M, A, N, DUM(1),
107 - $ DUM(1), -1, IERR )
108 - LWORK_CUNGBR_P=DUM(1)
109 + CALL CUNGBR( 'P', M, M, M, A, N, CDUM(1),
110 + $ CDUM(1), -1, IERR )
111 + LWORK_CUNGBR_P=CDUM(1)
112  * Compute space needed for CUNGBR Q
113 - CALL CUNGBR( 'Q', M, M, M, A, N, DUM(1),
114 - $ DUM(1), -1, IERR )
115 - LWORK_CUNGBR_Q=DUM(1)
116 + CALL CUNGBR( 'Q', M, M, M, A, N, CDUM(1),
117 + $ CDUM(1), -1, IERR )
118 + LWORK_CUNGBR_Q=CDUM(1)
119  IF( N.GE.MNTHR ) THEN
120  IF( WNTVN ) THEN
121  *
122 @@ -593,21 +594,21 @@
123  *
124  * Path 10t(N greater than M, but not much larger)
125  *
126 - CALL CGEBRD( M, N, A, LDA, S, DUM(1), DUM(1),
127 - $ DUM(1), DUM(1), -1, IERR )
128 - LWORK_CGEBRD=DUM(1)
129 + CALL CGEBRD( M, N, A, LDA, S, DUM(1), CDUM(1),
130 + $ CDUM(1), CDUM(1), -1, IERR )
131 + LWORK_CGEBRD=CDUM(1)
132  MAXWRK = 2*M + LWORK_CGEBRD
133  IF( WNTVS .OR. WNTVO ) THEN
134  * Compute space needed for CUNGBR P
135 - CALL CUNGBR( 'P', M, N, M, A, N, DUM(1),
136 - $ DUM(1), -1, IERR )
137 - LWORK_CUNGBR_P=DUM(1)
138 + CALL CUNGBR( 'P', M, N, M, A, N, CDUM(1),
139 + $ CDUM(1), -1, IERR )
140 + LWORK_CUNGBR_P=CDUM(1)
141  MAXWRK = MAX( MAXWRK, 2*M+LWORK_CUNGBR_P )
142  END IF
143  IF( WNTVA ) THEN
144 - CALL CUNGBR( 'P', N, N, M, A, N, DUM(1),
145 - $ DUM(1), -1, IERR )
146 - LWORK_CUNGBR_P=DUM(1)
147 + CALL CUNGBR( 'P', N, N, M, A, N, CDUM(1),
148 + $ CDUM(1), -1, IERR )
149 + LWORK_CUNGBR_P=CDUM(1)
150  MAXWRK = MAX( MAXWRK, 2*M+LWORK_CUNGBR_P )
151  END IF
152  IF( .NOT.WNTUN ) THEN
153 --- a/src/zgesvd.f
154 +++ b/src/zgesvd.f
155 @@ -321,24 +321,24 @@
156  *
157  MNTHR = ILAENV( 6, 'ZGESVD', JOBU // JOBVT, M, N, 0, 0 )
158  * Compute space needed for ZGEQRF
159 - CALL ZGEQRF( M, N, A, LDA, DUM(1), DUM(1), -1, IERR )
160 - LWORK_ZGEQRF=DUM(1)
161 + CALL ZGEQRF( M, N, A, LDA, CDUM(1), CDUM(1), -1, IERR )
162 + LWORK_ZGEQRF=CDUM(1)
163  * Compute space needed for ZUNGQR
164 - CALL ZUNGQR( M, N, N, A, LDA, DUM(1), DUM(1), -1, IERR )
165 - LWORK_ZUNGQR_N=DUM(1)
166 - CALL ZUNGQR( M, M, N, A, LDA, DUM(1), DUM(1), -1, IERR )
167 - LWORK_ZUNGQR_M=DUM(1)
168 + CALL ZUNGQR( M, N, N, A, LDA, CDUM(1), CDUM(1), -1, IERR )
169 + LWORK_ZUNGQR_N=CDUM(1)
170 + CALL ZUNGQR( M, M, N, A, LDA, CDUM(1), CDUM(1), -1, IERR )
171 + LWORK_ZUNGQR_M=CDUM(1)
172  * Compute space needed for ZGEBRD
173 - CALL ZGEBRD( N, N, A, LDA, S, DUM(1), DUM(1),
174 - $ DUM(1), DUM(1), -1, IERR )
175 - LWORK_ZGEBRD=DUM(1)
176 + CALL ZGEBRD( N, N, A, LDA, S, DUM(1), CDUM(1),
177 + $ CDUM(1), CDUM(1), -1, IERR )
178 + LWORK_ZGEBRD=CDUM(1)
179  * Compute space needed for ZUNGBR
180 - CALL ZUNGBR( 'P', N, N, N, A, LDA, DUM(1),
181 - $ DUM(1), -1, IERR )
182 - LWORK_ZUNGBR_P=DUM(1)
183 - CALL ZUNGBR( 'Q', N, N, N, A, LDA, DUM(1),
184 - $ DUM(1), -1, IERR )
185 - LWORK_ZUNGBR_Q=DUM(1)
186 + CALL ZUNGBR( 'P', N, N, N, A, LDA, CDUM(1),
187 + $ CDUM(1), -1, IERR )
188 + LWORK_ZUNGBR_P=CDUM(1)
189 + CALL ZUNGBR( 'Q', N, N, N, A, LDA, CDUM(1),
190 + $ CDUM(1), -1, IERR )
191 + LWORK_ZUNGBR_Q=CDUM(1)
192  *
193  IF( M.GE.MNTHR ) THEN
194  IF( WNTUN ) THEN
195 @@ -443,20 +443,20 @@
196  *
197  * Path 10 (M at least N, but not much larger)
198  *
199 - CALL ZGEBRD( M, N, A, LDA, S, DUM(1), DUM(1),
200 - $ DUM(1), DUM(1), -1, IERR )
201 - LWORK_ZGEBRD=DUM(1)
202 + CALL ZGEBRD( M, N, A, LDA, S, DUM(1), CDUM(1),
203 + $ CDUM(1), CDUM(1), -1, IERR )
204 + LWORK_ZGEBRD=CDUM(1)
205  MAXWRK = 2*N + LWORK_ZGEBRD
206  IF( WNTUS .OR. WNTUO ) THEN
207 - CALL ZUNGBR( 'Q', M, N, N, A, LDA, DUM(1),
208 - $ DUM(1), -1, IERR )
209 - LWORK_ZUNGBR_Q=DUM(1)
210 + CALL ZUNGBR( 'Q', M, N, N, A, LDA, CDUM(1),
211 + $ CDUM(1), -1, IERR )
212 + LWORK_ZUNGBR_Q=CDUM(1)
213  MAXWRK = MAX( MAXWRK, 2*N+LWORK_ZUNGBR_Q )
214  END IF
215  IF( WNTUA ) THEN
216 - CALL ZUNGBR( 'Q', M, M, N, A, LDA, DUM(1),
217 - $ DUM(1), -1, IERR )
218 - LWORK_ZUNGBR_Q=DUM(1)
219 + CALL ZUNGBR( 'Q', M, M, N, A, LDA, CDUM(1),
220 + $ CDUM(1), -1, IERR )
221 + LWORK_ZUNGBR_Q=CDUM(1)
222  MAXWRK = MAX( MAXWRK, 2*N+LWORK_ZUNGBR_Q )
223  END IF
224  IF( .NOT.WNTVN ) THEN
225 @@ -470,25 +470,26 @@
226  *
227  MNTHR = ILAENV( 6, 'ZGESVD', JOBU // JOBVT, M, N, 0, 0 )
228  * Compute space needed for ZGELQF
229 - CALL ZGELQF( M, N, A, LDA, DUM(1), DUM(1), -1, IERR )
230 - LWORK_ZGELQF=DUM(1)
231 + CALL ZGELQF( M, N, A, LDA, CDUM(1), CDUM(1), -1, IERR )
232 + LWORK_ZGELQF=CDUM(1)
233  * Compute space needed for ZUNGLQ
234 - CALL ZUNGLQ( N, N, M, DUM(1), N, DUM(1), DUM(1), -1, IERR )
235 - LWORK_ZUNGLQ_N=DUM(1)
236 - CALL ZUNGLQ( M, N, M, A, LDA, DUM(1), DUM(1), -1, IERR )
237 - LWORK_ZUNGLQ_M=DUM(1)
238 + CALL ZUNGLQ( N, N, M, CDUM(1), N, CDUM(1), CDUM(1), -1,
239 + $ IERR )
240 + LWORK_ZUNGLQ_N=CDUM(1)
241 + CALL ZUNGLQ( M, N, M, A, LDA, CDUM(1), CDUM(1), -1, IERR )
242 + LWORK_ZUNGLQ_M=CDUM(1)
243  * Compute space needed for ZGEBRD
244 - CALL ZGEBRD( M, M, A, LDA, S, DUM(1), DUM(1),
245 - $ DUM(1), DUM(1), -1, IERR )
246 - LWORK_ZGEBRD=DUM(1)
247 + CALL ZGEBRD( M, M, A, LDA, S, DUM(1), CDUM(1),
248 + $ CDUM(1), CDUM(1), -1, IERR )
249 + LWORK_ZGEBRD=CDUM(1)
250  * Compute space needed for ZUNGBR P
251 - CALL ZUNGBR( 'P', M, M, M, A, N, DUM(1),
252 - $ DUM(1), -1, IERR )
253 - LWORK_ZUNGBR_P=DUM(1)
254 + CALL ZUNGBR( 'P', M, M, M, A, N, CDUM(1),
255 + $ CDUM(1), -1, IERR )
256 + LWORK_ZUNGBR_P=CDUM(1)
257  * Compute space needed for ZUNGBR Q
258 - CALL ZUNGBR( 'Q', M, M, M, A, N, DUM(1),
259 - $ DUM(1), -1, IERR )
260 - LWORK_ZUNGBR_Q=DUM(1)
261 + CALL ZUNGBR( 'Q', M, M, M, A, N, CDUM(1),
262 + $ CDUM(1), -1, IERR )
263 + LWORK_ZUNGBR_Q=CDUM(1)
264  IF( N.GE.MNTHR ) THEN
265  IF( WNTVN ) THEN
266  *
267 @@ -592,21 +593,21 @@
268  *
269  * Path 10t(N greater than M, but not much larger)
270  *
271 - CALL ZGEBRD( M, N, A, LDA, S, DUM(1), DUM(1),
272 - $ DUM(1), DUM(1), -1, IERR )
273 - LWORK_ZGEBRD=DUM(1)
274 + CALL ZGEBRD( M, N, A, LDA, S, DUM(1), CDUM(1),
275 + $ CDUM(1), CDUM(1), -1, IERR )
276 + LWORK_ZGEBRD=CDUM(1)
277  MAXWRK = 2*M + LWORK_ZGEBRD
278  IF( WNTVS .OR. WNTVO ) THEN
279  * Compute space needed for ZUNGBR P
280 - CALL ZUNGBR( 'P', M, N, M, A, N, DUM(1),
281 - $ DUM(1), -1, IERR )
282 - LWORK_ZUNGBR_P=DUM(1)
283 + CALL ZUNGBR( 'P', M, N, M, A, N, CDUM(1),
284 + $ CDUM(1), -1, IERR )
285 + LWORK_ZUNGBR_P=CDUM(1)
286  MAXWRK = MAX( MAXWRK, 2*M+LWORK_ZUNGBR_P )
287  END IF
288  IF( WNTVA ) THEN
289 - CALL ZUNGBR( 'P', N, N, M, A, N, DUM(1),
290 - $ DUM(1), -1, IERR )
291 - LWORK_ZUNGBR_P=DUM(1)
292 + CALL ZUNGBR( 'P', N, N, M, A, N, CDUM(1),
293 + $ CDUM(1), -1, IERR )
294 + LWORK_ZUNGBR_P=CDUM(1)
295  MAXWRK = MAX( MAXWRK, 2*M+LWORK_ZUNGBR_P )
296  END IF
297  IF( .NOT.WNTUN ) THEN
Description IF(SN.NE.ZERO) THEN IF(CS.NE.ZERO) THEN ISUPPZ(2 *M-1)
adapt the repackaging code *Remove recursive patch Replace it by the frecursive flag to as recommended by upstream for fixing *debian no changes needed *Ship lapacke PDF in liblapack doc *doxygen exclude binary objects patch
Definition: changelog:27
subroutine cgesvd(JOBU, JOBVT, M, N, A, LDA, S, U, LDU, VT, LDVT, WORK, LWORK, RWORK, INFO)
CGESVD computes the singular value decomposition (SVD) for GE matrices
Definition: cgesvd.f:214
liblapack3 Description
Definition: control:32
set ue cd $ADTTMP cat<< EOF > tmp f Program LinearEquations Implicit none Real b(3) integer i
#define MAX(x, y)
Definition: lapacke_utils.h:47
set ue cd $ADTTMP cat<< EOF > tmp f Program LinearEquations Implicit none Real * A(3, 3)
subroutine zgesvd(JOBU, JOBVT, M, N, A, LDA, S, U, LDU, VT, LDVT, WORK, LWORK, RWORK, INFO)
ZGESVD computes the singular value decomposition (SVD) for GE matrices
Definition: zgesvd.f:214
subroutine header
Definition: cblat1.f:90
#define LDA
Definition: example_user.c:12
Description commit
Choosing ILP64 Data Model To choose ILP64 data use the following const float *The purpose and format of these predicate functions are described in the LAPACK documentation This interface passes the pointer to the corresponding LAPACK routine as it is Be cautious with return values of the logical type if you link against LAPACK compiled with Fortran compiler Whereas all non zero values are treated as TRUE some Fortran compilers may rely on a certain TRUE so you will have to use the same TRUE value in the predicate function to be consistent with LAPACK implementation Implementation Details The current C interface implementation consists of wrappers to LAPACK routines The row major matrices are transposed on entry to and on exit from the LAPACK if needed Top level interfaces additionally allocate deallocate working space on entry to and on exit from the LAPACK routine Because of possible additional a routine called with this interface may require more memory space and run slower than the corresponding LAPACK routine Disclaimer and Legal Information INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION WITH EXPRESS OR BY ESTOPPEL OR TO ANY INTELLECTUAL PROPERTY RIGHTS IS GRANTED BY THIS DOCUMENT EXCEPT AS PROVIDED IN INTEL S TERMS AND CONDITIONS OF SALE FOR SUCH INTEL ASSUMES NO LIABILITY AND INTEL DISCLAIMS ANY EXPRESS OR IMPLIED RELATING TO SALE AND OR USE OF INTEL PRODUCTS INCLUDING LIABILITY OR WARRANTIES RELATING TO FITNESS FOR A PARTICULAR OR INFRINGEMENT OF ANY COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT UNLESS OTHERWISE AGREED IN WRITING BY THE INTEL PRODUCTS ARE NOT DESIGNED NOR INTENDED FOR ANY APPLICATION IN WHICH THE FAILURE OF THE INTEL PRODUCT COULD CREATE A SITUATION WHERE PERSONAL INJURY OR DEATH MAY OCCUR Intel may make changes to specifications and product descriptions at any without notice Designers must not rely on the absence or characteristics of any features or instructions marked reserved or undefined Intel reserves these for future definition and shall have no responsibility whatsoever for conflicts or incompatibilities arising from future changes to them The information here is subject to change without notice Do not finalize a design with this information The products described in this document may contain design defects or errors known as errata which may cause the product to deviate from published specifications Current characterized errata are available on request Contact your local Intel sales office or your distributor to obtain the latest specifications and before placing your product order Copies of documents which have an order number and are referenced in this or other Intel may be obtained by or go to http
Definition: README:151
#define N
Definition: example_user.c:10
debian upstream
Definition: changelog:515