aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorManuel López-Ibáñez <manu@gcc.gnu.org>2014-11-23 23:47:42 +0000
committerManuel López-Ibáñez <manu@gcc.gnu.org>2014-11-23 23:47:42 +0000
commita96c39eaa1343c2b8ec2ba9529ea9e88722a2619 (patch)
treef611b28dd269fb7e389fd5408fb94d4f9fe5416f /gcc/fortran
parent875d4ba74588d8c937e553432bf52b655d488056 (diff)
downloadgcc-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/ChangeLog14
-rw-r--r--gcc/fortran/decl.c14
-rw-r--r--gcc/fortran/error.c15
-rw-r--r--gcc/fortran/gfortran.h1
-rw-r--r--gcc/fortran/lang.opt2
-rw-r--r--gcc/fortran/options.c6
-rw-r--r--gcc/fortran/resolve.c9
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