aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2007-01-10 04:34:34 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2007-01-10 04:34:34 +0000
commit0b30ba3b6c852a87355a84a3bcf179b1526ed37b (patch)
tree993bd0d50b49fdfe47d7e89f40872eaa91bce40c /gcc
parentc49a1f9ee87573b2ad7ff903528f53131bb3eaf4 (diff)
downloadgcc-0b30ba3b6c852a87355a84a3bcf179b1526ed37b.zip
gcc-0b30ba3b6c852a87355a84a3bcf179b1526ed37b.tar.gz
gcc-0b30ba3b6c852a87355a84a3bcf179b1526ed37b.tar.bz2
[multiple changes]
2007-01-09 Paul Thomas <pault@gcc.gnu.org> PR fortran/30408 * resolve.c (resolve_code): Use the code->expr character length directly to set length of llen. 2007-01-09 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/30408 * lang.opt: Add Wcharacter_truncation option. * options.c (gfc_init_options): Initialize gfc_option.warn_character_truncation to zero. (gfc_handle_option): Add case for OPT_Wcharacter_truncation. From-SVN: r120632
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog15
-rw-r--r--gcc/fortran/lang.opt4
-rw-r--r--gcc/fortran/options.c5
-rw-r--r--gcc/fortran/resolve.c9
4 files changed, 28 insertions, 5 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index e692343..5ea277e 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,9 +1,22 @@
+2007-01-09 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/30408
+ * resolve.c (resolve_code): Use the code->expr character length
+ directly to set length of llen.
+
+2007-01-09 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR fortran/30408
+ * lang.opt: Add Wcharacter_truncation option.
+ * options.c (gfc_init_options): Initialize
+ gfc_option.warn_character_truncation to zero.
+ (gfc_handle_option): Add case for OPT_Wcharacter_truncation.
+
2007-01-08 Steven G. Kargl <kargl@gcc.gnu.org>
* interface.c, intrinsic.c, gfortranspec.c, io.c, f95-lang.c,
iresolve.c, match.c: Update Copyright years. Whitespace.
-
2007-01-08 Richard Guenther <rguenther@suse.de>
* trans-io.c (transfer_array_desc): Use build_int_cst instead
diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt
index ebd6b8d..b744424 100644
--- a/gcc/fortran/lang.opt
+++ b/gcc/fortran/lang.opt
@@ -45,6 +45,10 @@ Wampersand
Fortran
Warn about missing ampersand in continued character constants
+Wcharacter-truncation
+Fortran
+Warn about truncated character expressions
+
Wconversion
Fortran
Warn about implicit conversion
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
index da8db65..e26ff36 100644
--- a/gcc/fortran/options.c
+++ b/gcc/fortran/options.c
@@ -59,6 +59,7 @@ gfc_init_options (unsigned int argc ATTRIBUTE_UNUSED,
gfc_option.warn_aliasing = 0;
gfc_option.warn_ampersand = 0;
+ gfc_option.warn_character_truncation = 0;
gfc_option.warn_conversion = 0;
gfc_option.warn_implicit_interface = 0;
gfc_option.warn_line_truncation = 0;
@@ -410,6 +411,10 @@ gfc_handle_option (size_t scode, const char *arg, int value)
gfc_option.warn_ampersand = value;
break;
+ case OPT_Wcharacter_truncation:
+ gfc_option.warn_character_truncation = value;
+ break;
+
case OPT_Wconversion:
gfc_option.warn_conversion = value;
break;
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 44236e5..05b4dc1 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -5088,10 +5088,11 @@ resolve_code (gfc_code * code, gfc_namespace * ns)
&& gfc_option.warn_character_truncation)
{
int llen = 0, rlen = 0;
- gfc_symbol *sym;
- sym = code->expr->symtree->n.sym;
- if (sym->ts.cl->length->expr_type == EXPR_CONSTANT)
- llen = mpz_get_si (sym->ts.cl->length->value.integer);
+
+ if (code->expr->ts.cl != NULL
+ && code->expr->ts.cl->length != NULL
+ && code->expr->ts.cl->length->expr_type == EXPR_CONSTANT)
+ llen = mpz_get_si (code->expr->ts.cl->length->value.integer);
if (code->expr2->expr_type == EXPR_CONSTANT)
rlen = code->expr2->value.character.length;