OSDN Git Service

2007-09-21 Tobias Burnus <burnus@net-b.de>
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 21 Sep 2007 10:21:29 +0000 (10:21 +0000)
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 21 Sep 2007 10:21:29 +0000 (10:21 +0000)
        PR fortran/33037
        * simplify.c (gfc_simplify_transfer): Warn if source size
        is smaller than result size.

2007-09-21  Tobias Burnus  <burnus@net-b.de>

        PR fortran/33037
        * gfortran.dg/transfer_check_1.f90: New.

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

gcc/fortran/ChangeLog
gcc/fortran/simplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/transfer_check_1.f90 [new file with mode: 0644]

index e903090..def238f 100644 (file)
@@ -1,7 +1,13 @@
+2007-09-21  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/33037
+       * simplify.c (gfc_simplify_transfer): Warn if source size
+       is smaller than result size.
+
 2007-09-20  Asher Langton  <langton2@llnl.gov>
 
        PR fortran/20441
-        * gfortran.h : Add init_local_* enums and init_flag_* flags to
+       * gfortran.h : Add init_local_* enums and init_flag_* flags to
        gfc_option_t.
        * lang.opt: Add -finit-local-zero, -finit-real, -finit-integer,
        -finit-character, and -finit-logical flags.
index 3fa5250..e581a21 100644 (file)
@@ -4059,6 +4059,11 @@ gfc_simplify_transfer (gfc_expr *source, gfc_expr *mold, gfc_expr *size)
       result_size = result_elt_size;
     }
 
+  if (source_size < result_size)
+    gfc_warning("Intrinsic TRANSFER at %L has partly undefined result: "
+               "source size %ld < result size %ld", &source->where,
+               (long) source_size, (long) result_size);
+
   /* Allocate the buffer to store the binary version of the source.  */
   buffer_size = MAX (source_size, result_size);
   buffer = (unsigned char*)alloca (buffer_size);
index dd889ff..29b0c26 100644 (file)
@@ -1,3 +1,8 @@
+2007-09-21  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/33037
+       * gfortran.dg/transfer_check_1.f90: New.
+
 2007-09-20  Asher Langton  <langton2@llnl.gov>
 
        PR fortran/20441
diff --git a/gcc/testsuite/gfortran.dg/transfer_check_1.f90 b/gcc/testsuite/gfortran.dg/transfer_check_1.f90
new file mode 100644 (file)
index 0000000..2694526
--- /dev/null
@@ -0,0 +1,8 @@
+! { dg-do compile }
+! PR fortran/33037
+!
+print *, transfer('x', 0, 20) ! { dg-warning "has partly undefined result" }
+print *, transfer(1_1, 0) ! { dg-warning "has partly undefined result" }
+print *, transfer([1_2,2_2], 0)
+print *, transfer([1_2,2_2], 0_8) ! { dg-warning "has partly undefined result" }
+end