瀏覽代碼

Tests/FortranModules: add a test case for #25223

Ben Boeckel 2 年之前
父節點
當前提交
619aca80ae

+ 1 - 0
Tests/FortranModules/CMakeLists.txt

@@ -127,3 +127,4 @@ if(CMake_TEST_Fortran_SUBMODULES)
 endif()
 
 add_subdirectory(Issue25112)
+add_subdirectory(Issue25223)

+ 15 - 0
Tests/FortranModules/Issue25223/CMakeLists.txt

@@ -0,0 +1,15 @@
+# See https://gist.github.com/scivision/8e3070319f0577f7d3efcba863638cae
+set(CMAKE_Fortran_MODULE_DIRECTORY "${PROJECT_BINARY_DIR}/include")
+add_library(m1 OBJECT m1.f90)
+
+add_library(m2 OBJECT m2.f90)
+target_link_libraries(m2 PRIVATE m1)
+
+add_library(m3 OBJECT m3.f90)
+target_link_libraries(m3 PRIVATE m2)
+
+add_library(m4 OBJECT m4.f90)
+target_link_libraries(m4 PRIVATE m3)
+
+add_executable(main25223 main.f90)
+target_link_libraries(main25223 PRIVATE m4 m3 m2 m1)

+ 11 - 0
Tests/FortranModules/Issue25223/m1.f90

@@ -0,0 +1,11 @@
+module m1
+
+implicit none
+
+contains
+
+pure real function pi()
+pi = 4*atan(1.)
+end function
+
+end module m1

+ 13 - 0
Tests/FortranModules/Issue25223/m2.f90

@@ -0,0 +1,13 @@
+module m2
+
+use m1, only : pi
+
+implicit none
+
+contains
+
+pure real function twopi()
+twopi = 2*pi()
+end function
+
+end module

+ 13 - 0
Tests/FortranModules/Issue25223/m3.f90

@@ -0,0 +1,13 @@
+module m3
+
+use m2, only : twopi
+
+implicit none
+
+contains
+
+pure real function fourpi()
+fourpi = 2*twopi()
+end function
+
+end module

+ 13 - 0
Tests/FortranModules/Issue25223/m4.f90

@@ -0,0 +1,13 @@
+module m4
+
+use m3, only : fourpi
+
+implicit none
+
+contains
+
+pure real function halfpi()
+halfpi = fourpi() / 8.0
+end function
+
+end module

+ 15 - 0
Tests/FortranModules/Issue25223/main.f90

@@ -0,0 +1,15 @@
+program main
+
+use m1, only : pi
+use m4, only : halfpi
+
+implicit none
+
+real :: rpi, rhalfpi
+
+rpi = pi() / 2
+rhalfpi = halfpi()
+
+print '(a,ES15.8)', 'floating point precision loss: ', rpi - rhalfpi
+
+end program