Skip to content

Commit d88bfd0

Browse files
author
Damian Rouson
authored
Merge pull request #508 from jabl/charlen-size_t
Use size_t for character lengths with GFortran >= 8.x
2 parents b3d02c3 + c06239c commit d88bfd0

File tree

3 files changed

+62
-58
lines changed

3 files changed

+62
-58
lines changed

src/libcaf-gfortran-descriptor.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
3030

3131
#include "libcaf-version-def.h"
3232

33-
#include <stdint.h> /* For int32_t. */
34-
3533
/* GNU Fortran's array descriptor. Keep in sync with libgfortran.h. To be
3634
replaced by TS29113's ISO_Fortran_binding.h with CFI_cdesc_t. */
3735

src/libcaf.h

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
2828
#ifndef LIBCAF_H
2929
#define LIBCAF_H
3030

31-
#include <stdint.h> /* For int32_t. */
3231
#include <stddef.h> /* For size_t. */
3332
#include <stdbool.h>
3433

@@ -213,11 +212,17 @@ typedef struct caf_reference_t {
213212
#define GFC_CAF_ARG_VALUE (1<<2)
214213
#define GFC_CAF_ARG_DESC (1<<3)
215214

215+
/* The type to use for string lengths. */
216+
#ifdef GCC_GE_8
217+
typedef size_t charlen_t;
218+
#else
219+
typedef int charlen_t;
220+
#endif
221+
216222
/* Common auxiliary functions: caf_auxiliary.c. */
217223

218224
bool PREFIX (is_contiguous) (gfc_descriptor_t *);
219225

220-
221226
/* Header for the specific implementation. */
222227

223228
void PREFIX (init) (int *, char ***);
@@ -228,8 +233,8 @@ int PREFIX (num_images) (int, int);
228233

229234
#ifdef GCC_GE_7
230235
void PREFIX (register) (size_t, caf_register_t, caf_token_t *,
231-
gfc_descriptor_t *, int *, char *, int);
232-
void PREFIX (deregister) (caf_token_t *, int, int *, char *, int);
236+
gfc_descriptor_t *, int *, char *, charlen_t);
237+
void PREFIX (deregister) (caf_token_t *, int, int *, char *, charlen_t);
233238
#else
234239
void * PREFIX (register) (size_t, caf_register_t, caf_token_t *,
235240
int *, char *, int);
@@ -263,22 +268,22 @@ void PREFIX(sendget_by_ref) (caf_token_t dst_token, int dst_image_index,
263268
int PREFIX(is_present) (caf_token_t, int, caf_reference_t *refs);
264269
#endif
265270

266-
void PREFIX (co_broadcast) (gfc_descriptor_t *, int, int *, char *, int);
267-
void PREFIX (co_max) (gfc_descriptor_t *, int, int *, char *, int, int);
268-
void PREFIX (co_min) (gfc_descriptor_t *, int, int *, char *, int, int);
271+
void PREFIX (co_broadcast) (gfc_descriptor_t *, int, int *, char *, charlen_t);
272+
void PREFIX (co_max) (gfc_descriptor_t *, int, int *, char *, int, charlen_t);
273+
void PREFIX (co_min) (gfc_descriptor_t *, int, int *, char *, int, charlen_t);
269274
void PREFIX (co_reduce) (gfc_descriptor_t *, void *(*opr) (void *, void *),
270-
int, int, int *, char *, int , int);
271-
void PREFIX (co_sum) (gfc_descriptor_t *, int, int *, char *, int);
275+
int, int, int *, char *, int , charlen_t);
276+
void PREFIX (co_sum) (gfc_descriptor_t *, int, int *, char *, charlen_t);
272277

273-
void PREFIX (sync_all) (int *, char *, int);
274-
void PREFIX (sync_images) (int, int[], int *, char *, int);
275-
void PREFIX (sync_memory) (int *, char *, int);
278+
void PREFIX (sync_all) (int *, char *, charlen_t);
279+
void PREFIX (sync_images) (int, int[], int *, char *, charlen_t);
280+
void PREFIX (sync_memory) (int *, char *, charlen_t);
276281

277-
void PREFIX (stop_str) (const char *, int32_t) __attribute__ ((noreturn));
278-
void PREFIX (stop) (int32_t) __attribute__ ((noreturn));
279-
void PREFIX (error_stop_str) (const char *, int32_t)
282+
void PREFIX (stop_str) (const char *, charlen_t) __attribute__ ((noreturn));
283+
void PREFIX (stop) (int) __attribute__ ((noreturn));
284+
void PREFIX (error_stop_str) (const char *, charlen_t)
280285
__attribute__ ((noreturn));
281-
void PREFIX (error_stop) (int32_t) __attribute__ ((noreturn));
286+
void PREFIX (error_stop) (int) __attribute__ ((noreturn));
282287
void PREFIX (fail_image) (void) __attribute__ ((noreturn));
283288

284289
void PREFIX (form_team) (int, caf_team_t *, int);
@@ -298,10 +303,10 @@ void PREFIX (atomic_cas) (caf_token_t, size_t, int, void *, void *,
298303
void PREFIX (atomic_op) (int, caf_token_t, size_t, int, void *, void *,
299304
int *, int, int);
300305

301-
void PREFIX (lock) (caf_token_t, size_t, int, int *, int *, char *, int);
302-
void PREFIX (unlock) (caf_token_t, size_t, int, int *, char *, int);
303-
void PREFIX (event_post) (caf_token_t, size_t, int, int *, char *, int);
304-
void PREFIX (event_wait) (caf_token_t, size_t, int, int *, char *, int);
306+
void PREFIX (lock) (caf_token_t, size_t, int, int *, int *, char *, charlen_t);
307+
void PREFIX (unlock) (caf_token_t, size_t, int, int *, char *, charlen_t);
308+
void PREFIX (event_post) (caf_token_t, size_t, int, int *, char *, charlen_t);
309+
void PREFIX (event_wait) (caf_token_t, size_t, int, int *, char *, charlen_t);
305310
void PREFIX (event_query) (caf_token_t, size_t, int, int *, int *);
306311

307312
/* Language extension */

src/mpi/mpi_caf.c

Lines changed: 37 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
4242
#include <alloca.h> /* Assume functionality provided elsewhere if missing */
4343
#endif
4444
#include <unistd.h>
45+
#include <stdint.h> /* For int32_t. */
4546
#include <mpi.h>
4647
#include <pthread.h>
4748
#include <signal.h> /* For raise */
@@ -146,7 +147,7 @@ typedef MPI_Win *mpi_caf_token_t;
146147
static void terminate_internal (int stat_code, int exit_code)
147148
__attribute__ ((noreturn));
148149
static void sync_images_internal (int count, int images[], int *stat,
149-
char *errmsg, int errmsg_len, bool internal);
150+
char *errmsg, size_t errmsg_len, bool internal);
150151

151152
/* Global variables. */
152153
static int caf_this_image;
@@ -602,7 +603,7 @@ failed_stopped_errorhandler_function (MPI_Comm* pcomm, int* perr, ...)
602603
#endif
603604

604605
void mutex_lock(MPI_Win win, int image_index, int index, int *stat,
605-
int *acquired_lock, char *errmsg, int errmsg_len)
606+
int *acquired_lock, char *errmsg, size_t errmsg_len)
606607
{
607608
const char msg[] = "Already locked";
608609
#if MPI_VERSION >= 3
@@ -683,7 +684,7 @@ void mutex_lock(MPI_Win win, int image_index, int index, int *stat,
683684
}
684685

685686
void mutex_unlock(MPI_Win win, int image_index, int index, int *stat,
686-
char* errmsg, int errmsg_len)
687+
char* errmsg, size_t errmsg_len)
687688
{
688689
const char msg[] = "Variable is not locked";
689690
if(stat != NULL)
@@ -1051,7 +1052,7 @@ PREFIX (num_images) (int distance __attribute__ ((unused)),
10511052
void
10521053
PREFIX (register) (size_t size, caf_register_t type, caf_token_t *token,
10531054
gfc_descriptor_t *desc, int *stat, char *errmsg,
1054-
int errmsg_len)
1055+
charlen_t errmsg_len)
10551056
{
10561057
/* int ierr; */
10571058
void *mem = NULL;
@@ -1202,10 +1203,10 @@ PREFIX (register) (size_t size, caf_register_t type, caf_token_t *token,
12021203
*stat = caf_is_finalized ? STAT_STOPPED_IMAGE : 1;
12031204
if (errmsg_len > 0)
12041205
{
1205-
int len = ((int) strlen (msg) > errmsg_len) ? errmsg_len
1206-
: (int) strlen (msg);
1206+
size_t len = (strlen (msg) > (size_t) errmsg_len) ? (size_t) errmsg_len
1207+
: strlen (msg);
12071208
memcpy (errmsg, msg, len);
1208-
if (errmsg_len > len)
1209+
if ((size_t) errmsg_len > len)
12091210
memset (&errmsg[len], ' ', errmsg_len-len);
12101211
}
12111212
}
@@ -1216,7 +1217,7 @@ PREFIX (register) (size_t size, caf_register_t type, caf_token_t *token,
12161217
#else // GCC_GE_7
12171218
void *
12181219
PREFIX (register) (size_t size, caf_register_t type, caf_token_t *token,
1219-
int *stat, char *errmsg, int errmsg_len)
1220+
int *stat, char *errmsg, charlen_t errmsg_len)
12201221
{
12211222
/* int ierr; */
12221223
void *mem;
@@ -1291,8 +1292,8 @@ PREFIX (register) (size_t size, caf_register_t type, caf_token_t *token,
12911292
*stat = caf_is_finalized ? STAT_STOPPED_IMAGE : 1;
12921293
if (errmsg_len > 0)
12931294
{
1294-
int len = ((int) strlen (msg) > errmsg_len) ? errmsg_len
1295-
: (int) strlen (msg);
1295+
size_t len = (strlen (msg) > (size_t) errmsg_len) ? (size_t) errmsg_len
1296+
: strlen (msg);
12961297
memcpy (errmsg, msg, len);
12971298
if (errmsg_len > len)
12981299
memset (&errmsg[len], ' ', errmsg_len-len);
@@ -1309,10 +1310,10 @@ PREFIX (register) (size_t size, caf_register_t type, caf_token_t *token,
13091310
#ifdef GCC_GE_7
13101311
void
13111312
PREFIX (deregister) (caf_token_t *token, int type, int *stat, char *errmsg,
1312-
int errmsg_len)
1313+
charlen_t errmsg_len)
13131314
#else
13141315
void
1315-
PREFIX (deregister) (caf_token_t *token, int *stat, char *errmsg, int errmsg_len)
1316+
PREFIX (deregister) (caf_token_t *token, int *stat, char *errmsg, charlen_t errmsg_len)
13161317
#endif
13171318
{
13181319
dprint ("%d/%d: deregister(%p)\n", caf_this_image, caf_num_images, *token);
@@ -1327,8 +1328,8 @@ PREFIX (deregister) (caf_token_t *token, int *stat, char *errmsg, int errmsg_len
13271328

13281329
if (errmsg_len > 0)
13291330
{
1330-
int len = ((int) sizeof (msg) - 1 > errmsg_len)
1331-
? errmsg_len : (int) sizeof (msg) - 1;
1331+
size_t len = (sizeof (msg) - 1 > (size_t) errmsg_len)
1332+
? (size_t) errmsg_len : sizeof (msg) - 1;
13321333
memcpy (errmsg, msg, len);
13331334
if (errmsg_len > len)
13341335
memset (&errmsg[len], ' ', errmsg_len-len);
@@ -1451,7 +1452,7 @@ PREFIX (deregister) (caf_token_t *token, int *stat, char *errmsg, int errmsg_len
14511452
void
14521453
PREFIX (sync_memory) (int *stat __attribute__ ((unused)),
14531454
char *errmsg __attribute__ ((unused)),
1454-
int errmsg_len __attribute__ ((unused)))
1455+
charlen_t errmsg_len __attribute__ ((unused)))
14551456
{
14561457
#if defined(NONBLOCKING_PUT) && !defined(CAF_MPI_LOCK_UNLOCK)
14571458
explicit_flush ();
@@ -1460,7 +1461,7 @@ PREFIX (sync_memory) (int *stat __attribute__ ((unused)),
14601461

14611462

14621463
void
1463-
PREFIX (sync_all) (int *stat, char *errmsg, int errmsg_len)
1464+
PREFIX (sync_all) (int *stat, char *errmsg, charlen_t errmsg_len)
14641465
{
14651466
int ierr = 0;
14661467

@@ -1505,8 +1506,8 @@ PREFIX (sync_all) (int *stat, char *errmsg, int errmsg_len)
15051506

15061507
if (errmsg_len > 0)
15071508
{
1508-
int len = ((int) strlen (msg) > errmsg_len) ? errmsg_len
1509-
: (int) strlen (msg);
1509+
size_t len = (strlen (msg) > (size_t) errmsg_len) ? (size_t) errmsg_len
1510+
: strlen (msg);
15101511
memcpy (errmsg, msg, len);
15111512
if (errmsg_len > len)
15121513
memset (&errmsg[len], ' ', errmsg_len-len);
@@ -6414,14 +6415,14 @@ PREFIX(is_present) (caf_token_t token, int image_index, caf_reference_t *refs)
64146415

64156416
void
64166417
PREFIX (sync_images) (int count, int images[], int *stat, char *errmsg,
6417-
int errmsg_len)
6418+
charlen_t errmsg_len)
64186419
{
64196420
sync_images_internal (count, images, stat, errmsg, errmsg_len, false);
64206421
}
64216422

64226423
static void
64236424
sync_images_internal (int count, int images[], int *stat, char *errmsg,
6424-
int errmsg_len, bool internal)
6425+
size_t errmsg_len, bool internal)
64256426
{
64266427
int ierr = 0, i = 0, j = 0, int_zero = 0, done_count = 0;
64276428
MPI_Status s;
@@ -6574,8 +6575,8 @@ sync_images_internal (int count, int images[], int *stat, char *errmsg,
65746575

65756576
if (errmsg_len > 0)
65766577
{
6577-
int len = ((int) strlen (msg) > errmsg_len) ? errmsg_len
6578-
: (int) strlen (msg);
6578+
size_t len = (strlen (msg) > errmsg_len) ? errmsg_len
6579+
: strlen (msg);
65796580
memcpy (errmsg, msg, len);
65806581
if (errmsg_len > len)
65816582
memset (&errmsg[len], ' ', errmsg_len-len);
@@ -6770,7 +6771,7 @@ get_MPI_datatype (gfc_descriptor_t *desc, int char_len)
67706771

67716772
static void
67726773
internal_co_reduce (MPI_Op op, gfc_descriptor_t *source, int result_image, int *stat,
6773-
char *errmsg, int src_len, int errmsg_len)
6774+
char *errmsg, int src_len, size_t errmsg_len)
67746775
{
67756776
size_t i, size;
67766777
int j, ierr;
@@ -6863,7 +6864,7 @@ internal_co_reduce (MPI_Op op, gfc_descriptor_t *source, int result_image, int *
68636864

68646865
void
68656866
PREFIX (co_broadcast) (gfc_descriptor_t *a, int source_image, int *stat, char *errmsg,
6866-
int errmsg_len)
6867+
charlen_t errmsg_len)
68676868
{
68686869
size_t i, size;
68696870
int j, ierr;
@@ -6963,7 +6964,7 @@ PREFIX (co_broadcast) (gfc_descriptor_t *a, int source_image, int *stat, char *e
69636964
* for use in MPI_*Reduce functions. */
69646965
void
69656966
PREFIX (co_reduce) (gfc_descriptor_t *a, void *(*opr) (void *, void *), int opr_flags,
6966-
int result_image, int *stat, char *errmsg, int a_len, int errmsg_len)
6967+
int result_image, int *stat, char *errmsg, int a_len, charlen_t errmsg_len)
69676968
{
69686969
MPI_Op op;
69696970
/* Integers and logicals can be treated the same. */
@@ -7033,23 +7034,23 @@ PREFIX (co_reduce) (gfc_descriptor_t *a, void *(*opr) (void *, void *), int opr_
70337034

70347035
void
70357036
PREFIX (co_sum) (gfc_descriptor_t *a, int result_image, int *stat, char *errmsg,
7036-
int errmsg_len)
7037+
charlen_t errmsg_len)
70377038
{
70387039
internal_co_reduce (MPI_SUM, a, result_image, stat, errmsg, 0, errmsg_len);
70397040
}
70407041

70417042

70427043
void
70437044
PREFIX (co_min) (gfc_descriptor_t *a, int result_image, int *stat, char *errmsg,
7044-
int src_len, int errmsg_len)
7045+
int src_len, charlen_t errmsg_len)
70457046
{
70467047
internal_co_reduce (MPI_MIN, a, result_image, stat, errmsg, src_len, errmsg_len);
70477048
}
70487049

70497050

70507051
void
70517052
PREFIX (co_max) (gfc_descriptor_t *a, int result_image, int *stat,
7052-
char *errmsg, int src_len, int errmsg_len)
7053+
char *errmsg, int src_len, charlen_t errmsg_len)
70537054
{
70547055
internal_co_reduce (MPI_MAX, a, result_image, stat, errmsg, src_len, errmsg_len);
70557056
}
@@ -7060,7 +7061,7 @@ PREFIX (co_max) (gfc_descriptor_t *a, int result_image, int *stat,
70607061
void
70617062
PREFIX (lock) (caf_token_t token, size_t index, int image_index,
70627063
int *acquired_lock, int *stat, char *errmsg,
7063-
int errmsg_len)
7064+
charlen_t errmsg_len)
70647065
{
70657066
int dest_img;
70667067
MPI_Win *p = TOKEN(token);
@@ -7076,7 +7077,7 @@ PREFIX (lock) (caf_token_t token, size_t index, int image_index,
70767077

70777078
void
70787079
PREFIX (unlock) (caf_token_t token, size_t index, int image_index,
7079-
int *stat, char *errmsg, int errmsg_len)
7080+
int *stat, char *errmsg, charlen_t errmsg_len)
70807081
{
70817082
int dest_img;
70827083
MPI_Win *p = TOKEN(token);
@@ -7260,7 +7261,7 @@ PREFIX (atomic_op) (int op, caf_token_t token ,
72607261
void
72617262
PREFIX (event_post) (caf_token_t token, size_t index,
72627263
int image_index, int *stat,
7263-
char *errmsg, int errmsg_len)
7264+
char *errmsg, charlen_t errmsg_len)
72647265
{
72657266
int image, value = 1, ierr = 0,flag;
72667267
MPI_Win *p = TOKEN(token);
@@ -7303,7 +7304,7 @@ PREFIX (event_post) (caf_token_t token, size_t index,
73037304
void
73047305
PREFIX (event_wait) (caf_token_t token, size_t index,
73057306
int until_count, int *stat,
7306-
char *errmsg, int errmsg_len)
7307+
char *errmsg, charlen_t errmsg_len)
73077308
{
73087309
int ierr = 0, count = 0, i, image = caf_this_image - 1;
73097310
int *var = NULL, flag, old = 0;
@@ -7407,7 +7408,7 @@ terminate_internal (int stat_code, int exit_code)
74077408
/* STOP function for integer arguments. */
74087409

74097410
void
7410-
PREFIX (stop_numeric) (int32_t stop_code)
7411+
PREFIX (stop_numeric) (int stop_code)
74117412
{
74127413
fprintf (stderr, "STOP %d\n", stop_code);
74137414

@@ -7420,7 +7421,7 @@ PREFIX (stop_numeric) (int32_t stop_code)
74207421
/* STOP function for string arguments. */
74217422

74227423
void
7423-
PREFIX (stop_str) (const char *string, int32_t len)
7424+
PREFIX (stop_str) (const char *string, charlen_t len)
74247425
{
74257426
fputs ("STOP ", stderr);
74267427
while (len--)
@@ -7435,7 +7436,7 @@ PREFIX (stop_str) (const char *string, int32_t len)
74357436
/* ERROR STOP function for string arguments. */
74367437

74377438
void
7438-
PREFIX (error_stop_str) (const char *string, int32_t len)
7439+
PREFIX (error_stop_str) (const char *string, charlen_t len)
74397440
{
74407441
fputs ("ERROR STOP ", stderr);
74417442
while (len--)
@@ -7449,7 +7450,7 @@ PREFIX (error_stop_str) (const char *string, int32_t len)
74497450
/* ERROR STOP function for numerical arguments. */
74507451

74517452
void
7452-
PREFIX (error_stop) (int32_t error)
7453+
PREFIX (error_stop) (int error)
74537454
{
74547455
fprintf (stderr, "ERROR STOP %d\n", error);
74557456

0 commit comments

Comments
 (0)