aboutsummaryrefslogtreecommitdiff
path: root/libgfortran/caf
diff options
context:
space:
mode:
authorAndre Vehreschild <vehre@gcc.gnu.org>2021-05-22 13:27:42 +0200
committerAndre Vehreschild <vehre@gcc.gnu.org>2021-05-22 13:27:42 +0200
commit26ca6dbda23bc6dfab96ce07afa70ebacedfaf9c (patch)
tree992eca69f9e2e4007a4c324df7aca1893a3f488a /libgfortran/caf
parent3050a1a18276d7cdd8946e34cc1344e30efb7030 (diff)
downloadgcc-26ca6dbda23bc6dfab96ce07afa70ebacedfaf9c.zip
gcc-26ca6dbda23bc6dfab96ce07afa70ebacedfaf9c.tar.gz
gcc-26ca6dbda23bc6dfab96ce07afa70ebacedfaf9c.tar.bz2
Steve Kargl <kargl@gcc.gnu.org>
PR fortran/98301 - random_init() is broken Correct implementation of random_init() when -fcoarray=lib is given. gcc/fortran/ChangeLog: PR fortran/98301 * trans-decl.c (gfc_build_builtin_function_decls): Move decl. * trans-intrinsic.c (conv_intrinsic_random_init): Use bool for lib-call of caf_random_init instead of logical (4-byte). * trans.h: Add tree var for random_init. libgfortran/ChangeLog: PR fortran/98301 * caf/libcaf.h (_gfortran_caf_random_init): New function. * caf/single.c (_gfortran_caf_random_init): New function. * gfortran.map: Added fndecl. * intrinsics/random_init.f90: Implement random_init.
Diffstat (limited to 'libgfortran/caf')
-rw-r--r--libgfortran/caf/libcaf.h2
-rw-r--r--libgfortran/caf/single.c10
2 files changed, 12 insertions, 0 deletions
diff --git a/libgfortran/caf/libcaf.h b/libgfortran/caf/libcaf.h
index 5abb753..c66d037 100644
--- a/libgfortran/caf/libcaf.h
+++ b/libgfortran/caf/libcaf.h
@@ -261,4 +261,6 @@ void _gfortran_caf_stopped_images (gfc_descriptor_t *,
int _gfortran_caf_is_present (caf_token_t, int, caf_reference_t *);
+void _gfortran_caf_random_init (bool, bool);
+
#endif /* LIBCAF_H */
diff --git a/libgfortran/caf/single.c b/libgfortran/caf/single.c
index a291c44..fc8e3b3 100644
--- a/libgfortran/caf/single.c
+++ b/libgfortran/caf/single.c
@@ -3135,3 +3135,13 @@ _gfortran_caf_is_present (caf_token_t token,
}
return memptr != NULL;
}
+
+/* Reference the libraries implementation. */
+extern void _gfortran_random_init (int32_t, int32_t, int32_t);
+
+void _gfortran_caf_random_init (bool repeatable, bool image_distinct)
+{
+ /* In a single image implementation always forward to the gfortran
+ routine. */
+ _gfortran_random_init (repeatable, image_distinct, 1);
+}