Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Check for equality between Fortran and C logicals #692

Merged
merged 4 commits into from Mar 4, 2023

Conversation

jvdp1
Copy link
Member

@jvdp1 jvdp1 commented Feb 19, 2023

Addition of CMake rules to check if Fortran and C logicals are equivalent. If so, code will not be compiled for c_bool

Fixes #691

@barracuda156 Could you test this PR on your computer, please?

@barracuda156
Copy link

@jvdp1 Yes, sure. I will try in a while and update here. (Now the usable machine is building MPICH which takes forever.)
Thank you!

@barracuda156
Copy link

@jvdp1 I think that error got fixed with your patch, judging from percentage of the build completed.

Now it fails on:

:info:build /usr/bin/make  -f test/io/CMakeFiles/test_loadtxt_qp.dir/build.make test/io/CMakeFiles/test_loadtxt_qp.dir/depend
:info:build make[2]: Entering directory `/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_fortran-stdlib/fortran-stdlib/work/build'
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_fortran-stdlib/fortran-stdlib/work/stdlib-1243ad93cc3a6f228cbf9544e84aa0d9c14caeee/test/hash_functions/generate_hash_arrays.cpp:61: error: integer constant is too large for ‘long’ type
:info:build [ 23%] Generating test_loadtxt_qp.f90
:info:build cd /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_fortran-stdlib/fortran-stdlib/work/build/test/io && /opt/local/bin/fypp-3.11 -DMAXRANK=4 -DWITH_CBOOL=0 -DWITH_QP=0 -DWITH_XDP=1 -DPROJECT_VERSION_MAJOR=0 -DPROJECT_VERSION_MINOR=2 -DPROJECT_VERSION_PATCH=1 -I/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_fortran-stdlib/fortran-stdlib/work/stdlib-1243ad93cc3a6f228cbf9544e84aa0d9c14caeee/src /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_fortran-stdlib/fortran-stdlib/work/stdlib-1243ad93cc3a6f228cbf9544e84aa0d9c14caeee/test/io/test_loadtxt_qp.fypp /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_fortran-stdlib/fortran-stdlib/work/build/test/io/test_loadtxt_qp.f90
:info:build /opt/local/bin/cmake -E cmake_copy_f90_mod test/bitsets/test_stdlib_bitset_large.mod test/bitsets/CMakeFiles/test_stdlib_bitset_large.dir/test_stdlib_bitset_large.mod.stamp GNU
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_fortran-stdlib/fortran-stdlib/work/stdlib-1243ad93cc3a6f228cbf9544e84aa0d9c14caeee/test/hash_functions/generate_hash_arrays.cpp: In function ‘int read_keys()’:
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_fortran-stdlib/fortran-stdlib/work/stdlib-1243ad93cc3a6f228cbf9544e84aa0d9c14caeee/test/hash_functions/generate_hash_arrays.cpp:67: error: no matching function for call to ‘std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(std::string&, std::_Ios_Openmode)’
:info:build /usr/include/c++/4.2.1/fstream:465: note: candidates are: std::basic_ifstream<_CharT, _Traits>::basic_ifstream(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]
:info:build /usr/include/c++/4.2.1/fstream:451: note:                 std::basic_ifstream<_CharT, _Traits>::basic_ifstream() [with _CharT = char, _Traits = std::char_traits<char>]
:info:build /usr/include/c++/4.2.1/iosfwd:89: note:                 std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(const std::basic_ifstream<char, std::char_traits<char> >&)
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_fortran-stdlib/fortran-stdlib/work/stdlib-1243ad93cc3a6f228cbf9544e84aa0d9c14caeee/test/hash_functions/generate_hash_arrays.cpp: In function ‘int write_nmhash32()’:
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_fortran-stdlib/fortran-stdlib/work/stdlib-1243ad93cc3a6f228cbf9544e84aa0d9c14caeee/test/hash_functions/generate_hash_arrays.cpp:81: error: no matching function for call to ‘std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(std::string&, std::_Ios_Openmode)’
:info:build /usr/include/c++/4.2.1/fstream:596: note: candidates are: std::basic_ofstream<_CharT, _Traits>::basic_ofstream(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]
:info:build /usr/include/c++/4.2.1/fstream:580: note:                 std::basic_ofstream<_CharT, _Traits>::basic_ofstream() [with _CharT = char, _Traits = std::char_traits<char>]
:info:build /usr/include/c++/4.2.1/iosfwd:92: note:                 std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(const std::basic_ofstream<char, std::char_traits<char> >&)
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_fortran-stdlib/fortran-stdlib/work/stdlib-1243ad93cc3a6f228cbf9544e84aa0d9c14caeee/test/hash_functions/generate_hash_arrays.cpp: In function ‘int write_nmhash32x()’:
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_fortran-stdlib/fortran-stdlib/work/stdlib-1243ad93cc3a6f228cbf9544e84aa0d9c14caeee/test/hash_functions/generate_hash_arrays.cpp:99: error: no matching function for call to ‘std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(std::string&, std::_Ios_Openmode)’
:info:build /usr/include/c++/4.2.1/fstream:596: note: candidates are: std::basic_ofstream<_CharT, _Traits>::basic_ofstream(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]
:info:build /usr/include/c++/4.2.1/fstream:580: note:                 std::basic_ofstream<_CharT, _Traits>::basic_ofstream() [with _CharT = char, _Traits = std::char_traits<char>]
:info:build /usr/include/c++/4.2.1/iosfwd:92: note:                 std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(const std::basic_ofstream<char, std::char_traits<char> >&)
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_fortran-stdlib/fortran-stdlib/work/stdlib-1243ad93cc3a6f228cbf9544e84aa0d9c14caeee/test/hash_functions/generate_hash_arrays.cpp: In function ‘int write_water()’:
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_fortran-stdlib/fortran-stdlib/work/stdlib-1243ad93cc3a6f228cbf9544e84aa0d9c14caeee/test/hash_functions/generate_hash_arrays.cpp:117: error: no matching function for call to ‘std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(std::string&, std::_Ios_Openmode)’
:info:build /usr/include/c++/4.2.1/fstream:596: note: candidates are: std::basic_ofstream<_CharT, _Traits>::basic_ofstream(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]
:info:build /usr/include/c++/4.2.1/fstream:580: note:                 std::basic_ofstream<_CharT, _Traits>::basic_ofstream() [with _CharT = char, _Traits = std::char_traits<char>]
:info:build /usr/include/c++/4.2.1/iosfwd:92: note:                 std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(const std::basic_ofstream<char, std::char_traits<char> >&)
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_fortran-stdlib/fortran-stdlib/work/stdlib-1243ad93cc3a6f228cbf9544e84aa0d9c14caeee/test/hash_functions/generate_hash_arrays.cpp: In function ‘int write_pengy()’:
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_fortran-stdlib/fortran-stdlib/work/stdlib-1243ad93cc3a6f228cbf9544e84aa0d9c14caeee/test/hash_functions/generate_hash_arrays.cpp:135: error: no matching function for call to ‘std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(std::string&, std::_Ios_Openmode)’
:info:build /usr/include/c++/4.2.1/fstream:596: note: candidates are: std::basic_ofstream<_CharT, _Traits>::basic_ofstream(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]
:info:build /usr/include/c++/4.2.1/fstream:580: note:                 std::basic_ofstream<_CharT, _Traits>::basic_ofstream() [with _CharT = char, _Traits = std::char_traits<char>]
:info:build /usr/include/c++/4.2.1/iosfwd:92: note:                 std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(const std::basic_ofstream<char, std::char_traits<char> >&)
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_fortran-stdlib/fortran-stdlib/work/stdlib-1243ad93cc3a6f228cbf9544e84aa0d9c14caeee/test/hash_functions/generate_hash_arrays.cpp: In function ‘int write_spooky()’:
:info:build /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_fortran-stdlib/fortran-stdlib/work/stdlib-1243ad93cc3a6f228cbf9544e84aa0d9c14caeee/test/hash_functions/generate_hash_arrays.cpp:153: error: no matching function for call to ‘std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(std::string&, std::_Ios_Openmode)’
:info:build /usr/include/c++/4.2.1/fstream:596: note: candidates are: std::basic_ofstream<_CharT, _Traits>::basic_ofstream(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]
:info:build /usr/include/c++/4.2.1/fstream:580: note:                 std::basic_ofstream<_CharT, _Traits>::basic_ofstream() [with _CharT = char, _Traits = std::char_traits<char>]
:info:build /usr/include/c++/4.2.1/iosfwd:92: note:                 std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(const std::basic_ofstream<char, std::char_traits<char> >&)
:info:build /opt/local/bin/cmake -E cmake_copy_f90_mod test/io/test_loadtxt.mod test/io/CMakeFiles/test_loadtxt.dir/test_loadtxt.mod.stamp GNU
:info:build make[2]: *** [test/hash_functions/CMakeFiles/test_hash_functions.dir/generate_hash_arrays.cpp.o] Error 1

@barracuda156
Copy link

UPD. Oops, sorry, it picked wrong GCC. I will rerun with gcc12 now.

@barracuda156
Copy link

@jvdp1 Beautiful, it builds through completion now! Thank you!

P. S. That still requires fixes to GCC due to: #690

@jvdp1
Copy link
Member Author

jvdp1 commented Feb 19, 2023

@jvdp1 Beautiful, it builds through completion now! Thank you!

Thank you for confirming it.

@awvwgk Could you have a look at the changes and approve them if they are ok for you?

Also, there are an issue with MacOS9, but I can't understand what it is.

P. S. That still requires fixes to GCC due to: #690

Ok. I will look at it.

@jvdp1 jvdp1 requested a review from awvwgk February 19, 2023 19:49
@barracuda156
Copy link

Also, there are an issue with MacOS9, but I can't understand what it is.

You do not refer to my reports here, right? Honestly I doubt anyone ever tried to build Fortran stdlib on macOS 9. Would be probably fun to try, but I have no environment for that.

P. S. That still requires fixes to GCC due to: #690

Ok. I will look at it.

Problem is discussed here: iains/darwin-toolchains-start-here#40
I have preliminary implementation here, but it needs more work: https://github.com/barracuda156/gcc-git/tree/gfortran

@awvwgk
Copy link
Member

awvwgk commented Feb 19, 2023

Also, there are an issue with MacOS9, but I can't understand what it is.

Looks like our GCC 9 setup is currently broken. Here is the error message from the workflow:

     /usr/local/bin/gfortran-9 -fimplicit-none -ffree-line-length-132  -isysroot /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.1.sdk -mmacosx-version-min=12.6 CMakeFiles/cmTC_971d0.dir/testFortranCompiler.f.o -o cmTC_971d0 
    gfortran-9: warning: '12.6' is not valid for 'mmacosx-version-min'
    
    ld: library not found for -lgcc_s.10.4
    collect2: error: ld returned 1 exit status

To me it looks like a too recent version is passed by CMake to the compiler, maybe inferred from MACOSX_DEPLOYMENT_TARGET?

config/CMakeLists.txt Outdated Show resolved Hide resolved
@barracuda156
Copy link

Also, there are an issue with MacOS9, but I can't understand what it is.

Looks like our GCC 9 setup is currently broken. Here is the error message from the workflow:

     /usr/local/bin/gfortran-9 -fimplicit-none -ffree-line-length-132  -isysroot /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.1.sdk -mmacosx-version-min=12.6 CMakeFiles/cmTC_971d0.dir/testFortranCompiler.f.o -o cmTC_971d0 
    gfortran-9: warning: '12.6' is not valid for 'mmacosx-version-min'
    
    ld: library not found for -lgcc_s.10.4
    collect2: error: ld returned 1 exit status

To me it looks like a too recent version is passed by CMake to the compiler, maybe inferred from MACOSX_DEPLOYMENT_TARGET?

Nothing beyond Tiger should link to that dylib, I believe. Weird that it is expecting it to be there.

@awvwgk
Copy link
Member

awvwgk commented Feb 19, 2023

I'm running the same GCC 9 version on another CI workflow, meson has no problem to use it for compiling Fortran code. Maybe there is an issue with the latest CMake in the compiler detection (wild guess)?

@barracuda156
Copy link

I'm running the same GCC 9 version on another CI workflow, meson has no problem to use it for compiling Fortran code. Maybe there is an issue with the latest CMake in the compiler detection (wild guess)?

Having something like this broken for a new macOS would be strange, since it is widely tested and used. But I don’t have ready explanations.

@jvdp1
Copy link
Member Author

jvdp1 commented Mar 3, 2023

@awvwgk @barracuda156 I finally implemented @awvwgk 's request. Could you review this PR and merge it, if ok, please?

Copy link
Member

@awvwgk awvwgk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me now. Feel free to merge once we can confirm it fixes the issue.

@barracuda156
Copy link

Looks good to me now. Feel free to merge once we can confirm it fixes the issue.

It does fix the build, and we are already using the patch in Macports: https://github.com/macports/macports-ports/blob/master/lang/fortran-stdlib/files/0001-Check-for-equality-between-Fortran-and-C-logicals.patch
So yes, merging is welcomed.

@awvwgk awvwgk merged commit 91387a0 into fortran-lang:master Mar 4, 2023
15 checks passed
@jvdp1 jvdp1 deleted the fix_logical branch March 4, 2023 11:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
3 participants