From 9a70910720861a296bc094457fa66b7afa4368bf Mon Sep 17 00:00:00 2001 From: jvdelisle Date: Wed, 10 Jan 2007 04:34:34 +0000 Subject: [PATCH] 2007-01-09 Paul Thomas PR fortran/30408 * resolve.c (resolve_code): Use the code->expr character length directly to set length of llen. 2007-01-09 Jerry DeLisle 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@120632 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/ChangeLog | 15 ++++++++++++++- gcc/fortran/lang.opt | 4 ++++ gcc/fortran/options.c | 5 +++++ gcc/fortran/resolve.c | 9 +++++---- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index e692343c269..5ea277ed0ea 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,9 +1,22 @@ +2007-01-09 Paul Thomas + + PR fortran/30408 + * resolve.c (resolve_code): Use the code->expr character length + directly to set length of llen. + +2007-01-09 Jerry DeLisle + + 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 * interface.c, intrinsic.c, gfortranspec.c, io.c, f95-lang.c, iresolve.c, match.c: Update Copyright years. Whitespace. - 2007-01-08 Richard Guenther * trans-io.c (transfer_array_desc): Use build_int_cst instead diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt index ebd6b8dd8ec..b7444245fdf 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 da8db65dbb1..e26ff369b7b 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 44236e576b6..05b4dc145c3 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; -- 2.11.0