No.2 | | 766 bytes |
| 
Comment #1 from pinskia at gcc dot gnu dot org 2005-11-09 11:44
Confirmed, backtrace:
#0 0x080727d3 in recursive_stmt_fcn (e=0x9fec3b8, sym=0x9fec218) at
/
#1 0x080727b5 in recursive_stmt_fcn (e=0x9fec540, sym=0x9fec218) at
/
#2 0x080727b5 in recursive_stmt_fcn (e=0x9fec818, sym=0x9fec218) at
/
#3 0x080727b5 in recursive_stmt_fcn (e=0x9fecb70, sym=0x9fec218) at
/
#4 0x080727b5 in recursive_stmt_fcn (e=0x9fecbc8, sym=0x9fec218) at
/
#5 0x08074349 in gfc_match_st_function () at
/
#6 0x0807c2ba in match_word (str=<value optimized out>, subr=0x8074270
<gfc_match_st_function>, old_locus=0xbfdffc08)
at /
#7 0x0807c3ac in decode_statement () at
/
#8 0x0807cda5 in next_statement () at
/
#
No.5 | | 3255 bytes |
| 
Comment #4 from paul dot richard dot thomas at cea dot fr 2005-11-10 10:32
I have a patch for this, which is regtesting now and will be submitted at
lunchtime.
Apologies for letting this regression through; please give the patch a try.
Paul T
Index: gcc/gcc/fortran/match.c
RCS file: /,v
retrieving revision 1.47
diff -c -p -r1.47 match.c
gcc/gcc/fortran/match.c 17 2005 20:52:36 -0000 1.47
gcc/gcc/fortran/match.c 10 Nov 2005 10:29:15 -0000
recursive_stmt_fcn (gfc_expr *e, gfc_sym
2721,2727
if (sym->name == arg->name
|| recursive_stmt_fcn (arg->expr, sym))
return true;
! }
/* Check the name before testing for nested recursion! */
if (sym->name == e->symtree->n.sym->name)
2721,2730
if (sym->name == arg->name
|| recursive_stmt_fcn (arg->expr, sym))
return true;
! }
!
! if (e->symtree == NULL)
! return false;
/* Check the name before testing for nested recursion! */
if (sym->name == e->symtree->n.sym->name)
recursive_stmt_fcn (gfc_expr *e, gfc_sym
2736,2742
break;
case EXPR_VARIABLE:
! if (sym->name == e->symtree->n.sym->name)
return true;
break;
2739,2745
break;
case EXPR_VARIABLE:
! if (e->symtree && sym->name == e->symtree->n.sym->name)
return true;
break;
Index:
RCS file:
/,v
retrieving revision 1.1
diff -c -p -r1.1
17
2005 20:52:37 -0000 1.1
10 Nov
2005 10:28:58 -0000
1,16
! { dg-do compile }
! PR20866 - A statement function cannot be recursive.
! Contributed by Joost VandeVondele <jv244 (AT) cam (DOT) ac.uk>
! INTEGER :: i, st1, st2, st3
REAL :: x, z(2,2)
! character*8 :: ch
!
! Test check for recursion via other statement functions, string
! length references, function actual arguments and array index
! references.
! st1(i)=len(ch(st2(1):8))
! st2(i)=max (st3(1), 4)
! st3(i)=2 + cos (z(st1 (1), i)) ! { dg-error "is recursive" }
! write(6,*) st1(1)
END
1,32
! { dg-do compile }
! PR20866 - A statement function cannot be recursive.
! Contributed by Joost VandeVondele <jv244 (AT) cam (DOT) ac.uk>
! !
! ! Modified 20051110 to check that regressions PR24655 and PR24755
! ! are fixed. Thanks to pavarini (AT) pv (DOT) infn.it and tdeutsch (AT) cea (DOT) fr for
! ! the tests.
! !
! INTEGER :: i, st1, st2, st3, lambda, n
REAL :: x, z(2,2)
! character(8) :: ch
! real(8) :: fi, arg, sigma, dshpfunc
! real(8), parameter :: one=1d0
!
! Test check for recursion via other statement functions, string
! length references, function actual arguments and array index
! references.
! !
! st1 (i) = len (ch(st2 (1):8))
! st2 (i) = max (st3 (1), 4)
! st3 (i) = 2 + cos (z(st1 (1), i)) ! { dg-error "is recursive" }
! !
! ! Test the two regressions.
! !
! fi (n) = n *one
! dshpfunc (arg)=-lambda/sigma*(arg/sigma)**(lambda-1)*exp
(-(arg/sigma)**lambda)
! !
! ! References to each statement function.
! !
! write(6,*) st1 (1), fi (2), dshpfunc (1.0_8)
END