Skip to content

Commit cccdd6b

Browse files
authored
Merge pull request #266 from bonachea/import-constants
Add ISO_FORTRAN_ENV constant value control
2 parents 5412fe3 + 5fb6b0e commit cccdd6b

File tree

2 files changed

+74
-7
lines changed

2 files changed

+74
-7
lines changed

include/language-support.F90

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,31 @@
2121
#define HAVE_PROCEDURE_ACTUAL_FOR_POINTER_DUMMY 0
2222
#endif
2323
#endif
24+
25+
! ISO_FORTRAN_ENV constant value control:
26+
! The following knobs influence Caffeine's choice of value for the named constants
27+
! specified by PRIF for ISO_FORTRAN_ENV:
28+
! * CAF_IMPORT_{ATOMIC,STAT,TEAM}_CONSTANTS: Import PRIF constant values
29+
! of the given category from the compiler's ISO_FORTRAN_ENV
30+
! * CAF_IMPORT_CONSTANTS: Provides a default value for each category-specific knob above,
31+
! which take precedence
32+
! NOTE: In all cases imported constant values are silently assumed to satisfy
33+
! the requirements for the corresponding PRIF named constant.
34+
! Additionally, the ATOMIC KIND constants are assumed to denote a 64-bit interoperable type
35+
#ifndef CAF_IMPORT_CONSTANTS
36+
# if defined(__flang__)
37+
# define CAF_IMPORT_CONSTANTS 1
38+
# else
39+
# define CAF_IMPORT_CONSTANTS 0
40+
# endif
41+
#endif
42+
#ifndef CAF_IMPORT_ATOMIC_CONSTANTS
43+
#define CAF_IMPORT_ATOMIC_CONSTANTS CAF_IMPORT_CONSTANTS
44+
#endif
45+
#ifndef CAF_IMPORT_STAT_CONSTANTS
46+
#define CAF_IMPORT_STAT_CONSTANTS CAF_IMPORT_CONSTANTS
47+
#endif
48+
#ifndef CAF_IMPORT_TEAM_CONSTANTS
49+
#define CAF_IMPORT_TEAM_CONSTANTS CAF_IMPORT_CONSTANTS
50+
#endif
51+

src/prif.F90

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,19 @@ module prif
99
c_char, c_int, c_bool, c_intptr_t, c_ptr, &
1010
c_funptr, c_size_t, c_ptrdiff_t, c_null_ptr, c_int64_t
1111

12+
#if CAF_IMPORT_ATOMIC_CONSTANTS
13+
use iso_fortran_env, only: ATOMIC_INT_KIND, ATOMIC_LOGICAL_KIND
14+
#endif
15+
#if CAF_IMPORT_STAT_CONSTANTS
16+
use iso_fortran_env, only: &
17+
STAT_FAILED_IMAGE, STAT_STOPPED_IMAGE, &
18+
STAT_LOCKED, STAT_LOCKED_OTHER_IMAGE, &
19+
STAT_UNLOCKED, STAT_UNLOCKED_FAILED_IMAGE
20+
#endif
21+
#if CAF_IMPORT_TEAM_CONSTANTS
22+
use iso_fortran_env, only: CURRENT_TEAM, INITIAL_TEAM, PARENT_TEAM
23+
#endif
24+
1225
implicit none
1326

1427
private
@@ -50,24 +63,50 @@ module prif
5063
integer(c_int), parameter, public :: PRIF_VERSION_MAJOR = 0
5164
integer(c_int), parameter, public :: PRIF_VERSION_MINOR = 6
5265

53-
integer(c_int), parameter, public :: PRIF_ATOMIC_INT_KIND = c_int64_t
54-
55-
#if HAVE_SELECTED_LOGICAL_KIND
56-
integer(c_int), parameter, public :: PRIF_ATOMIC_LOGICAL_KIND = selected_logical_kind(64)
66+
#if CAF_IMPORT_ATOMIC_CONSTANTS
67+
integer(c_int), parameter, public :: PRIF_ATOMIC_INT_KIND = ATOMIC_INT_KIND
68+
integer(c_int), parameter, public :: PRIF_ATOMIC_LOGICAL_KIND = ATOMIC_LOGICAL_KIND
5769
#else
58-
integer(c_int), parameter, public :: PRIF_ATOMIC_LOGICAL_KIND = PRIF_ATOMIC_INT_KIND
70+
integer(c_int), parameter, public :: PRIF_ATOMIC_INT_KIND = c_int64_t
71+
72+
# if HAVE_SELECTED_LOGICAL_KIND
73+
integer(c_int), parameter, public :: PRIF_ATOMIC_LOGICAL_KIND = selected_logical_kind(64)
74+
# else
75+
integer(c_int), parameter, public :: PRIF_ATOMIC_LOGICAL_KIND = PRIF_ATOMIC_INT_KIND
76+
# endif
5977
#endif
6078

79+
#if CAF_IMPORT_TEAM_CONSTANTS
80+
integer(c_int), parameter, public :: &
81+
PRIF_CURRENT_TEAM = CURRENT_TEAM, &
82+
PRIF_INITIAL_TEAM = INITIAL_TEAM, &
83+
PRIF_PARENT_TEAM = PARENT_TEAM
84+
#else
6185
integer(c_int), parameter, public :: &
6286
PRIF_CURRENT_TEAM = 101, &
6387
PRIF_INITIAL_TEAM = 102, &
64-
PRIF_PARENT_TEAM = 103, &
88+
PRIF_PARENT_TEAM = 103
89+
#endif
90+
91+
#if CAF_IMPORT_STAT_CONSTANTS
92+
integer(c_int), parameter, public :: &
93+
PRIF_STAT_FAILED_IMAGE = STAT_FAILED_IMAGE, &
94+
PRIF_STAT_LOCKED = STAT_LOCKED, &
95+
PRIF_STAT_LOCKED_OTHER_IMAGE = STAT_LOCKED_OTHER_IMAGE, &
96+
PRIF_STAT_STOPPED_IMAGE = STAT_STOPPED_IMAGE, &
97+
PRIF_STAT_UNLOCKED = STAT_UNLOCKED, &
98+
PRIF_STAT_UNLOCKED_FAILED_IMAGE = STAT_UNLOCKED_FAILED_IMAGE
99+
#else
100+
integer(c_int), parameter, public :: &
65101
PRIF_STAT_FAILED_IMAGE =-201, &
66102
PRIF_STAT_LOCKED = 202, &
67103
PRIF_STAT_LOCKED_OTHER_IMAGE = 203, &
68104
PRIF_STAT_STOPPED_IMAGE = 204, &
69105
PRIF_STAT_UNLOCKED = 205, &
70-
PRIF_STAT_UNLOCKED_FAILED_IMAGE = 206, &
106+
PRIF_STAT_UNLOCKED_FAILED_IMAGE = 206
107+
#endif
108+
109+
integer(c_int), parameter, public :: &
71110
PRIF_STAT_OUT_OF_MEMORY = 301, &
72111
PRIF_STAT_ALREADY_INIT = 302
73112

0 commit comments

Comments
 (0)