OSDN Git Service

2007-01-09 Paul Thomas <pault@gcc.gnu.org>
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 10 Jan 2007 04:34:34 +0000 (04:34 +0000)
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 10 Jan 2007 04:34:34 +0000 (04:34 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@120632 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/lang.opt
gcc/fortran/options.c
gcc/fortran/resolve.c

index e692343..5ea277e 100644 (file)
@@ -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  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
 2007-01-08  Richard Guenther  <rguenther@suse.de>
 
        * trans-io.c (transfer_array_desc): Use build_int_cst instead
index ebd6b8d..b744424 100644 (file)
@@ -45,6 +45,10 @@ Wampersand
 Fortran
 Warn about missing ampersand in continued character constants
 
 Fortran
 Warn about missing ampersand in continued character constants
 
+Wcharacter-truncation
+Fortran
+Warn about truncated character expressions
+
 Wconversion
 Fortran
 Warn about implicit conversion
 Wconversion
 Fortran
 Warn about implicit conversion
index da8db65..e26ff36 100644 (file)
@@ -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_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;
   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;
 
       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;
     case OPT_Wconversion:
       gfc_option.warn_conversion = value;
       break;
index 44236e5..05b4dc1 100644 (file)
@@ -5088,10 +5088,11 @@ resolve_code (gfc_code * code, gfc_namespace * ns)
                && gfc_option.warn_character_truncation)
            {
              int llen = 0, rlen = 0;
                && 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;
 
              if (code->expr2->expr_type == EXPR_CONSTANT)
                rlen = code->expr2->value.character.length;