aboutsummaryrefslogtreecommitdiff
path: root/libgfortran/runtime/stop.c
diff options
context:
space:
mode:
Diffstat (limited to 'libgfortran/runtime/stop.c')
-rw-r--r--libgfortran/runtime/stop.c53
1 files changed, 32 insertions, 21 deletions
diff --git a/libgfortran/runtime/stop.c b/libgfortran/runtime/stop.c
index 3ef1350..1e6dd8c 100644
--- a/libgfortran/runtime/stop.c
+++ b/libgfortran/runtime/stop.c
@@ -81,14 +81,17 @@ report_exception (void)
/* A numeric STOP statement. */
-extern _Noreturn void stop_numeric (int);
+extern _Noreturn void stop_numeric (int, bool);
export_proto(stop_numeric);
void
-stop_numeric (int code)
+stop_numeric (int code, bool quiet)
{
- report_exception ();
- st_printf ("STOP %d\n", code);
+ if (!quiet)
+ {
+ report_exception ();
+ st_printf ("STOP %d\n", code);
+ }
exit (code);
}
@@ -96,14 +99,17 @@ stop_numeric (int code)
/* A character string or blank STOP statement. */
void
-stop_string (const char *string, size_t len)
+stop_string (const char *string, size_t len, bool quiet)
{
- report_exception ();
- if (string)
+ if (!quiet)
{
- estr_write ("STOP ");
- (void) write (STDERR_FILENO, string, len);
- estr_write ("\n");
+ report_exception ();
+ if (string)
+ {
+ estr_write ("STOP ");
+ (void) write (STDERR_FILENO, string, len);
+ estr_write ("\n");
+ }
}
exit (0);
}
@@ -114,30 +120,35 @@ stop_string (const char *string, size_t len)
initiates error termination of execution." Thus, error_stop_string returns
a nonzero exit status code. */
-extern _Noreturn void error_stop_string (const char *, size_t);
+extern _Noreturn void error_stop_string (const char *, size_t, bool);
export_proto(error_stop_string);
void
-error_stop_string (const char *string, size_t len)
+error_stop_string (const char *string, size_t len, bool quiet)
{
- report_exception ();
- estr_write ("ERROR STOP ");
- (void) write (STDERR_FILENO, string, len);
- estr_write ("\n");
-
+ if (!quiet)
+ {
+ report_exception ();
+ estr_write ("ERROR STOP ");
+ (void) write (STDERR_FILENO, string, len);
+ estr_write ("\n");
+ }
exit_error (1);
}
/* A numeric ERROR STOP statement. */
-extern _Noreturn void error_stop_numeric (int);
+extern _Noreturn void error_stop_numeric (int, bool);
export_proto(error_stop_numeric);
void
-error_stop_numeric (int code)
+error_stop_numeric (int code, bool quiet)
{
- report_exception ();
- st_printf ("ERROR STOP %d\n", code);
+ if (!quiet)
+ {
+ report_exception ();
+ st_printf ("ERROR STOP %d\n", code);
+ }
exit_error (code);
}