情報共有が目的です.ご対応は不要です.
Fortran Standard Libraryをnfortでビルドしようとした際,表題の問題によりコンパイルエラーが発生します.
Error: ././src/stdlib_hashmap_chaining.f90, line 222: Invalid redeclaration of host symbol FREE_CHAINING_MAP detected at FREE_CHAINING_MAP@( Warning: ././src/stdlib_hashmap_chaining.f90, line 383: Pointer SENTRY never dereferenced [NEC Fortran Compiler pass 1 error termination, 1 error, 1 warning]
関係するfinal subroutineは二つあります.
ユーザ定義派生型の宣言がstdlib_hashmaps.f90で行われており,final subroutineの実装がstdlib_hashmap_chaining.f90およびstdlib_hashmap_open.f90に切り出されています. 切り出されているfinal subroutineの実装を手動でstdlib_hashmaps.f90にカット&ペーストし,final subroutine内部で参照している手続(free_map_entry_pool)も参照できるように対応すると,ビルドに成功します.
そのため,具体的な処理の実装に問題はなく,subroutineの定義場所や参照方法(具体的には,final subroutineの実装をsubmoduleに切り出していること)に問題があると推察しています.
情報共有ありがとうございます。 ご推察のとおり、プログラムに問題があり、stdlib_hashmaps.f90からfinal subroutineが参照できないためコンパイルエラーとなるのは正しい挙動です。 以上です。
情報不足で申し訳ありません.
当該のプログラムについては,gfortran 10.3および10.4, Intel Fortran classic 2021.1および2021.5, NAG Fortran 7.1 build 7113でビルドできます. NAG Fortran build 7107では,今回このスレッドで報告と同じエラーでビルドできませんでしたが,build 7113で修正されています.NAG Fortranについて,私はサポート契約をしていませんが,サポート契約をしている方にお願いをしてサポートに上げてもらった結果,修正されました.
他のコンパイラでビルドできるソースがnfortでビルドできなかったので,情報共有という形でお伝えした次第です.