From a96c39eaa1343c2b8ec2ba9529ea9e88722a2619 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Manuel=20L=C3=B3pez-Ib=C3=A1=C3=B1ez?= Date: Sun, 23 Nov 2014 23:47:42 +0000 Subject: [PATCH] re PR fortran/44054 (Handle -Werror, -Werror=, -fdiagnostics-show-option, !GCC$ diagnostic (pragmas) and color) MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit gcc/fortran/ChangeLog: 2014-11-23 Manuel López-Ibáñez PR fortran/44054 * decl.c (gfc_verify_c_interop_param): Use gfc_error_now_2. (gfc_set_constant_character_len): Use gfc_warning_now_2. * resolve.c (resolve_ordinary_assign): Likewise. * gfortran.h (warn_character_truncation): Do not declare here. * error.c (gfc_format_decoder): Handle %L. * lang.opt (Wcharacter-truncation): Add Var and LangEnabledBy. * options.c (gfc_init_options): Do not handle warn_character_truncation explicitly. (set_Wall): Likewise. (gfc_handle_option): Likewise. From-SVN: r217992 --- gcc/fortran/ChangeLog | 14 ++++++++++++++ gcc/fortran/decl.c | 14 +++++++------- gcc/fortran/error.c | 15 +++++++++++---- gcc/fortran/gfortran.h | 1 - gcc/fortran/lang.opt | 2 +- gcc/fortran/options.c | 6 ------ gcc/fortran/resolve.c | 9 +++++---- 7 files changed, 38 insertions(+), 23 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 41169a856af..b79f9c23be5 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,17 @@ +2014-11-23 Manuel López-Ibáñez + + PR fortran/44054 + * decl.c (gfc_verify_c_interop_param): Use gfc_error_now_2. + (gfc_set_constant_character_len): Use gfc_warning_now_2. + * resolve.c (resolve_ordinary_assign): Likewise. + * gfortran.h (warn_character_truncation): Do not declare here. + * error.c (gfc_format_decoder): Handle %L. + * lang.opt (Wcharacter-truncation): Add Var and LangEnabledBy. + * options.c (gfc_init_options): Do not handle + warn_character_truncation explicitly. + (set_Wall): Likewise. + (gfc_handle_option): Likewise. + 2014-11-23 Tobias Burnus * invoke.texi (-Wtabs): Swap -Wtabs/-Wno-tabs now that diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index e4e41cbe0c1..45e5b6c2cd9 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -990,10 +990,9 @@ gfc_verify_c_interop_param (gfc_symbol *sym) { if (sym->attr.is_bind_c == 0) { - gfc_error_now ("Procedure '%s' at %L must have the BIND(C) " - "attribute to be C interoperable", sym->name, - &(sym->declared_at)); - + gfc_error_now_2 ("Procedure %qs at %L must have the BIND(C) " + "attribute to be C interoperable", sym->name, + &(sym->declared_at)); return false; } else @@ -1224,9 +1223,10 @@ gfc_set_constant_character_len (int len, gfc_expr *expr, int check_len) if (len > slen) gfc_wide_memset (&s[slen], ' ', len - slen); - if (gfc_option.warn_character_truncation && slen > len) - gfc_warning_now ("CHARACTER expression at %L is being truncated " - "(%d/%d)", &expr->where, slen, len); + 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); /* Apply the standard by 'hand' otherwise it gets cleared for initializers. */ diff --git a/gcc/fortran/error.c b/gcc/fortran/error.c index 0f85b496ecf..471e0ecc860 100644 --- a/gcc/fortran/error.c +++ b/gcc/fortran/error.c @@ -964,6 +964,7 @@ gfc_warning_now (const char *gmsgid, ...) to handle Fortran specific format specifiers with the following meanings: %C Current locus (no argument) + %L Takes locus argument */ static bool gfc_format_decoder (pretty_printer *pp, @@ -974,15 +975,21 @@ gfc_format_decoder (pretty_printer *pp, switch (*spec) { case 'C': + case 'L': { static const char *result = "(1)"; - gcc_assert (gfc_current_locus.nextc - gfc_current_locus.lb->line >= 0); - unsigned int c1 = gfc_current_locus.nextc - gfc_current_locus.lb->line; + locus *loc; + if (*spec == 'C') + loc = &gfc_current_locus; + else + loc = va_arg (*text->args_ptr, locus *); + gcc_assert (loc->nextc - loc->lb->line >= 0); + unsigned int offset = loc->nextc - loc->lb->line; gcc_assert (text->locus); *text->locus = linemap_position_for_loc_and_offset (line_table, - gfc_current_locus.lb->location, - c1); + loc->lb->location, + offset); global_dc->caret_char = '1'; pp_string (pp, result); return true; diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index 1ee7dd49795..63a8d1508ad 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -2455,7 +2455,6 @@ typedef struct int warn_underflow; int warn_intrinsic_shadow; int warn_intrinsics_std; - int warn_character_truncation; int warn_array_temp; int warn_align_commons; int warn_real_q_constant; diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt index 5da0453b9be..bac7dce8040 100644 --- a/gcc/fortran/lang.opt +++ b/gcc/fortran/lang.opt @@ -218,7 +218,7 @@ Fortran ; Documented in C Wcharacter-truncation -Fortran Warning +Fortran Var(warn_character_truncation) Warning LangEnabledBy(Fortran,Wall) Warn about truncated character expressions Wcompare-reals diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c index dee1af48a7c..0dd0118cdd4 100644 --- a/gcc/fortran/options.c +++ b/gcc/fortran/options.c @@ -95,7 +95,6 @@ gfc_init_options (unsigned int decoded_options_count, gfc_option.warn_aliasing = 0; gfc_option.warn_ampersand = 0; - gfc_option.warn_character_truncation = 0; gfc_option.warn_array_temp = 0; gfc_option.warn_c_binding_type = 0; gfc_option.gfc_warn_conversion = 0; @@ -460,7 +459,6 @@ set_Wall (int setting) gfc_option.warn_underflow = setting; gfc_option.warn_intrinsic_shadow = setting; gfc_option.warn_intrinsics_std = setting; - gfc_option.warn_character_truncation = setting; gfc_option.warn_real_q_constant = setting; gfc_option.warn_unused_dummy_argument = setting; gfc_option.warn_target_lifetime = setting; @@ -663,10 +661,6 @@ gfc_handle_option (size_t scode, const char *arg, int value, gfc_option.warn_c_binding_type = value; break; - case OPT_Wcharacter_truncation: - gfc_option.warn_character_truncation = value; - break; - case OPT_Wcompare_reals: gfc_option.warn_compare_reals = value; break; diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 4acebd0a3b9..6dc15857559 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -9208,7 +9208,7 @@ resolve_ordinary_assign (gfc_code *code, gfc_namespace *ns) } if (lhs->ts.type == BT_CHARACTER - && gfc_option.warn_character_truncation) + && warn_character_truncation) { if (lhs->ts.u.cl != NULL && lhs->ts.u.cl->length != NULL @@ -9224,9 +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 ("CHARACTER expression will be truncated " - "in assignment (%d/%d) at %L", - llen, rlen, &code->loc); + gfc_warning_now_2 (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 -- 2.30.2