gfortran.h (gfc_option_t): Remove flags moved as Var to .opt.

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
This commit is contained in:
Tobias Burnus 2014-11-25 23:33:32 +01:00
parent b1edcad11f
commit 4daa149b86
21 changed files with 247 additions and 213 deletions

View 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

View 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;
}

View 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;

View 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;
}

View 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;
}
}

View 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;

View 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);

View 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);
}

View 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}

View 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

View 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)

View 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);

View 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;

View 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;
}

View 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

View 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;
}
}

View 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. */

View 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>

View 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" }

View 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" }

View 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" }