aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Burnus <burnus@gcc.gnu.org>2007-09-21 12:21:29 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2007-09-21 12:21:29 +0200
commit92ebaacd31b79e0be6eea759c2f66bbb020b3235 (patch)
treee89250c31142bb18a8637ef2302c9c3dc86d2602 /gcc
parent91fe04248520280ee296ceff77e2256620a45b58 (diff)
downloadgcc-92ebaacd31b79e0be6eea759c2f66bbb020b3235.zip
gcc-92ebaacd31b79e0be6eea759c2f66bbb020b3235.tar.gz
gcc-92ebaacd31b79e0be6eea759c2f66bbb020b3235.tar.bz2
re PR fortran/33037 (TRANSFER should warn on mismatched sizes)
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-21 Tobias Burnus <burnus@net-b.de> PR fortran/33037 * gfortran.dg/transfer_check_1.f90: New. From-SVN: r128646
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog8
-rw-r--r--gcc/fortran/simplify.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/transfer_check_1.f908
4 files changed, 25 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index e903090..def238f 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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.
diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c
index 3fa5250..e581a21 100644
--- a/gcc/fortran/simplify.c
+++ b/gcc/fortran/simplify.c
@@ -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);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index dd889ff..29b0c26 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..2694526
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/transfer_check_1.f90
@@ -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