diff options
author | Manuel López-Ibáñez <manu@gcc.gnu.org> | 2014-10-07 16:13:22 +0000 |
---|---|---|
committer | Manuel López-Ibáñez <manu@gcc.gnu.org> | 2014-10-07 16:13:22 +0000 |
commit | 7c02f68bf452748cb331668cbb8116817b136ea0 (patch) | |
tree | 6da35a78a8c684e952244e9c639aa507f3c11a0a /gcc | |
parent | 96f6e029ed166111d1178f29e7ab63f78f044554 (diff) | |
download | gcc-7c02f68bf452748cb331668cbb8116817b136ea0.zip gcc-7c02f68bf452748cb331668cbb8116817b136ea0.tar.gz gcc-7c02f68bf452748cb331668cbb8116817b136ea0.tar.bz2 |
re PR fortran/44054 (Handle -Werror, -Werror=, -fdiagnostics-show-option, !GCC$ diagnostic (pragmas) and color)
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 16 | ||||
-rw-r--r-- | gcc/fortran/error.c | 38 | ||||
-rw-r--r-- | gcc/fortran/gfortran.h | 4 | ||||
-rw-r--r-- | gcc/fortran/lang.opt | 4 | ||||
-rw-r--r-- | gcc/fortran/options.c | 8 | ||||
-rw-r--r-- | 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 <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; } } |