re PR fortran/44054 (Handle -Werror, -Werror=, -fdiagnostics-show-option, !GCC$ diagn...
authorManuel López-Ibáñez <manu@gcc.gnu.org>
Tue, 7 Oct 2014 16:13:22 +0000 (16:13 +0000)
committerManuel López-Ibáñez <manu@gcc.gnu.org>
Tue, 7 Oct 2014 16:13:22 +0000 (16:13 +0000)
gcc/fortran/ChangeLog:

2014-10-06  Manuel López-Ibáñez  <manu@gcc.gnu.org>

PR fortran/44054
PR fortran/54687
* gfortran.h (gfc_warning_cmdline): Add overload that takes an
option.
(gfc_error_cmdline): Declare.
* error.c (gfc_warning_cmdline): New overload that takes an option.
(gfc_error_cmdline): New.
* lang.opt (Wmissing-include-dirs): New.
* scanner.c (add_path_to_list): Use the new functions.
(load_file): Likewise.
* options.c (gfc_init_options): Wmissing-include-dirs is enabled
by default in Fortran.
(gfc_handle_option): Accept automatically handled options.

From-SVN: r215974

gcc/fortran/ChangeLog
gcc/fortran/error.c
gcc/fortran/gfortran.h
gcc/fortran/lang.opt
gcc/fortran/options.c
gcc/fortran/scanner.c

index 5e6ad8e48e4762ab261854b489d182236d2bc872..113aaa747f8efeb4e5b5c64fd84aafbe185ac99b 100644 (file)
@@ -1,3 +1,19 @@
+2014-10-06  Manuel López-Ibáñez  <manu@gcc.gnu.org>
+
+       PR fortran/44054
+       PR fortran/54687
+       * gfortran.h (gfc_warning_cmdline): Add overload that takes an
+       option.
+       (gfc_error_cmdline): Declare.
+       * error.c (gfc_warning_cmdline): New overload that takes an option.
+       (gfc_error_cmdline): New.
+       * lang.opt (Wmissing-include-dirs): New.
+       * scanner.c (add_path_to_list): Use the new functions.
+       (load_file): Likewise.
+       * options.c (gfc_init_options): Wmissing-include-dirs is enabled
+       by default in Fortran.
+       (gfc_handle_option): Accept automatically handled options.
+
 2014-10-06  Tobias Burnus  <burnus@net-b.de>
 
        * libgfortran.h (GFC_STD_F2015): Add.
index 10df7e56916921f3aa21ba4a7fa1d971a896ca11..b623ea82c0132ea6a6136ce4de04f70106f632b6 100644 (file)
@@ -1054,15 +1054,51 @@ gfc_diagnostic_finalizer (diagnostic_context *context,
 
 /* Give a warning about the command-line.  */
 
-void
+bool
+gfc_warning_cmdline (int opt, const char *gmsgid, ...)
+{
+  va_list argp;
+  diagnostic_info diagnostic;
+  bool ret;
+
+  va_start (argp, gmsgid);
+  diagnostic_set_info (&diagnostic, gmsgid, &argp, UNKNOWN_LOCATION,
+                      DK_WARNING);
+  diagnostic.option_index = opt;
+  ret = report_diagnostic (&diagnostic);
+  va_end (argp);
+  return ret;
+}
+
+
+/* Give a warning about the command-line.  */
+
+bool
 gfc_warning_cmdline (const char *gmsgid, ...)
 {
   va_list argp;
   diagnostic_info diagnostic;
+  bool ret;
 
   va_start (argp, gmsgid);
   diagnostic_set_info (&diagnostic, gmsgid, &argp, UNKNOWN_LOCATION,
                       DK_WARNING);
+  ret = report_diagnostic (&diagnostic);
+  va_end (argp);
+  return ret;
+}
+
+
+/* Give an error about the command-line.  */
+
+void
+gfc_error_cmdline (const char *gmsgid, ...)
+{
+  va_list argp;
+  diagnostic_info diagnostic;
+
+  va_start (argp, gmsgid);
+  diagnostic_set_info (&diagnostic, gmsgid, &argp, UNKNOWN_LOCATION, DK_ERROR);
   report_diagnostic (&diagnostic);
   va_end (argp);
 }
index f6f95f8b8403a40ed61417202dd49ca97196704a..0809379205beefda9b08cea84b27c52a68e45c7d 100644 (file)
@@ -2698,12 +2698,14 @@ const char *gfc_print_wide_char (gfc_char_t);
 
 void gfc_warning (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
 void gfc_warning_now (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
-void gfc_warning_cmdline (const char *gmsgid, ...) ATTRIBUTE_GCC_GFC(1,2);
+bool gfc_warning_cmdline (const char *gmsgid, ...) ATTRIBUTE_GCC_GFC(1,2);
+bool gfc_warning_cmdline (int opt, const char *gmsgid, ...) ATTRIBUTE_GCC_GFC(2,3);
 
 void gfc_clear_warning (void);
 void gfc_warning_check (void);
 
 void gfc_error (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
+void gfc_error_cmdline (const char *gmsgid, ...) ATTRIBUTE_GCC_GFC(1,2);
 void gfc_error_now (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
 void gfc_fatal_error (const char *, ...) ATTRIBUTE_NORETURN ATTRIBUTE_GCC_GFC(1,2);
 void gfc_internal_error (const char *, ...) ATTRIBUTE_NORETURN ATTRIBUTE_GCC_GFC(1,2);
index 72d0dcf0072acc67062a2d56f2a5ac50d56f8d72..b66e892e208b6a9296d561454e6d14256ea171d3 100644 (file)
@@ -257,6 +257,10 @@ Wintrinsics-std
 Fortran Warning
 Warn on intrinsics not part of the selected standard
 
+Wmissing-include-dirs
+Fortran
+; Documented in C/C++
+
 Wuse-without-only
 Fortran Warning
 Warn about USE statements that have no ONLY qualifier
index 6543fbd1ec6382a36402a3734b29029469658fd6..a482d2f3a733f0958fb4bfa8886932c4ab148ed0 100644 (file)
@@ -172,6 +172,12 @@ gfc_init_options (unsigned int decoded_options_count,
   gfc_option.rtcheck = 0;
   gfc_option.coarray = GFC_FCOARRAY_NONE;
 
+  /* ??? Wmissing-include-dirs is disabled by default in C/C++ but
+     enabled by default in Fortran.  Ideally, we should express this
+     in .opt, but that is not supported yet.  */
+  if (!global_options_set.x_cpp_warn_missing_include_dirs)
+    global_options.x_cpp_warn_missing_include_dirs = 1;;
+
   set_default_std_flags ();
 
   /* Initialize cpp-related options.  */
@@ -634,6 +640,8 @@ gfc_handle_option (size_t scode, const char *arg, int value,
   switch (code)
     {
     default:
+      if (cl_options[code].flags & gfc_option_lang_mask ())
+       break;
       result = false;
       break;
 
index 8d650675560a0291e52bdc6ca1cd0d85afc5ba4d..757037c4b304b882ec415c68e8f1de82a902f5ff 100644 (file)
@@ -324,19 +324,16 @@ add_path_to_list (gfc_directorylist **list, const char *path,
   if (stat (q, &st))
     {
       if (errno != ENOENT)
-       gfc_warning_now ("Include directory \"%s\": %s", path,
-                        xstrerror(errno));
-      else
-       {
-         /* FIXME:  Also support -Wmissing-include-dirs.  */
-         if (warn)
-           gfc_warning_now ("Nonexistent include directory \"%s\"", path);
-       }
+       gfc_warning_cmdline ("Include directory %qs: %s", path,
+                            xstrerror(errno));
+      else if (warn)
+       gfc_warning_cmdline (OPT_Wmissing_include_dirs,
+                            "Nonexistent include directory %qs", path);
       return;
     }
   else if (!S_ISDIR (st.st_mode))
     {
-      gfc_warning_now ("\"%s\" is not a directory", path);
+      gfc_warning_cmdline ("%qs is not a directory", path);
       return;
     }
 
@@ -1925,7 +1922,7 @@ load_file (const char *realfilename, const char *displayedname, bool initial)
        input = gfc_open_file (realfilename);
       if (input == NULL)
        {
-         gfc_error_now ("Can't open file '%s'", filename);
+         gfc_error_cmdline ("Can't open file %qs", filename);
          return false;
        }
     }