diff options
author | Tobias Burnus <burnus@gcc.gnu.org> | 2007-09-21 12:21:29 +0200 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2007-09-21 12:21:29 +0200 |
commit | 92ebaacd31b79e0be6eea759c2f66bbb020b3235 (patch) | |
tree | e89250c31142bb18a8637ef2302c9c3dc86d2602 /gcc | |
parent | 91fe04248520280ee296ceff77e2256620a45b58 (diff) | |
download | gcc-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/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/fortran/simplify.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/transfer_check_1.f90 | 8 |
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 |