Forum - final subroutineをsubmoduleに切り出したことによるコンパイルエラー

Jump to navigation Jump to search
Overview > Programming Contest > 2022 > final subroutineをsubmoduleに切り出したことによるコンパイルエラー
[#125]

情報共有が目的です.ご対応は不要です.

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に切り出していること)に問題があると推察しています.

Posted by Degawa on 6 February 2023 at 09:49.
Edited by Degawa on 6 February 2023 at 09:50.

情報共有ありがとうございます。
ご推察のとおり、プログラムに問題があり、stdlib_hashmaps.f90からfinal subroutineが参照できないためコンパイルエラーとなるのは正しい挙動です。

以上です。

Posted by K.Nishikawa on 9 February 2023 at 04:29.

情報不足で申し訳ありません.

当該のプログラムについては,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でビルドできなかったので,情報共有という形でお伝えした次第です.

Posted by Degawa on 9 February 2023 at 15:02.