diff options
author | Thomas Schwinge <thomas@codesourcery.com> | 2015-03-11 22:42:56 +0100 |
---|---|---|
committer | Thomas Schwinge <tschwinge@gcc.gnu.org> | 2015-03-11 22:42:56 +0100 |
commit | 17abb5ac387fe5ea785517522cab95f035b3a7d5 (patch) | |
tree | 5b9ba83715b19f39ebd97c0e0334d1d64d489255 /libgfortran | |
parent | d94fae044da071381b73a2ee8afa874b14fa3820 (diff) | |
download | gcc-17abb5ac387fe5ea785517522cab95f035b3a7d5.zip gcc-17abb5ac387fe5ea785517522cab95f035b3a7d5.tar.gz gcc-17abb5ac387fe5ea785517522cab95f035b3a7d5.tar.bz2 |
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.
From-SVN: r221363
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 97ee01b..5b201d2 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 daef281..6c58286 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 7ef4647..72a134a 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(); } |