Build failure with gcc14: `Error: There is no specific subroutine for the generic 'set_string' at (1)`
Description
---> Building fpm
Executing: cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_fpm/fpm/work/fpm-0.10.1" && FPM_CFLAGS="-Os -arch arm64" FPM_LDFLAGS="-L/opt/local/lib -Wl,-headerpad_max_install_names -arch arm64" /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_fpm/fpm/work/fpm-0.10.1/install.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 27309 0 27309 0 0 24654 0 --:--:-- 0:00:01 --:--:-- 24669
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 1513k 100 1513k 0 0 586k 0 0:00:02 0:00:02 --:--:-- 1854k
fpm.F90:28554:101:
28554 | call set_string(table, "descriptor", descriptor_name(self%descriptor), error, 'git_target_t')
| 1
Error: There is no specific subroutine for the generic 'set_string' at (1)
fpm.F90:30325:93:
30325 | call set_string(table,"os-type",os_type_name(self%os_type), error, 'profile_config_t')
| 1
Error: There is no specific subroutine for the generic 'set_string' at (1)
fpm.F90:31376:9:
31376 | use fpm_git, only: git_target_t, git_target_tag, git_target_branch, &
| 1
Fatal Error: Cannot open module file 'fpm_git.mod' for reading at (1): No such file or directory
compilation terminated.
Command failed: cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_fpm/fpm/work/fpm-0.10.1" && FPM_CFLAGS="-Os -arch arm64" FPM_LDFLAGS="-L/opt/local/lib -Wl,-headerpad_max_install_names -arch arm64" /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_fpm/fpm/work/fpm-0.10.1/install.sh
Exit code: 1
Expected Behaviour
It should build with the current release of GCC.
Version of fpm
0.10.1
Platform and Architecture
macOS 14.5 / arm64
Additional Information
Also failed on buildbots: https://github.com/macports/macports-ports/actions/runs/9792802490/job/27039380730?pr=24796
No error with gcc 13.3.0:
---> Building fpm
Executing: cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_fpm/fpm/work/fpm-0.10.1" && FPM_CFLAGS="-Os -arch arm64" FPM_LDFLAGS="-L/opt/local/lib -Wl,-headerpad_max_install_names -arch arm64" /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_fpm/fpm/work/fpm-0.10.1/install.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 27309 0 27309 0 0 25878 0 --:--:-- 0:00:01 --:--:-- 25885
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 1513k 100 1513k 0 0 415k 0 0:00:03 0:00:03 --:--:-- 762k
+ mkdir -p build/dependencies
Initialized empty Git repository in /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_fpm/fpm/work/fpm-0.10.1/build/dependencies/toml-f/.git/
From https://github.com/toml-f/toml-f
* branch d7b892b1d074b7cfc5d75c3e0eb36ebc1f7958c1 -> FETCH_HEAD
Initialized empty Git repository in /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_fpm/fpm/work/fpm-0.10.1/build/dependencies/M_CLI2/.git/
From https://github.com/urbanjost/M_CLI2
* branch 7264878cdb1baff7323cc48596d829ccfe7751b8 -> FETCH_HEAD
Initialized empty Git repository in /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_fpm/fpm/work/fpm-0.10.1/build/dependencies/fortran-regex/.git/
From https://github.com/perazz/fortran-regex
* tag 1.1.2 -> FETCH_HEAD
Initialized empty Git repository in /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_fpm/fpm/work/fpm-0.10.1/build/dependencies/jonquil/.git/
From https://github.com/toml-f/jonquil
* branch 4fbd4cf34d577c0fd25e32667ee9e41bf231ece8 -> FETCH_HEAD
Initialized empty Git repository in /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_devel_fpm/fpm/work/fpm-0.10.1/build/dependencies/fortran-shlex/.git/
From https://github.com/perazz/fortran-shlex
* tag 1.0.1 -> FETCH_HEAD
[ 0%] filesystem_utilities.c
[ 1%] filesystem_utilities.c done.
[ 1%] fpm_backend_console.f90
[ 2%] fpm_backend_console.f90 done.
[ 2%] fpm_os.c
[ 3%] fpm_os.c done.
[ 3%] fpm_strings.f90
[ 4%] fpm_strings.f90 done.
[ 4%] isatty.c
[ 5%] isatty.c done.
[ 5%] iscygpty.c
[ 6%] iscygpty.c done.
[ 6%] constants.f90
[ 7%] constants.f90 done.
[ 7%] version.f90
[ 8%] version.f90 done.
[ 8%] token.f90
[ 9%] token.f90 done.
[ 9%] M_CLI2.F90
[ 10%] M_CLI2.F90 done.
[ 10%] regex.f90
[ 12%] regex.f90 done.
[ 12%] version.f90
[ 13%] version.f90 done.
[ 13%] shlex_module.f90
[ 14%] shlex_module.f90 done.
[ 14%] error.f90
[ 15%] error.f90 done.
[ 15%] datetime.f90
[ 16%] datetime.f90 done.
[ 16%] error.f90
[ 17%] error.f90 done.
[ 17%] io.f90
[ 18%] io.f90 done.
[ 18%] fpm_environment.f90
[ 19%] fpm_environment.f90 done.
[ 19%] versioning.f90
[ 20%] versioning.f90 done.
[ 20%] utils.f90
[ 21%] utils.f90 done.
[ 21%] abc.f90
[ 23%] abc.f90 done.
[ 23%] fpm_filesystem.F90
[ 24%] fpm_filesystem.F90 done.
[ 24%] fpm_release.F90
[ 25%] fpm_release.F90 done.
[ 25%] terminal.f90
[ 26%] terminal.f90 done.
[ 26%] value.f90
[ 27%] value.f90 done.
[ 27%] lexer.f90
[ 28%] lexer.f90 done.
[ 28%] fpm_os.F90
[ 29%] fpm_os.F90 done.
[ 29%] installer.f90
[ 30%] installer.f90 done.
[ 30%] diagnostic.f90
[ 31%] diagnostic.f90 done.
[ 31%] list.f90
[ 32%] list.f90 done.
[ 32%] map.f90
[ 34%] map.f90 done.
[ 34%] node.f90
[ 35%] node.f90 done.
[ 35%] keyval.f90
[ 36%] keyval.f90 done.
[ 36%] sort.f90
[ 37%] sort.f90 done.
[ 37%] fpm_command_line.f90
[ 38%] fpm_command_line.f90 done.
[ 38%] context.f90
[ 39%] context.f90 done.
[ 39%] array_list.f90
[ 40%] array_list.f90 done.
[ 40%] ordered_map.f90
[ 41%] ordered_map.f90 done.
[ 41%] structure.f90
[ 42%] structure.f90 done.
[ 42%] lexer.f90
[ 43%] lexer.f90 done.
[ 43%] array.f90
[ 45%] array.f90 done.
[ 45%] table.f90
[ 46%] table.f90 done.
[ 46%] type.f90
[ 47%] type.f90 done.
[ 47%] ser.f90
[ 48%] ser.f90 done.
[ 48%] keyval.f90
[ 49%] keyval.f90 done.
[ 49%] merge.f90
[ 50%] merge.f90 done.
[ 50%] parser.f90
[ 51%] parser.f90 done.
[ 51%] ser.f90
[ 52%] ser.f90 done.
[ 52%] de.f90
[ 53%] de.f90 done.
[ 53%] array.f90
[ 54%] array.f90 done.
[ 54%] table.f90
[ 56%] table.f90 done.
[ 56%] path.f90
[ 57%] path.f90 done.
[ 57%] build.f90
[ 58%] build.f90 done.
[ 58%] tomlf.f90
[ 59%] tomlf.f90 done.
[ 59%] parser.f90
[ 60%] parser.f90 done.
[ 60%] jonquil.f90
[ 61%] jonquil.f90 done.
[ 61%] downloader.f90
[ 62%] downloader.f90 done.
[ 62%] toml.f90
[ 63%] toml.f90 done.
[ 63%] fpm_settings.f90
[ 64%] fpm_settings.f90 done.
[ 64%] git.f90
[ 65%] git.f90 done.
[ 65%] build.f90
[ 67%] build.f90 done.
[ 67%] fortran.f90
[ 68%] fortran.f90 done.
[ 68%] install.f90
[ 69%] install.f90 done.
[ 69%] library.f90
[ 70%] library.f90 done.
[ 70%] meta.f90
[ 71%] meta.f90 done.
[ 71%] preprocess.f90
[ 72%] preprocess.f90 done.
[ 72%] profiles.f90
[ 73%] profiles.f90 done.
[ 73%] dependency.f90
[ 74%] dependency.f90 done.
[ 74%] executable.f90
[ 75%] executable.f90 done.
[ 75%] example.f90
[ 76%] example.f90 done.
[ 76%] test.f90
[ 78%] test.f90 done.
[ 78%] package.f90
[ 79%] package.f90 done.
[ 79%] manifest.f90
[ 80%] manifest.f90 done.
[ 80%] new.f90
[ 81%] new.f90 done.
[ 81%] fpm_compiler.F90
[ 82%] fpm_compiler.F90 done.
[ 82%] dependency.f90
[ 83%] dependency.f90 done.
[ 83%] fpm_model.f90
[ 84%] fpm_model.f90 done.
[ 84%] update.f90
[ 85%] update.f90 done.
[ 85%] fpm_meta.f90
[ 86%] fpm_meta.f90 done.
[ 86%] fpm_source_parsing.f90
[ 87%] fpm_source_parsing.f90 done.
[ 87%] fpm_sources.f90
[ 89%] fpm_sources.f90 done.
[ 89%] fpm_targets.f90
[ 90%] fpm_targets.f90 done.
[ 90%] fpm_backend_output.f90
[ 91%] fpm_backend_output.f90 done.
[ 91%] fpm_backend.F90
[ 92%] fpm_backend.F90 done.
[ 92%] fpm.f90
[ 93%] fpm.f90 done.
[ 93%] export.f90
[ 94%] export.f90 done.
[ 94%] install.f90
[ 95%] install.f90 done.
[ 95%] publish.f90
[ 96%] publish.f90 done.
[ 96%] libfpm.a
[ 97%] libfpm.a done.
[ 97%] main.f90
[ 98%] main.f90 done.
[ 98%] fpm
[100%] fpm done.
[100%] Project compiled successfully.
@barracuda156 This is a regression issue introduced by gfortran-14. It was fixed in #1013 already. It will appear as soon as a new release is deployed.
@perazz Thank you! I will try the fix.
If it is a regression in gfortran itself, is GCC upstream made aware of it?
Well, I will need to wait until the release, since FPM fetches its bootstrap version during the build, and it is non-trivial to implement patching it.
On a different but related note, at some point it would be great to remove anything gfortran-specific in fpm so that building fpm with other compilers becomes an option too. I have tried building with the Cray, Intel (ifx), and NAG compilers and errors prevented building with all three. This is usually a sign that there are non-standard extensions or possibly even errors in the code.
It's a great idea @rouson. If you or anyone in your team has patches to contribute, it would be great.
I had only tried to add the Intel compiler in the fpm CI and last year I spent quite a lot of time on it: see #894 #898 #901 #964. Then, the switch to ifx exposed compiler bugs that are still currently not fixed, see #994, so it was removed from the CI.
@perazz It’s been quite a while, maybe it is possible to make a new micro-version tag?
@perazz I tried building from “current” (which includes your patches), but it still fails:
[ 64%] git.f90
[ 65%] git.f90 done.
././src/fpm/git.f90:357:101:
357 | call set_string(table, "descriptor", descriptor_name(self%descriptor), error, 'git_target_t')
| 1
Error: There is no specific subroutine for the generic 'set_string' at (1)
<ERROR> Compilation failed for object " src_fpm_git.f90.o "
<ERROR> stopping due to failed compilation
STOP 1
Command failed: cd "/opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_devel_fpm/fpm-devel/work/fpm-current" && FPM_CFLAGS="-Os -arch arm64" FPM_LDFLAGS="-L/opt/local/lib -Wl,-headerpad_max_install_names -arch arm64" /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_devel_fpm/fpm-devel/work/fpm-current/install.sh
Exit code: 1
P. S. Notice, this is a different error though.
Yes, a new release is definitely necessary. What compiler version is causing this? By running "current":
git clone https://github.com/fortran-lang/fpm.git
cd fpm
sh ./install.sh
everything works fine:
[ 98%] fpm
[100%] fpm done.
[100%] Project compiled successfully.
# Update: build/gfortran_C5DFB4325BCFA5D6/app/fpm -> /Users/federico/.local/bin
federico@Federicos-MBP fpm % gfortran --version
GNU Fortran (Homebrew GCC 14.2.0) 14.2.0
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
@perazz This is gcc 14.2.0 on macOS 14 arm64. I did not try it on a PowerPC machine, but I would not expect differences with regard to Fortran. gcc 13.3.0 works fine on the same system, as before.
By the way, which version do you use for bootstrap? If it is not current, that may explain why you do not see the bug.
@perazz I don’t know how you make it work. If I do not patch bootstrap version in install.sh (so it uses an archaic 0.8.0), the build with gfortran 14.2.0 fails on this:
---> Building fpm-devel
Executing: cd "/opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_devel_fpm/fpm-devel/work/fpm-current" && FPM_CFLAGS="-Os -arch arm64" FPM_LDFLAGS="-L/opt/local/lib -Wl,-headerpad_max_install_names -arch arm64" /opt/local/var/macports/build/_opt_svacchanda_SonomaPorts_devel_fpm/fpm-devel/work/fpm-current/install.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 27779 0 27779 0 0 60746 0 --:--:-- --:--:-- --:--:-- 60785
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 1513k 100 1513k 0 0 517k 0 0:00:02 0:00:02 --:--:-- 1568k
fpm.F90:28554:101:
28554 | call set_string(table, "descriptor", descriptor_name(self%descriptor), error, 'git_target_t')
| 1
Error: There is no specific subroutine for the generic 'set_string' at (1)
fpm.F90:30325:93:
30325 | call set_string(table,"os-type",os_type_name(self%os_type), error, 'profile_config_t')
| 1
Error: There is no specific subroutine for the generic 'set_string' at (1)
fpm.F90:31376:9:
31376 | use fpm_git, only: git_target_t, git_target_tag, git_target_branch, &
| 1
Fatal Error: Cannot open module file 'fpm_git.mod' for reading at (1): No such file or directory
compilation terminated.
If I patch install.sh, as we are doing in MacPorts, to use the up-to-date version for the bootstrap (i.e. current presently), the build fails on:
From https://github.com/perazz/fortran-shlex
* tag 1.0.1 -> FETCH_HEAD
[ 0%] filesystem_utilities.c
[ 1%] filesystem_utilities.c done.
[ 1%] fpm_backend_console.f90
[ 2%] fpm_backend_console.f90 done.
[ 2%] fpm_os.c
[ 3%] fpm_os.c done.
[ 3%] fpm_strings.f90
[ 4%] fpm_strings.f90 done.
[ 4%] isatty.c
[ 5%] isatty.c done.
[ 5%] iscygpty.c
[ 6%] iscygpty.c done.
[ 6%] constants.f90
[ 7%] constants.f90 done.
[ 7%] version.f90
[ 8%] version.f90 done.
[ 8%] token.f90
[ 9%] token.f90 done.
[ 9%] M_CLI2.F90
[ 10%] M_CLI2.F90 done.
[ 10%] regex.f90
[ 12%] regex.f90 done.
[ 12%] version.f90
[ 13%] version.f90 done.
[ 13%] shlex_module.f90
[ 14%] shlex_module.f90 done.
[ 14%] error.f90
[ 15%] error.f90 done.
[ 15%] datetime.f90
[ 16%] datetime.f90 done.
[ 16%] error.f90
[ 17%] error.f90 done.
[ 17%] io.f90
[ 18%] io.f90 done.
[ 18%] fpm_environment.f90
[ 19%] fpm_environment.f90 done.
[ 19%] versioning.f90
[ 20%] versioning.f90 done.
[ 20%] utils.f90
[ 21%] utils.f90 done.
[ 21%] abc.f90
[ 23%] abc.f90 done.
[ 23%] fpm_filesystem.F90
[ 24%] fpm_filesystem.F90 done.
[ 24%] fpm_release.F90
[ 25%] fpm_release.F90 done.
[ 25%] terminal.f90
[ 26%] terminal.f90 done.
[ 26%] value.f90
[ 27%] value.f90 done.
[ 27%] lexer.f90
[ 28%] lexer.f90 done.
[ 28%] fpm_os.F90
[ 29%] fpm_os.F90 done.
[ 29%] installer.f90
[ 30%] installer.f90 done.
[ 30%] diagnostic.f90
[ 31%] diagnostic.f90 done.
[ 31%] list.f90
[ 32%] list.f90 done.
[ 32%] map.f90
[ 34%] map.f90 done.
[ 34%] node.f90
[ 35%] node.f90 done.
[ 35%] keyval.f90
[ 36%] keyval.f90 done.
[ 36%] sort.f90
[ 37%] sort.f90 done.
[ 37%] fpm_command_line.f90
[ 38%] fpm_command_line.f90 done.
[ 38%] context.f90
[ 39%] context.f90 done.
[ 39%] array_list.f90
[ 40%] array_list.f90 done.
[ 40%] ordered_map.f90
[ 41%] ordered_map.f90 done.
[ 41%] structure.f90
[ 42%] structure.f90 done.
[ 42%] lexer.f90
[ 43%] lexer.f90 done.
[ 43%] array.f90
[ 45%] array.f90 done.
[ 45%] table.f90
[ 46%] table.f90 done.
[ 46%] type.f90
[ 47%] type.f90 done.
[ 47%] ser.f90
[ 48%] ser.f90 done.
[ 48%] keyval.f90
[ 49%] keyval.f90 done.
[ 49%] merge.f90
[ 50%] merge.f90 done.
[ 50%] parser.f90
[ 51%] parser.f90 done.
[ 51%] ser.f90
[ 52%] ser.f90 done.
[ 52%] de.f90
[ 53%] de.f90 done.
[ 53%] array.f90
[ 54%] array.f90 done.
[ 54%] table.f90
[ 56%] table.f90 done.
[ 56%] path.f90
[ 57%] path.f90 done.
[ 57%] build.f90
[ 58%] build.f90 done.
[ 58%] tomlf.f90
[ 59%] tomlf.f90 done.
[ 59%] parser.f90
[ 60%] parser.f90 done.
[ 60%] jonquil.f90
[ 61%] jonquil.f90 done.
[ 61%] downloader.f90
[ 62%] downloader.f90 done.
[ 62%] toml.f90
[ 63%] toml.f90 done.
[ 63%] fpm_settings.f90
[ 64%] fpm_settings.f90 done.
[ 64%] git.f90
[ 65%] git.f90 done.
././src/fpm/git.f90:357:101:
357 | call set_string(table, "descriptor", descriptor_name(self%descriptor), error, 'git_target_t')
| 1
Error: There is no specific subroutine for the generic 'set_string' at (1)
<ERROR> Compilation failed for object " src_fpm_git.f90.o "
<ERROR> stopping due to failed compilation
STOP 1
On macOS with a Homebrew-installed GCC 14.3.0, the following now works:
git clone [email protected]:fortran-lang/fpm
cd fpm
FC=gfortran-14 ./install.sh
so I assume it's ok to close this issue. Please feel free to reopen if I'm missing something and the issue still exists.
@rouson Yeah, it definitely works for me with gcc14 (MacPorts-based), and I think upstream MacPorts should have it working too.
P. S. If anyone with mainstream MacPorts installation bumps into this issue, this version of fpm port works and is up-to-date: https://github.com/macos-powerpc/powerpc-ports/blob/main/devel/fpm/Portfile
(You may need to use my fortran portgroup too, I don’t remember now if it differs.)