$ cat gfortranbug.f90 module buggy contains elemental subroutine foo(a) integer, intent(out) :: a a = 0 end subroutine foo subroutine bar() integer :: a(10) call foo(a) end subroutine bar end module buggy $ gfortran41 -c gfortranbug.f90 gfortranbug.f90: In function 'bar': gfortranbug.f90:5: internal compiler error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://gcc.gnu.org/bugs.html> for instructions.
Confirmed. here is the backtrace: #0 0x080a7931 in gfc_conv_function_call (se=0xbfe81c08, sym=0xa52cf80, arg=0xa52d5b8) at /home/peshtigo/pinskia/src/gnu/gcc/src/gcc/fortran/trans-expr.c:1287 #1 0x080b5842 in gfc_trans_call (code=0xa52d760) at /home/peshtigo/pinskia/src/gnu/gcc/src/ gcc/fortran/trans-stmt.c:217 #2 0x08096c88 in gfc_trans_code (code=0xa52d760) at /home/peshtigo/pinskia/src/gnu/gcc/src/ gcc/fortran/trans.c:533 #3 0x080a64a8 in gfc_generate_function_code (ns=0xa52d1c8) at /home/peshtigo/pinskia/src/gnu/ gcc/src/gcc/fortran/trans-decl.c:2358 #4 0x08096fb2 in gfc_generate_module_code (ns=0xa52c858) at /home/peshtigo/pinskia/src/gnu/ gcc/src/gcc/fortran/trans.c:706 #5 0x0807cc76 in gfc_parse_file () at /home/peshtigo/pinskia/src/gnu/gcc/src/gcc/fortran/parse.c: 2629 #6 0x08094085 in gfc_be_parse_file (set_yydebug=0) at /home/peshtigo/pinskia/src/gnu/gcc/src/ gcc/fortran/f95-lang.c:263
A discussion on the mailing list on this bug here: http://gcc.gnu.org/ml/fortran/2005-06/msg00485.html
(In reply to comment #2) > A discussion on the mailing list on this bug here: > http://gcc.gnu.org/ml/fortran/2005-06/msg00485.html Sorry about the above. That mailing list discussion is about a different bug.
*** Bug 24966 has been marked as a duplicate of this bug. ***
formal->sym->as is null in: 1606 f = (formal != NULL) 1607 && !formal->sym->attr.pointer 1608 && formal->sym->as->type != AS_ASSUMED_SHAPE; 1609 f = f || !sym->attr.always_explicit;
*** Bug 25691 has been marked as a duplicate of this bug. ***
Subject: Bug 22146 Author: pault Date: Sat Jan 7 14:14:08 2006 New Revision: 109449 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=109449 Log: 2006-01-07 Paul Thomas <pault@gcc.gnu.org> PR fortran/22146 * trans-array.c (gfc_reverse_ss): Remove static attribute. (gfc_walk_elemental_function_args): Replace gfc_expr * argument for the function call with the corresponding gfc_actual_arglist*. Change code accordingly. (gfc_walk_function_expr): Call to gfc_walk_elemental_function_args now requires the actual argument list instead of the expression for the function call. * trans-array.h: Modify the prototype for gfc_walk_elemental_function_args and provide a prototype for gfc_reverse_ss. * trans-stmt.h (gfc_trans_call): Add the scalarization code for the case where an elemental subroutine has array valued actual arguments. PR fortran/25029 PR fortran/21256 PR fortran/20868 PR fortran/20870 * resolve.c (check_assumed_size_reference): New function to check for upper bound in assumed size array references. (resolve_assumed_size_actual): New function to do a very restricted scan of actual argument expressions of those procedures for which incomplete assumed size array references are not allowed. (resolve_function, resolve_call): Switch off assumed size checking of actual arguments, except for elemental procedures and intrinsic inquiry functions, in some circumstances. (resolve_variable): Call check_assumed_size_reference. 2006-01-07 Paul Thomas <pault@gcc.gnu.org> PR fortran/22146 * gfortran.dg/elemental_subroutine_1.f90: New test. * gfortran.dg/elemental_subroutine_2.f90: New test. PR fortran/25029 PR fortran/21256 * gfortran.dg/assumed_size_refs_1.f90: New test. PR fortran/20868 PR fortran/20870 * gfortran.dg/assumed_size_refs_2.f90: New test. * gfortran.dg/initialization_1.f90: Change warning message. Added: trunk/gcc/testsuite/gfortran.dg/assumed_size_refs_1.f90 (with props) trunk/gcc/testsuite/gfortran.dg/assumed_size_refs_2.f90 (with props) trunk/gcc/testsuite/gfortran.dg/elemental_subroutine_1.f90 trunk/gcc/testsuite/gfortran.dg/elemental_subroutine_2.f90 Modified: trunk/MAINTAINERS trunk/gcc/fortran/ChangeLog trunk/gcc/fortran/resolve.c trunk/gcc/fortran/trans-array.c trunk/gcc/fortran/trans-array.h trunk/gcc/fortran/trans-intrinsic.c trunk/gcc/fortran/trans-stmt.c trunk/gcc/testsuite/ChangeLog trunk/gcc/testsuite/gfortran.dg/initialization_1.f90 Added: trunk/gcc/testsuite/gfortran.dg/assumed_size_refs_1.f90 URL: http://gcc.gnu.org/viewcvs/trunk/gcc/testsuite/gfortran.dg/assumed_size_refs_1.f90?root=gcc&view=auto&rev=109449 ============================================================================== --- trunk/gcc/testsuite/gfortran.dg/assumed_size_refs_1.f90 (added) +++ trunk/gcc/testsuite/gfortran.dg/assumed_size_refs_1.f90 Sat Jan 7 14:14:08 2006 @@ -1,0 +1,64 @@ +!==================assumed_size_refs_1.f90================== +! { dg-do compile } +! Test the fix for PR25029, PR21256 in which references to +! assumed size arrays without an upper bound to the last +! dimension were generating no error. The first version of +! the patch failed in DHSEQR, as pointed out by Toon Moene +! in http://gcc.gnu.org/ml/fortran/2005-12/msg00466.html +! +! Contributed by Paul Thomas <pault@gcc.gnu.org> +! +program assumed_size_test_1 + implicit none + real a(2, 4) + + a = 1.0 + call foo (a) + +contains + subroutine foo(m) + real, target :: m(1:2, *) + real x(2,2,2) + real, external :: bar + real, pointer :: p(:,:), q(:,:) + allocate (q(2,2)) + +! PR25029 + p => m ! { dg-error "upper bound in the last dimension" } + q = m ! { dg-error "upper bound in the last dimension" } + +! PR21256( and PR25060) + m = 1 ! { dg-error "upper bound in the last dimension" } + + m(1,1) = 2.0 + x = bar (m) + x = fcn (m) ! { dg-error "upper bound in the last dimension" } + m(:, 1:2) = fcn (q) + call sub (m, x) ! { dg-error "upper bound in the last dimension" } + call sub (m(1:2, 1:2), x) + print *, p + + call DHSEQR(x) + + end subroutine foo + + elemental function fcn (a) result (b) + real, intent(in) :: a + real :: b + b = 2.0 * a + end function fcn + + elemental subroutine sub (a, b) + real, intent(inout) :: a, b + b = 2.0 * a + end subroutine sub + + SUBROUTINE DHSEQR( WORK ) + REAL WORK( * ) + EXTERNAL DLARFX + INTRINSIC MIN + WORK( 1 ) = 1.0 + CALL DLARFX( MIN( 1, 8 ), WORK ) + END SUBROUTINE DHSEQR + +end program assumed_size_test_1 Propchange: trunk/gcc/testsuite/gfortran.dg/assumed_size_refs_1.f90 ('svn:executable' added) Added: trunk/gcc/testsuite/gfortran.dg/assumed_size_refs_2.f90 URL: http://gcc.gnu.org/viewcvs/trunk/gcc/testsuite/gfortran.dg/assumed_size_refs_2.f90?root=gcc&view=auto&rev=109449 ============================================================================== --- trunk/gcc/testsuite/gfortran.dg/assumed_size_refs_2.f90 (added) +++ trunk/gcc/testsuite/gfortran.dg/assumed_size_refs_2.f90 Sat Jan 7 14:14:08 2006 @@ -1,0 +1,44 @@ +!==================assumed_size_refs_1.f90================== +! { dg-do compile } +! Test the fix for PR20868 & PR20870 in which references to +! assumed size arrays without an upper bound to the last +! dimension were generating no error. +! +! Contributed by Paul Thomas <pault@gcc.gnu.org> +! +program assumed_size_test_2 + implicit none + real a(2, 4) + + a = 1.0 + call foo (a) + +contains + subroutine foo(m) + real, target :: m(1:2, *) + real x(2,2,2) + real, pointer :: q(:,:) + integer :: i + allocate (q(2,2)) + + q = cos (1.0 + abs(m)) ! { dg-error "upper bound in the last dimension" } + + x = reshape (m, (/2,2,2/)) ! { dg-error "upper bound in the last dimension" } + +! PR20868 + print *, ubound (m) ! { dg-error "upper bound in the last dimension" } + print *, lbound (m) + +! PR20870 + print *, size (m) ! { dg-error "upper bound in the last dimension" } + +! Check non-array valued intrinsics + print *, ubound (m, 1) + print *, ubound (m, 2) ! { dg-error "not a valid dimension index" } + + i = 2 + print *, size (m, i) + + end subroutine foo + +end program assumed_size_test_2 Propchange: trunk/gcc/testsuite/gfortran.dg/assumed_size_refs_2.f90 ('svn:executable' added)
Subject: Bug 22146 Author: pault Date: Sat Jan 14 06:31:08 2006 New Revision: 109698 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=109698 Log: 2006-01-14 Paul Thomas <pault@gcc.gnu.org> PR fortran/22146 * trans-array.c (gfc_reverse_ss): Remove static attribute. (gfc_walk_elemental_function_args): Replace gfc_expr * argument for the function call with the corresponding gfc_actual_arglist*. Change code accordingly. (gfc_walk_function_expr): Call to gfc_walk_elemental_function_args now requires the actual argument list instead of the expression for the function call. * trans-array.h: Modify the prototype for gfc_walk_elemental_function_args and provide a prototype for gfc_reverse_ss. * trans-stmt.h (gfc_trans_call): Add the scalarization code for the case where an elemental subroutine has array valued actual arguments. PR fortran/25029 PR fortran/21256 PR fortran/20868 PR fortran/20870 * resolve.c (check_assumed_size_reference): New function to check for upper bound in assumed size array references. (resolve_assumed_size_actual): New function to do a very restricted scan of actual argument expressions of those procedures for which incomplete assumed size array references are not allowed. (resolve_function, resolve_call): Switch off assumed size checking of actual arguments, except for elemental procedures and intrinsic inquiry functions, in some circumstances. (resolve_variable): Call check_assumed_size_reference. 2006-01-14 Paul Thomas <pault@gcc.gnu.org> PR fortran/22146 * gfortran.dg/elemental_subroutine_1.f90: New test. * gfortran.dg/elemental_subroutine_2.f90: New test. PR fortran/25029 PR fortran/21256 * gfortran.dg/assumed_size_refs_1.f90: New test. PR fortran/20868 PR fortran/20870 * gfortran.dg/assumed_size_refs_2.f90: New test. * gfortran.dg/initialization_1.f90: Change warning message. * gfortran.dg/pr15140.f90: Add bound to assumed size reference. Added: branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/assumed_size_refs_1.f90 branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/assumed_size_refs_2.f90 branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/elemental_subroutine_1.f90 branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/elemental_subroutine_2.f90 Modified: branches/gcc-4_1-branch/MAINTAINERS branches/gcc-4_1-branch/gcc/fortran/ChangeLog branches/gcc-4_1-branch/gcc/fortran/resolve.c branches/gcc-4_1-branch/gcc/fortran/trans-array.c branches/gcc-4_1-branch/gcc/fortran/trans-array.h branches/gcc-4_1-branch/gcc/fortran/trans-intrinsic.c branches/gcc-4_1-branch/gcc/fortran/trans-stmt.c branches/gcc-4_1-branch/gcc/testsuite/ChangeLog branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/initialization_1.f90 branches/gcc-4_1-branch/gcc/testsuite/gfortran.dg/pr15140.f90
Fixed on mainline and 4.1 - note that argument conformity checking has still to be done. Paul