+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.
/* 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);
}
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);
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
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. */
switch (code)
{
default:
+ if (cl_options[code].flags & gfc_option_lang_mask ())
+ break;
result = false;
break;
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;
}
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;
}
}