Development

NAVIGATION
CATEGORIES
REFERRENCE
LINKS
  • New: internal compiler error with statement function

    9 answers - 276 bytes - related search similar search Add To My Delicious Add To My Stumble Upon Add To My Google Mark Add To My Facebook Add To My Digg Add To My Reddit

    internal compiler error
    subroutine nhatgrid()
    implicit none
    integer :: lambda
    real(kind=8) :: arg,sigma
    real(kind=8) :: dshpfunc
    dshpfunc(arg)=-lambda/sigma*(arg/sigma)**(lambda-1)*exp(-(arg/sigma)**lambda)
    end subroutine nhatgrid
  • No.1 | | 131 bytes | |

    --
    pinskia at gcc dot gnu dot org changed:
    What |Removed |Added
    Severity|critical |normal
  • 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.3 | | 190 bytes | |

    Comment #2 from pault at gcc dot gnu dot org 2005-11-09 13:17
    Since recursive_stmt_fcn is involved, this looks like my doing!
    I'll take a look tomorrow morning.
    Paul T
  • No.4 | | 119 bytes | |

    Comment #3 from tobi at gcc dot gnu dot org 2005-11-09 18:40
    Bug 24655 has been marked as a duplicate of this bug.
  • 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
  • No.6 | | 1112 bytes | |

    Comment #5 from pault at gcc dot gnu dot org 2005-11-10 22:24
    Subject: Bug 24755

    Author: pault
    Date: Thu Nov 10 22:24:28 2005
    New Revision: 106756

    URL:
    Log:
    2005-11-10 Paul Thomas <pault (AT) gcc (DOT) gnu.org>

    PR fortran/24655
    PR fortran/24755
    * match.c (recursive_stmt_fcn): Add checks that symtree exists
    for the expression to weed out inline intrinsic functions and
    parameters.

    PR fortran/24409
    * module.c (mio_symtree_ref): Correct the patch of 0923 so that
    a symbol is not substituted for by a the symbol for the module
    itself and to prevent the promotion of a formal argument.

    2005-11-10 Paul Thomas <pault (AT) gcc (DOT) gnu.org>

    PR fortran/24655
    PR fortran/24755
    * Add statement
    functions using inline intrinsic functions and parameters to test
    that they no longer seg-fault.

    PR fortran/24409
    New test.
    New test.

    Added:

    Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/match.c
    trunk/gcc/fortran/module.c
    trunk/gcc/testsuite/ChangeLog
  • No.7 | | 1400 bytes | |

    Comment #6 from pault at gcc dot gnu dot org 2005-11-11 05:37
    Subject: Bug 24755

    Author: pault
    Date: Fri Nov 11 05:37:40 2005
    New Revision: 106779

    URL:
    Log:
    2005-11-11 Paul Thomas <pault (AT) gcc (DOT) gnu.org>

    PR fortran/24655
    PR fortran/24755
    * match.c (recursive_stmt_fcn): Add checks that symtree exists
    for the expression to weed out inline intrinsic functions and
    parameters.

    PR fortran/24409
    PR fortran/16861
    * module.c (mio_component_ref): Return if the symbol is NULL
    and wait for another iteration during module reads.
    (mio_symtree_ref): Suppress the writing of contained symbols,
    when a symbol is available in the main namespace. Take care that
    a symbol is not substituted for by a the symbol for the module
    itself and prevent the promotion of a formal argument.
    (read_module): Give symbols for variables from contained module
    procedures different true_name entries to those from the module
    proper.

    2005-11-11 Paul Thomas <pault (AT) gcc (DOT) gnu.org>

    PR fortran/24655
    PR fortran/24755
    * Add statement
    functions using inline intrinsic functions and parameters to test
    that they no longer seg-fault.

    PR fortran/24409
    * New test.
    * New test.

    PR fortran/16861
    * New test.
    * New test.

    Added:

    Modified:
  • No.8 | | 91 bytes | |

    Comment #7 from pault at gcc dot gnu dot org 2005-11-11 05:42
    Fixed on mainline and 4.0
  • No.9 | | 130 bytes | |

    --
    pinskia at gcc dot gnu dot org changed:
    What |Removed |Added
    Target Milestone| |4.0.3

Re: New: internal compiler error with statement function


max 4000 letters.
Your nickname that display:
In order to stop the spam: 2 + 1 =
QUESTION ON "Development"

EMSDN.COM