gfortran.h (gfc_option_t): Remove flags moved as Var to .opt.
authorTobias Burnus <burnus@gcc.gnu.org>
Tue, 25 Nov 2014 22:33:32 +0000 (23:33 +0100)
committerTobias Burnus <burnus@gcc.gnu.org>
Tue, 25 Nov 2014 22:33:32 +0000 (23:33 +0100)
2014-11-25  Tobias Burnus  <burnus@net-b.de>

gcc/fortran/
        * gfortran.h (gfc_option_t): Remove flags moved as Var to .opt.
        (gfc_error_now_1): Renamed from gfc_error_now.
        (gfc_error_now): Renamed from gfc_error_now_2.
        (gfc_warning_now_1): Renamed from gfc_warning_now.
        (gfc_warning_now): Renamed from gfc_warning_now_2.
        * error.c (gfc_error_now_1): Renamed from gfc_error_now.
        (gfc_error_now): Renamed from gfc_error_now_2.
        (gfc_warning_now_1): Renamed from gfc_warning_now.
        (gfc_warning_now): Renamed from gfc_warning_now_2.
        (gfc_get_errors): Include common diagnostic in count.
        * lang.opt (Wc-binding-type, Wconversion, Wconversion-extra,
        Wintrinsics-std): Create a Var for those warnings.
        * check.c (gfc_check_cmplx): Pass warning flag to
        diagnostic function.
        * decl.c (get_proc_name, gfc_verify_c_interop_param, build_sym
        gfc_set_constant_character_len, verify_bind_c_sym): Ditto; use
        _1 for old diagnostic, remove _2 for new diagnostic.
        * expr.c (gfc_check_assign, gfc_check_vardef_context): Ditto.
        * frontend-passes.c (doloop_code, do_function): Ditto.
        * intrinsic.c (gfc_is_intrinsic, gfc_convert_type_warn): Ditto.
        * match.c (gfc_match_common): Ditto.
        * module.c (use_iso_fortran_env_module, gfc_use_module): Ditto.
        * parse.c (decode_statement, decode_gcc_attribute, next_free,
        next_fixed, gfc_check_do_variable): Ditto.
        * resolve.c (resolve_common_vars, resolve_ordinary_assign):
        Ditto.
        * scanner.c (add_path_to_list, skip_free_comments,
        gfc_next_char_literal, gfc_gobble_whitespace, load_line,
        preprocessor_line, load_file): Ditto.
        * symbol.c (gfc_set_default_type, verify_bind_c_derived_type):
        Ditto.
        * options.c (gfc_post_options): Ditto.
        (gfc_init_options, set_Wall, gfc_handle_option): Ditto; remove
        flags which now have a Var.
        * invoke.texi (Wconversion-extra): Make clear that the flag
        does not imply -Wconversion.

gcc/testsuite/
        * gfortran.dg/empty_label.f: Change test to continue testing
        for -fmax-errors=1.
        * gfortran.dg/empty_label.f90: Ditto.
        * gfortran.dg/warnings_are_errors_1.f90: Update dg-*.

From-SVN: r218067

21 files changed:
gcc/fortran/ChangeLog
gcc/fortran/check.c
gcc/fortran/decl.c
gcc/fortran/error.c
gcc/fortran/expr.c
gcc/fortran/frontend-passes.c
gcc/fortran/gfortran.h
gcc/fortran/intrinsic.c
gcc/fortran/invoke.texi
gcc/fortran/lang.opt
gcc/fortran/match.c
gcc/fortran/module.c
gcc/fortran/options.c
gcc/fortran/parse.c
gcc/fortran/resolve.c
gcc/fortran/scanner.c
gcc/fortran/symbol.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/empty_label.f
gcc/testsuite/gfortran.dg/empty_label.f90
gcc/testsuite/gfortran.dg/warnings_are_errors_1.f90

index 9dcacbd0d6eb96e2e5e8bfebba288dd98ea284e3..970671a3553dc562367088afced23b2a5f238ef3 100644 (file)
@@ -1,3 +1,42 @@
+2014-11-25  Tobias Burnus  <burnus@net-b.de>
+
+       * gfortran.h (gfc_option_t): Remove flags moved as Var to .opt.
+       (gfc_error_now_1): Renamed from gfc_error_now.
+       (gfc_error_now): Renamed from gfc_error_now_2.
+       (gfc_warning_now_1): Renamed from gfc_warning_now.
+       (gfc_warning_now): Renamed from gfc_warning_now_2.
+       * error.c (gfc_error_now_1): Renamed from gfc_error_now.
+       (gfc_error_now): Renamed from gfc_error_now_2.
+       (gfc_warning_now_1): Renamed from gfc_warning_now.
+       (gfc_warning_now): Renamed from gfc_warning_now_2.
+       (gfc_get_errors): Include common diagnostic in count.
+       * lang.opt (Wc-binding-type, Wconversion, Wconversion-extra,
+       Wintrinsics-std): Create a Var for those warnings.
+       * check.c (gfc_check_cmplx): Pass warning flag to
+       diagnostic function.
+       * decl.c (get_proc_name, gfc_verify_c_interop_param, build_sym
+       gfc_set_constant_character_len, verify_bind_c_sym): Ditto; use
+       _1 for old diagnostic, remove _2 for new diagnostic.
+       * expr.c (gfc_check_assign, gfc_check_vardef_context): Ditto.
+       * frontend-passes.c (doloop_code, do_function): Ditto.
+       * intrinsic.c (gfc_is_intrinsic, gfc_convert_type_warn): Ditto.
+       * match.c (gfc_match_common): Ditto.
+       * module.c (use_iso_fortran_env_module, gfc_use_module): Ditto.
+       * parse.c (decode_statement, decode_gcc_attribute, next_free,
+       next_fixed, gfc_check_do_variable): Ditto.
+       * resolve.c (resolve_common_vars, resolve_ordinary_assign):
+       Ditto.
+       * scanner.c (add_path_to_list, skip_free_comments,
+       gfc_next_char_literal, gfc_gobble_whitespace, load_line,
+       preprocessor_line, load_file): Ditto.
+       * symbol.c (gfc_set_default_type, verify_bind_c_derived_type):
+       Ditto.
+       * options.c (gfc_post_options): Ditto.
+       (gfc_init_options, set_Wall, gfc_handle_option): Ditto; remove
+       flags which now have a Var.
+       * invoke.texi (Wconversion-extra): Make clear that the flag
+       does not imply -Wconversion.
+
 2014-11-24  Jakub Jelinek  <jakub@redhat.com>
 
        PR fortran/63938
index 8da59d5888a571baea17f64ba66c5a6685d29240..5fea5a860b5fe0d721ab3a69930d2ee662a16e8b 100644 (file)
@@ -1398,17 +1398,18 @@ gfc_check_cmplx (gfc_expr *x, gfc_expr *y, gfc_expr *kind)
   if (!kind_check (kind, 2, BT_COMPLEX))
     return false;
 
-  if (!kind && gfc_option.gfc_warn_conversion
+  if (!kind && warn_conversion
       && x->ts.type == BT_REAL && x->ts.kind > gfc_default_real_kind)
-    gfc_warning_now ("Conversion from %s to default-kind COMPLEX(%d) at %L "
-                    "might lose precision, consider using the KIND argument",
-                    gfc_typename (&x->ts), gfc_default_real_kind, &x->where);
-  else if (y && !kind && gfc_option.gfc_warn_conversion
+    gfc_warning_now (OPT_Wconversion, "Conversion from %s to default-kind "
+                    "COMPLEX(%d) at %L might lose precision, consider using "
+                    "the KIND argument", gfc_typename (&x->ts),
+                    gfc_default_real_kind, &x->where);
+  else if (y && !kind && warn_conversion
           && y->ts.type == BT_REAL && y->ts.kind > gfc_default_real_kind)
-    gfc_warning_now ("Conversion from %s to default-kind COMPLEX(%d) at %L "
-                    "might lose precision, consider using the KIND argument",
-                    gfc_typename (&y->ts), gfc_default_real_kind, &y->where);
-
+    gfc_warning_now (OPT_Wconversion, "Conversion from %s to default-kind "
+                    "COMPLEX(%d) at %L might lose precision, consider using "
+                    "the KIND argument", gfc_typename (&y->ts),
+                    gfc_default_real_kind, &y->where);
   return true;
 }
 
index 45e5b6c2cd9d06d3317f80e7e052270e15ea714e..e7c06f3855bd8416d541bb724c9bf9bf58e3f39f 100644 (file)
@@ -898,17 +898,17 @@ get_proc_name (const char *name, gfc_symbol **result, bool module_fcn_entry)
          && sym->attr.proc != 0
          && (sym->attr.subroutine || sym->attr.function)
          && sym->attr.if_source != IFSRC_UNKNOWN)
-       gfc_error_now ("Procedure '%s' at %C is already defined at %L",
-                      name, &sym->declared_at);
+       gfc_error_now_1 ("Procedure '%s' at %C is already defined at %L",
+                        name, &sym->declared_at);
 
       /* Trap a procedure with a name the same as interface in the
         encompassing scope.  */
       if (sym->attr.generic != 0
          && (sym->attr.subroutine || sym->attr.function)
          && !sym->attr.mod_proc)
-       gfc_error_now ("Name '%s' at %C is already defined"
-                      " as a generic interface at %L",
-                      name, &sym->declared_at);
+       gfc_error_now_1 ("Name '%s' at %C is already defined"
+                        " as a generic interface at %L",
+                        name, &sym->declared_at);
 
       /* Trap declarations of attributes in encompassing scope.  The
         signature for this is that ts.kind is set.  Legitimate
@@ -919,9 +919,9 @@ get_proc_name (const char *name, gfc_symbol **result, bool module_fcn_entry)
          && gfc_current_ns->parent != NULL
          && sym->attr.access == 0
          && !module_fcn_entry)
-       gfc_error_now ("Procedure '%s' at %C has an explicit interface "
-                      "and must not have attributes declared at %L",
-                      name, &sym->declared_at);
+       gfc_error_now_1 ("Procedure '%s' at %C has an explicit interface "
+                        "and must not have attributes declared at %L",
+                        name, &sym->declared_at);
     }
 
   if (gfc_current_ns->parent == NULL || *result == NULL)
@@ -990,9 +990,9 @@ gfc_verify_c_interop_param (gfc_symbol *sym)
     {
       if (sym->attr.is_bind_c == 0)
         {
-          gfc_error_now_2 ("Procedure %qs at %L must have the BIND(C) "
-                          "attribute to be C interoperable", sym->name,
-                          &(sym->declared_at));
+          gfc_error_now ("Procedure %qs at %L must have the BIND(C) "
+                        "attribute to be C interoperable", sym->name,
+                        &(sym->declared_at));
           return false;
         }
       else
@@ -1029,7 +1029,7 @@ gfc_verify_c_interop_param (gfc_symbol *sym)
                           "because it is polymorphic",
                           sym->name, &(sym->declared_at),
                           sym->ns->proc_name->name);
-             else if (gfc_option.warn_c_binding_type)
+             else if (warn_c_binding_type)
                gfc_warning ("Variable '%s' at %L is a dummy argument of the "
                             "BIND(C) procedure '%s' but may not be C "
                             "interoperable",
@@ -1182,9 +1182,9 @@ build_sym (const char *name, gfc_charlen *cl, bool cl_deferred,
       if (sym->common_block != NULL && sym->common_block->is_bind_c == 1
           && sym->ts.is_c_interop != 1)
         {
-          gfc_error_now ("Variable '%s' in common block '%s' at %C "
+          gfc_error_now ("Variable %qs in common block %qs at %C "
                          "must be declared with a C interoperable "
-                         "kind since common block '%s' is BIND(C)",
+                         "kind since common block %qs is BIND(C)",
                          sym->name, sym->common_block->name,
                          sym->common_block->name);
           gfc_clear_error ();
@@ -1224,9 +1224,9 @@ gfc_set_constant_character_len (int len, gfc_expr *expr, int check_len)
        gfc_wide_memset (&s[slen], ' ', len - slen);
 
       if (warn_character_truncation && slen > len)
-       gfc_warning_now_2 (OPT_Wcharacter_truncation,
-                          "CHARACTER expression at %L is being truncated "
-                          "(%d/%d)", &expr->where, slen, len);
+       gfc_warning_now (OPT_Wcharacter_truncation,
+                        "CHARACTER expression at %L is being truncated "
+                        "(%d/%d)", &expr->where, slen, len);
 
       /* Apply the standard by 'hand' otherwise it gets cleared for
         initializers.  */
@@ -4029,7 +4029,7 @@ verify_bind_c_sym (gfc_symbol *tmp_sym, gfc_typespec *ts,
     {
       tmp_sym = tmp_sym->result;
       /* Make sure it wasn't an implicitly typed result.  */
-      if (tmp_sym->attr.implicit_type && gfc_option.warn_c_binding_type)
+      if (tmp_sym->attr.implicit_type && warn_c_binding_type)
        {
          gfc_warning ("Implicitly declared BIND(C) function '%s' at "
                        "%L may not be C interoperable", tmp_sym->name,
@@ -4050,7 +4050,7 @@ verify_bind_c_sym (gfc_symbol *tmp_sym, gfc_typespec *ts,
       if (!gfc_verify_c_interop (&(tmp_sym->ts)))
        {
          /* See if we're dealing with a sym in a common block or not.  */
-         if (is_in_common == 1 && gfc_option.warn_c_binding_type)
+         if (is_in_common == 1 && warn_c_binding_type)
            {
              gfc_warning ("Variable '%s' in common block '%s' at %L "
                            "may not be a C interoperable "
@@ -4064,7 +4064,7 @@ verify_bind_c_sym (gfc_symbol *tmp_sym, gfc_typespec *ts,
                 gfc_error ("Type declaration '%s' at %L is not C "
                            "interoperable but it is BIND(C)",
                            tmp_sym->name, &(tmp_sym->declared_at));
-              else if (gfc_option.warn_c_binding_type)
+              else if (warn_c_binding_type)
                 gfc_warning ("Variable '%s' at %L "
                              "may not be a C interoperable "
                              "kind but it is bind(c)",
@@ -4130,8 +4130,8 @@ verify_bind_c_sym (gfc_symbol *tmp_sym, gfc_typespec *ts,
       && tmp_sym->binding_label)
       /* Use gfc_warning_now because we won't say that the symbol fails
         just because of this.  */
-      gfc_warning_now ("Symbol '%s' at %L is marked PRIVATE but has been "
-                      "given the binding label '%s'", tmp_sym->name,
+      gfc_warning_now ("Symbol %qs at %L is marked PRIVATE but has been "
+                      "given the binding label %qs", tmp_sym->name,
                       &(tmp_sym->declared_at), tmp_sym->binding_label);
 
   return retval;
index 202dd88fd4f351e98f67763fd5ab919c9584dc15..a0ad2ad9c71fd9cbb9775bd1bddb5b7d6931db5e 100644 (file)
@@ -933,10 +933,11 @@ gfc_notify_std (int std, const char *gmsgid, ...)
 
 
 /* Immediate warning (i.e. do not buffer the warning).  */
-/* Use gfc_warning_now_2 instead, unless gmsgid contains a %L.  */
+/* Use gfc_warning_now instead, unless two locations are used in the same
+   warning or for scanner.c, if the location is not properly set up.  */
 
 void
-gfc_warning_now (const char *gmsgid, ...)
+gfc_warning_now_1 (const char *gmsgid, ...)
 {
   va_list argp;
   int i;
@@ -1094,10 +1095,12 @@ gfc_diagnostic_finalizer (diagnostic_context *context,
 }
 
 /* Immediate warning (i.e. do not buffer the warning).  */
-/* This function uses the common diagnostics, but does not support %L, yet.  */
+/* This function uses the common diagnostics, but does not support
+   two locations; when being used in scanner.c, ensure that the location
+   is properly setup. Otherwise, use gfc_warning_now_1.   */
 
 bool
-gfc_warning_now_2 (int opt, const char *gmsgid, ...)
+gfc_warning_now (int opt, const char *gmsgid, ...)
 {
   va_list argp;
   diagnostic_info diagnostic;
@@ -1113,10 +1116,12 @@ gfc_warning_now_2 (int opt, const char *gmsgid, ...)
 }
 
 /* Immediate warning (i.e. do not buffer the warning).  */
-/* This function uses the common diagnostics, but does not support %L, yet.  */
+/* This function uses the common diagnostics, but does not support
+   two locations; when being used in scanner.c, ensure that the location
+   is properly setup. Otherwise, use gfc_warning_now_1.   */
 
 bool
-gfc_warning_now_2 (const char *gmsgid, ...)
+gfc_warning_now (const char *gmsgid, ...)
 {
   va_list argp;
   diagnostic_info diagnostic;
@@ -1132,10 +1137,12 @@ gfc_warning_now_2 (const char *gmsgid, ...)
 
 
 /* Immediate error (i.e. do not buffer).  */
-/* This function uses the common diagnostics, but does not support %L, yet.  */
+/* This function uses the common diagnostics, but does not support
+   two locations; when being used in scanner.c, ensure that the location
+   is properly setup. Otherwise, use gfc_error_now_1.   */
 
 void
-gfc_error_now_2 (const char *gmsgid, ...)
+gfc_error_now (const char *gmsgid, ...)
 {
   va_list argp;
   diagnostic_info diagnostic;
@@ -1241,10 +1248,11 @@ warning:
 
 
 /* Immediate error.  */
-/* Use gfc_error_now_2 instead, unless gmsgid contains a %L.  */
+/* Use gfc_error_now instead, unless two locations are used in the same
+   warning or for scanner.c, if the location is not properly set up.  */
 
 void
-gfc_error_now (const char *gmsgid, ...)
+gfc_error_now_1 (const char *gmsgid, ...)
 {
   va_list argp;
   int i;
@@ -1382,9 +1390,9 @@ void
 gfc_get_errors (int *w, int *e)
 {
   if (w != NULL)
-    *w = warnings;
+    *w = warnings + warningcount + werrorcount;
   if (e != NULL)
-    *e = errors;
+    *e = errors + errorcount + sorrycount + werrorcount;
 }
 
 
index 1bd62fa87f1cf2cca0d9d2fcd33092c427b1e65d..d5b48cfbb7895199c18c0f538830d36fc3a1fd26 100644 (file)
@@ -21,6 +21,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
+#include "flags.h"
 #include "gfortran.h"
 #include "arith.h"
 #include "match.h"
@@ -3227,7 +3228,7 @@ gfc_check_assign (gfc_expr *lvalue, gfc_expr *rvalue, int conform)
   if (rvalue->expr_type == EXPR_CONSTANT && lvalue->ts.type == rvalue->ts.type
       && (lvalue->ts.type == BT_REAL || lvalue->ts.type == BT_COMPLEX))
     {
-      if (lvalue->ts.kind < rvalue->ts.kind && gfc_option.gfc_warn_conversion)
+      if (lvalue->ts.kind < rvalue->ts.kind && warn_conversion)
        {
          /* As a special bonus, don't warn about REAL rvalues which are not
             changed by the conversion if -Wconversion is specified.  */
@@ -3258,8 +3259,7 @@ gfc_check_assign (gfc_expr *lvalue, gfc_expr *rvalue, int conform)
                         gfc_typename (&lvalue->ts), &rvalue->where);
 
        }
-      else if (gfc_option.warn_conversion_extra
-              && lvalue->ts.kind > rvalue->ts.kind)
+      else if (warn_conversion_extra && lvalue->ts.kind > rvalue->ts.kind)
        {
          gfc_warning ("Conversion from %s to %s at %L",
                       gfc_typename (&rvalue->ts),
@@ -4971,11 +4971,12 @@ gfc_check_vardef_context (gfc_expr* e, bool pointer, bool alloc_obj,
                          if (gfc_dep_compare_expr (ec, en) == 0)
                            {
                              if (context)
-                               gfc_error_now ("Elements with the same value at %L"
-                                              " and %L in vector subscript"
-                                              " in a variable definition"
-                                              " context (%s)", &(ec->where),
-                                            &(en->where), context);
+                               gfc_error_now_1 ("Elements with the same value "
+                                                "at %L and %L in vector "
+                                                "subscript in a variable "
+                                                "definition context (%s)",
+                                                &(ec->where), &(en->where),
+                                                context);
                              return false;
                            }
                        }
index 97a9164b44d0a417c1e1a4c9ebc18860219d012d..9b96f2955118f6c13be6cf8ef43609c06d080353 100644 (file)
@@ -1708,17 +1708,19 @@ doloop_code (gfc_code **c, int *walk_subtrees ATTRIBUTE_UNUSED,
                  && a->expr->symtree->n.sym == do_sym)
                {
                  if (f->sym->attr.intent == INTENT_OUT)
-                   gfc_error_now("Variable '%s' at %L set to undefined value "
-                                 "inside loop  beginning at %L as INTENT(OUT) "
-                                 "argument to subroutine '%s'", do_sym->name,
-                                 &a->expr->where, &doloop_list[i]->loc,
-                                 co->symtree->n.sym->name);
+                   gfc_error_now_1 ("Variable '%s' at %L set to undefined "
+                                    "value inside loop  beginning at %L as "
+                                    "INTENT(OUT) argument to subroutine '%s'",
+                                    do_sym->name, &a->expr->where,
+                                    &doloop_list[i]->loc,
+                                    co->symtree->n.sym->name);
                  else if (f->sym->attr.intent == INTENT_INOUT)
-                   gfc_error_now("Variable '%s' at %L not definable inside loop "
-                                 "beginning at %L as INTENT(INOUT) argument to "
-                                 "subroutine '%s'", do_sym->name,
-                                 &a->expr->where, &doloop_list[i]->loc,
-                                 co->symtree->n.sym->name);
+                   gfc_error_now_1 ("Variable '%s' at %L not definable inside "
+                                    "loop beginning at %L as INTENT(INOUT) "
+                                    "argument to subroutine '%s'",
+                                    do_sym->name, &a->expr->where,
+                                    &doloop_list[i]->loc,
+                                    co->symtree->n.sym->name);
                }
            }
          a = a->next;
@@ -1778,17 +1780,17 @@ do_function (gfc_expr **e, int *walk_subtrees ATTRIBUTE_UNUSED,
              && a->expr->symtree->n.sym == do_sym)
            {
              if (f->sym->attr.intent == INTENT_OUT)
-               gfc_error_now("Variable '%s' at %L set to undefined value "
-                             "inside loop beginning at %L as INTENT(OUT) "
-                             "argument to function '%s'", do_sym->name,
-                             &a->expr->where, &doloop_list[i]->loc,
-                             expr->symtree->n.sym->name);
+               gfc_error_now_1 ("Variable '%s' at %L set to undefined value "
+                                "inside loop beginning at %L as INTENT(OUT) "
+                                "argument to function '%s'", do_sym->name,
+                                &a->expr->where, &doloop_list[i]->loc,
+                                expr->symtree->n.sym->name);
              else if (f->sym->attr.intent == INTENT_INOUT)
-               gfc_error_now("Variable '%s' at %L not definable inside loop "
-                             "beginning at %L as INTENT(INOUT) argument to "
-                             "function '%s'", do_sym->name,
-                             &a->expr->where, &doloop_list[i]->loc,
-                             expr->symtree->n.sym->name);
+               gfc_error_now_1 ("Variable '%s' at %L not definable inside loop"
+                                " beginning at %L as INTENT(INOUT) argument to"
+                                " function '%s'", do_sym->name,
+                                &a->expr->where, &doloop_list[i]->loc,
+                                expr->symtree->n.sym->name);
            }
        }
       a = a->next;
index 1b2602806d8558591b856ffc14317ae763d6e24c..095d526f025176ab911d644dc647299b96d56a21 100644 (file)
@@ -2444,9 +2444,6 @@ typedef struct
 
   int warn_aliasing;
   int warn_ampersand;
-  int gfc_warn_conversion;
-  int warn_c_binding_type;
-  int warn_conversion_extra;
   int warn_function_elimination;
   int warn_implicit_interface;
   int warn_implicit_procedure;
@@ -2454,7 +2451,6 @@ typedef struct
   int warn_surprising;
   int warn_underflow;
   int warn_intrinsic_shadow;
-  int warn_intrinsics_std;
   int warn_array_temp;
   int warn_align_commons;
   int warn_real_q_constant;
@@ -2695,16 +2691,16 @@ void gfc_buffer_error (int);
 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);
-bool gfc_warning_now_2 (const char *gmsgid, ...) ATTRIBUTE_GCC_GFC(1,2);
-bool gfc_warning_now_2 (int opt, const char *gmsgid, ...) ATTRIBUTE_GCC_GFC(2,3);
+void gfc_warning_now_1 (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
+bool gfc_warning_now (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
+bool gfc_warning_now (int opt, const char *, ...) 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_now_1 (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
 void gfc_error_now (const char *, ...) ATTRIBUTE_GCC_GFC(1,2);
-void gfc_error_now_2 (const char *gmsgid, ...) 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);
 void gfc_clear_error (void);
index 9bc9b3cb9129b6d69467df91977c98a58906e376..8cbcac980bbe05fec7e5c7541a035144c5c34252 100644 (file)
@@ -1050,11 +1050,10 @@ gfc_is_intrinsic (gfc_symbol* sym, int subroutine_flag, locus loc)
   if (!gfc_check_intrinsic_standard (isym, &symstd, false, loc)
       && !sym->attr.artificial)
     {
-      if (sym->attr.proc == PROC_UNKNOWN
-         && gfc_option.warn_intrinsics_std)
-       gfc_warning_now ("The intrinsic '%s' at %L is not included in the"
-                        " selected standard but %s and '%s' will be"
-                        " treated as if declared EXTERNAL.  Use an"
+      if (sym->attr.proc == PROC_UNKNOWN && warn_intrinsics_std)
+       gfc_warning_now (OPT_Wintrinsics_std, "The intrinsic %qs at %L is not "
+                        "included in the selected standard but %s and %qs will"
+                        " be treated as if declared EXTERNAL.  Use an"
                         " appropriate -std=* option or define"
                         " -fall-intrinsics to allow this intrinsic.",
                         sym->name, &loc, symstd, sym->name);
@@ -4652,14 +4651,14 @@ gfc_convert_type_warn (gfc_expr *expr, gfc_typespec *ts, int eflag, int wflag)
          /* Larger kinds can hold values of smaller kinds without problems.
             Hence, only warn if target kind is smaller than the source
             kind - or if -Wconversion-extra is specified.  */
-         if (gfc_option.warn_conversion_extra)
-           gfc_warning_now ("Conversion from %s to %s at %L",
+         if (warn_conversion && from_ts.kind > ts->kind)
+           gfc_warning_now (OPT_Wconversion, "Possible change of value in "
+                            "conversion from %s to %s at %L",
                             gfc_typename (&from_ts), gfc_typename (ts),
                             &expr->where);
-         else if (gfc_option.gfc_warn_conversion
-                  && from_ts.kind > ts->kind)
-           gfc_warning_now ("Possible change of value in conversion "
-                            "from %s to %s at %L", gfc_typename (&from_ts),
+         else if (warn_conversion_extra)
+           gfc_warning_now (OPT_Wconversion_extra, "Conversion from %s to %s "
+                            "at %L", gfc_typename (&from_ts),
                             gfc_typename (ts), &expr->where);
        }
       else if ((from_ts.type == BT_REAL && ts->type == BT_INTEGER)
@@ -4668,18 +4667,17 @@ gfc_convert_type_warn (gfc_expr *expr, gfc_typespec *ts, int eflag, int wflag)
        {
          /* Conversion from REAL/COMPLEX to INTEGER or COMPLEX to REAL
             usually comes with a loss of information, regardless of kinds.  */
-         if (gfc_option.warn_conversion_extra
-             || gfc_option.gfc_warn_conversion)
-           gfc_warning_now ("Possible change of value in conversion "
-                            "from %s to %s at %L", gfc_typename (&from_ts),
-                            gfc_typename (ts), &expr->where);
+         if (warn_conversion)
+           gfc_warning_now (OPT_Wconversion, "Possible change of value in "
+                            "conversion from %s to %s at %L",
+                            gfc_typename (&from_ts), gfc_typename (ts),
+                            &expr->where);
        }
       else if (from_ts.type == BT_HOLLERITH || ts->type == BT_HOLLERITH)
        {
          /* If HOLLERITH is involved, all bets are off.  */
-         if (gfc_option.warn_conversion_extra
-             || gfc_option.gfc_warn_conversion)
-           gfc_warning_now ("Conversion from %s to %s at %L",
+         if (warn_conversion)
+           gfc_warning_now (OPT_Wconversion, "Conversion from %s to %s at %L",
                             gfc_typename (&from_ts), gfc_typename (ts),
                             &expr->where);
        }
index 69c36554ab9599f59d21644ee26b81f8b46d5e4c..8782f125ed52f0c309a3615a95624f4f0f985a6b 100644 (file)
@@ -803,7 +803,8 @@ the expression after conversion. Implied by @option{-Wall}.
 @opindex @code{Wconversion-extra}
 @cindex warnings, conversion
 @cindex conversion
-Warn about implicit conversions between different types and kinds.
+Warn about implicit conversions between different types and kinds. This
+option does @emph{not} imply @option{-Wconversion}.
 
 @item -Wextra
 @opindex @code{Wextra}
index bac7dce8040fab68d89c1da34020a03fc5cd4e61..dc7c2a7d522b5e2f7c041e24d1a765676220f346 100644 (file)
@@ -210,7 +210,7 @@ Fortran Warning
 Warn about creation of array temporaries
 
 Wc-binding-type
-Fortran Warning
+Fortran Var(warn_c_binding_type) Warning LangEnabledBy(Fortran,Wall)
 Warn if the type of a variable might be not interoperable with C
 
 Wdate-time
@@ -226,11 +226,11 @@ Fortran Warning
 Warn about equality comparisons involving REAL or COMPLEX expressions
 
 Wconversion
-Fortran Warning
+Fortran Var(warn_conversion) Warning LangEnabledBy(Fortran,Wall)
 ; Documented in C
 
 Wconversion-extra
-Fortran Warning
+Fortran Var(warn_conversion_extra) Warning
 Warn about most implicit conversions
 
 Wextra
@@ -254,7 +254,7 @@ Fortran Warning
 Warn about truncated source lines
 
 Wintrinsics-std
-Fortran Warning
+Fortran Var(warn_intrinsics_std) Warning LangEnabledBy(Fortran,Wall)
 Warn on intrinsics not part of the selected standard
 
 Wmissing-include-dirs
index a157fe7515f098ccb15bd7aeee796218d4edee58..bf3cd80689af6a4c375a3f20a64eabd91b472036 100644 (file)
@@ -4299,18 +4299,18 @@ gfc_match_common (void)
                   /* If we find an error, just print it and continue,
                      cause it's just semantic, and we can see if there
                      are more errors.  */
-                  gfc_error_now ("Variable '%s' at %L in common block '%s' "
-                                 "at %C must be declared with a C "
-                                 "interoperable kind since common block "
-                                 "'%s' is bind(c)",
-                                 sym->name, &(sym->declared_at), t->name,
-                                 t->name);
+                  gfc_error_now_1 ("Variable '%s' at %L in common block '%s' "
+                                  "at %C must be declared with a C "
+                                  "interoperable kind since common block "
+                                  "'%s' is bind(c)",
+                                  sym->name, &(sym->declared_at), t->name,
+                                  t->name);
                 }
 
               if (sym->attr.is_bind_c == 1)
-                gfc_error_now ("Variable '%s' in common block "
-                               "'%s' at %C can not be bind(c) since "
-                               "it is not global", sym->name, t->name);
+                gfc_error_now ("Variable %qs in common block %qs at %C can not "
+                               "be bind(c) since it is not global", sym->name,
+                              t->name);
             }
 
          if (sym->attr.in_common)
index b88e669c5b30eabe7cedd874055ec80d7832e0db..2449bbcb37d59fca787fcac5f3fc8dee8cac7031 100644 (file)
@@ -6602,7 +6602,7 @@ use_iso_fortran_env_module (void)
                gfc_warning_now ("Use of the NUMERIC_STORAGE_SIZE named "
                                 "constant from intrinsic module "
                                 "ISO_FORTRAN_ENV at %L is incompatible with "
-                                "option %s", &u->where,
+                                "option %qs", &u->where,
                                 gfc_option.flag_default_integer
                                   ? "-fdefault-integer-8"
                                   : "-fdefault-real-8");
@@ -6745,8 +6745,8 @@ gfc_use_module (gfc_use_list *module)
   current_intmod = INTMOD_NONE;
 
   if (!only_flag)
-    gfc_warning_now_2 (OPT_Wuse_without_only,
-                      "USE statement at %C has no ONLY qualifier");
+    gfc_warning_now (OPT_Wuse_without_only,
+                    "USE statement at %C has no ONLY qualifier");
 
   filename = XALLOCAVEC (char, strlen (module_name) + strlen (MODULE_EXTENSION)
                               + 1);
index 0dd0118cdd4d0b1dbb883f577c5bd0a92f7d2316..d8ba7988a00e8273090e0fe63e5d4acc2f7e0a3c 100644 (file)
@@ -96,16 +96,12 @@ gfc_init_options (unsigned int decoded_options_count,
   gfc_option.warn_aliasing = 0;
   gfc_option.warn_ampersand = 0;
   gfc_option.warn_array_temp = 0;
-  gfc_option.warn_c_binding_type = 0;
-  gfc_option.gfc_warn_conversion = 0;
-  gfc_option.warn_conversion_extra = 0;
   gfc_option.warn_function_elimination = 0;
   gfc_option.warn_implicit_interface = 0;
   gfc_option.warn_line_truncation = 0;
   gfc_option.warn_surprising = 0;
   gfc_option.warn_underflow = 1;
   gfc_option.warn_intrinsic_shadow = 0;
-  gfc_option.warn_intrinsics_std = 0;
   gfc_option.warn_align_commons = 1;
   gfc_option.warn_real_q_constant = 0;
   gfc_option.warn_unused_dummy_argument = 0;
@@ -359,8 +355,8 @@ gfc_post_options (const char **pfilename)
       if (gfc_current_form == FORM_UNKNOWN)
        {
          gfc_current_form = FORM_FREE;
-         gfc_warning_now_2 ("Reading file %qs as free form", 
-                            (filename[0] == '\0') ? "<stdin>" : filename);
+         gfc_warning_now ("Reading file %qs as free form", 
+                          (filename[0] == '\0') ? "<stdin>" : filename);
        }
     }
 
@@ -369,10 +365,10 @@ gfc_post_options (const char **pfilename)
   if (gfc_current_form == FORM_FREE)
     {
       if (gfc_option.flag_d_lines == 0)
-       gfc_warning_now_2 ("%<-fd-lines-as-comments%> has no effect "
+       gfc_warning_now ("%<-fd-lines-as-comments%> has no effect "
                           "in free form");
       else if (gfc_option.flag_d_lines == 1)
-       gfc_warning_now_2 ("%<-fd-lines-as-code%> has no effect in free form");
+       gfc_warning_now ("%<-fd-lines-as-code%> has no effect in free form");
     }
 
   /* If -pedantic, warn about the use of GNU extensions.  */
@@ -390,20 +386,20 @@ gfc_post_options (const char **pfilename)
 
   if (!gfc_option.flag_automatic && gfc_option.flag_max_stack_var_size != -2
       && gfc_option.flag_max_stack_var_size != 0)
-    gfc_warning_now_2 ("Flag %<-fno-automatic%> overwrites %<-fmax-stack-var-size=%d%>",
+    gfc_warning_now ("Flag %<-fno-automatic%> overwrites %<-fmax-stack-var-size=%d%>",
                       gfc_option.flag_max_stack_var_size);
   else if (!gfc_option.flag_automatic && gfc_option.flag_recursive)
-    gfc_warning_now_2 ("Flag %<-fno-automatic%> overwrites %<-frecursive%>");
+    gfc_warning_now ("Flag %<-fno-automatic%> overwrites %<-frecursive%>");
   else if (!gfc_option.flag_automatic && gfc_option.gfc_flag_openmp)
-    gfc_warning_now_2 ("Flag %<-fno-automatic%> overwrites %<-frecursive%> implied by "
+    gfc_warning_now ("Flag %<-fno-automatic%> overwrites %<-frecursive%> implied by "
                       "%<-fopenmp%>");
   else if (gfc_option.flag_max_stack_var_size != -2
           && gfc_option.flag_recursive)
-    gfc_warning_now_2 ("Flag %<-frecursive%> overwrites %<-fmax-stack-var-size=%d%>",
+    gfc_warning_now ("Flag %<-frecursive%> overwrites %<-fmax-stack-var-size=%d%>",
                       gfc_option.flag_max_stack_var_size);
   else if (gfc_option.flag_max_stack_var_size != -2
           && gfc_option.gfc_flag_openmp)
-    gfc_warning_now_2 ("Flag %<-fmax-stack-var-size=%d%> overwrites %<-frecursive%> "
+    gfc_warning_now ("Flag %<-fmax-stack-var-size=%d%> overwrites %<-frecursive%> "
                       "implied by %<-fopenmp%>", 
                     gfc_option.flag_max_stack_var_size);
 
@@ -452,13 +448,10 @@ set_Wall (int setting)
 {
   gfc_option.warn_aliasing = setting;
   gfc_option.warn_ampersand = setting;
-  gfc_option.warn_c_binding_type = setting;
-  gfc_option.gfc_warn_conversion = setting;
   gfc_option.warn_line_truncation = setting;
   gfc_option.warn_surprising = setting;
   gfc_option.warn_underflow = setting;
   gfc_option.warn_intrinsic_shadow = setting;
-  gfc_option.warn_intrinsics_std = setting;
   gfc_option.warn_real_q_constant = setting;
   gfc_option.warn_unused_dummy_argument = setting;
   gfc_option.warn_target_lifetime = setting;
@@ -657,22 +650,10 @@ gfc_handle_option (size_t scode, const char *arg, int value,
       gfc_option.warn_array_temp = value;
       break;
 
-    case OPT_Wc_binding_type:
-      gfc_option.warn_c_binding_type = value;
-      break;
-
     case OPT_Wcompare_reals:
       gfc_option.warn_compare_reals = value;
       break;
 
-    case OPT_Wconversion:
-      gfc_option.gfc_warn_conversion = value;
-      break;
-
-    case OPT_Wconversion_extra:
-      gfc_option.warn_conversion_extra = value;
-      break;
-
     case OPT_Wextra:
       set_Wextra (value);
       break;
@@ -1063,10 +1044,6 @@ gfc_handle_option (size_t scode, const char *arg, int value,
       gfc_option.warn_std = 0;
       break;
 
-    case OPT_Wintrinsics_std:
-      gfc_option.warn_intrinsics_std = value;
-      break;
-
     case OPT_fshort_enums:
       /* Handled in language-independent code.  */
       break;
index f9c16833af183e0e22283274f2793554f13e563c..540424f88bdec84b40840bd90e4543b386a713f7 100644 (file)
@@ -550,7 +550,7 @@ decode_statement (void)
      stored an error message of some sort.  */
 
   if (gfc_error_check () == 0)
-    gfc_error_now_2 ("Unclassifiable statement at %C");
+    gfc_error_now ("Unclassifiable statement at %C");
 
   reject_statement ();
 
@@ -797,7 +797,7 @@ decode_gcc_attribute (void)
      stored an error message of some sort.  */
 
   if (gfc_error_check () == 0)
-    gfc_error_now_2 ("Unclassifiable GCC directive at %C");
+    gfc_error_now ("Unclassifiable GCC directive at %C");
 
   reject_statement ();
 
@@ -836,17 +836,17 @@ next_free (void)
          gfc_match_small_literal_int (&i, &cnt);
 
          if (cnt > 5)
-           gfc_error_now_2 ("Too many digits in statement label at %C");
+           gfc_error_now ("Too many digits in statement label at %C");
 
          if (i == 0)
-           gfc_error_now_2 ("Zero is not a valid statement label at %C");
+           gfc_error_now ("Zero is not a valid statement label at %C");
 
          do
            c = gfc_next_ascii_char ();
          while (ISDIGIT(c));
 
          if (!gfc_is_whitespace (c))
-           gfc_error_now_2 ("Non-numeric character in statement label at %C");
+           gfc_error_now ("Non-numeric character in statement label at %C");
 
          return ST_NONE;
        }
@@ -858,7 +858,7 @@ next_free (void)
 
          if (at_bol && gfc_peek_ascii_char () == ';')
            {
-             gfc_error_now_2 ("Semicolon at %C needs to be preceded by "
+             gfc_error_now ("Semicolon at %C needs to be preceded by "
                             "statement");
              gfc_next_ascii_char (); /* Eat up the semicolon.  */
              return ST_NONE;
@@ -917,8 +917,8 @@ next_free (void)
   if (at_bol && c == ';')
     {
       if (!(gfc_option.allow_std & GFC_STD_F2008))
-       gfc_error_now_2 ("Fortran 2008: Semicolon at %C without preceding "
-                        "statement");
+       gfc_error_now ("Fortran 2008: Semicolon at %C without preceding "
+                      "statement");
       gfc_next_ascii_char (); /* Eat up the semicolon.  */
       return ST_NONE;
     }
@@ -1017,7 +1017,7 @@ next_fixed (void)
   if (digit_flag)
     {
       if (label == 0)
-       gfc_warning_now_2 ("Zero is not a valid statement label at %C");
+       gfc_warning_now ("Zero is not a valid statement label at %C");
       else
        {
          /* We've found a valid statement label.  */
@@ -3505,8 +3505,8 @@ gfc_check_do_variable (gfc_symtree *st)
   for (s=gfc_state_stack; s; s = s->previous)
     if (s->do_variable == st)
       {
-       gfc_error_now("Variable '%s' at %C cannot be redefined inside "
-                     "loop beginning at %L", st->name, &s->head->loc);
+       gfc_error_now_1 ("Variable '%s' at %C cannot be redefined inside "
+                        "loop beginning at %L", st->name, &s->head->loc);
        return 1;
       }
 
index 6dc15857559b003c5b3ba7f54c2700fb1b667f4d..08bbda413703fb127a81ab12efcc795667859286 100644 (file)
@@ -924,7 +924,7 @@ resolve_common_vars (gfc_symbol *sym, bool named_common)
        }
 
       if (UNLIMITED_POLY (csym))
-       gfc_error_now ("'%s' in cannot appear in COMMON at %L "
+       gfc_error_now ("%qs in cannot appear in COMMON at %L "
                       "[F2008:C5100]", csym->name, &csym->declared_at);
 
       if (csym->ts.type != BT_DERIVED)
@@ -932,15 +932,15 @@ resolve_common_vars (gfc_symbol *sym, bool named_common)
 
       if (!(csym->ts.u.derived->attr.sequence
            || csym->ts.u.derived->attr.is_bind_c))
-       gfc_error_now ("Derived type variable '%s' in COMMON at %L "
+       gfc_error_now ("Derived type variable %qs in COMMON at %L "
                       "has neither the SEQUENCE nor the BIND(C) "
                       "attribute", csym->name, &csym->declared_at);
       if (csym->ts.u.derived->attr.alloc_comp)
-       gfc_error_now ("Derived type variable '%s' in COMMON at %L "
+       gfc_error_now ("Derived type variable %qs in COMMON at %L "
                       "has an ultimate component that is "
                       "allocatable", csym->name, &csym->declared_at);
       if (gfc_has_default_initializer (csym->ts.u.derived))
-       gfc_error_now ("Derived type variable '%s' in COMMON at %L "
+       gfc_error_now ("Derived type variable %qs in COMMON at %L "
                       "may not have default initializer", csym->name,
                       &csym->declared_at);
 
@@ -9224,10 +9224,10 @@ resolve_ordinary_assign (gfc_code *code, gfc_namespace *ns)
        rlen = mpz_get_si (rhs->ts.u.cl->length->value.integer);
 
       if (rlen && llen && rlen > llen)
-       gfc_warning_now_2 (OPT_Wcharacter_truncation,
-                          "CHARACTER expression will be truncated "
-                          "in assignment (%d/%d) at %L",
-                          llen, rlen, &code->loc);
+       gfc_warning_now (OPT_Wcharacter_truncation,
+                        "CHARACTER expression will be truncated "
+                        "in assignment (%d/%d) at %L",
+                        llen, rlen, &code->loc);
     }
 
   /* Ensure that a vector index expression for the lvalue is evaluated
index e0b9a3bbbb83513e42a4c8d3e3a3cda8ce4a8b08..884fe70cb3efc2f65b618598eb5dc76ecadc37d0 100644 (file)
@@ -324,16 +324,16 @@ add_path_to_list (gfc_directorylist **list, const char *path,
   if (stat (q, &st))
     {
       if (errno != ENOENT)
-       gfc_warning_now_2 ("Include directory %qs: %s", path,
-                          xstrerror(errno));
+       gfc_warning_now ("Include directory %qs: %s", path,
+                        xstrerror(errno));
       else if (warn)
-       gfc_warning_now_2 (OPT_Wmissing_include_dirs,
-                          "Nonexistent include directory %qs", path);
+       gfc_warning_now (OPT_Wmissing_include_dirs,
+                        "Nonexistent include directory %qs", path);
       return;
     }
   else if (!S_ISDIR (st.st_mode))
     {
-      gfc_warning_now_2 ("%qs is not a directory", path);
+      gfc_warning_now ("%qs is not a directory", path);
       return;
     }
 
@@ -775,10 +775,10 @@ skip_free_comments (void)
                                }
                            }
                          else
-                           gfc_warning_now ("!$OMP at %C starts a commented "
-                                            "line as it neither is followed "
-                                            "by a space nor is a "
-                                            "continuation line");
+                           gfc_warning_now_1 ("!$OMP at %C starts a commented "
+                                              "line as it neither is followed "
+                                              "by a space nor is a "
+                                              "continuation line");
                        }
                      gfc_current_locus = old_loc;
                      next_char ();
@@ -1056,7 +1056,7 @@ restart:
 
          gfc_current_locus.lb->truncated = 0;
          gfc_current_locus.nextc =  gfc_current_locus.lb->line + maxlen;
-         gfc_warning_now ("Line truncated at %L", &gfc_current_locus);
+         gfc_warning_now_1 ("Line truncated at %L", &gfc_current_locus);
          gfc_current_locus.nextc = current_nextc;
        }
 
@@ -1194,7 +1194,7 @@ restart:
          && gfc_current_locus.lb->truncated)
        {
          gfc_current_locus.lb->truncated = 0;
-         gfc_warning_now ("Line truncated at %L", &gfc_current_locus);
+         gfc_warning_now_1 ("Line truncated at %L", &gfc_current_locus);
        }
 
       prev_openmp_flag = openmp_flag;
@@ -1388,7 +1388,7 @@ gfc_gobble_whitespace (void)
          if (cur_linenum != linenum)
            {
              linenum = cur_linenum;
-             gfc_warning_now ("Nonconforming tab character at %C");
+             gfc_warning_now_1 ("Nonconforming tab character at %C");
            }
        }
     }
@@ -1476,11 +1476,11 @@ load_line (FILE *input, gfc_char_t **pbuf, int *pbuflen, const int *first_char)
              && !seen_printable && seen_ampersand)
            {
              if (pedantic)
-               gfc_error_now_2 ("%<&%> not allowed by itself in line %d",
-                                  current_line);
+               gfc_error_now ("%<&%> not allowed by itself in line %d",
+                              current_line);
              else
-               gfc_warning_now_2 ("%<&%> not allowed by itself in line %d",
-                                    current_line);
+               gfc_warning_now ("%<&%> not allowed by itself in line %d",
+                                current_line);
            }
          break;
        }
@@ -1537,9 +1537,9 @@ load_line (FILE *input, gfc_char_t **pbuf, int *pbuflen, const int *first_char)
          if (warn_tabs && seen_comment == 0 && current_line != linenum)
            {
              linenum = current_line;
-             gfc_warning_now_2 (OPT_Wtabs,
-                                "Nonconforming tab character in column %d "
-                                "of line %d", i+1, linenum);
+             gfc_warning_now (OPT_Wtabs,
+                              "Nonconforming tab character in column %d "
+                              "of line %d", i+1, linenum);
            }
 
          while (i < 6)
@@ -1763,9 +1763,9 @@ preprocessor_line (gfc_char_t *c)
       if (!current_file->up
          || filename_cmp (current_file->up->filename, filename) != 0)
        {
-         gfc_warning_now ("%s:%d: file %s left but not entered",
-                          current_file->filename, current_file->line,
-                          filename);
+         gfc_warning_now_1 ("%s:%d: file %s left but not entered",
+                            current_file->filename, current_file->line,
+                            filename);
          if (unescape)
            free (wide_filename);
          free (filename);
@@ -1797,7 +1797,7 @@ preprocessor_line (gfc_char_t *c)
   return;
 
  bad_cpp_line:
-  gfc_warning_now ("%s:%d: Illegal preprocessor directive",
+  gfc_warning_now_1 ("%s:%d: Illegal preprocessor directive",
                   current_file->filename, current_file->line);
   current_file->line++;
 }
@@ -1922,7 +1922,7 @@ load_file (const char *realfilename, const char *displayedname, bool initial)
        input = gfc_open_file (realfilename);
       if (input == NULL)
        {
-         gfc_error_now_2 ("Can't open file %qs", filename);
+         gfc_error_now ("Can't open file %qs", filename);
          return false;
        }
     }
index 3eb58f4c8f429a0a08d50d5aa610bf7f4175aeaa..aeb7dce3ef2568d5cfcce19e236a9f5998eb1754 100644 (file)
@@ -270,11 +270,12 @@ gfc_set_default_type (gfc_symbol *sym, int error_flag, gfc_namespace *ns)
           && !gfc_build_class_symbol (&sym->ts, &sym->attr, &sym->as))
     return false;
 
-  if (sym->attr.is_bind_c == 1 && gfc_option.warn_c_binding_type)
+  if (sym->attr.is_bind_c == 1 && warn_c_binding_type)
     {
       /* BIND(C) variables should not be implicitly declared.  */
-      gfc_warning_now ("Implicitly declared BIND(C) variable '%s' at %L may "
-                       "not be C interoperable", sym->name, &sym->declared_at);
+      gfc_warning_now (OPT_Wc_binding_type, "Implicitly declared BIND(C) "
+                      "variable %qs at %L may not be C interoperable",
+                      sym->name, &sym->declared_at);
       sym->ts.f90_type = sym->ts.type;
     }
 
@@ -284,14 +285,15 @@ gfc_set_default_type (gfc_symbol *sym, int error_flag, gfc_namespace *ns)
          && (sym->ns->proc_name->attr.subroutine != 0
              || sym->ns->proc_name->attr.function != 0)
          && sym->ns->proc_name->attr.is_bind_c != 0
-         && gfc_option.warn_c_binding_type)
+         && warn_c_binding_type)
         {
           /* Dummy args to a BIND(C) routine may not be interoperable if
              they are implicitly typed.  */
-          gfc_warning_now ("Implicitly declared variable '%s' at %L may not "
-                           "be C interoperable but it is a dummy argument to "
-                           "the BIND(C) procedure '%s' at %L", sym->name,
-                           &(sym->declared_at), sym->ns->proc_name->name,
+          gfc_warning_now (OPT_Wc_binding_type, "Implicitly declared variable "
+                          "%qs at %L may not be C interoperable but it is a "
+                          "dummy argument to the BIND(C) procedure %qs at %L",
+                          sym->name, &(sym->declared_at),
+                          sym->ns->proc_name->name,
                            &(sym->ns->proc_name->declared_at));
           sym->ts.f90_type = sym->ts.type;
         }
@@ -3854,7 +3856,7 @@ verify_bind_c_derived_type (gfc_symbol *derived_sym)
   if (derived_sym->attr.is_bind_c != 1)
     {
       derived_sym->ts.is_c_interop = 0;
-      gfc_error_now ("Derived type '%s' declared at %L must have the BIND "
+      gfc_error_now ("Derived type %qs declared at %L must have the BIND "
                      "attribute to be C interoperable", derived_sym->name,
                      &(derived_sym->declared_at));
       retval = false;
@@ -3949,8 +3951,7 @@ verify_bind_c_derived_type (gfc_symbol *derived_sym)
                 recompiles with different flags (e.g., -m32 and -m64 on
                 x86_64 and using integer(4) to claim interop with a
                 C_LONG).  */
-             if (derived_sym->attr.is_bind_c == 1
-                 && gfc_option.warn_c_binding_type)
+             if (derived_sym->attr.is_bind_c == 1 && warn_c_binding_type)
                /* If the derived type is bind(c), all fields must be
                   interop.  */
                gfc_warning ("Component '%s' in derived type '%s' at %L "
@@ -3958,7 +3959,7 @@ verify_bind_c_derived_type (gfc_symbol *derived_sym)
                              "derived type '%s' is BIND(C)",
                              curr_comp->name, derived_sym->name,
                              &(curr_comp->loc), derived_sym->name);
-             else if (gfc_option.warn_c_binding_type)
+             else if (warn_c_binding_type)
                /* If derived type is param to bind(c) routine, or to one
                   of the iso_c_binding procs, it must be interoperable, so
                   all fields must interop too.  */
index 11c7de2ecf6fb1c4b031284d20b19af8ee9d0506..9811af8136bfc6255a57c25128deb1dcd7007122 100644 (file)
@@ -1,9 +1,16 @@
+2014-11-25  Tobias Burnus  <burnus@net-b.de>
+
+       * gfortran.dg/empty_label.f: Change test to continue testing
+       for -fmax-errors=1.
+       * gfortran.dg/empty_label.f90: Ditto.
+       * gfortran.dg/warnings_are_errors_1.f90: Update dg-*.
+
 2014-11-26  Andreas Tobler  <andreast@gcc.gnu.org>
 
-        * g++.old-deja/g++.jason/enum6.C: Use arm_eabi for dg-options.
-        Update comment.
-        * g++.old-deja/g++.law/enum9.C: Likewise.
-        * g++.old-deja/g++.other/enum4.C: Likewise.
+       * g++.old-deja/g++.jason/enum6.C: Use arm_eabi for dg-options.
+       Update comment.
+       * g++.old-deja/g++.law/enum9.C: Likewise.
+       * g++.old-deja/g++.other/enum4.C: Likewise.
 
 2014-11-25  H.J. Lu  <hongjiu.lu@intel.com>
 
index 5abf9d9f950b5177a73178c78cbc7f0f42ce7fde..fe1665228d3535ed8f368285269f052cafd1f51c 100644 (file)
@@ -1,6 +1,7 @@
 C { dg-do compile }
 C { dg-options "-Werror -fmax-errors=1" }
-100   ! { dg-warning "empty statement" }
+100   ! { dg-error "empty statement" }
       end
-C { dg-error "count reached limit" "" { target *-*-* } 0 }
-C { dg-excess-errors "compilation terminated" }
+subroutine foo ! Not checked ...
+end function ! ... but an error
+C { dg-excess-errors "warnings being treated as errors" }
index d7f4a8f11948ba3f4920f15dbffae8675aad214b..af067b5f57a79b0cf94a24558005538c2ac730fb 100644 (file)
@@ -1,6 +1,7 @@
 ! { dg-do compile }
 ! { dg-options "-Werror -fmax-errors=1" }
-100   ! { dg-warning "empty statement" }
+100   ! { dg-error "empty statement" }
 end
-! { dg-error "count reached limit" "" { target *-*-* } 0 }
-! { dg-excess-errors "compilation terminated" }
+subroutine foo ! Not checked ...
+end function ! ... but an error
+! { dg-excess-errors "warnings being treated as errors" }
index 0a0883c67c300714dcb1995fadd11445aff6d23a..8ce4699ad38d0b46a1a07e81fa3913ad882bacf1 100644 (file)
@@ -21,6 +21,7 @@
       cplx = 20.
 
 ! gfc_warning_now:
- 1 ! { dg-warning "Ignoring statement label in empty statement" }
+ 1 ! { dg-error "Ignoring statement label in empty statement" }
        end
 ! { dg-final { output-exists-not } }
+! { dg-excess-errors "warnings being treated as errors" }