Skip to content

Commit 3af39fa

Browse files
authored
Merge pull request #510 from jabl/stop-quiet
Support F2018 QUIET specifier for STOP and ERROR STOP statements
2 parents 8777474 + 0e2f624 commit 3af39fa

File tree

2 files changed

+58
-24
lines changed

2 files changed

+58
-24
lines changed

src/libcaf.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -215,8 +215,10 @@ typedef struct caf_reference_t {
215215
/* The type to use for string lengths. */
216216
#ifdef GCC_GE_8
217217
typedef size_t charlen_t;
218+
#define QUIETARG , bool
218219
#else
219220
typedef int charlen_t;
221+
#define QUIETARG
220222
#endif
221223

222224
/* Common auxiliary functions: caf_auxiliary.c. */
@@ -279,11 +281,12 @@ void PREFIX (sync_all) (int *, char *, charlen_t);
279281
void PREFIX (sync_images) (int, int[], int *, char *, charlen_t);
280282
void PREFIX (sync_memory) (int *, char *, charlen_t);
281283

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)
284+
void PREFIX (stop_str) (const char *, charlen_t QUIETARG) __attribute__ ((noreturn));
285+
void PREFIX (stop) (int QUIETARG) __attribute__ ((noreturn));
286+
void PREFIX (error_stop_str) (const char *, charlen_t QUIETARG)
285287
__attribute__ ((noreturn));
286-
void PREFIX (error_stop) (int) __attribute__ ((noreturn));
288+
void PREFIX (error_stop) (int QUIETARG) __attribute__ ((noreturn));
289+
287290
void PREFIX (fail_image) (void) __attribute__ ((noreturn));
288291

289292
void PREFIX (form_team) (int, caf_team_t *, int);

src/mpi/mpi_caf.c

Lines changed: 51 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ static void terminate_internal (int stat_code, int exit_code)
148148
__attribute__ ((noreturn));
149149
static void sync_images_internal (int count, int images[], int *stat,
150150
char *errmsg, size_t errmsg_len, bool internal);
151+
static void error_stop_str (const char *string, size_t len, bool quiet) __attribute__((noreturn));
151152

152153
/* Global variables. */
153154
static int caf_this_image;
@@ -2699,7 +2700,7 @@ PREFIX (sendget) (caf_token_t token_s, size_t offset_s, int image_index_s,
26992700
char error_str[error_len];
27002701
strcpy (error_str, "MPI-error: ");
27012702
MPI_Error_string (mpi_error, &error_str[11], &error_len);
2702-
PREFIX (error_stop_str) (error_str, error_len + 11);
2703+
error_stop_str (error_str, error_len + 11, false);
27032704
}
27042705
}
27052706
}
@@ -3269,7 +3270,7 @@ PREFIX (send) (caf_token_t token, size_t offset, int image_index,
32693270
char error_str[error_len];
32703271
strcpy (error_str, "MPI-error: ");
32713272
MPI_Error_string (mpi_error, &error_str[11], &error_len);
3272-
PREFIX (error_stop_str) (error_str, error_len + 11);
3273+
error_stop_str (error_str, error_len + 11, false);
32733274
}
32743275
}
32753276
}
@@ -3779,7 +3780,7 @@ PREFIX (get) (caf_token_t token, size_t offset, int image_index,
37793780
char error_str[error_len + 11];
37803781
strcpy (error_str, "MPI-error: ");
37813782
MPI_Error_string (mpi_error, &error_str[11], &error_len);
3782-
PREFIX (error_stop_str) (error_str, error_len + 11);
3783+
error_stop_str (error_str, error_len + 11, false);
37833784
}
37843785
}
37853786
}
@@ -7411,12 +7412,21 @@ terminate_internal (int stat_code, int exit_code)
74117412
}
74127413

74137414

7415+
#ifdef GCC_GE_8
7416+
#undef QUIETARG
7417+
#define QUIETARG , bool quiet
7418+
#endif
7419+
74147420
/* STOP function for integer arguments. */
74157421

74167422
void
7417-
PREFIX (stop_numeric) (int stop_code)
7423+
PREFIX (stop_numeric) (int stop_code QUIETARG)
74187424
{
7419-
fprintf (stderr, "STOP %d\n", stop_code);
7425+
#ifndef GCC_GE_8
7426+
bool quiet = false;
7427+
#endif
7428+
if (!quiet)
7429+
fprintf (stderr, "STOP %d\n", stop_code);
74207430

74217431
/* Stopping includes taking down the runtime regularly and returning the
74227432
* stop_code. */
@@ -7427,38 +7437,59 @@ PREFIX (stop_numeric) (int stop_code)
74277437
/* STOP function for string arguments. */
74287438

74297439
void
7430-
PREFIX (stop_str) (const char *string, charlen_t len)
7440+
PREFIX (stop_str) (const char *string, charlen_t len QUIETARG)
74317441
{
7432-
fputs ("STOP ", stderr);
7433-
while (len--)
7434-
fputc (*(string++), stderr);
7435-
fputs ("\n", stderr);
7436-
7442+
#ifndef GCC_GE_8
7443+
bool quiet = false;
7444+
#endif
7445+
if (!quiet)
7446+
{
7447+
fputs ("STOP ", stderr);
7448+
while (len--)
7449+
fputc (*(string++), stderr);
7450+
fputs ("\n", stderr);
7451+
}
74377452
/* Stopping includes taking down the runtime regularly. */
74387453
terminate_internal (STAT_STOPPED_IMAGE, 0);
74397454
}
74407455

74417456

74427457
/* ERROR STOP function for string arguments. */
74437458

7444-
void
7445-
PREFIX (error_stop_str) (const char *string, charlen_t len)
7459+
static void
7460+
error_stop_str (const char *string, size_t len, bool quiet)
74467461
{
7447-
fputs ("ERROR STOP ", stderr);
7448-
while (len--)
7449-
fputc (*(string++), stderr);
7450-
fputs ("\n", stderr);
7451-
7462+
if (!quiet)
7463+
{
7464+
fputs ("ERROR STOP ", stderr);
7465+
while (len--)
7466+
fputc (*(string++), stderr);
7467+
fputs ("\n", stderr);
7468+
}
74527469
terminate_internal (STAT_STOPPED_IMAGE, 1);
74537470
}
74547471

74557472

7473+
void
7474+
PREFIX (error_stop_str) (const char *string, charlen_t len QUIETARG)
7475+
{
7476+
#ifndef GCC_GE_8
7477+
bool quiet = false;
7478+
#endif
7479+
error_stop_str (string, len, quiet);
7480+
}
7481+
7482+
74567483
/* ERROR STOP function for numerical arguments. */
74577484

74587485
void
7459-
PREFIX (error_stop) (int error)
7486+
PREFIX (error_stop) (int error QUIETARG)
74607487
{
7461-
fprintf (stderr, "ERROR STOP %d\n", error);
7488+
#ifndef GCC_GE_8
7489+
bool quiet = false;
7490+
#endif
7491+
if (!quiet)
7492+
fprintf (stderr, "ERROR STOP %d\n", error);
74627493

74637494
terminate_internal (STAT_STOPPED_IMAGE, error);
74647495
}

0 commit comments

Comments
 (0)