diff options
author | Tobias Burnus <burnus@net-b.de> | 2011-12-08 20:00:55 +0100 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2011-12-08 20:00:55 +0100 |
commit | 32157107405ff1912d3d5382b0195e579e527bae (patch) | |
tree | 531aa44971a86bc6628e1a87dfea2ea320382f9f /gcc | |
parent | 3787b8ffe0ccf1f5cc47c2065f535f8a944156ea (diff) | |
download | gcc-32157107405ff1912d3d5382b0195e579e527bae.zip gcc-32157107405ff1912d3d5382b0195e579e527bae.tar.gz gcc-32157107405ff1912d3d5382b0195e579e527bae.tar.bz2 |
re PR fortran/50815 (ICE on allocation of deferred length character scalar dummy argument when -fbounds-check)
2011-12-08 Tobias Burnus <burnus@net-b.de>
PR fortran/50815
* trans-decl.c (add_argument_checking): Skip bound checking
for deferred-length strings.
2011-12-08 Tobias Burnus <burnus@net-b.de>
PR fortran/50815
* gfortran.dg/bounds_check_16.f90: New.
From-SVN: r182134
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/trans-decl.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/bounds_check_16.f90 | 14 |
4 files changed, 29 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 986ee2d..abaa344 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,11 @@ 2011-12-08 Tobias Burnus <burnus@net-b.de> + PR fortran/50815 + * trans-decl.c (add_argument_checking): Skip bound checking + for deferred-length strings. + +2011-12-08 Tobias Burnus <burnus@net-b.de> + PR fortran/51378 * symbol.c (gfc_find_component): Fix access check of parent components. diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index 67bd3e2..50b6474 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -4695,8 +4695,10 @@ add_argument_checking (stmtblock_t *block, gfc_symbol *sym) if the actual argument is (part of) an array, but only if the dummy argument is an array. (See "Sequence association" in Section 12.4.1.4 for F95 and 12.4.1.5 for F2003.) */ - if (fsym->attr.pointer || fsym->attr.allocatable - || (fsym->as && fsym->as->type == AS_ASSUMED_SHAPE)) + if (fsym->ts.deferred) + continue; + else if (fsym->attr.pointer || fsym->attr.allocatable + || (fsym->as && fsym->as->type == AS_ASSUMED_SHAPE)) { comparison = NE_EXPR; message = _("Actual string length does not match the declared one" diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 452fddd..30f1609 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2011-12-08 Tobias Burnus <burnus@net-b.de> + PR fortran/50815 + * gfortran.dg/bounds_check_16.f90: New. + +2011-12-08 Tobias Burnus <burnus@net-b.de> + PR fortran/51378 * gfortran.dg/private_type_14.f90: New. diff --git a/gcc/testsuite/gfortran.dg/bounds_check_16.f90 b/gcc/testsuite/gfortran.dg/bounds_check_16.f90 new file mode 100644 index 0000000..38a8630 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/bounds_check_16.f90 @@ -0,0 +1,14 @@ +! { dg-do compile } +! { dg-options "-fcheck=bounds" } +! +! PR fortran/50815 +! +! Don't check the bounds of deferred-length strings. +! gfortran had an ICE before because it did. +! +SUBROUTINE TEST(VALUE) + IMPLICIT NONE + CHARACTER(LEN=:), ALLOCATABLE :: VALUE + CHARACTER(LEN=128) :: VAL + VALUE = VAL +END SUBROUTINE TEST |