diff options
author | tschwinge <tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-03-11 21:42:56 +0000 |
---|---|---|
committer | tschwinge <tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-03-11 21:42:56 +0000 |
commit | 83ba0e65833dd081db921f8c2b3277316590753c (patch) | |
tree | 5b9ba83715b19f39ebd97c0e0334d1d64d489255 /libgfortran | |
parent | 5121139d0e8b22290fc9e752b07752d8a1b70182 (diff) | |
download | gcc-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/ChangeLog | 8 | ||||
-rw-r--r-- | libgfortran/caf/single.c | 3 | ||||
-rw-r--r-- | libgfortran/runtime/minimal.c | 58 |
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(); } |