From bdbce3ebd3848051619880b3e573408e87d42ab5 Mon Sep 17 00:00:00 2001 From: NAKATA Maho Date: Sat, 21 Mar 2026 09:12:26 +0900 Subject: [PATCH 1/2] fix(xlaqp2rk): introduce KBOUND to avoid modifying [in] argument KMAX In all four variants (SLAQP2RK, DLAQP2RK, CLAQP2RK, ZLAQP2RK), KMAX was declared as [in] in the documentation but was overwritten internally via: KMAX = MIN( KMAX, MINMNFACT ) This is a bug in the reference LAPACK implementation: the Fortran calling convention silently tolerates this when the caller passes a temporary expression, but the intent annotation is violated and C/C++ translations fail to compile (cannot bind rvalue to non-const reference). Introduce local variable KBOUND to hold the clamped value: KBOUND = MIN( KMAX, MINMNFACT ) and replace all subsequent uses of KMAX in the executable section (loop bound and final assignment K = KBOUND) with KBOUND. KMAX itself is no longer modified. --- SRC/claqp2rk.f | 8 ++++---- SRC/dlaqp2rk.f | 8 ++++---- SRC/slaqp2rk.f | 8 ++++---- SRC/zlaqp2rk.f | 8 ++++---- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/SRC/claqp2rk.f b/SRC/claqp2rk.f index 12ebf2d94..6d30ac74a 100644 --- a/SRC/claqp2rk.f +++ b/SRC/claqp2rk.f @@ -358,7 +358,7 @@ PARAMETER ( CZERO = ( 0.0E+0, 0.0E+0 ) ) * .. * .. Local Scalars .. - INTEGER I, ITEMP, J, JMAXC2NRM, KK, KP, MINMNFACT, + INTEGER I, ITEMP, J, JMAXC2NRM, KK, KP, KBOUND, MINMNFACT, $ MINMNUPDT REAL HUGEVAL, TAUNAN, TEMP, TEMP2, TOL3Z * .. @@ -390,13 +390,13 @@ * MINMNFACT = MIN( M-IOFFSET, N ) MINMNUPDT = MIN( M-IOFFSET, N+NRHS ) - KMAX = MIN( KMAX, MINMNFACT ) + KBOUND = MIN( KMAX, MINMNFACT ) TOL3Z = SQRT( SLAMCH( 'Epsilon' ) ) HUGEVAL = SLAMCH( 'Overflow' ) * * Compute the factorization, KK is the lomn loop index. * - DO KK = 1, KMAX + DO KK = 1, KBOUND * I = IOFFSET + KK * @@ -674,7 +674,7 @@ * i.e. no condition was triggered to exit the routine. * Set the number of factorized columns. * - K = KMAX + K = KBOUND * * We reached the end of the loop, i.e. all KMAX columns were * factorized, we need to set MAXC2NRMK and RELMAXC2NRMK before diff --git a/SRC/dlaqp2rk.f b/SRC/dlaqp2rk.f index 1e3d826d7..c89bcc3d9 100644 --- a/SRC/dlaqp2rk.f +++ b/SRC/dlaqp2rk.f @@ -355,7 +355,7 @@ PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 ) * .. * .. Local Scalars .. - INTEGER I, ITEMP, J, JMAXC2NRM, KK, KP, MINMNFACT, + INTEGER I, ITEMP, J, JMAXC2NRM, KK, KP, KBOUND, MINMNFACT, $ MINMNUPDT DOUBLE PRECISION HUGEVAL, TEMP, TEMP2, TOL3Z * .. @@ -387,13 +387,13 @@ * MINMNFACT = MIN( M-IOFFSET, N ) MINMNUPDT = MIN( M-IOFFSET, N+NRHS ) - KMAX = MIN( KMAX, MINMNFACT ) + KBOUND = MIN( KMAX, MINMNFACT ) TOL3Z = SQRT( DLAMCH( 'Epsilon' ) ) HUGEVAL = DLAMCH( 'Overflow' ) * * Compute the factorization, KK is the lomn loop index. * - DO KK = 1, KMAX + DO KK = 1, KBOUND * I = IOFFSET + KK * @@ -663,7 +663,7 @@ * i.e. no condition was triggered to exit the routine. * Set the number of factorized columns. * - K = KMAX + K = KBOUND * * We reached the end of the loop, i.e. all KMAX columns were * factorized, we need to set MAXC2NRMK and RELMAXC2NRMK before diff --git a/SRC/slaqp2rk.f b/SRC/slaqp2rk.f index 619083358..b245bffa6 100644 --- a/SRC/slaqp2rk.f +++ b/SRC/slaqp2rk.f @@ -355,7 +355,7 @@ PARAMETER ( ZERO = 0.0E+0, ONE = 1.0E+0 ) * .. * .. Local Scalars .. - INTEGER I, ITEMP, J, JMAXC2NRM, KK, KP, MINMNFACT, + INTEGER I, ITEMP, J, JMAXC2NRM, KK, KP, KBOUND, MINMNFACT, $ MINMNUPDT REAL HUGEVAL, TEMP, TEMP2, TOL3Z * .. @@ -387,13 +387,13 @@ * MINMNFACT = MIN( M-IOFFSET, N ) MINMNUPDT = MIN( M-IOFFSET, N+NRHS ) - KMAX = MIN( KMAX, MINMNFACT ) + KBOUND = MIN( KMAX, MINMNFACT ) TOL3Z = SQRT( SLAMCH( 'Epsilon' ) ) HUGEVAL = SLAMCH( 'Overflow' ) * * Compute the factorization, KK is the lomn loop index. * - DO KK = 1, KMAX + DO KK = 1, KBOUND * I = IOFFSET + KK * @@ -663,7 +663,7 @@ * i.e. no condition was triggered to exit the routine. * Set the number of factorized columns. * - K = KMAX + K = KBOUND * * We reached the end of the loop, i.e. all KMAX columns were * factorized, we need to set MAXC2NRMK and RELMAXC2NRMK before diff --git a/SRC/zlaqp2rk.f b/SRC/zlaqp2rk.f index 7af2fe1f4..a89090e6b 100644 --- a/SRC/zlaqp2rk.f +++ b/SRC/zlaqp2rk.f @@ -359,7 +359,7 @@ $ CONE = ( 1.0D+0, 0.0D+0 ) ) * .. * .. Local Scalars .. - INTEGER I, ITEMP, J, JMAXC2NRM, KK, KP, MINMNFACT, + INTEGER I, ITEMP, J, JMAXC2NRM, KK, KP, KBOUND, MINMNFACT, $ MINMNUPDT DOUBLE PRECISION HUGEVAL, TAUNAN, TEMP, TEMP2, TOL3Z * .. @@ -391,13 +391,13 @@ * MINMNFACT = MIN( M-IOFFSET, N ) MINMNUPDT = MIN( M-IOFFSET, N+NRHS ) - KMAX = MIN( KMAX, MINMNFACT ) + KBOUND = MIN( KMAX, MINMNFACT ) TOL3Z = SQRT( DLAMCH( 'Epsilon' ) ) HUGEVAL = DLAMCH( 'Overflow' ) * * Compute the factorization, KK is the lomn loop index. * - DO KK = 1, KMAX + DO KK = 1, KBOUND * I = IOFFSET + KK * @@ -675,7 +675,7 @@ * i.e. no condition was triggered to exit the routine. * Set the number of factorized columns. * - K = KMAX + K = KBOUND * * We reached the end of the loop, i.e. all KMAX columns were * factorized, we need to set MAXC2NRMK and RELMAXC2NRMK before From 4f13bb0d6c86d70d6a6dc65056469d8a5fb5625c Mon Sep 17 00:00:00 2001 From: NAKATA Maho Date: Mon, 23 Mar 2026 09:47:29 +0900 Subject: [PATCH 2/2] Fix 72-column violation in {c,d,s,z}laqp2rk.f The INTEGER declaration line added by PR #1202 exceeds column 72, causing 'MINMNFACT' to extend into the sequence number field (columns 73-80). In fixed-form Fortran, compilers silently truncate at column 72, so 'MINMNFACT' is parsed as 'MINMNF', leaving the actual variable undeclared. Move KBOUND, MINMNFACT to the continuation line to keep all code within columns 1-72. --- SRC/claqp2rk.f | 4 ++-- SRC/dlaqp2rk.f | 4 ++-- SRC/slaqp2rk.f | 4 ++-- SRC/zlaqp2rk.f | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/SRC/claqp2rk.f b/SRC/claqp2rk.f index 6d30ac74a..d27d978e9 100644 --- a/SRC/claqp2rk.f +++ b/SRC/claqp2rk.f @@ -358,8 +358,8 @@ PARAMETER ( CZERO = ( 0.0E+0, 0.0E+0 ) ) * .. * .. Local Scalars .. - INTEGER I, ITEMP, J, JMAXC2NRM, KK, KP, KBOUND, MINMNFACT, - $ MINMNUPDT + INTEGER I, ITEMP, J, JMAXC2NRM, KK, KP, + $ KBOUND, MINMNFACT, MINMNUPDT REAL HUGEVAL, TAUNAN, TEMP, TEMP2, TOL3Z * .. * .. External Subroutines .. diff --git a/SRC/dlaqp2rk.f b/SRC/dlaqp2rk.f index c89bcc3d9..ae2d62cac 100644 --- a/SRC/dlaqp2rk.f +++ b/SRC/dlaqp2rk.f @@ -355,8 +355,8 @@ PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 ) * .. * .. Local Scalars .. - INTEGER I, ITEMP, J, JMAXC2NRM, KK, KP, KBOUND, MINMNFACT, - $ MINMNUPDT + INTEGER I, ITEMP, J, JMAXC2NRM, KK, KP, + $ KBOUND, MINMNFACT, MINMNUPDT DOUBLE PRECISION HUGEVAL, TEMP, TEMP2, TOL3Z * .. * .. External Subroutines .. diff --git a/SRC/slaqp2rk.f b/SRC/slaqp2rk.f index b245bffa6..3825e2510 100644 --- a/SRC/slaqp2rk.f +++ b/SRC/slaqp2rk.f @@ -355,8 +355,8 @@ PARAMETER ( ZERO = 0.0E+0, ONE = 1.0E+0 ) * .. * .. Local Scalars .. - INTEGER I, ITEMP, J, JMAXC2NRM, KK, KP, KBOUND, MINMNFACT, - $ MINMNUPDT + INTEGER I, ITEMP, J, JMAXC2NRM, KK, KP, + $ KBOUND, MINMNFACT, MINMNUPDT REAL HUGEVAL, TEMP, TEMP2, TOL3Z * .. * .. External Subroutines .. diff --git a/SRC/zlaqp2rk.f b/SRC/zlaqp2rk.f index a89090e6b..0e0133ecf 100644 --- a/SRC/zlaqp2rk.f +++ b/SRC/zlaqp2rk.f @@ -359,8 +359,8 @@ $ CONE = ( 1.0D+0, 0.0D+0 ) ) * .. * .. Local Scalars .. - INTEGER I, ITEMP, J, JMAXC2NRM, KK, KP, KBOUND, MINMNFACT, - $ MINMNUPDT + INTEGER I, ITEMP, J, JMAXC2NRM, KK, KP, + $ KBOUND, MINMNFACT, MINMNUPDT DOUBLE PRECISION HUGEVAL, TAUNAN, TEMP, TEMP2, TOL3Z * .. * .. External Subroutines ..