[driver] Use regular error routines
authorNathan Sidwell <nathan@acm.org>
Tue, 11 Sep 2018 15:03:05 +0000 (15:03 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Tue, 11 Sep 2018 15:03:05 +0000 (15:03 +0000)
https://gcc.gnu.org/ml/gcc-patches/2018-09/msg00545.html
* gcc.c (perror_with_name, pfatal_with_name): Delete.
(load_specs): Use fatal_error.
(DELETE_IF_ORDINARY, process_command): Use error.
(execute, run_attempt): Use fatal_error.

* gcc.dg/driver-specs.c: New.

From-SVN: r264209

gcc/ChangeLog
gcc/gcc.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/driver-specs.c [new file with mode: 0644]

index 32dc14b075cbde53dd4805f59ef1b6820498e39c..da4995e7f5d26130c77090201617ec573dd2f130 100644 (file)
@@ -1,3 +1,10 @@
+2018-09-11  Nathan Sidwell  <nathan@acm.org>
+
+       * gcc.c (perror_with_name, pfatal_with_name): Delete.
+       (load_specs): Use fatal_error.
+       (DELETE_IF_ORDINARY, process_command): Use error.
+       (execute, run_attempt): Use fatal_error.
+
 2018-09-11  Andrew Stubbs  <ams@codesourcery.com>
 
        * diagnostic-core.h (sorry_at): New prototype.
index 80667fdb1604133a368eca3246102509ace7ab58..7532a2e1fc5ea048dee682cb5f7f3d772605ac49 100644 (file)
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -372,8 +372,6 @@ static void give_switch (int, int);
 static int default_arg (const char *, int);
 static void set_multilib_dir (void);
 static void print_multilib_info (void);
-static void perror_with_name (const char *);
-static void pfatal_with_name (const char *) ATTRIBUTE_NORETURN;
 static void display_help (void);
 static void add_preprocessor_option (const char *, int);
 static void add_assembler_option (const char *, int);
@@ -2101,15 +2099,20 @@ load_specs (const char *filename)
   /* Open and stat the file.  */
   desc = open (filename, O_RDONLY, 0);
   if (desc < 0)
-    pfatal_with_name (filename);
+    {
+    failed:
+      /* This leaves DESC open, but the OS will save us.  */
+      fatal_error (input_location, "cannot read spec file '%s': %m", filename);
+    }
+
   if (stat (filename, &statbuf) < 0)
-    pfatal_with_name (filename);
+    goto failed;
 
   /* Read contents of file into BUFFER.  */
   buffer = XNEWVEC (char, statbuf.st_size + 1);
   readlen = read (desc, buffer, (unsigned) statbuf.st_size);
   if (readlen < 0)
-    pfatal_with_name (filename);
+    goto failed;
   buffer[readlen] = 0;
   close (desc);
 
@@ -2490,7 +2493,7 @@ do                                                      \
     if (stat (NAME, &ST) >= 0 && S_ISREG (ST.st_mode))  \
       if (unlink (NAME) < 0)                            \
        if (VERBOSE_FLAG)                               \
-         perror_with_name (NAME);                      \
+         error ("%s: %m", (NAME));                     \
   } while (0)
 #endif
 
@@ -3169,13 +3172,11 @@ execute (void)
                        NULL, NULL, &err);
       if (errmsg != NULL)
        {
-         if (err == 0)
-           fatal_error (input_location, errmsg);
-         else
-           {
-             errno = err;
-             pfatal_with_name (errmsg);
-           }
+         errno = err;
+         fatal_error (input_location,
+                      err ? G_("cannot execute '%s' %s: %m")
+                      : G_("cannot execute '%s' %s"),
+                      string, errmsg);
        }
 
       if (i && string != commands[i].prog)
@@ -4545,10 +4546,8 @@ process_command (unsigned int decoded_options_count,
 
           if (strcmp (fname, "-") != 0 && access (fname, F_OK) < 0)
            {
-             if (fname[0] == '@' && access (fname + 1, F_OK) < 0)
-               perror_with_name (fname + 1);
-             else
-               perror_with_name (fname);
+             bool resp = fname[0] == '@' && access (fname + 1, F_OK) < 0;
+             error ("%s: %m", fname + resp);
            }
           else
            add_infile (arg, spec_lang);
@@ -6886,13 +6885,11 @@ run_attempt (const char **new_argv, const char *out_temp,
                    err_temp, &err);
   if (errmsg != NULL)
     {
-      if (err == 0)
-       fatal_error (input_location, errmsg);
-      else
-       {
-         errno = err;
-         pfatal_with_name (errmsg);
-       }
+      errno = err;
+      fatal_error (input_location,
+                  err ? G_ ("cannot execute '%s' %s: %m")
+                  : G_ ("cannot execute '%s' %s"),
+                  new_argv[0], errmsg);
     }
 
   if (!pex_get_status (pex, 1, &exit_status))
@@ -8407,19 +8404,6 @@ save_string (const char *s, int len)
   return result;
 }
 
-void
-pfatal_with_name (const char *name)
-{
-  perror_with_name (name);
-  delete_temp_files ();
-  exit (1);
-}
-
-static void
-perror_with_name (const char *name)
-{
-  error ("%s: %m", name);
-}
 \f
 static inline void
 validate_switches_from_spec (const char *spec, bool user)
index a758e1c1aa367321d11db19f1c3505ebf5870825..30b1156392e6957e08185f84831482d84b376992 100644 (file)
@@ -1,3 +1,7 @@
+2018-09-11  Nathan Sidwell  <nathan@acm.org>
+
+       * gcc.dg/driver-specs.c: New.
+
 2018-09-11  Joey Ye  <joey.ye@arm.com>
 
        * lib/gcov.exp (verify-intermediate): Add missing close.
diff --git a/gcc/testsuite/gcc.dg/driver-specs.c b/gcc/testsuite/gcc.dg/driver-specs.c
new file mode 100644 (file)
index 0000000..9cb66e1
--- /dev/null
@@ -0,0 +1,4 @@
+// { dg-additional-options "-specs=not-a-file" }
+// { dg-prune-output "compilation terminated" }
+// { dg-error "cannot read spec file" "" { target *-*-* } 0 }
+