From 7c02f68bf452748cb331668cbb8116817b136ea0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Manuel=20L=C3=B3pez-Ib=C3=A1=C3=B1ez?= Date: Tue, 7 Oct 2014 16:13:22 +0000 Subject: [PATCH] re PR fortran/44054 (Handle -Werror, -Werror=, -fdiagnostics-show-option, !GCC$ diagnostic (pragmas) and color) MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit gcc/fortran/ChangeLog: 2014-10-06 Manuel López-Ibáñez 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 | 16 ++++++++++++++++ gcc/fortran/error.c | 38 +++++++++++++++++++++++++++++++++++++- gcc/fortran/gfortran.h | 4 +++- gcc/fortran/lang.opt | 4 ++++ gcc/fortran/options.c | 8 ++++++++ gcc/fortran/scanner.c | 17 +++++++---------- 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 + + 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 * 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; } } -- 2.7.4