diff options
author | Manuel López-Ibáñez <manu@gcc.gnu.org> | 2014-11-23 23:47:42 +0000 |
---|---|---|
committer | Manuel López-Ibáñez <manu@gcc.gnu.org> | 2014-11-23 23:47:42 +0000 |
commit | a96c39eaa1343c2b8ec2ba9529ea9e88722a2619 (patch) | |
tree | f611b28dd269fb7e389fd5408fb94d4f9fe5416f /gcc/fortran | |
parent | 875d4ba74588d8c937e553432bf52b655d488056 (diff) | |
download | gcc-a96c39eaa1343c2b8ec2ba9529ea9e88722a2619.zip gcc-a96c39eaa1343c2b8ec2ba9529ea9e88722a2619.tar.gz gcc-a96c39eaa1343c2b8ec2ba9529ea9e88722a2619.tar.bz2 |
re PR fortran/44054 (Handle -Werror, -Werror=, -fdiagnostics-show-option, !GCC$ diagnostic (pragmas) and color)
gcc/fortran/ChangeLog:
2014-11-23 Manuel López-Ibáñez <manu@gcc.gnu.org>
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
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 14 | ||||
-rw-r--r-- | gcc/fortran/decl.c | 14 | ||||
-rw-r--r-- | gcc/fortran/error.c | 15 | ||||
-rw-r--r-- | gcc/fortran/gfortran.h | 1 | ||||
-rw-r--r-- | gcc/fortran/lang.opt | 2 | ||||
-rw-r--r-- | gcc/fortran/options.c | 6 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 9 |
7 files changed, 38 insertions, 23 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 41169a8..b79f9c2 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,17 @@ +2014-11-23 Manuel López-Ibáñez <manu@gcc.gnu.org> + + 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 <burnus@net-b.de> * invoke.texi (-Wtabs): Swap -Wtabs/-Wno-tabs now that diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index e4e41cb..45e5b6c 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 0f85b49..471e0ec 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 1ee7dd4..63a8d15 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 5da0453..bac7dce 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 dee1af4..0dd0118 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 4acebd0..6dc1585 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 |