Skip to content

Commit 665c015

Browse files
committed
gcc-15 stack overflow: put large variables on heap
1 parent 0ae14cf commit 665c015

File tree

1 file changed

+20
-11
lines changed

1 file changed

+20
-11
lines changed

src/fpm.f90

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,16 @@ subroutine build_model(model, settings, package_config, error)
4545
type(error_t), allocatable, intent(out) :: error
4646

4747
integer :: i, j
48-
type(package_config_t), target :: package, dependency_config, dependency
48+
type(package_config_t), allocatable, target :: package, dependency_config, dependency
4949
type(package_config_t), pointer :: manifest
50-
type(platform_config_t) :: target_platform
50+
type(platform_config_t), allocatable, target :: target_platform
5151
character(len=:), allocatable :: file_name, lib_dir
5252
logical :: has_cpp
5353
logical :: duplicates_found, auto_exe, auto_example, auto_test
5454
type(string_t) :: include_dir
55+
56+
! Large variables -> safer on heap
57+
allocate(package,dependency_config,dependency,target_platform)
5558

5659
model%package_name = package_config%name
5760

@@ -472,13 +475,16 @@ end subroutine check_module_names
472475
subroutine cmd_build(settings)
473476
type(fpm_build_settings), intent(inout) :: settings
474477

475-
type(package_config_t) :: package
476-
type(fpm_model_t) :: model
478+
type(package_config_t), allocatable :: package
479+
type(fpm_model_t), allocatable :: model
477480
type(build_target_ptr), allocatable :: targets(:)
478481
type(error_t), allocatable :: error
479482

480483
integer :: i
481484

485+
! Large variables -> safer on heap
486+
allocate(package, model)
487+
482488
call get_package_data(package, "fpm.toml", error, apply_defaults=.true.)
483489
if (allocated(error)) then
484490
call fpm_stop(1,'*cmd_build* Package error: '//error%message)
@@ -520,8 +526,8 @@ subroutine cmd_run(settings,test)
520526
integer :: i, j, col_width
521527
logical :: found(size(settings%name))
522528
type(error_t), allocatable :: error
523-
type(package_config_t) :: package
524-
type(fpm_model_t) :: model
529+
type(package_config_t), allocatable :: package
530+
type(fpm_model_t), allocatable :: model
525531
type(build_target_ptr), allocatable :: targets(:)
526532
type(string_t) :: exe_cmd
527533
type(string_t), allocatable :: executables(:)
@@ -530,6 +536,9 @@ subroutine cmd_run(settings,test)
530536
integer :: run_scope,firsterror
531537
integer, allocatable :: stat(:),target_ID(:)
532538
character(len=:),allocatable :: line,run_cmd,library_path
539+
540+
! Large variables -> safer on heap
541+
allocate(package,model)
533542

534543
call get_package_data(package, "fpm.toml", error, apply_defaults=.true.)
535544
if (allocated(error)) then
@@ -753,10 +762,13 @@ subroutine delete_targets(settings, error)
753762
class(fpm_clean_settings), intent(inout) :: settings
754763
type(error_t), allocatable, intent(out) :: error
755764

756-
type(package_config_t) :: package
757-
type(fpm_model_t) :: model
765+
type(package_config_t), allocatable :: package
766+
type(fpm_model_t), allocatable :: model
758767
type(build_target_ptr), allocatable :: targets(:)
759768
logical :: deleted_any
769+
770+
! Large variables -> safer on heap
771+
allocate(package,model)
760772

761773
! Get package configuration
762774
call get_package_data(package, "fpm.toml", error, apply_defaults=.true.)
@@ -1000,7 +1012,4 @@ subroutine restore_library_path(saved_path, error)
10001012

10011013
end subroutine restore_library_path
10021014

1003-
1004-
1005-
10061015
end module fpm

0 commit comments

Comments
 (0)