summaryrefslogtreecommitdiff
path: root/libgfortran
diff options
context:
space:
mode:
authortschwinge <tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4>2015-03-11 21:42:56 +0000
committertschwinge <tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4>2015-03-11 21:42:56 +0000
commit83ba0e65833dd081db921f8c2b3277316590753c (patch)
tree5b9ba83715b19f39ebd97c0e0334d1d64d489255 /libgfortran
parent5121139d0e8b22290fc9e752b07752d8a1b70182 (diff)
downloadgcc-83ba0e65833dd081db921f8c2b3277316590753c.tar.gz
libgfortran LIBGFOR_MINIMAL enhancements.
Based on GCC trunk r220892, for nvptx-none: === gfortran Summary === # of expected passes [-31320-]{+32117+} # of unexpected failures [-7222-]{+6821+} # of expected failures 78 # of unresolved testcases [-6441-]{+6158+} # of untested testcases [-432-]{+391+} # of unsupported tests 639 libgfortran/ * caf/single.c (caf_runtime_error): Revert 2014-11-28 changes. * runtime/minimal.c (STRERR_MAXSZ): Don't define. (runtime_error_at, sys_abort): Bring more in line with the non-LIBGFOR_MINIMAL code. (runtime_warning_at, internal_error): New functions. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@221363 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgfortran')
-rw-r--r--libgfortran/ChangeLog8
-rw-r--r--libgfortran/caf/single.c3
-rw-r--r--libgfortran/runtime/minimal.c58
3 files changed, 64 insertions, 5 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 97ee01b59fc..5b201d21fa4 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,11 @@
+2015-03-11 Thomas Schwinge <thomas@codesourcery.com>
+
+ * caf/single.c (caf_runtime_error): Revert 2014-11-28 changes.
+ * runtime/minimal.c (STRERR_MAXSZ): Don't define.
+ (runtime_error_at, sys_abort): Bring more in line with the
+ non-LIBGFOR_MINIMAL code.
+ (runtime_warning_at, internal_error): New functions.
+
2015-03-11 Janne Blomqvist <jb@gcc.gnu.org>
PR libfortran/65200
diff --git a/libgfortran/caf/single.c b/libgfortran/caf/single.c
index daef281ef2e..6c582860ebf 100644
--- a/libgfortran/caf/single.c
+++ b/libgfortran/caf/single.c
@@ -48,14 +48,13 @@ caf_static_t *caf_static_list = NULL;
static void
caf_runtime_error (const char *message, ...)
{
-#ifndef LIBGFOR_MINIMAL
va_list ap;
fprintf (stderr, "Fortran runtime error: ");
va_start (ap, message);
vfprintf (stderr, message, ap);
va_end (ap);
fprintf (stderr, "\n");
-#endif
+
/* FIXME: Shutdown the Fortran RTL to flush the buffer. PR 43849. */
exit (EXIT_FAILURE);
}
diff --git a/libgfortran/runtime/minimal.c b/libgfortran/runtime/minimal.c
index 7ef46474dd1..72a134a48dc 100644
--- a/libgfortran/runtime/minimal.c
+++ b/libgfortran/runtime/minimal.c
@@ -73,7 +73,10 @@ recursion_check (void)
magic = MAGIC;
}
-#define STRERR_MAXSZ 256
+
+/* os_error()-- Operating system error. We get a message from the
+ * operating system, show it and leave. Some operating system errors
+ * are caught and processed by the library. If not, we come here. */
void
os_error (const char *message)
@@ -85,6 +88,10 @@ os_error (const char *message)
}
iexport(os_error);
+
+/* void runtime_error()-- These are errors associated with an
+ * invalid fortran program. */
+
void
runtime_error (const char *message, ...)
{
@@ -109,7 +116,8 @@ runtime_error_at (const char *where, const char *message, ...)
va_list ap;
recursion_check ();
- printf ("Fortran runtime error: ");
+ printf ("%s", where);
+ printf ("\nFortran runtime error: ");
va_start (ap, message);
vprintf (message, ap);
va_end (ap);
@@ -118,6 +126,43 @@ runtime_error_at (const char *where, const char *message, ...)
}
iexport(runtime_error_at);
+
+void
+runtime_warning_at (const char *where, const char *message, ...)
+{
+ va_list ap;
+
+ printf ("%s", where);
+ printf ("\nFortran runtime warning: ");
+ va_start (ap, message);
+ vprintf (message, ap);
+ va_end (ap);
+ printf ("\n");
+}
+iexport(runtime_warning_at);
+
+
+/* void internal_error()-- These are this-can't-happen errors
+ * that indicate something deeply wrong. */
+
+void
+internal_error (st_parameter_common *cmp, const char *message)
+{
+ recursion_check ();
+ printf ("Internal Error: ");
+ printf ("%s", message);
+ printf ("\n");
+
+ /* This function call is here to get the main.o object file included
+ when linking statically. This works because error.o is supposed to
+ be always linked in (and the function call is in internal_error
+ because hopefully it doesn't happen too often). */
+ stupid_function_name_for_static_linking();
+
+ exit (3);
+}
+
+
/* Return the full path of the executable. */
char *
full_exe_path (void)
@@ -153,6 +198,13 @@ get_args (int *argc, char ***argv)
void
sys_abort (void)
{
- printf ("Abort called.\n");
+ /* If backtracing is enabled, print backtrace and disable signal
+ handler for ABRT. */
+ if (options.backtrace == 1
+ || (options.backtrace == -1 && compile_options.backtrace == 1))
+ {
+ printf ("\nProgram aborted.\n");
+ }
+
abort();
}