Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit ae8398c

Browse files
authored
GCC 15.1 fixes (#1008)
2 parents 25f94a9 + 6c56750 commit ae8398c

15 files changed

+350
-82
lines changed

‎CMakeLists.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@ if(CMAKE_Fortran_COMPILER_ID STREQUAL GNU AND CMAKE_Fortran_COMPILER_VERSION VER
3131
message(FATAL_ERROR "GCC Version 9 or newer required")
3232
endif()
3333

34+
# --- silence gfortran-15 argument-mismatch warnings
35+
if(CMAKE_Fortran_COMPILER_ID STREQUAL GNU
36+
AND CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL 15.0
37+
AND CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 16.0)
38+
add_compile_options("$<$<COMPILE_LANGUAGE:Fortran>:-Wno-external-argument-mismatch>")
39+
endif()
40+
3441
# --- compiler feature checks
3542
include(CheckFortranSourceCompiles)
3643
include(CheckFortranSourceRuns)

‎test/linalg/test_linalg_cholesky.fypp

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ module test_linalg_cholesky
2222
allocate(tests(0))
2323

2424
#:for rk,rt,ri in RC_KINDS_TYPES
25-
tests = [tests,new_unittest("least_cholesky_${ri}$",test_cholesky_${ri}$)]
25+
call add_test(tests,new_unittest("least_cholesky_${ri}$",test_cholesky_${ri}$))
2626
#:endfor
2727

2828
end subroutine test_cholesky_factorization
@@ -66,6 +66,26 @@ module test_linalg_cholesky
6666

6767
#:endfor
6868

69+
! gcc-15 bugfix utility
70+
subroutine add_test(tests,new_test)
71+
type(unittest_type), allocatable, intent(inout) :: tests(:)
72+
type(unittest_type), intent(in) :: new_test
73+
74+
integer :: n
75+
type(unittest_type), allocatable :: new_tests(:)
76+
77+
if (allocated(tests)) then
78+
n = size(tests)
79+
else
80+
n = 0
81+
end if
82+
83+
allocate(new_tests(n+1))
84+
if (n>0) new_tests(1:n) = tests(1:n)
85+
new_tests(1+n) = new_test
86+
call move_alloc(from=new_tests,to=tests)
87+
88+
end subroutine add_test
6989

7090
end module test_linalg_cholesky
7191

‎test/linalg/test_linalg_determinant.fypp

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@ module test_linalg_determinant
2323

2424
#:for rk,rt in RC_KINDS_TYPES
2525
#:if rk!="xdp"
26-
tests = [tests,new_unittest("$eye_det_${rt[0]}$${rk}$",test_${rt[0]}$${rk}$_eye_determinant)]
27-
tests = [tests,new_unittest("$eye_det_multiple_${rt[0]}$${rk}$",test_${rt[0]}$${rk}$_eye_multiple)]
26+
call add_test(tests,new_unittest("$eye_det_${rt[0]}$${rk}$",test_${rt[0]}$${rk}$_eye_determinant))
27+
call add_test(tests,new_unittest("$eye_det_multiple_${rt[0]}$${rk}$",test_${rt[0]}$${rk}$_eye_multiple))
2828
#:endif
2929
#:endfor
3030
#:for ck,ct in CMPLX_KINDS_TYPES
3131
#:if ck!="xdp"
32-
tests = [tests,new_unittest("$complex_det_${rt[0]}$${rk}$",test_${ct[0]}$${ck}$_complex_determinant)]
32+
call add_test(tests,new_unittest("$complex_det_${rt[0]}$${rk}$",test_${ct[0]}$${ck}$_complex_determinant))
3333
#:endif
3434
#: endfor
3535

@@ -143,6 +143,27 @@ module test_linalg_determinant
143143

144144
#:endif
145145
#:endfor
146+
147+
! gcc-15 bugfix utility
148+
subroutine add_test(tests,new_test)
149+
type(unittest_type), allocatable, intent(inout) :: tests(:)
150+
type(unittest_type), intent(in) :: new_test
151+
152+
integer :: n
153+
type(unittest_type), allocatable :: new_tests(:)
154+
155+
if (allocated(tests)) then
156+
n = size(tests)
157+
else
158+
n = 0
159+
end if
160+
161+
allocate(new_tests(n+1))
162+
if (n>0) new_tests(1:n) = tests(1:n)
163+
new_tests(1+n) = new_test
164+
call move_alloc(from=new_tests,to=tests)
165+
166+
end subroutine add_test
146167

147168
end module test_linalg_determinant
148169

‎test/linalg/test_linalg_eigenvalues.fypp

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,17 @@ module test_linalg_eigenvalues
2121
allocate(tests(0))
2222

2323
#:for rk,rt,ri in REAL_KINDS_TYPES
24-
tests = [tests,new_unittest("test_eig_real_${ri}$",test_eig_real_${ri}$), &
25-
new_unittest("test_eigvals_identity_${ri}$",test_eigvals_identity_${ri}$), &
26-
new_unittest("test_eigvals_diagonal_B_${ri}$",test_eigvals_diagonal_B_${ri}$), &
27-
new_unittest("test_eigvals_nondiagonal_B_${ri}$",test_eigvals_nondiagonal_B_${ri}$), &
28-
new_unittest("test_eigh_real_${ri}$",test_eigh_real_${ri}$)]
24+
call add_test(tests,new_unittest("test_eig_real_${ri}$",test_eig_real_${ri}$))
25+
call add_test(tests,new_unittest("test_eigvals_identity_${ri}$",test_eigvals_identity_${ri}$))
26+
call add_test(tests,new_unittest("test_eigvals_diagonal_B_${ri}$",test_eigvals_diagonal_B_${ri}$))
27+
call add_test(tests,new_unittest("test_eigvals_nondiagonal_B_${ri}$",test_eigvals_nondiagonal_B_${ri}$))
28+
call add_test(tests,new_unittest("test_eigh_real_${ri}$",test_eigh_real_${ri}$))
2929
#: endfor
3030

3131
#:for ck,ct,ci in CMPLX_KINDS_TYPES
32-
tests = [tests,new_unittest("test_eig_complex_${ci}$",test_eig_complex_${ci}$), &
33-
new_unittest("test_eig_generalized_complex_${ci}$",test_eigvals_generalized_complex_${ci}$), &
34-
new_unittest("test_eig_issue_927_${ci}$",test_issue_927_${ci}$)]
32+
call add_test(tests,new_unittest("test_eig_complex_${ci}$",test_eig_complex_${ci}$))
33+
call add_test(tests,new_unittest("test_eig_generalized_complex_${ci}$",test_eigvals_generalized_complex_${ci}$))
34+
call add_test(tests,new_unittest("test_eig_issue_927_${ci}$",test_issue_927_${ci}$))
3535
#: endfor
3636

3737
end subroutine test_eig_eigh
@@ -347,8 +347,26 @@ module test_linalg_eigenvalues
347347

348348
#:endfor
349349

350-
351-
350+
! gcc-15 bugfix utility
351+
subroutine add_test(tests,new_test)
352+
type(unittest_type), allocatable, intent(inout) :: tests(:)
353+
type(unittest_type), intent(in) :: new_test
354+
355+
integer :: n
356+
type(unittest_type), allocatable :: new_tests(:)
357+
358+
if (allocated(tests)) then
359+
n = size(tests)
360+
else
361+
n = 0
362+
end if
363+
364+
allocate(new_tests(n+1))
365+
if (n>0) new_tests(1:n) = tests(1:n)
366+
new_tests(1+n) = new_test
367+
call move_alloc(from=new_tests,to=tests)
368+
369+
end subroutine add_test
352370

353371
end module test_linalg_eigenvalues
354372

‎test/linalg/test_linalg_inverse.fypp

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ module test_linalg_inverse
2222
allocate(tests(0))
2323

2424
#:for rk,rt,ri in RC_KINDS_TYPES
25-
tests = [tests,new_unittest("${ri}$_eye_inverse",test_${ri}$_eye_inverse), &
26-
new_unittest("${ri}$_singular_inverse",test_${ri}$_singular_inverse), &
27-
new_unittest("${ri}$_random_spd_inverse",test_${ri}$_random_spd_inverse)]
25+
call add_test(tests,new_unittest("${ri}$_eye_inverse",test_${ri}$_eye_inverse))
26+
call add_test(tests,new_unittest("${ri}$_singular_inverse",test_${ri}$_singular_inverse))
27+
call add_test(tests,new_unittest("${ri}$_random_spd_inverse",test_${ri}$_random_spd_inverse))
2828
#:endfor
2929

3030
end subroutine test_inverse_matrix
@@ -291,6 +291,27 @@ module test_linalg_inverse
291291

292292
#:endfor
293293

294+
! gcc-15 bugfix utility
295+
subroutine add_test(tests,new_test)
296+
type(unittest_type), allocatable, intent(inout) :: tests(:)
297+
type(unittest_type), intent(in) :: new_test
298+
299+
integer :: n
300+
type(unittest_type), allocatable :: new_tests(:)
301+
302+
if (allocated(tests)) then
303+
n = size(tests)
304+
else
305+
n = 0
306+
end if
307+
308+
allocate(new_tests(n+1))
309+
if (n>0) new_tests(1:n) = tests(1:n)
310+
new_tests(1+n) = new_test
311+
call move_alloc(from=new_tests,to=tests)
312+
313+
end subroutine add_test
314+
294315
end module test_linalg_inverse
295316

296317
program test_inv

‎test/linalg/test_linalg_lstsq.fypp

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ module test_linalg_least_squares
2121

2222
allocate(tests(0))
2323

24-
tests = [tests,new_unittest("issue_823",test_issue_823)]
24+
call add_test(tests,new_unittest("issue_823",test_issue_823))
2525

2626
#:for rk,rt,ri in REAL_KINDS_TYPES
27-
tests = [tests,new_unittest("least_squares_${ri}$",test_lstsq_one_${ri}$), &
28-
new_unittest("least_squares_randm_${ri}$",test_lstsq_random_${ri}$)]
27+
call add_test(tests,new_unittest("least_squares_${ri}$",test_lstsq_one_${ri}$))
28+
call add_test(tests,new_unittest("least_squares_randm_${ri}$",test_lstsq_random_${ri}$))
2929
#:endfor
3030

3131
end subroutine test_least_squares
@@ -139,6 +139,27 @@ module test_linalg_least_squares
139139

140140
end subroutine test_issue_823
141141

142+
! gcc-15 bugfix utility
143+
subroutine add_test(tests,new_test)
144+
type(unittest_type), allocatable, intent(inout) :: tests(:)
145+
type(unittest_type), intent(in) :: new_test
146+
147+
integer :: n
148+
type(unittest_type), allocatable :: new_tests(:)
149+
150+
if (allocated(tests)) then
151+
n = size(tests)
152+
else
153+
n = 0
154+
end if
155+
156+
allocate(new_tests(n+1))
157+
if (n>0) new_tests(1:n) = tests(1:n)
158+
new_tests(1+n) = new_test
159+
call move_alloc(from=new_tests,to=tests)
160+
161+
end subroutine add_test
162+
142163
end module test_linalg_least_squares
143164

144165
program test_lstsq

‎test/linalg/test_linalg_mnorm.fypp

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ module test_linalg_mnorm
1818
allocate(tests(0))
1919

2020
#:for rk,rt,ri in RC_KINDS_TYPES
21-
tests = [tests,new_unittest("test_matrix_norms_${ri}$",test_matrix_norms_${ri}$)]
21+
call add_test(tests,new_unittest("test_matrix_norms_${ri}$",test_matrix_norms_${ri}$))
2222
#:for rank in range(3, MAXRANK)
23-
tests = [tests,new_unittest("test_mnorm_${ri}$_${rank}$d",test_mnorm_${ri}$_${rank}$d)]
23+
call add_test(tests,new_unittest("test_mnorm_${ri}$_${rank}$d",test_mnorm_${ri}$_${rank}$d))
2424
#:endfor
2525
#:endfor
2626

@@ -135,6 +135,27 @@ module test_linalg_mnorm
135135

136136
#:endfor
137137

138+
! gcc-15 bugfix utility
139+
subroutine add_test(tests,new_test)
140+
type(unittest_type), allocatable, intent(inout) :: tests(:)
141+
type(unittest_type), intent(in) :: new_test
142+
143+
integer :: n
144+
type(unittest_type), allocatable :: new_tests(:)
145+
146+
if (allocated(tests)) then
147+
n = size(tests)
148+
else
149+
n = 0
150+
end if
151+
152+
allocate(new_tests(n+1))
153+
if (n>0) new_tests(1:n) = tests(1:n)
154+
new_tests(1+n) = new_test
155+
call move_alloc(from=new_tests,to=tests)
156+
157+
end subroutine add_test
158+
138159
end module test_linalg_mnorm
139160

140161
program test_mnorm

‎test/linalg/test_linalg_norm.fypp

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,16 @@ module test_linalg_norm
3232
allocate(tests(0))
3333

3434
#:for rk,rt,ri in RC_KINDS_TYPES
35-
tests = [tests,new_unittest("strided_1d_norm_${ri}$",test_strided_1d_${ri}$)]
35+
call add_test(tests,new_unittest("strided_1d_norm_${ri}$",test_strided_1d_${ri}$))
3636
#:for rank in range(1, MAXRANK)
37-
tests = [tests,new_unittest("norm_${ri}$_${rank}$d",test_norm_${ri}$_${rank}$d)]
37+
call add_test(tests,new_unittest("norm_${ri}$_${rank}$d",test_norm_${ri}$_${rank}$d))
3838
#:endfor
3939
#:for rank in range(2, MAXRANK)
4040
#:if rt.startswith('real')
41-
tests = [tests,new_unittest("norm2_${ri}$_${rank}$d",test_norm2_${ri}$_${rank}$d)]
41+
call add_test(tests,new_unittest("norm2_${ri}$_${rank}$d",test_norm2_${ri}$_${rank}$d))
4242
#:endif
43-
tests = [tests,new_unittest("maxabs_${ri}$_${rank}$d",test_maxabs_${ri}$_${rank}$d)]
44-
tests = [tests,new_unittest("norm_dimmed_${ri}$_${rank}$d",test_norm_dimmed_${ri}$_${rank}$d)]
43+
call add_test(tests,new_unittest("maxabs_${ri}$_${rank}$d",test_maxabs_${ri}$_${rank}$d))
44+
call add_test(tests,new_unittest("norm_dimmed_${ri}$_${rank}$d",test_norm_dimmed_${ri}$_${rank}$d))
4545
#:endfor
4646
#:endfor
4747

@@ -268,6 +268,26 @@ module test_linalg_norm
268268
#:endfor
269269
#:endfor
270270

271+
! gcc-15 bugfix utility
272+
subroutine add_test(tests,new_test)
273+
type(unittest_type), allocatable, intent(inout) :: tests(:)
274+
type(unittest_type), intent(in) :: new_test
275+
276+
integer :: n
277+
type(unittest_type), allocatable :: new_tests(:)
278+
279+
if (allocated(tests)) then
280+
n = size(tests)
281+
else
282+
n = 0
283+
end if
284+
285+
allocate(new_tests(n+1))
286+
if (n>0) new_tests(1:n) = tests(1:n)
287+
new_tests(1+n) = new_test
288+
call move_alloc(from=new_tests,to=tests)
289+
290+
end subroutine add_test
271291

272292
end module test_linalg_norm
273293

‎test/linalg/test_linalg_pseudoinverse.fypp

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ module test_linalg_pseudoinverse
2121
allocate(tests(0))
2222

2323
#:for rk,rt,ri in REAL_KINDS_TYPES
24-
tests = [tests,new_unittest("${ri}$_eye_pseudoinverse",test_${ri}$_eye_pseudoinverse)]
24+
call add_test(tests,new_unittest("${ri}$_eye_pseudoinverse",test_${ri}$_eye_pseudoinverse))
2525
#:endfor
2626
#:for rk,rt,ri in RC_KINDS_TYPES
27-
tests = [tests,new_unittest("${ri}$_square_pseudoinverse",test_${ri}$_square_pseudoinverse), &
28-
new_unittest("${ri}$_tall_pseudoinverse",test_${ri}$_tall_pseudoinverse), &
29-
new_unittest("${ri}$_wide_pseudoinverse",test_${ri}$_wide_pseudoinverse), &
30-
new_unittest("${ri}$_singular_pseudoinverse",test_${ri}$_singular_pseudoinverse)]
27+
call add_test(tests,new_unittest("${ri}$_square_pseudoinverse",test_${ri}$_square_pseudoinverse))
28+
call add_test(tests,new_unittest("${ri}$_tall_pseudoinverse",test_${ri}$_tall_pseudoinverse))
29+
call add_test(tests,new_unittest("${ri}$_wide_pseudoinverse",test_${ri}$_wide_pseudoinverse))
30+
call add_test(tests,new_unittest("${ri}$_singular_pseudoinverse",test_${ri}$_singular_pseudoinverse))
3131
#:endfor
3232

3333
end subroutine test_pseudoinverse_matrix
@@ -218,6 +218,27 @@ module test_linalg_pseudoinverse
218218

219219
#:endfor
220220

221+
! gcc-15 bugfix utility
222+
subroutine add_test(tests,new_test)
223+
type(unittest_type), allocatable, intent(inout) :: tests(:)
224+
type(unittest_type), intent(in) :: new_test
225+
226+
integer :: n
227+
type(unittest_type), allocatable :: new_tests(:)
228+
229+
if (allocated(tests)) then
230+
n = size(tests)
231+
else
232+
n = 0
233+
end if
234+
235+
allocate(new_tests(n+1))
236+
if (n>0) new_tests(1:n) = tests(1:n)
237+
new_tests(1+n) = new_test
238+
call move_alloc(from=new_tests,to=tests)
239+
240+
end subroutine add_test
241+
221242
end module test_linalg_pseudoinverse
222243

223244
program test_inv

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /