diff options
author | Daniel Franke <franke.daniel@gmail.com> | 2010-06-09 17:36:33 -0400 |
---|---|---|
committer | Daniel Franke <dfranke@gcc.gnu.org> | 2010-06-09 17:36:33 -0400 |
commit | 70987f6299983c5a764c37827a95f71f831087f0 (patch) | |
tree | d0261b1558010b2bff855fc04710cf96134d1417 /gcc | |
parent | 33169a2285f10e2cfe0caf3f23628b074253e8cc (diff) | |
download | gcc-70987f6299983c5a764c37827a95f71f831087f0.zip gcc-70987f6299983c5a764c37827a95f71f831087f0.tar.gz gcc-70987f6299983c5a764c37827a95f71f831087f0.tar.bz2 |
re PR fortran/44347 (SELECT_REAL_KIND: Wrongly accepts non-scalar arguments)
gcc/fortran/:
2010-06-09 Daniel Franke <franke.daniel@gmail.com>
PR fortran/44347
* check.c (gfc_check_selected_real_kind): Verify that the
actual arguments are scalar.
gcc/testsuite/:
2010-06-09 Daniel Franke <franke.daniel@gmail.com>
PR fortran/44347
* gfortran.dg/selected_real_kind_1.f90: New.
From-SVN: r160506
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/check.c | 20 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/selected_real_kind_1.f90 | 10 |
4 files changed, 37 insertions, 4 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index cafbd31..c67dd8f 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,11 @@ 2010-06-09 Daniel Franke <franke.daniel@gmail.com> + PR fortran/44347 + * check.c (gfc_check_selected_real_kind): Verify that the + actual arguments are scalar. + +2010-06-09 Daniel Franke <franke.daniel@gmail.com> + PR fortran/44359 * intrinsic.c (gfc_convert_type_warn): Further improve -Wconversion. diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index 6a5c263..81f3e24 100644 --- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -2930,11 +2930,23 @@ gfc_check_selected_real_kind (gfc_expr *p, gfc_expr *r) return FAILURE; } - if (p != NULL && type_check (p, 0, BT_INTEGER) == FAILURE) - return FAILURE; + if (p) + { + if (type_check (p, 0, BT_INTEGER) == FAILURE) + return FAILURE; - if (r != NULL && type_check (r, 1, BT_INTEGER) == FAILURE) - return FAILURE; + if (scalar_check (p, 0) == FAILURE) + return FAILURE; + } + + if (r) + { + if (type_check (r, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (r, 1) == FAILURE) + return FAILURE; + } return SUCCESS; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5dcee0f..d0154a9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2010-06-09 Daniel Franke <franke.daniel@gmail.com> + PR fortran/44347 + * gfortran.dg/selected_real_kind_1.f90: New. + +2010-06-09 Daniel Franke <franke.daniel@gmail.com> + PR fortran/44359 * gfortran.dg/warn_conversion.f90: Removed check for redundant warning. diff --git a/gcc/testsuite/gfortran.dg/selected_real_kind_1.f90 b/gcc/testsuite/gfortran.dg/selected_real_kind_1.f90 new file mode 100644 index 0000000..0f40a59 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/selected_real_kind_1.f90 @@ -0,0 +1,10 @@ +! { dg-do "compile" } +! +! PR fortran/44347 - arguments of SELECTED_REAL_KIND shall be scalar +! Testcase contributed by Vittorio Zecca <zeccav AT gmail DOT com> +! + + dimension ip(1), ir(1) + i = selected_real_kind(ip, i) ! { dg-error "must be a scalar" } + j = selected_real_kind(i, ir) ! { dg-error "must be a scalar" } +end |