aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/fortran/ChangeLog16
-rw-r--r--gcc/fortran/error.c38
-rw-r--r--gcc/fortran/gfortran.h4
-rw-r--r--gcc/fortran/lang.opt4
-rw-r--r--gcc/fortran/options.c8
-rw-r--r--gcc/fortran/scanner.c17
6 files changed, 75 insertions, 12 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 5e6ad8e..113aaa7 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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.
diff --git a/gcc/fortran/error.c b/gcc/fortran/error.c
index 10df7e5..b623ea8 100644
--- a/gcc/fortran/error.c
+++ b/gcc/fortran/error.c
@@ -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);
}
diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index f6f95f8..0809379 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -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);
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
index 72d0dcf..b66e892 100644
--- a/gcc/fortran/lang.opt
+++ b/gcc/fortran/lang.opt
@@ -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
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
index 6543fbd..a482d2f 100644
--- a/gcc/fortran/options.c
+++ b/gcc/fortran/options.c
@@ -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;
diff --git a/gcc/fortran/scanner.c b/gcc/fortran/scanner.c
index 8d65067..757037c 100644
--- a/gcc/fortran/scanner.c
+++ b/gcc/fortran/scanner.c
@@ -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;
}
}