libgfortran LIBGFOR_MINIMAL enhancements.
authorThomas Schwinge <thomas@codesourcery.com>
Wed, 11 Mar 2015 21:42:56 +0000 (22:42 +0100)
committerThomas Schwinge <tschwinge@gcc.gnu.org>
Wed, 11 Mar 2015 21:42:56 +0000 (22:42 +0100)
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

libgfortran/ChangeLog
libgfortran/caf/single.c
libgfortran/runtime/minimal.c

index 97ee01b59fca33b43d56d7cedfecb1d9f1babd74..5b201d21fa415904636a10c540d52abaf4e06616 100644 (file)
@@ -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
index daef281ef2ed19d68d9cfd70ee96869a064ef675..6c582860ebfaca5f9120c531ed5fffcc77bdb1a3 100644 (file)
@@ -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);
 }
index 7ef46474dd1ec607aa1dc9f4495f5c543d179276..72a134a48dc442289108133a5981849145f0bfc3 100644 (file)
@@ -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();
 }