Skip to content

Commit ab32a3c

Browse files
authored
[flang] Do not leak intrinsics used by ISO_C_BINDING and ISO_FORTRAN_ENV (llvm#79006)
This resolves bug llvm#78953. Intrinsics used by the MODULE definition are being declared PRIVATE, so that they do not leak into the namespace of the code that USEs the modules.
1 parent 8938bc0 commit ab32a3c

File tree

2 files changed

+62
-43
lines changed

2 files changed

+62
-43
lines changed

flang/module/iso_c_binding.f90

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,25 @@ module iso_c_binding
2222
c_sizeof => sizeof, &
2323
operator(==), operator(/=)
2424

25+
implicit none
26+
27+
! Set PRIVATE by default to explicitly only export what is meant
28+
! to be exported by this MODULE.
29+
private
30+
31+
public :: c_associated, c_funloc, c_funptr, c_f_pointer, c_loc, &
32+
c_null_funptr, c_null_ptr, c_ptr, c_sizeof, &
33+
operator(==), operator(/=)
34+
2535
! Table 18.2 (in clause 18.3.1)
2636
! TODO: Specialize (via macros?) for alternative targets
27-
integer, parameter :: &
37+
integer, parameter, public :: &
2838
c_int8_t = 1, &
2939
c_int16_t = 2, &
3040
c_int32_t = 4, &
3141
c_int64_t = 8, &
3242
c_int128_t = 16 ! anticipating future addition
33-
integer, parameter :: &
43+
integer, parameter, public :: &
3444
c_int = c_int32_t, &
3545
c_short = c_int16_t, &
3646
c_long = c_int64_t, &
@@ -40,7 +50,7 @@ module iso_c_binding
4050
c_intmax_t = c_int128_t, &
4151
c_intptr_t = c_size_t, &
4252
c_ptrdiff_t = c_size_t
43-
integer, parameter :: &
53+
integer, parameter, public :: &
4454
c_int_least8_t = c_int8_t, &
4555
c_int_fast8_t = c_int8_t, &
4656
c_int_least16_t = c_int16_t, &
@@ -52,7 +62,7 @@ module iso_c_binding
5262
c_int_least128_t = c_int128_t, &
5363
c_int_fast128_t = c_int128_t
5464

55-
integer, parameter :: &
65+
integer, parameter, public :: &
5666
c_float = 4, &
5767
c_double = 8, &
5868
#if __x86_64__
@@ -61,30 +71,31 @@ module iso_c_binding
6171
c_long_double = 16
6272
#endif
6373

64-
integer, parameter :: &
74+
integer, parameter, public :: &
6575
c_float_complex = c_float, &
6676
c_double_complex = c_double, &
6777
c_long_double_complex = c_long_double
6878

69-
integer, parameter :: c_bool = 1
70-
integer, parameter :: c_char = 1
79+
integer, parameter, public :: c_bool = 1
80+
integer, parameter, public :: c_char = 1
7181

7282
! C characters with special semantics
73-
character(kind=c_char, len=1), parameter :: c_null_char = achar(0)
74-
character(kind=c_char, len=1), parameter :: c_alert = achar(7)
75-
character(kind=c_char, len=1), parameter :: c_backspace = achar(8)
76-
character(kind=c_char, len=1), parameter :: c_form_feed = achar(12)
77-
character(kind=c_char, len=1), parameter :: c_new_line = achar(10)
78-
character(kind=c_char, len=1), parameter :: c_carriage_return = achar(13)
79-
character(kind=c_char, len=1), parameter :: c_horizontal_tab = achar(9)
80-
character(kind=c_char, len=1), parameter :: c_vertical_tab = achar(11)
83+
character(kind=c_char, len=1), parameter, public :: c_null_char = achar(0)
84+
character(kind=c_char, len=1), parameter, public :: c_alert = achar(7)
85+
character(kind=c_char, len=1), parameter, public :: c_backspace = achar(8)
86+
character(kind=c_char, len=1), parameter, public :: c_form_feed = achar(12)
87+
character(kind=c_char, len=1), parameter, public :: c_new_line = achar(10)
88+
character(kind=c_char, len=1), parameter, public :: c_carriage_return = achar(13)
89+
character(kind=c_char, len=1), parameter, public :: c_horizontal_tab = achar(9)
90+
character(kind=c_char, len=1), parameter, public :: c_vertical_tab = achar(11)
8191

8292
interface c_f_procpointer
8393
module procedure c_f_procpointer
8494
end interface
95+
public :: c_f_procpointer
8596

8697
! gfortran extensions
87-
integer, parameter :: &
98+
integer, parameter, public :: &
8899
c_float128 = 16, &
89100
c_float128_complex = c_float128
90101

flang/module/iso_fortran_env.f90

Lines changed: 35 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,29 @@ module iso_fortran_env
2424
compiler_version => __builtin_compiler_version
2525

2626
implicit none
27-
private count
27+
28+
! Set PRIVATE by default to explicitly only export what is meant
29+
! to be exported by this MODULE.
30+
private
31+
32+
public :: event_type, notify_type, lock_type, team_type, &
33+
atomic_int_kind, atomic_logical_kind, compiler_options, &
34+
compiler_version
35+
2836

2937
! TODO: Use PACK([x],test) in place of the array constructor idiom
3038
! [(x, integer::j=1,COUNT([test]))] below once PACK() can be folded.
3139

32-
integer, parameter, private :: &
40+
integer, parameter :: &
3341
selectedASCII = selected_char_kind('ASCII'), &
3442
selectedUCS_2 = selected_char_kind('UCS-2'), &
3543
selectedUnicode = selected_char_kind('ISO_10646')
36-
integer, parameter :: character_kinds(*) = [ &
44+
integer, parameter, public :: character_kinds(*) = [ &
3745
[(selectedASCII, integer :: j=1, count([selectedASCII >= 0]))], &
3846
[(selectedUCS_2, integer :: j=1, count([selectedUCS_2 >= 0]))], &
3947
[(selectedUnicode, integer :: j=1, count([selectedUnicode >= 0]))]]
4048

41-
integer, parameter, private :: &
49+
integer, parameter :: &
4250
selectedInt8 = selected_int_kind(2), &
4351
selectedInt16 = selected_int_kind(4), &
4452
selectedInt32 = selected_int_kind(9), &
@@ -54,7 +62,7 @@ module iso_fortran_env
5462
selectedInt64 >= 0), &
5563
safeInt128 = merge(selectedInt128, selected_int_kind(0), &
5664
selectedInt128 >= 0)
57-
integer, parameter :: &
65+
integer, parameter, public :: &
5866
int8 = merge(selectedInt8, merge(-2, -1, selectedInt8 >= 0), &
5967
digits(int(0,kind=safeInt8)) == 7), &
6068
int16 = merge(selectedInt16, merge(-2, -1, selectedInt16 >= 0), &
@@ -66,23 +74,23 @@ module iso_fortran_env
6674
int128 = merge(selectedInt128, merge(-2, -1, selectedInt128 >= 0), &
6775
digits(int(0,kind=safeInt128)) == 127)
6876

69-
integer, parameter :: integer_kinds(*) = [ &
77+
integer, parameter, public :: integer_kinds(*) = [ &
7078
selected_int_kind(0), &
7179
((selected_int_kind(k), &
7280
integer :: j=1, count([selected_int_kind(k) >= 0 .and. &
7381
selected_int_kind(k) /= &
7482
selected_int_kind(k-1)])), &
7583
integer :: k=1, 39)]
7684

77-
integer, parameter :: &
85+
integer, parameter, public :: &
7886
logical8 = int8, logical16 = int16, logical32 = int32, logical64 = int64
79-
integer, parameter :: logical_kinds(*) = [ &
87+
integer, parameter, public :: logical_kinds(*) = [ &
8088
[(logical8, integer :: j=1, count([logical8 >= 0]))], &
8189
[(logical16, integer :: j=1, count([logical16 >= 0]))], &
8290
[(logical32, integer :: j=1, count([logical32 >= 0]))], &
8391
[(logical64, integer :: j=1, count([logical64 >= 0]))]]
8492

85-
integer, parameter, private :: &
93+
integer, parameter :: &
8694
selectedReal16 = selected_real_kind(3, 4), & ! IEEE half
8795
selectedBfloat16 = selected_real_kind(2, 37), & ! truncated IEEE single
8896
selectedReal32 = selected_real_kind(6, 37), & ! IEEE single
@@ -104,7 +112,7 @@ module iso_fortran_env
104112
selectedReal64x2 >= 0), &
105113
safeReal128 = merge(selectedReal128, selected_real_kind(0,0), &
106114
selectedReal128 >= 0)
107-
integer, parameter :: &
115+
integer, parameter, public :: &
108116
real16 = merge(selectedReal16, merge(-2, -1, selectedReal16 >= 0), &
109117
digits(real(0,kind=safeReal16)) == 11), &
110118
bfloat16 = merge(selectedBfloat16, merge(-2, -1, selectedBfloat16 >= 0), &
@@ -120,7 +128,7 @@ module iso_fortran_env
120128
real128 = merge(selectedReal128, merge(-2, -1, selectedReal128 >= 0), &
121129
digits(real(0,kind=safeReal128)) == 113)
122130

123-
integer, parameter :: real_kinds(*) = [ &
131+
integer, parameter, public :: real_kinds(*) = [ &
124132
[(real16, integer :: j=1, count([real16 >= 0]))], &
125133
[(bfloat16, integer :: j=1, count([bfloat16 >= 0]))], &
126134
[(real32, integer :: j=1, count([real32 >= 0]))], &
@@ -129,27 +137,27 @@ module iso_fortran_env
129137
[(real64x2, integer :: j=1, count([real64x2 >= 0]))], &
130138
[(real128, integer :: j=1, count([real128 >= 0]))]]
131139

132-
integer, parameter :: current_team = -1, initial_team = -2, parent_team = -3
140+
integer, parameter, public :: current_team = -1, initial_team = -2, parent_team = -3
133141

134-
integer, parameter :: output_unit = FORTRAN_DEFAULT_OUTPUT_UNIT
135-
integer, parameter :: input_unit = FORTRAN_DEFAULT_INPUT_UNIT
136-
integer, parameter :: error_unit = FORTRAN_ERROR_UNIT
137-
integer, parameter :: iostat_end = FORTRAN_RUNTIME_IOSTAT_END
138-
integer, parameter :: iostat_eor = FORTRAN_RUNTIME_IOSTAT_EOR
139-
integer, parameter :: iostat_inquire_internal_unit = &
142+
integer, parameter, public :: output_unit = FORTRAN_DEFAULT_OUTPUT_UNIT
143+
integer, parameter, public :: input_unit = FORTRAN_DEFAULT_INPUT_UNIT
144+
integer, parameter, public :: error_unit = FORTRAN_ERROR_UNIT
145+
integer, parameter, public :: iostat_end = FORTRAN_RUNTIME_IOSTAT_END
146+
integer, parameter, public :: iostat_eor = FORTRAN_RUNTIME_IOSTAT_EOR
147+
integer, parameter, public :: iostat_inquire_internal_unit = &
140148
FORTRAN_RUNTIME_IOSTAT_INQUIRE_INTERNAL_UNIT
141149

142-
integer, parameter :: character_storage_size = 8
143-
integer, parameter :: file_storage_size = 8
144-
integer, parameter :: numeric_storage_size = 32
150+
integer, parameter, public :: character_storage_size = 8
151+
integer, parameter, public :: file_storage_size = 8
152+
integer, parameter, public :: numeric_storage_size = 32
145153

146-
integer, parameter :: stat_failed_image = FORTRAN_RUNTIME_STAT_FAILED_IMAGE
147-
integer, parameter :: stat_locked = FORTRAN_RUNTIME_STAT_LOCKED
148-
integer, parameter :: &
154+
integer, parameter, public :: stat_failed_image = FORTRAN_RUNTIME_STAT_FAILED_IMAGE
155+
integer, parameter, public :: stat_locked = FORTRAN_RUNTIME_STAT_LOCKED
156+
integer, parameter, public :: &
149157
stat_locked_other_image = FORTRAN_RUNTIME_STAT_LOCKED_OTHER_IMAGE
150-
integer, parameter :: stat_stopped_image = FORTRAN_RUNTIME_STAT_STOPPED_IMAGE
151-
integer, parameter :: stat_unlocked = FORTRAN_RUNTIME_STAT_UNLOCKED
152-
integer, parameter :: &
158+
integer, parameter, public :: stat_stopped_image = FORTRAN_RUNTIME_STAT_STOPPED_IMAGE
159+
integer, parameter, public :: stat_unlocked = FORTRAN_RUNTIME_STAT_UNLOCKED
160+
integer, parameter, public :: &
153161
stat_unlocked_failed_image = FORTRAN_RUNTIME_STAT_UNLOCKED_FAILED_IMAGE
154162

155163
end module iso_fortran_env

0 commit comments

Comments
 (0)