@@ -14,6 +14,8 @@ dnl Copyright (c) 2007 Los Alamos National Security, LLC. All rights
14
14
dnl reserved.
15
15
dnl Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved.
16
16
dnl Copyright (c) 2009-2015 Cisco Systems, Inc. All rights reserved.
17
+ dnl Copyright (c) 2024 Research Organization for Information Science
18
+ dnl and Technology (RIST). All rights reserved.
17
19
dnl $COPYRIGHT $
18
20
dnl
19
21
dnl Additional copyrights may follow
@@ -23,7 +25,7 @@ dnl $HEADER$
23
25
# Does this compiler support (void*)-like functionality for MPI choice
24
26
# buffers? If so, which flavor?
25
27
AC_DEFUN([OMPI_FORTRAN_CHECK_IGNORE_TKR], [
26
- OPAL_VAR_SCOPE_PUSH([result happy type predecl])
28
+ OPAL_VAR_SCOPE_PUSH([result ignore_tkr_happy type predecl])
27
29
28
30
OMPI_FORTRAN_IGNORE_TKR_PREDECL=
29
31
OMPI_FORTRAN_IGNORE_TKR_TYPE=
@@ -41,11 +43,11 @@ AC_DEFUN([OMPI_FORTRAN_CHECK_IGNORE_TKR], [
41
43
AS_VAR_COPY([result], [fortran_ignore_tkr_data])
42
44
43
45
# Parse the result
44
- happy = ` echo $result | cut -d: -f1`
46
+ ignore_tkr_happy = ` echo $result | cut -d: -f1`
45
47
type= ` echo $result | cut -d: -f2`
46
48
predecl= ` echo $result | cut -d: -f3-`
47
49
48
- AS_IF([test $happy -eq 1],
50
+ AS_IF([test $ignore_tkr_happy -eq 1],
49
51
[OMPI_FORTRAN_IGNORE_TKR_PREDECL= $predecl
50
52
OMPI_FORTRAN_IGNORE_TKR_TYPE= $type
51
53
$1 ],
@@ -58,7 +60,7 @@ AC_DEFUN([OMPI_FORTRAN_CHECK_IGNORE_TKR], [
58
60
# ###############
59
61
60
62
AC_DEFUN([_OMPI_FORTRAN_CHECK_IGNORE_TKR], [
61
- OPAL_VAR_SCOPE_PUSH([happy ompi_fortran_ignore_tkr_predecl ompi_fortran_ignore_tkr_type])
63
+ OPAL_VAR_SCOPE_PUSH([internal_ignore_tkr_happy ompi_fortran_ignore_tkr_predecl ompi_fortran_ignore_tkr_type])
62
64
63
65
# If we were called here, it means that the value was not cached,
64
66
# so we need to check several different things. Since CACHE_CHECK
@@ -74,43 +76,49 @@ AC_DEFUN([_OMPI_FORTRAN_CHECK_IGNORE_TKR], [
74
76
OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB(
75
77
[! ], [type(* )],
76
78
[TYPE(* ), DIMENSION(* )],
77
- [happy = 1], [happy = 0])
79
+ [internal_ignore_tkr_happy = 1], [internal_ignore_tkr_happy = 0])
78
80
79
81
# GCC compilers
80
- AS_IF([test $happy -eq 0],
82
+ AS_IF([test $internal_ignore_tkr_happy -eq 0],
81
83
[OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB(
82
84
[! GCC\$ ATTRIBUTES NO_ARG_CHECK ::], [type(* ), dimension(* )],
83
85
[! GCC\$ ATTRIBUTES NO_ARG_CHECK],
84
- [happy= 1], [happy= 0])])
86
+ [internal_ignore_tkr_happy= 1], [internal_ignore_tkr_happy= 0])])
87
+ # LLVM compilers
88
+ AS_IF([test $internal_ignore_tkr_happy -eq 0],
89
+ [OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB(
90
+ [! DIR\$ IGNORE_TKR], [type(* )],
91
+ [! DIR\$ IGNORE_TKR],
92
+ [internal_ignore_tkr_happy= 1], [internal_ignore_tkr_happy= 0])])
85
93
# Intel compilers
86
- AS_IF([test $happy -eq 0],
94
+ AS_IF([test $internal_ignore_tkr_happy -eq 0],
87
95
[OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB(
88
96
[! DEC\$ ATTRIBUTES NO_ARG_CHECK ::], [real, dimension(* )],
89
97
[! DEC\$ ATTRIBUTES NO_ARG_CHECK],
90
- [happy = 1], [happy = 0])])
98
+ [internal_ignore_tkr_happy = 1], [internal_ignore_tkr_happy = 0])])
91
99
# Solaris Studio compilers
92
100
# Note that due to a compiler bug, we have been advised by Oracle to
93
101
# use the "character(*)" type
94
- AS_IF([test $happy -eq 0],
102
+ AS_IF([test $internal_ignore_tkr_happy -eq 0],
95
103
[OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB(
96
104
[! \$ PRAGMA IGNORE_TKR], [character(* )],
97
105
[! \$ PRAGMA IGNORE_TKR],
98
- [happy = 1], [happy = 0])])
106
+ [internal_ignore_tkr_happy = 1], [internal_ignore_tkr_happy = 0])])
99
107
# Cray compilers
100
- AS_IF([test $happy -eq 0],
108
+ AS_IF([test $internal_ignore_tkr_happy -eq 0],
101
109
[OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB(
102
110
[! DIR\$ IGNORE_TKR], [real, dimension(* )],
103
111
[! DIR\$ IGNORE_TKR],
104
- [happy = 1], [happy = 0])])
112
+ [internal_ignore_tkr_happy = 1], [internal_ignore_tkr_happy = 0])])
105
113
# IBM compilers
106
- AS_IF([test $happy -eq 0],
114
+ AS_IF([test $internal_ignore_tkr_happy -eq 0],
107
115
[OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB(
108
116
[! IBM* IGNORE_TKR], [real, dimension(* )],
109
117
[! IBM* IGNORE_TKR],
110
- [happy = 1], [happy = 0])])
118
+ [internal_ignore_tkr_happy = 1], [internal_ignore_tkr_happy = 0])])
111
119
112
120
AS_VAR_SET(fortran_ignore_tkr_data,
113
- [${happy } :${ompi_fortran_ignore_tkr_type} :${ompi_fortran_ignore_tkr_predecl} ])
121
+ [${internal_ignore_tkr_happy } :${ompi_fortran_ignore_tkr_type} :${ompi_fortran_ignore_tkr_predecl} ])
114
122
115
123
# Now put the original CACHE_CHECK MSG_CHECKING back so that it can
116
124
# output the MSG_RESULT.
@@ -133,6 +141,7 @@ AC_DEFUN([OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB], [
133
141
AC_MSG_CHECKING([for Fortran compiler support of $3 ])
134
142
AC_COMPILE_IFELSE(AC_LANG_PROGRAM([],[[!
135
143
! Autoconf puts " program main" at the top
144
+ implicit none
136
145
137
146
interface
138
147
subroutine force_assumed_shape(a, count)
@@ -141,7 +150,7 @@ AC_DEFUN([OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB], [
141
150
end subroutine force_assumed_shape
142
151
end interface
143
152
144
- interface foo
153
+ interface
145
154
subroutine foo(buffer, count)
146
155
$1 buffer
147
156
$2 , intent(in) :: buffer
@@ -157,6 +166,7 @@ AC_DEFUN([OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB], [
157
166
complex, pointer, dimension(:,:) :: ptr
158
167
target :: buffer3
159
168
integer :: buffer4
169
+ integer :: a
160
170
ptr => buffer3
161
171
162
172
! Set some known values (somewhat irrelevant for this test, but just be
@@ -189,8 +199,23 @@ AC_DEFUN([OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB], [
189
199
call foo(a, count)
190
200
end subroutine force_assumed_shape
191
201
202
+ module check_ignore_tkr
203
+ interface foobar
204
+ subroutine foobar_x(buffer, count)
205
+ $1 buffer
206
+ $2 , intent(in) :: buffer
207
+ integer, intent(in) :: count
208
+ end subroutine foobar_x
209
+ end interface
210
+ end module
211
+
212
+ subroutine bar(var)
213
+ use check_ignore_tkr
214
+ implicit none
215
+ real, intent(inout) :: var(:, :, :)
216
+
217
+ call foobar(var(1,1,1), 1)
192
218
! Autoconf puts " end" after the last line
193
- subroutine bogus
194
219
]]),
195
220
[msg= yes
196
221
ompi_fortran_ignore_tkr_predecl= " $1 "
@@ -199,7 +224,8 @@ AC_DEFUN([OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB], [
199
224
[msg= no
200
225
$5 ])
201
226
AC_MSG_RESULT($msg )
227
+ # Make sure to clean up any generated *.mod files
228
+ rm -r f * .mod 2> /dev/null
202
229
AC_LANG_POP([Fortran])
203
230
OPAL_VAR_SCOPE_POP
204
231
])
205
-
0 commit comments